我有一系列文档,每个文档都随着时间的推移而快速增长。任务是在任何固定时间找到类似的文件。我有两种可能的方法:
矢量嵌入(word2vec,GloVe或fasttext),对文档中的单词矢量求平均值,并使用余弦相似度。
Bag-of-Words:tf-idf或其变体,如BM25。
其中一个会产生明显更好的结果吗?是否有人对文件相似性进行了tf-idf与平均word2vec的定量比较?
是否有另一种方法,允许在添加更多文本时动态优化文档的向量?
答案 0 :(得分:8)
根据文章,对于短篇文档,doc2vec或paragraph2vec的性能较差。 [学习极短文本的语义相似度,2015,IEEE]
如果要比较短文档之间的相似性,可能需要通过word2vec对文档进行矢量化。
例如,您可以使用tf-idf构建带有加权平均向量的文档向量。
此外,我建议使用ts-s而不是余弦或欧几里德来表示相似性。
请参阅下面的文章或github中的摘要。 “用于测量文档和文档聚类中相似度的混合几何方法”
https://github.com/taki0112/Vector_Similarity
谢谢
答案 1 :(得分:4)
您必须尝试:答案可能会因您的语料库和特定于应用程序的“相似性”感知而有所不同。根据典型的文档长度,有效性可能会有所不同,因此,如果“随着时间的推移快速增长”也意味着“任意长时间增长”,这可能会极大地影响随着时间的推移而起作用(需要对更长的文档进行调整)。
另请注意,'Paragraph Vectors' - 其中矢量像字向量一样被训练以表示文本范围 - 可能优于简单的字平均向量,作为输入相似/分类任务。 (许多对'Doc2Vec'的引用特指'段落向量',尽管术语'Doc2Vec'有时也用于将文档转换为单个向量的任何其他方式,如单词向量的简单平均值。)
您可能还想查看“Word Mover's Distance”(WMD),这是使用单词向量的两个文本之间相似性的度量,但不是通过任何简单的平均值。 (但是,计算起来可能很昂贵,特别是对于较长的文档。)对于分类,最近有一个名为“Supervised Word Mover's Distance”的改进,它重新加权/转换单词向量,使它们对已知类别更敏感。有了足够的评估/调整数据,关于哪些文档应该比其他文档更接近,类似的技术可能会应用于通用的相似性任务。
答案 2 :(得分:1)
您也可以考虑尝试Jaccard相似性,它使用基本集合代数来确定两个文档中的语言重叠(虽然它有点类似于BOW方法)。可以找到一个很好的介绍here。