Как классифицировать предложение в одну из заранее определенных тематических групп, используя неконтролируемый подход - PullRequest
0 голосов
/ 16 мая 2018

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

Например:

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

«сделать экран более красочным» следует пометить как «улучшения» в качестве темы.

Таким образом, темы очень специфичны для продукта и контекста .

LDA, похоже, не работает для меня (поправьте меня, если я ошибаюсь). Он определяет темы в общем смысле, такие как «Спорт», «Политика», «Технологии» и т. Д. Но мне нужно определить конкретные темы, как упомянуто выше.

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

Что я пробовал до сих пор:

Я обучил модель Gensim с Google News Corpus (около 3,5 ГБ). Я очищаю предложение, удаляя стоп-слова, знаки препинания и т. Д. Я нахожу, к какой теме из множества тем каждое слово ближе всего и помечаю слово этой темой. С мыслью, что предложение может содержать больше слов, ближе к теме, на которую оно ссылается, чем нет, я выбираю тему (и), в которую отображается максимальное количество слов в предложении.

Например:

Если 3 слова в предложении сопоставлены с темой «вход в систему», а 2 слова в предложении сопоставлены с темой «улучшение», я помечаю предложение как тему «вход в систему».

Если между счетами нескольких тем есть конфликт, я возвращаю все темы с максимальным количеством в качестве списка тем.

Этот подход дает мне справедливые результаты. Но это не достаточно хорошо.

Как лучше всего решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Если количество тем является управляемым, я бы предложил вам пометить некоторые данные для каждой темы и создать контролируемую модель. После этого используйте мультиклассовую классификацию, чтобы идентифицировать темы для другой части корпуса. Вы можете попробовать что-то вроде LUIS

0 голосов
/ 16 мая 2018

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

Проверьте эту статью https://medium.com/mlreview/topic-modeling-with-scikit-learn-e80d33668730 Это очень хорошее описание LDA и NMF, вместе с некоторыми фрагментами кода, которые могут пригодиться.

Однако я бы решил эту проблему следующим образом:

  1. Тренируйте word2vec или doc2vec (поэкспериментируйте с обоими) не только с Google corpus, но и добавляйте свои данные. Скип-граммы FastText также полезны.
  2. Получите неконтролируемый подход с помощью общих тем.
  3. Вручную помещать метки в кластеры.
  4. Добавьте еще один классификатор, который будет использовать классифицированные примеры в качестве учебного набора и предсказывать тему.
  5. Начните классифицировать ваши комментарии, чтобы вы могли использовать подход под наблюдением достаточно скоро.

Тем не менее, потенциально вы хотели бы пометить документ более чем одной темой, поэтому вам не следует помечать предложение предложением входа в систему, если 3 слова сопоставлены для входа в систему и 2 для улучшения (IMO). Скорее, что-то вроде мультиклассовой классификации логин - 60% и улучшение 40% кажется более разумным.

Звучит как захватывающий проект, над которым вы работаете. Удачи!

...