— — Проект обработки данных, вдохновленный программой Udacity Data Scientist Nano Degree Program.

Обзор

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

ETL-конвейер

  • Обзор данных

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

  • Обработка и очистка данных

Перед построением моделей машинного обучения данные нужно было обработать и очистить. Сначала я объединил два набора данных по идентификатору. Затем я разделил значения в столбце «категории» на «;», чтобы каждое значение стало отдельным двоичным столбцом. В результате получилось 36 двоичных столбцов, где каждый столбец представляет категорию, где 1 указывает, что сообщение принадлежит к категории, а 0 — нет.

Изучая преобразованный набор данных, я обнаружил, что некоторые значения в столбце категорий («связанные») были больше 1, что не соответствовало их бинарной природе. Кроме того, все значения в столбце категории «только ребенок» равны 0, что делает его непригодным для использования в прогностических моделях. Наконец, были дублированные строки. Я устанавливал значения в столбце «связанные» на 1, если они были больше 1, удалял столбец «только ребенок» и дедуплицировал набор данных. Результатом стал чистый набор данных «df» с 26 215 строками и 39 столбцами, который затем использовался для построения конвейера машинного обучения.

Конвейер машинного обучения (ML)

Конвейер машинного обучения состоит из двух частей: обработки естественного языка (NLP) и моделирования.

  • Обработка естественного языка

Токенизация является важным шагом для НЛП. Токенизация — это процесс разбиения текста на отдельные слова или фразы, которые называются токенами, для облегчения анализа и понимания в НЛП. Используя полезный пакет Python «nltk», я определил функцию для токенизации и очистки сообщений. Моя функция токенизации состоит из следующих шагов:

  1. Преобразуйте сообщения в нижний регистр и используйте word_tokenize для нормализации и маркировки сообщений.
  2. Удалить стоп-слова (Стоп-слова — это часто используемые слова в языке, такие как «the», «and», «a» и т. д. Стоп-слова обычно удаляются из текстов при обработке естественного языка, потому что они не несут большого значения сами по себе и может привести к шуму в данных.)
  3. Лемматизация токенов (лемматизация — это процесс приведения слова к его базовой или словарной форме, известный как лемма. Например, лемма «есть», «есть» и «есть» — это «быть».)

После получения чистых токенов второй шаг NLP заключался в векторизации токенов с помощью TfidfVectorizer(). TfidfVectorizer — это метод извлечения признаков, который преобразует набор необработанных документов в матрицу признаков TF-IDF (частота терминов — обратная частота документа), которые представляют важность каждого слова или термина в наборе документов. Полученную матрицу можно использовать в качестве входных данных для алгоритмов машинного обучения.

  • Конвейер машинного обучения

С токенизированными и векторизованными данными сообщений мы можем начать обучение моделей классификаторов. Чтобы оценить производительность модели, я разделил данные на обучающий и тестовый наборы. Обучающий набор включал 80% данных (20 972 строки). Используемый классификатор был классификатором с несколькими выходами, который мог предсказать, принадлежит ли сообщение к каждой категории. Объединив части обработки естественного языка и моделирования, я создал конвейер машинного обучения.

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

Для системы реагирования на стихийные бедствия сведение к минимуму ложноотрицательных результатов важнее, чем сведение к минимуму ложноположительных результатов. Поскольку ложноотрицательные прогнозы могут привести к пропуску или задержке важной информации, что может иметь серьезные последствия, такие как гибель людей или потеря имущества. Напротив, ложноположительные прогнозы могут привести к некоторым неудобствам или дополнительным усилиям, но они вряд ли будут иметь такие серьезные последствия. Следовательно, следует выбирать модель с самой высокой средней скоростью отзыва (отзыв = TP/(TP+FN)). При оценке производительности моделей с использованием данных тестирования три модели показали одинаковые показатели точности для каждой категории, а их средние показатели точности составили около 0,8. Среди трех оценок модель экстремального повышения градиента имела самую высокую среднюю скорость отзыва 0,68 и поэтому была выбрана.

Для дальнейшего повышения производительности модели была выполнена настройка гиперпараметров с использованием поиска по сетке. Поиск по сетке — это метод, используемый для поиска лучших гиперпараметров модели путем ее оценки по различным комбинациям гиперпараметров. Поскольку для классификатора с экстремальным повышением градиента существует более 10 параметров, только скорость обучения и количество оценщиков были настроены для эффективности во времени выполнения. После настройки гиперпараметров скорость отзыва модели увеличилась до 0,61, что указывает на улучшение производительности.

Фляжное приложение

После построения конвейеров ETL и машинного обучения я создал веб-приложение Flask для интерактивной категоризации сообщений и визуализации данных о стихийных бедствиях. Гистограмма набора обучающих данных отображает пропорции категорий, где большинство сообщений помечены как «связанные» (77%) или «связанные с помощью» (41%). Это разумно, поскольку «связанные» и «связанные с помощью» являются общими категориями, которые могут охватывать различные конкретные категории, связанные со стихийными бедствиями. Облако слов также генерируется для визуализации частоты появления токенов в сообщениях о стихийных бедствиях.

Чтобы классифицировать сообщение, просто введите его на главной странице и нажмите Классифицировать сообщение. Предсказанные метки будут выделены на странице результатов. Например, сообщение Нет еды и воды, мы голодаем и хотим пить помечено как связанное, просьба, связанное с помощью, вода, еда и прямой отчет. Это позволяет отправить сообщение организациям, которые предоставляют помощь водой и едой, гарантируя, что отправитель получит соответствующую помощь. Нажмите здесь, чтобы просмотреть демонстрацию приложения.

Дополнительно: Особенности разработки

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

Ссылки

Демо

GitHub