Люди, выражающие свои опасения через платформу социальных сетей, являются обычной практикой в ​​​​современную эпоху, причина в широком охвате поднимаемых проблем. Поскольку в настоящее время Интернет и мобильные устройства распространены повсеместно, многие люди используют платформы социальных сетей, такие как Twitter, Facebook, Instagram и т. д., чтобы их голос достиг как можно большего числа людей. Но это также приводит к неправильному использованию того же самого. Многие люди также пытаются распространять ложные новости и слухи, что вызывает еще больше проблем и волнений среди людей. Именно по этой причине необходимо разделить твиты о стихийных бедствиях на те, которые о реальных бедствиях, и те, которые не о них.

Цель проблемы и формулировка машинного обучения. Как описано во введении, цель здесь состоит в том, чтобы определить, связаны ли твиты с реальным бедствием или нет. Поскольку твиты имеют форму текста для перспективы ML, первым шагом здесь является NLP (обработка естественного языка), то есть преобразование текста в числовую форму, чтобы модель ML/DL, которая будет использоваться для прогнозирования, могла его понять. Как только тексты будут обработаны, это будет проблема бинарной классификации.

(Класс 1: твиты связаны с реальным бедствием, класс 0: твиты не связаны с реальным бедствием), классификация может быть выполнена с использованием различных моделей ML/DL.

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

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

id — уникальный идентификатор для каждого твита.

текст — текст твита

местоположение – место, откуда был отправлен твит (может быть пустым).

ключевое слово — конкретное ключевое слово из твита (может быть пустым)

Целевой столбец имеет 1 для твитов о реальной катастрофе и 0 для твитов, которые не таковы.

Набор обучающих данных состоит из 7613 твитов.

ЗАГРУЗИТЕ ДАННЫЕ И ВИЗУАЛИЗИРУЙТЕ

Мы загружаем данные как фрейм данных pandas с именем «df».

АНАЛИЗ ИССЛЕДОВАТЕЛЬСКИХ ДАННЫХ

  1. ПРОЦЕНТ НУЛЕВЫХ ЗНАЧЕНИЙ В КАЖДОЙ ФУНКЦИИ

Поскольку функция местоположения имеет много нулевых значений (33,27%), эта функция удалена.

2. ВИЗУАЛИЗИРУЙТЕ КОЭФФИЦИЕНТЫ КОРРЕЛЯЦИИ МЕЖДУ ХАРАКТЕРИСТИКАМИ И ЦЕЛЯМИ

Из приведенной выше тепловой карты корреляции мы можем видеть, что функция «ключевое слово» имеет значение корреляции с целью, равное 0,55, также только 0,8% нулевых значений, поэтому мы сохраним эту функцию.

Мы также можем заметить, что наша основная функция «текст» сильно коррелирует с целью с коэффициентом корреляции, равным 1.

Поскольку функция «id» не способствует определению того, связан ли твит с бедствием или нет, функция «id» будет удалена.

3. ВИЗУАЛИЗАЦИЯ СЧИТЫВАЕМЫХ ГРАФИК ДЛЯ ЦЕЛЕЙ И ФУНКЦИЙ

Как видно из вышеизложенного, дисбаланс между классами невелик, поэтому первый подход будет без какой-либо техники недостаточной или избыточной выборки.

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

4. ВИЗУАЛИЗИРУЙТЕ ОБЛАКО СЛОВ ДЛЯ ОБОИХ КЛАССОВ

WordCloud — это способ визуализации частотности слов в корпусе. Более часто встречающиеся слова отображаются более крупным шрифтом, а менее часто встречающиеся — более мелким. Таким образом, размер шрифта дает относительное представление о частоте слов в данном корпусе. Фрагмент кода построения облака слов выглядит следующим образом:

Приведенный выше фрагмент кода отображает облако слов, как показано ниже:

Точно так же облако слов для твитов, связанных со стихийными бедствиями, было построено следующим образом:

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

Перед построением облаков слов тексты твитов были предварительно обработаны, поэтому давайте взглянем на последующую процедуру предварительной обработки текста.

ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА ТЕКСТА

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

  1. Удалите теги HTML. (Используя библиотеку Beautiful Soup, показанную в приведенном выше фрагменте кода)
  2. Удалить URL-адреса (с помощью REGEX)
  3. Удалить текст после @ вместе с @ (используя REGEX)
  4. Расширить сокращенные слова (используя REGEX)
  5. Удалить знаки препинания , : ; « . ? (Используя REGEX)
  6. Удалить специальные символы { } ( ) [] ‹ › = + — _ # $ % ^ * / | \ & \n \t \r (с использованием REGEX)
  7. Удалить все цифры (используя REGEX)
  8. Преобразование всего текста в нижний регистр.
  9. Удалите стоп-слова (используя библиотеку nltk). Стоп-слова — это часто встречающиеся слова в таких предложениях, как «the», «is», «and» и т. д. Эти слова не вносят большого вклада в определение контекста данного предложения с использованием моделей ML или DL. , поэтому они удаляются перед передачей текста в модели ML/DL.
  10. Выполните лемматизацию. (с использованием библиотеки nltk): лемматизация — это процесс преобразования слов в корневую форму, называемую леммой. Это похоже на стемминг с той лишь разницей, что корневые слова, называемые основой в стемминге, могут не обязательно быть словарными словами, но леммы являются словарными словами. Например. «бег» будет лемматизирован как бег, «сон» будет лемматизирован как сон.

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

ОБУЧЕНИЕ РАЗЛИЧНЫХ МОДЕЛЕЙ, ЧТОБЫ ВЫБРАТЬ ЛУЧШУЮ

1. РАЗЛИЧНЫЕ МОДЕЛИ МО С ВЕКТОРИЗОВАННЫМ ТЕКСТОМ TF-IDF

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

TF-IDF расшифровывается как Term Frequency-Inverse Document Frequency, который представляет собой метод взвешивания слов в документе, что дает нам важность каждого слова в документе и в коллекции документов (также называемой корпусом).

Частота терминов (TF) — это количество раз, которое слово встречается в документе, часто деленное на общее количество слов в документе.

IDF — это количество раз, когда документ, содержащий это слово, встречается в коллекции документов, таким образом, IDF компенсирует вес высокочастотных слов, таких как «the», «for», «and» и т. д., которые встречаются часто, но не важны для поиск информации.

Мы будем использовать TfidfVectorizer от Scikit-Learn для преобразования наших текстов в вектор для дальнейшего ввода в различные модели ML.

При обучении векторизатора TFIDF мы можем выбрать просмотр отдельных слов в документах (униграмма) или пары/группы слов (n-граммы), где n = количество слов, которые мы хотим просмотреть вместе при обучении векторизатора.

Здесь были рассмотрены два подхода: один только с униграммой, а другой с униграммой и биграммой (n-грамма с n = 2).

Весь набор данных разделен на набор для обучения и набор для перекрестной проверки. Векторизатор TF-IDF обучается только на тренировочном наборе.

Мы конвертируем функции «текст» и «ключевое слово» в векторы с помощью векторизатора TFIDF.

Теперь сгенерированные выше векторы из текстов передаются в мультиномиальную наивно-байесовскую модель для обучения. Модель Наивного Байеса использует следующее правило для предсказания классов:

Здесь P(y) — относительная частота класса y в наборе данных, а P(xi|y) — вероятность появления слова xi в тексте при условии, что оно принадлежит классу y. Для любого класса y значение y-hat будет выбрано в качестве прогнозируемого класса для данного текста. Код для классификации MNB приведен ниже:

С использованием векторов TFIDF также обучаются классификаторы Decision Tree и Random Forest.

Модель дерева решений использует ряд вложенных операторов if и else для принятия окончательного решения о назначении класса данному запросу, тогда как модель случайного леса использует множество деревьев решений, она случайным образом выбирает подмножество данных и обучает с ними множество деревьев решений. после чего он использует большинство голосов, чтобы назначить класс данному запросу. Для подробного понимания работы моделей дерева решений обратитесь к моему блогу: https://kunalbaidya.medium.com/decision-trees-in-machine-learning-46a7cc730b59.

Фрагмент кода для обучения вышеупомянутых моделей выглядит следующим образом:

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

Мы можем заметить, что при использовании биграмм векторизатор TFIDF теперь учитывает как отдельные слова, так и пары слов при преобразовании данного текста в векторы, и, следовательно, количество функций увеличилось до 43142 по сравнению с 110001 только в случае униграмм.

2. РАЗЛИЧНЫЕ МОДЕЛИ ГЛУБОКОГО ОБУЧЕНИЯ ДЛЯ КЛАССИФИКАЦИИ

(A.) ИСПОЛЬЗОВАНИЕ ВНЕДРЕНИЯ СЛОВ С CNN ДЛЯ КЛАССИФИКАЦИИ ТЕКСТА

В первом подходе вложения слов для каждого слова в нашем словаре данных из набора GloVe используются для инициализации весов слоя внедрения. При обучении сети CNN 1D слой Embedding установлен как необучаемый, поэтому он будет использовать вложения GloVe только для обучения.

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

В обоих вышеприведенных подходах после уровня внедрения используется одинаковая архитектура:

2 блока слоев conv1D, каждый блок имеет 3 слоя conv1D с 32 единицами, за которыми следует объединение 3 слоев в блоке, а затем следует слой максимального пула.

За двумя вышеперечисленными блоками следуют 1 слой conv1D → 1 слой Flatten → 1 слой Dropout → 1 плотный слой → 1 выходной слой с сигмовидной активацией для двоичной классификации.

Для оптимизации используется оптимизатор Adam, а для минимизации потерь используется бинарная_кроссэнтропия.

Для мониторинга производительности модели используются показатели оценки ROC-AUC и оценки точности.

Мы выбираем некоторые известные слова из WordCloud, нанесенного ранее, и проверяем, присутствуют ли они в корпусе GloVe или нет.

Как видно из выбранных 27 известных слов из wordcloud, только 4 из них отсутствуют в наборе GloVe, поэтому достаточно попробовать вложения GloVe для обучения модели классификации текста.

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

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

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

Фрагмент кода для создания вышеупомянутой архитектуры модели приведен ниже:

На уровне внедрения архитектуры мы передаем матрицу emb_mat как weight_initializer. В этой матрице emb_mat каждая строка представляет собой 300-мерный вектор встраивания каждого слова в словарь, созданный токенизатором, и вектор встраивания извлекается из набора GloVe.

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

(B.) ИСПОЛЬЗОВАНИЕ ДВУНАПРАВЛЕННОГО LSTM

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

Используемая архитектура модели выглядит следующим образом:

Код для построения этой архитектуры выглядит следующим образом:

(C.) ОБЪЕДИНЕНИЕ И CNN, И ДВУНАПРАВЛЕННОЙ МОДЕЛИ

Обе модели CNN и двунаправленные модели объединены, чтобы попытаться достичь еще более высоких показателей производительности.

Аналогичный существующий подход, упомянутый ниже, обеспечивает точность анализа настроений выше 0,9:

Модель Bi-LSTM для повышения точности классификации текстов: сочетание Word2vec CNN и механизма внимания, авторы Бакчеол Джанг, Мёнхви Ким, Гаспар Хареримана, Санг-уг Кан и Чон Вук Ким * Факультет компьютерных наук, Университет Сангмён, Сеул 03016, Корея ; [email protected] (Б.Дж.); [email protected] (М.К.); [email protected] (Г.Х.); [email protected] (С.-у.К.) Переписка: [email protected]»

Авторы использовали word2vec для встраивания слов, тогда как в этом случае для встраивания слов используется GloVe.

Основная идея этого подхода заключается в том, что 1D CNN используется для извлечения признаков, когда он обрабатывает текст как одномерное изображение и используется для захвата скрытых ассоциаций между соседними словами, тогда как LSTM используется для извлечения контекстной информации из признаков, полученных из 1D слои CNN.

Авторы также использовали механизм внимания вместе с LSTM, который присваивает веса входным компонентам, которые сильно коррелируют с классификацией.

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

Механизм внимания — это процесс, который измеряет связь каждого слова в предложении с другими словами. Ассоциация измеряется баллом , чем выше балл, тем выше вероятность ассоциации между словами. Подсчет очков может быть выполнен различными способами, два из используемых здесь методов - это точечный подсчет и подсчет по Багданау.

Фрагмент кода для создания пользовательского слоя для привлечения внимания приведен ниже:

Архитектура модели CNN+Bi-directional выглядит следующим образом:

(D.) ИСПОЛЬЗОВАНИЕ ПРЕДВАРИТЕЛЬНО ОБУЧЕННОЙ МОДЕЛИ BERT

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

Используемая модель BERT: bert_en_uncased_L-12_H-768_A-12/2, доступная в библиотеке tensorflow_hub. Эта предварительно обученная модель имеет 12 слоев кодировщика, 12 головок внимания и 768 скрытых единиц.

BERT расшифровывается как представление двунаправленного кодировщика от трансформаторов. Каждый энкодер в BERT представляет собой блок преобразователя.

Модель BERT требует 3 входа

i) идентификатор токена: это слова, преобразованные в токены с помощью токенизатора BERT, в отличие от токенизатора keras, который использовался ранее.

ii) ввод маски: это массивы со значениями «0» для токенов [PAD] и значениями «1» для остальных. Токены [PAD] используются для заполнения текстов, длина которых меньше максимальной длины текста в наборе данных.

iii) идентификатор сегмента: если для классификации имеется только одно предложение, общий вектор сегмента равен 0. Если задано два предложения с разделением токенов [sep], векторы сегментов первого сегмента равны нулю, а вектор сегмента второго сегмента — единицам и т. д. Тексты твитов представляют собой короткие последовательности, мы предварительно обрабатываем твиты, чтобы преобразовать их в одно предложение, удалив все знаки препинания, поэтому в этом случае идентификатор сегмента будет массивом из 0 с длиной максимальной длины последовательности.

Функция полезности для подготовки этих входных данных приведена ниже:

Ниже приведен фрагмент кода для создания сети для извлечения функций из текста с использованием предварительно обученной модели BERT:

Окончательная архитектура модели для прогнозирования типа твита с использованием извлеченных функций из предварительно обученной модели BERT в качестве входных данных выглядит следующим образом:

Производительность всех упомянутых выше моделей в наборе проверочных данных представлена ​​в таблице ниже в порядке убывания ROC_AUC_score:

Из приведенной выше таблицы мы выбираем модель CNN + двунаправленный LSTM с вниманием dot_scoring как нашу лучшую модель с самым высоким значением ROC_AUC_score 0,854 для развертывания. Наивысший показатель точности достигается с помощью предварительно обученной модели BERT 0,799.

Приложение для прогнозирования типа твита построено с использованием Streamlit, ниже представлено видео, показывающее, как работает приложение:

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

https://share.streamlit.io/kunal51290/cs2_app_deployment/main/cs2_app.py

Файл Python для развертывания приложения, сохраненная лучшая модель вместе с файлом requirements.txt, файлом procfile и файлом установки доступны в моем репозитории github. Ссылка: https://github.com/kunal51290/CS2_APP_DEPLOYMENT

Мой профиль на LinkedIn: https://www.linkedin.com/in/kunal-dipakranjan-baidya-43b32b196/

Ссылки:

  1. Курс прикладного ИИ от Applied Roots.
  2. https://publish.tntech.edu/index.php/PSRCI/article/view/686/225 Реально или нет? НЛП с Disaster Tweets, Кристофером Флинтом и Закари Келлерманом.
  3. https://www.xajzkjdx.cn/gallery/1-may2021.pdf Обработка естественного языка с помощью твитов о стихийных бедствиях с использованием двунаправленного LSTM. Ариан Карнати, Шашанк Редди Бояпалли, доктор Суприти К.П.
  4. https://machinelearningmastery.com/best-practices-document-classification-deeplearning/
    Использование встраивания слов с CNN для классификации текста.
  5. Модель Bi-LSTM для повышения точности классификации текстов: объединение Word2vec CNN и механизма внимания», авторы Бакчеол Джанг, Мёнхви Ким, Гаспар Хареримана, Санг-уг Кан и Джонг Вук Ким * Факультет компьютерных наук, Университет Сангмён, Сеул 03016, Корея; [email protected] (Б.Дж.); [email protected] (М.К.); [email protected] (Г.Х.); [email protected] (С.-у.К.) Переписка: [email protected]