句子相似度的最佳实用算法


18

我有两个句子S1和S2,它们的字数通常都在15以下。

什么是最实用,最成功的(机器学习)算法,这些算法可能易于实现(神经网络可以,除非架构像Google Inception等那样复杂)。

我正在寻找一种不会花太多时间就能正常工作的算法。您是否发现任何成功且易于使用的算法?

这可以但不必属于群集类别。我的背景是机器学习的知识,所以欢迎提出任何建议:)


您实施了什么?我也面临同样的问题,必须为语料库中与“ k”相关的文章提出解决方案,并不断更新。
Dileepa '18

Answers:


16

向量空间的余弦相似度可能是您的答案:http : //blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/

或者,您可以计算每个句子的特征向量。但是问题是,什么是相似性?

“这是一棵树”,“这不是一棵树”

如果要检查句子的语义,则需要一个wordvector数据集。使用wordvector数据集,您将能够检查单词之间的关系。例如:(国王-男人+女人=女王)

Siraj Raval有一个很好的Python笔记本,可用于创建wordvector数据集:https : //github.com/llSourcell/word_vectors_game_of_thrones-LIVE


8

您可以尝试的一种方法是平均由词嵌入算法(word2vec,g手套等)生成的词向量。这些算法为每个单词创建一个向量,它们之间的余弦相似度表示单词之间的语义相似度。对于句子中的平均向量。本文是了解更多有关这些方法的一个很好的起点:句子嵌入如何很好地捕获含义。它讨论了一些句子嵌入方法。我还建议您研究使用合成n语法功能进行无监督句子嵌入学习,作者声称他们的方法优于最新方法。他们还在此github存储库中提供了代码和一些用法说明。



2

您应该查看https://github.com/seatgeek/fuzzywuzzy#usage。Fuzzywuzzy是一个很棒的字符串/文本匹配库,它根据两个句子的相似程度给出一个介于0到100之间的数字。它使用Levenshtein距离来计算简单易用的程序包中序列之间的差异。另外,请查看博客文章,以详细了解Fuzzywuzzy如何完成这项工作。这个博客也是由Fuzzywuzzy作者撰写的


1

该博客提供了短文本相似性的解决方案。他们主要使用BERT神经网络模型来查找句子之间的相似性。 https://medium.com/@vimald8959/sentence-categorisation-short-text-similarity-61bb88fae15e


嗨,欢迎来到Data Science Stack Exchange!从外部网站引用解决方案时,请考虑在答案中写一个摘要。确实,这将更易于阅读,并且可以防止在目标页面更改或链接中断时答案变得过时。
Romain Reboulleau

很好,这真的是好东西。所以他们基本上使用BERT?@RomainReboulleau绝对是正确的!
DaveTheAl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.