Простой подход
Грубая сила
Есть много способов сделать это, но самый простой способ - сделать прямое соответствие: просто найдите во входной фразе строку «доставка цветов»,Это довольно двоично, хотя, и вы можете изменить этот подход, чтобы использовать либо биграммы, либо мешок слов.
мешок слов
мешок слов означает, что мы анализируем фразу ишаблон, и получить список или набор слов там, то есть ["цветок", "доставка"].Вы можете оценить каждую фразу, выяснив некоторую метрику сходства (т. Е. Встречается ли в фразе набор слов в шаблоне, а затем ранжировать фразы для наиболее близкого соответствия:
bag_pattern = set()
for word in pattern:
set.add(word)
for phrase in phrases:
score = 0
for word in phrase:
if word in bag_pattern:
score += 1
# do something based on score
N-граммов
Мы могли бы принять во внимание положение, т. Е. «Доставка цветов» является более релевантным соответствием, чем «доставка цветов». Мы можем вычислить N-граммы (как правило, биграммы или триграммы, так что группы из 2 или 3 слов)для фразы и рисунка. Допустим, мы делаем биграммы:
"доставка цветов Москва" -> ["доставка цветов", "доставка Москва"
Можнозатем примените некоторый вид скоринга, чтобы решить, насколько хорош этот результат.
Предварительная обработка текста
Как правило, вы хотите выполнить некоторую предварительную обработку текста. Возможно, вы захотите исключить стоп-слова в сумке.из слов ("the", "a" и т. д.), и вы можете нормализовать глаголы и т. д. до их корневой формы.
Машинное обучение
Хорошо, так что вашбоссу не нравятся простые вещи, которые работают, и этос обязательным вам нужно сделать машинное обучение.Это тоже сработает!
Наивный байесовский
Самый простой метод - посмотреть на вероятности слов и умножить их.Классический пример - обнаружение спама в электронной почте.
Подход состоит в том, чтобы взять несколько электронных писем в текстовом виде и сгруппировать их в два класса - спам, а не спам.Затем вы просматриваете все электронные письма, и для каждого уникального слова, которое вы видите, вы подсчитываете количество случаев спама, а не спама.Это дает вам вероятность того, что слово окажется в спам-письме.
Представьте себе письмо со следующим содержанием:
«Здравствуйте, я нигерийский принц».
С учетом ваших вероятностей, которые вы рассчитывали ранее, вы можете найти вероятность для каждого слова, умножить их вместе и получить оценку по электронной почте, нормализованную по количеству слов.«Нигериец» и «принц» будут иметь непропорционально высокую вероятность того, что они будут включены в спам, поэтому это письмо получит очень высокий балл!
Deep Learning
Следующая ссылка охватывает пакет слови n-граммы с использованием методов глубокого обучения:
https://pytorch.org/tutorials/beginner/deep_learning_nlp_tutorial.html