Классификация текста по шаблону - PullRequest
0 голосов
/ 09 октября 2018

Не могли бы вы порекомендовать мне лучший способ, как это сделать: у меня есть список фраз, например ["бесплатная доставка цветов", "доставка цветов Москва", "цвет + доставка на дом", "доставка цветов + доставка", "заказ цветов + с доставкой »,« доставка цветов »] и выкройка -« доставка цветов ».Мне нужно, чтобы список с фразами был как можно ближе к шаблону.

Не могли бы вы дать совет, как это сделать?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Ответ, данный nflacco, правильный. В дополнение к этому вы пробовали редактировать расстояние?Попробуйте fuzzywuzzy (pip install fuzzywuzzy) .. он использует Edit расстояние, чтобы дать вам оценку, как близко два предложения

0 голосов
/ 10 октября 2018

Простой подход

Грубая сила

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

мешок слов

мешок слов означает, что мы анализируем фразу ишаблон, и получить список или набор слов там, то есть ["цветок", "доставка"].Вы можете оценить каждую фразу, выяснив некоторую метрику сходства (т. Е. Встречается ли в фразе набор слов в шаблоне, а затем ранжировать фразы для наиболее близкого соответствия:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...