Python查找请求之间的相似性

时间:2019-09-23 17:54:51

标签: python nlp word2vec topic-modeling

我正在研究一个项目,以分析先前的请求,如果有新请求,则需要匹配先前的请求,并使用为该请求提供的解决方案。

例如:如果这些是先前的请求“ Microsoft Inc.的风险等级”,“ 9月的报告”等,并且新请求是“ 9月的报告”,则需要查找相似之处和使用为匹配的先前请求之一提供的解决方案。

我打算用Python实现。我遇到了用于实现的算法-主题建模和word2vec。我朝着正确的方向前进吗?

2 个答案:

答案 0 :(得分:1)

这取决于您需要多快的解决方案。如果速度不成问题,那么最准确的方法就是使用一些经过预先训练的上下文表示形式,例如BERT or other "cool Transformers"

单词嵌入(例如word2vec)无疑是一个很好且快速的解决方案。您只需要标记查询,查找表中的嵌入并计算平均值即可。您可能要使用FastText而不是word2vec。在计算单词向量时,它还会考虑字符 n -gram,因此它对于拼写错误可能会更可靠。如果请求时间较长,则平均请求可能会比较嘈杂,因此您可能要删除停用词。

好的旧Tf-Idf向量也可以很好地服务。

主题建模(例如LDA)更适合较长的文本。

答案 1 :(得分:0)

我的印象是“句子嵌入”不是问题。

无论如何,这是您可能会考虑的另一种方法。

以下是基于fuzzyhashsimhash的示例运行:

In [7]: docs = [ 
   ...: 'Risk rating for Microsoft Inc', 
   ...: "Microsoft ratings", 
   ...: "Report for the month of September", 
   ...: "Report for the month of October" 
   ...: ]   

In [10]: for doc in docs: 
    ...:     print("matching doc", doc, ": ", fuzzyhash.distance(
    ...: fuzzyhash.fuzzyhash("Report for September"), 
    ...: fuzzyhash.fuzzyhash(doc))) 

matching doc Risk rating for Microsoft Inc :  15
matching doc Microsoft ratings :  17
matching doc Report for the month of September :  3
matching doc Report for the month of October :  9

它正确地猜测最近的旧请求是“ 9月份的报告”。