文档相似性:矢量嵌入与Tf-Idf性能?

时间:2017-03-07 07:59:51

标签: machine-learning nlp tf-idf word2vec doc2vec

我有一系列文档,每个文档都随着时间的推移而快速增长。任务是在任何固定时间找到类似的文件。我有两种可能的方法:

  1. 矢量嵌入(word2vec,GloVe或fasttext),对文档中的单词矢量求平均值,并使用余弦相似度。

  2. Bag-of-Words:tf-idf或其变体,如BM25。

  3. 其中一个会产生明显更好的结果吗?是否有人对文件相似性进行了tf-idf与平均word2vec的定量比较?

    是否有另一种方法,允许在添加更多文本时动态优化文档的向量?

3 个答案:

答案 0 :(得分:8)

  1. doc2vec或word2vec?
  2. 根据文章,对于短篇文档,doc2vec或paragraph2vec的性能较差。 [学习极短文本的语义相似度,2015,IEEE]

    1. 短篇文件......?
    2. 如果要比较短文档之间的相似性,可能需要通过word2vec对文档进行矢量化。

      1. 如何构建?
      2. 例如,您可以使用tf-idf构建带有加权平均向量的文档向量。

        1. 相似度量
        2. 此外,我建议使用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