我有一个包含大约 1000 个文档的小型系统。对于每个文档,我想显示指向 X 个“最相似”文档的链接。
但是,文档没有以任何方式标记,因此这将是某种无监督的方法。
感觉 fasttext 会是一个不错的候选者,但是当它没有标记数据时,我无法理解如何去做。
我可以计算单词向量,尽管我真正需要的是整个文档的向量。
我有一个包含大约 1000 个文档的小型系统。对于每个文档,我想显示指向 X 个“最相似”文档的链接。
但是,文档没有以任何方式标记,因此这将是某种无监督的方法。
感觉 fasttext 会是一个不错的候选者,但是当它没有标记数据时,我无法理解如何去做。
我可以计算单词向量,尽管我真正需要的是整个文档的向量。
该算法在 Python 等库Paragraph Vector
中被称为,可以训练一个模型,该模型将为文本运行提供单个向量,因此可能对您的需求有用。但请注意,典型的已发表作品使用数万到数百万个文档。(只有 1,000 个是非常小的训练集。)Doc2Vec
gensim
您还可以简单地将文本的所有词向量平均在一起(可能以某种加权方式)以获得全文的简单粗略向量,这通常会为此目的起作用。(为此,您可以使用来自 classi word2vec 或 FastText 的词向量。)
同样,如果您有词向量但没有完整的文档向量,则有一种称为“Word Mover's Distance”的技术可以计算两个文本之间的词向量调整后的“距离”。它通常可以很好地突出显示近义词,尽管计算起来有些昂贵(尤其是对于较长的文本)。
在某些情况下,只需将所有文档转换为它们的“词袋”表示——一个包含所用词计数的巨大向量——然后根据它们共享的词数对文档进行排名就足够相似了。
此外,全文索引/搜索框架,如 SOLR 或 ElasticSearch,有时可以将完整文档作为查询,给出排序好的结果。(这通常通过选择示例文档中最重要的词,并将这些词用作针对完整文档集的模糊全文查询来实现。)