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

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

  1. Классификация настроений с помощью BOW
  2. Классификация настроений для отзывов о ресторанах с использованием TF-IDF
  3. Классификация настроений с использованием вложения слов (Word2Vec)
  4. Классификация настроений для отзывов с использованием Doc2Vec
  5. Классификация настроений с использованием логистической регрессии в PyTorch
  6. Классификация настроений с использованием нейронной сети прямого распространения в PyTorch
  7. Классификация настроений для обзоров ресторанов с использованием CNN в PyTorch

Во всех этих публикациях набор данных Yelp Restaurant Review был взят в качестве входных данных, и только часть набора данных использовалась для экспериментов, чтобы получить результаты быстрее и быстрее прототипировать модели. В классификации настроений модели были обучены обнаруживать три типа настроений - положительные, нейтральные и отрицательные.

Методы предварительной обработки

В первом посте BOW я подробно объяснил различные методы, которые можно использовать для предварительной обработки. Удаление стоп-слов было объяснено, но не использовано. Для задачи классификации тональности это очень важно, поскольку такие стоп-слова, как нет, если их удалить, могут изменить тональность предложения.

I did not like the food.
--- After Stop words removal
I like food.

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

Для токенизации мы использовали simple_preprocess Gensim, который был прост в использовании и давал более быстрый способ точной токенизации предложения, когда он удалял знаки препинания, менял регистр на более низкий и возвращал токены. Создавать прототипы быстрее, но в тех случаях, когда знаки препинания могут добавить важную информацию, например смайлики или заглавные буквы в словах, чтобы подчеркнуть чувства. Это можно использовать в модели, в этом случае можно использовать пользовательскую токенизацию, как указано в сообщении BOW, с использованием регулярного выражения. Это может улучшить модель, в которой вы пытаетесь предсказать уровень настроения в более крупном масштабе, например рейтинг от 1 до 10.

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

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

are, is -> be
stood -> stand

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

Вывод:

Сравнение моделей

В качестве моделей использовались простые методы машинного обучения и методы глубокого обучения для классификации настроений. Лучший результат был получен от нейронной сети Feed Forward с использованием BOW в качестве входной функции. CNN и логистическая регрессия также были ближе к нему по средней точности. Это хороший способ тестирования, в ходе которого мы выяснили, что использование сложного метода, такого как CNN, может быть полезно для извлечения сложных функций, но для классификации тональности наличие некоторого набора слов, присутствующих в предложении, указывало на тональность отзыва. Следовательно, CNN не добавили ценности модели как таковой. Если бы набор данных включал множество сложных фраз, описывающих настроение, то CNN была бы полезна для их извлечения. Использование дополнительных ресурсов для CNN, таких как сложный метод, может быть не лучшим решением в этом случае. Хорошо протестировать его и посмотреть, каковы результаты для меньшего набора данных, и вы также можете протестировать его на полном наборе данных. Если это лучше, чем другие простые подходы, я выбираю его для производства, в противном случае я обычно предпочитаю менее ресурсоемкий метод, который может дать достаточно хорошие результаты.

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

Вложения Word2Vec, фиксирующие семантику, были не так полезны по сравнению с использованием простого BOW или TF-IDF с точки зрения повышения точности. Как видите, это может значительно сократить количество функций, используемых для моделей машинного обучения. В используемом примере BOW / TF-IDF имеет размер 30056, в отличие от 1000 для Word2Vec. Для классификации обзоров использовались простые усредненные векторы Word2Vec, и оказалось, что это дает лучшие результаты по сравнению с использованием Doc2Vec. Это всегда может быть не так, поскольку Doc2Vec лучше с точки зрения алгоритма обобщения для документа в целом. Doc2Vec генерирует эффективные и высококачественные распределенные векторы, которые фиксируют точные синтаксические и семантические отношения слов (ref). Следовательно, всегда полезно проверить два метода и сравнить результаты.

Между BOW и TF-IDF выяснилось, что BOW показал лучшие результаты, чем TF-IDF, хотя и незначительно, но очевидно, что использование модели TF-IDF не улучшило модель классификации. TF-IDF включает в себя больше вычислений, чем BOW, поэтому лучше их протестировать, прежде чем останавливаться на одном методе. TF-IDF снижает веса слов, которые часто встречаются во всем корпусе и не являются уникальными для документов. Этот метод, похоже, не подходит для проблем с классификацией тональности, связанных с отзывами, в которых в большинстве документов встречаются положительные и отрицательные слова. При использовании в качестве входных данных для нейронной сети с прямой связью или логистической регрессии вы можете сэкономить время на обучении с помощью нескольких методов, таких как BOW, TF-IDF, Word2Vec или Doc2Vec, если вы протестировали и сравнили их, используя простые модели классификации. Если вы хотите продолжить эксперименты, попробуйте использовать их в качестве входных данных для моделей в PyTorch.

Нейронная сеть прямого распространения хорошо справилась с заданными данными. Для нейронных сетей можно протестировать различные функции активации, оптимизации и потерь, упомянутые в предыдущих сообщениях, чтобы увидеть, улучшится ли этот результат. Вы можете попробовать протестировать с другой скоростью обучения, эпохами, другими нелинейными функциями активации, такими как tanh, sigmoid и т. Д., Другими алгоритмами оптимизации, такими как Adam, RMSProp и т. Д. Есть много места для экспериментов и получения лучших результатов, чем было достигнуто в предыдущих постах.

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

Это конец серии классификации настроений. Я буду стремиться сгруппировать соответствующие темы, и это была моя первая серия. Я буду продолжать публиковать, поскольку исследую новые темы. Смотрите это пространство! :)

Как всегда - желаю вам экспериментов и исследований!