Найти тему
Машинное обучение

Классификация текста в твитах-катастрофах с LSTM и встраиванием слов

Оглавление

Вложение слов о точности классификации текста

https://www.istockphoto.com/photo/disaster-area-with-tornado-gm172448852-23567577
https://www.istockphoto.com/photo/disaster-area-with-tornado-gm172448852-23567577

Код: https://github.com/emmanuellaanggi/disaster_tweet_sentiment

В этом посте я подробно расскажу, как использовать fastText и GloVe в качестве встраивания слов в модель LSTM для классификации текста. Я заинтересовался встраиванием слов, когда писал свою статью о генерации естественного языка. Он показал, что матрица внедрения для веса на слое внедрения улучшила производительность модели. Но поскольку это был NLG, измерение было субъективным. И я тоже использовал только fastText. Итак, в этой статье я хочу рассказать, как каждый метод (с fastText и GloVe и без него) влияет на прогноз. В моем коде Github я также сравниваю результат с CNN. Набор данных, который я здесь использую, взят c Kaggleи стостоит из твитов, в нем помечено есть ли в твите какие-то слова, говоярщие о настоящей катастрофе. Честно говоря, впервые увидев этот набор данных, я сразу подумал о BERT и его возможности понимать лучше текст, чем то, что я предложил в этой статье.

Но в любом случае в этой статье я остановлюсь на fastText и GloVe.

Поехали?

Data + Pre-Processing

Данные состояли из 7613 твитов (столбцы Текст) с меткой (столбец Цель), независимо от того, говорили они о настоящей катастрофе или нет. С 3271 строками, информирующими о реальной катастрофе, и 4342 строками, информирующими о реальной катастрофе. Данные о соревнованиях Kaggle опубликованы, и если вы хотите узнать больше о них, вы можете прочитать их здесь- https://www.kaggle.com/c/nlp-getting-started.

-2

Пример нахождения слова бедствия в тексте:

«Лесной пожар возле Ла-Ронже-Саск. Канада »

Пример использования слова «бедствия»

«Эти коробки готовы взорваться! Наконец-то прибыли взрывающиеся котята! gameofkittens #explodingkittens »

Данные будут разделены для обучения (6090 строк) и тестирования (1523 строки), после чего перейдут к предварительной обработке. Мы будем использовать только текстовые и целевые столбцы.

-3

Используемые здесь шаги предварительной обработки:

  1. Case Folding
  2. Cleaning Stop Words
  3. Tokenizing
-4

Word Embedding

Шаг 1. Загрузите предварительно обученную модель

Первый шаг при работе с fastText и Glove - это загрузка каждой предварительно обученной модели. Я использовал Google Colab, чтобы предотвратить использование утечки памяти на моем ноутбуке, поэтому я загрузил его с библиотекой запросов и разархивировал прямо на ноутбук.

Я использовал самую большую предварительно обученную модель из обоих встраиваний слов. Модель fastText дала 2 миллиона векторов слов (токены 600B), а GloVe - 2,2 миллиона векторов слов (токены 840B), оба обучены на Common Crawl.

Предварительно обученная загрузка fastText

-5

Предварительно обученная загрузка GloVe

-6

Шаг 2. Загрузите предварительно обученную модель в Word Vectors.

FastText дал формат для загрузки векторов слов, поэтому я использовал его для загрузки обеих моделей.

-7

Шаг 3. Матрица вложения.

Матрица внедрения будет использоваться в слое внедрения для веса каждого слова в обучающих данных. Это делается путем перечисления каждого уникального слова в наборе обучающих данных, существовавшего в токенизированном индексе слов, и определения веса внедрения с весом из fastText илиGloVe (подробнее о матрице внедрения).

Но есть вероятность, что есть слова, которых нет в векторах, такие как опечатки, аббревиатуры или имена пользователей. Эти слова будут храниться в списке, и мы сможем сравнить производительность обработки слов из fastText и GloVe.

-8

Количество внедрений нулевых слов в fastText составляет 9175, а в GloVe - 9186. Можно предположить, что fastText обрабатывает больше слов, даже если предварительно обученный был обучен меньшему количеству слов.

Долговременная краткосрочная память (LSTM)

Вы можете выполнить точную настройку гиперпараметров или архитектуры, но я собираюсь использовать очень простой вариант с Embedding Layer, LSTM Layer, Dense layer и Drop out Layer.

-9

-10
-11

Результат

fastText показал лучшую производительность с точностью около 83%, а GloVe - 81%. Разница в производительности не столь значительна, но, сравнивая ее с производительностью модели без встраивания слов (68%), мы можем увидеть значительное использование встраивания Word для веса слоя встраивания.

Точность с встраиванием слова fastText
Точность с встраиванием слова fastText
Точность при встраивании слов в перчатку
Точность при встраивании слов в перчатку
Точность без встраивания слов
Точность без встраивания слов

Чтобы узнать больше о производительности обучения, подробном коде и, если вы хотите применить его к другому набору данных.

Спасибо за чтение!