计算文档之间距离的标准方法有哪些?

数据挖掘 机器学习 数据挖掘 nlp 文本挖掘 相似
2021-10-12 21:08:35

当我说“文档”时,我想到的是维基百科文章和新闻故事等网页。我更喜欢给出普通词汇距离度量或最先进的语义距离度量的答案,更倾向于后者。

4个回答

有许多不同的方法可以解决这个问题,具体取决于您想要保留多少语义信息以及您的文档标记化的难易程度(html 文档可能很难标记化,但您可以想象用标签和上下文做一些事情.)

其中一些已经被 ffriend 提到过,user1133029 的段落向量非常可靠,但我只是想我会更深入地了解不同方法的优缺点。

  • 余弦距离- 尝试了真实的余弦距离,这可能是跨多个域通用的最常见距离度量。话虽如此,余弦距离中几乎没有什么信息实际上可以映射回任何语义,这对于这种情况似乎并不理想。
  • Levenshtein 距离- 也称为edit distance,通常仅用于单个标记级别(单词、二元组等)。一般来说,我不会推荐这个指标,因为它不仅会丢弃任何语义信息,而且往往会非常相似地处理非常不同的单词变化,但它是这类事情的一个非常常见的指标
  • LSA - 在评估文档相似性时,它是大量技术库的一部分,称为topic modeling. LSA 最近已经过时了,根据我的经验,它并不是最强的主题建模方法,但它实现起来相对简单,并且有一些开源实现
  • LDA - 也是一种用于 的技术topic modeling,但它的不同之处LSA在于它实际上学习了更平滑和直观的内部表示。一般来说,你得到的结果在LDA建模文档相似性方面比 更好LSA,但对于学习如何在主题之间进行强烈区分则不太好。
  • Pachinko Allocation - 是 LDA 之上的一个非常简洁的扩展。一般来说,这只是LDA.
  • word2vec - Google 一直在研究一系列技术,用于智能地将单词和文档简化为比Count Vectorizers和等技术产生的稀疏向量更合理的向量TF-IDFWord2vec 很棒,因为它有许多开源实现。一旦你有了向量,任何其他相似性度量(如余弦距离)都可以在它之上使用,效果显着提高。
  • doc2vec - 也称为paragraph vectors,这是 Google 一系列论文中最新和最伟大的,研究文档的密集向量表示。python 中的gensim库有一个word2vec非常简单的实现,可以相当合理地利用它来构建doc2vec,但如果你想沿着这条路线走,请务必牢记许可证

希望对您有所帮助,如果您有任何问题,请告诉我。

有许多语义距离度量,每种都有其优缺点。这里只是其中的几个:

  • 余弦距离,文档特征向量之间的内积;
  • LSA,另一种基于向量的模型,但利用 SVD 对原始术语文档矩阵进行去噪;
  • 基于WordNet,经过人工验证,但几乎不可扩展。

从最简单的方法开始,然后根据具体案例的问题进一步发展。

根据经验,我发现 LSA 每次在我尝试过的每个数据集上都大大优于 LDA。我和其他说同样的话的人谈过。它还被用来赢得许多用于测量文档之间语义相似性的 SemEval 竞赛,通常与基于 wordnet 的测量结合使用,所以我不会说它已经过时,或者肯定不如 LDA,后者更好根据我的经验,主题建模而不是语义相似性,这与一些响应者所说的相反。

如果你使用 gensim(一个 python 库),它有 LSA、LDA 和 word2vec,所以你可以很容易地比较 3. doc2vec 是一个很酷的想法,但不能很好地扩展,你可能必须像我一样自己实现它不知道任何开源实现。它不能很好地扩展,因为对于每个文档,必须使用 SGD(一种缓慢的机器学习算法)构建一个新的独立模型。但它可能会给你最准确的结果。LSA 和 LDA 也不能很好地扩展(但是 word2vec 可以),LDA 的扩展性通常更差。然而,Gensim 的实现非常快,因为它使用迭代 SVD。

另一个注意事项,如果您使用 word2vec,您仍然需要确定一种从文档中组合向量的方法,因为它为每个单词提供了不同的向量。最简单的方法是对每个向量进行归一化,并对文档中的所有词向量取平均值,或者通过每个词的 idf 加权取加权平均值。所以它不像“使用 word2vec”那么简单,您需要进一步做一些事情来计算文档相似度。

我个人会选择 LSA,因为我已经看到它在经验上运行良好,并且 gensim 的库可以很好地扩展。但是,没有免费的午餐,因此最好尝试每种方法,看看哪种方法更适合您的数据。

最先进的技术似乎是在最近的一篇论文中引入的“段落向量” 。段落向量之间的余弦/欧几里得距离可能比任何其他方法都更好。由于缺乏开源实现,这可能还不可行。

下一个最好的事情是 LSA 向量之间的余弦距离或原始 BOW 向量之间的余弦距离。有时选择不同的加权方案效果更好,例如 TF-IDF。