Python находит сходства между запросами - PullRequest
0 голосов
/ 23 сентября 2019

Привет! Я работаю над проектом, чтобы проанализировать предыдущие запросы, и если приходит новый запрос, мне нужно сопоставить предыдущий запрос и использовать решение, предусмотренное для того же.

Например: если этопредыдущие запросы «Оценка риска для Microsoft Inc», «Отчет за сентябрь» и т. д., и если новый запрос «Отчет за сентябрь», мне нужно найти сходства и использовать решение, предоставленное для одного из подходящихпредыдущие запросы.

Я планирую реализовать на Python.Я наткнулся на этот алгоритм для реализации - Topic Modeling и word2vec.Пожалуйста, дайте мне знать, если я иду в правильном направлении.Если есть какое-либо хорошее решение или ссылка с хорошим учебником для этого, пожалуйста, дайте мне знать.Благодарю.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

У меня сложилось впечатление, что "вложение предложений" - это не вещь.

В любом случае, вот еще один подход, который вы могли бы рассмотреть.

Вот пример выполнения fuzzyhash на основе simhash :

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

Правильно предположить, что ближайший из старых запросов - «Отчет за сентябрь».

0 голосов
/ 24 сентября 2019

Это зависит от того, насколько быстро вам нужно решение.Если скорость не является проблемой, наиболее точным будет использование некоторого предварительно обученного контекстного представления, такого как BERT или других «крутых трансформеров» .

Вложения слов (например, word2vec), безусловно, являютсяхорошее и быстрое решение.Вам нужно только токенизировать запрос, найти вложения в таблицу и вычислить среднее значение.Вместо word2vec вы можете использовать FastText .Он также учитывает символы n -грамм при вычислении слова vector, поэтому он может быть более устойчивым к опечаткам.Если запросы длиннее, среднее значение может быть более шумным, поэтому вы можете удалить стоп-слова.

Старые и добрые векторы Tf-Idf также могут хорошо работать.

Моделирование тем (например, LDA ) больше подходит для более длинных текстов.

...