Анализ тональности с помощью Word2Vec, FastText и универсального кодировщика предложений в Keras

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

Анализ тональности выполняется в данных Twitter с использованием различных моделей встраивания слов, а именно: Word2Vec, FastText, Universal Sentence Encoder.

Требования: TensorFlow Hub, TensorFlow, Keras, Gensim, NLTK, NumPy, tqdm

Анализ выполняется на 400 000 твитов в сети CNN-LSTM DeepNet.

Весь проект доступен на GitHub:



Модель архитектуры (созданная TensorBoard):

По моему опыту работы со всеми тремя моделями, я заметил, что word2vec требует гораздо больше времени для создания векторов из всех трех моделей. FastText и Universal Sentence Encoder занимают относительно одно и то же время. Для word2vec и fastText требуется предварительная обработка данных, которая занимает некоторое время.

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

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

Универсальное кодирование предложений звучит очень многообещающе :), но с недостатками, требуется значительное количество времени для обучения или даже завершения одной эпохи.

Давайте углубимся в каждую модель!

Word2Vec

Достигнутая точность: приблизительно 69%

Записная книжка Python:



Word2vec - это группа связанных моделей, которые используются для встраивания слов. Эти модели представляют собой неглубокие двухслойные нейронные сети, которые обучены реконструировать лингвистические контексты слов. Word2vec принимает в качестве входных данных большой корпус текста и создает векторное пространство, обычно состоящее из нескольких сотен измерений, причем каждому уникальному слову в корпусе назначается соответствующий вектор в пространстве. Векторы слов располагаются в векторном пространстве таким образом, чтобы слова, имеющие общий контекст в корпусе, располагались в пространстве в непосредственной близости друг от друга. [Источник: Википедия]

Документы в Gensim: models.word2vec

Word2Vec имеет внутри 2 важные модели: Skip-Grams и Continous Bag-of-Words (CBOW).

Скип-граммы:

В модели Skip-Gram мы берем центральное слово и окно контекстных слов или соседей в контекстном окне и пытаемся предсказать контекстные слова для каждого центрального слова. Модель генерирует распределение вероятностей, то есть вероятность появления слова в контексте данного центрального слова, и здесь задача состоит в том, чтобы выбрать векторное представление для максимизации вероятности.

Непрерывный мешок слов (CBOW):

CBOW является противоположностью Skip-Grams. Мы пытаемся предсказать центральное слово из данного контекста, т.е. мы пытаемся предсказать центральное слово путем суммирования векторов окружающих слов.

FastText

Достигнутая точность: приблизительно 69%

Записная книжка Python:



fastText - это библиотека для изучения встраивания слов и классификации текста, созданная лабораторией Facebook AI Research (FAIR). Модель представляет собой алгоритм обучения без учителя для получения векторных представлений слов. Facebook предоставляет предварительно обученные модели для 294 языков. fastText использует нейронную сеть для встраивания слов.

Документы по Gensim: models.fastText

FastText - это расширение Word2Vec, предложенное Facebook в 2016 году. Вместо ввода отдельных слов в нейронную сеть FastText разбивает слова на несколько n-граммов (подслов). Например, триграммы для слова «яблоко» - это приложение, ppl и ple (без учета начала и конца границ слов). Вектор вложения слов для яблока будет суммой всех этих n-граммов. После обучения нейронной сети у нас будут вложения слов для всех n-граммов из обучающего набора данных. Редкие слова теперь могут быть правильно представлены, поскольку весьма вероятно, что некоторые из их n-граммов также присутствуют в других словах. В следующем разделе я покажу вам, как использовать FastText с Gensim.

Универсальный кодировщик предложений

Достигнутая точность: около 77%

Записная книжка Python:



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

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

Дополнительная информация: