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

数据挖掘 nlp 聚类 word2vec 相似
2021-09-17 22:08:22

我有两个句子,S1 和 S2,它们的字数(通常)都低于 15。

什么是最实用和最成功的(机器学习)算法,它们可能很容易实现(神经网络是可以的,除非架构像谷歌 Inception 等那样复杂)。

我正在寻找一种无需花费太多时间就能正常工作的算法。有没有你发现成功且易于使用的算法?

这可以但不必属于聚类的范畴。我的背景是机器学习,所以欢迎任何建议:)

4个回答

你可以回答向量空间的余弦相似度。

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

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

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

Siraj Raval 有一个很好的python notebook用于创建 wordvector 数据集。

您可以尝试的一种方法是平均由词嵌入算法(word2vec、glove 等)生成的词向量。这些算法为每个单词创建一个向量,它们之间的余弦相似度表示单词之间的语义相似度。在句子之间的平均向量的情况下。了解更多关于这些方法的一个很好的起点是这篇论文:句子嵌入如何捕捉含义它讨论了一些句子嵌入方法。我还建议您研究使用组合 n-Gram 特征进行句子嵌入的无监督学习,作者声称他们的方法优于最先进的方法。他们还在这个github repo中提供了代码和一些使用说明。

bert-as-service提供了这种解决方案。

要回答你的问题,从零开始自己实现它会非常困难,因为 BERT 不是一个微不足道的 NN,但是使用这个解决方案,你可以将它插入到使用句子相似度的算法中。

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