我正在研究一个项目,以分析先前的请求,如果有新请求,则需要匹配先前的请求,并使用为该请求提供的解决方案。
例如:如果这些是先前的请求“ Microsoft Inc.的风险等级”,“ 9月的报告”等,并且新请求是“ 9月的报告”,则需要查找相似之处和使用为匹配的先前请求之一提供的解决方案。
我打算用Python实现。我遇到了用于实现的算法-主题建模和word2vec。我朝着正确的方向前进吗?
答案 0 :(得分:1)
这取决于您需要多快的解决方案。如果速度不成问题,那么最准确的方法就是使用一些经过预先训练的上下文表示形式,例如BERT or other "cool Transformers"。
单词嵌入(例如word2vec)无疑是一个很好且快速的解决方案。您只需要标记查询,查找表中的嵌入并计算平均值即可。您可能要使用FastText而不是word2vec。在计算单词向量时,它还会考虑字符 n -gram,因此它对于拼写错误可能会更可靠。如果请求时间较长,则平均请求可能会比较嘈杂,因此您可能要删除停用词。
好的旧Tf-Idf向量也可以很好地服务。
主题建模(例如LDA)更适合较长的文本。
答案 1 :(得分:0)
我的印象是“句子嵌入”不是问题。
无论如何,这是您可能会考虑的另一种方法。
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月份的报告”。