我有一个包含大约 1000 个文档的小型系统。 对于每个文档,我想显示 X 个“最相似”文档的链接。
但是,文档没有以任何方式标记,因此这将是某种无监督方法。
感觉 fasttext 是一个很好的候选者,但我无法思考在没有标记数据的情况下如何做到这一点。
我可以计算词向量,尽管我真正需要的是整个文档的向量。
最佳答案
Paragraph Vector
算法,在 Python gensim
等库中称为 Doc2Vec
,可以训练一个模型,该模型将为文本运行,因此可能对您的需求有用。但请注意,典型的已发表作品使用数万到数百万份文档。 (只有 1,000 个训练集就非常小了。)
您还可以简单地将文本的所有词向量平均在一起(可能以某种加权方式),以获得全文的简单、粗略的向量,这通常在某种程度上可以达到此目的。 (为此,您可以使用 classi word2vec 或 FastText 中的词向量。)
类似地,如果您有词向量但没有完整的文档向量,则有一种称为“词移动器距离”的技术,可以计算两个文本之间经过词向量调整的“距离”。尽管计算成本较高(尤其是较长的文本),但它在突出显示近似释义方面通常表现良好。
在某些情况下,只需将所有文档转换为其“词袋”表示形式(一个包含所用单词计数的巨大向量),然后根据文档共享的单词数量对文档进行排名,这就是足够好的相似性度量。
此外,全文索引/搜索框架(例如 SOLR 或 ElasticSearch)有时可以将完整文档作为查询,从而给出排名良好的结果。 (这通常通过选择示例文档中最重要的单词,并将这些单词用作针对完整文档集的模糊全文查询来实现。)
关于word2vec - 使用 fasttext 或 word2vec 计算最近的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738640/