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