Путешествие по изучению анализа настроений как «черного ящика» и его разбиению, чтобы найти идеи.

15 ноября 2018 г. я отправился с миссией по созданию модели анализа настроений при обзоре наркотиков.

Все началось, как и большинство идей ... с проблемы.

В течение последних 24 месяцев моя жена боролась с серьезным депрессивным эпизодом. Протокол лечения привел ее от одного испытания лекарства (и неудачи) к следующему. Каждое испытание препарата занимает от 8 до 16 недель в зависимости от титрования, последующих посещений и постепенного снижения дозы. На протяжении всего этого процесса она испытала целый ряд побочных эффектов. Тошнота, усталость, сонливость и сильное беспокойство - это лишь некоторые из них. Некоторые лекарства немного помогли с депрессией. Другие сделали это заметно хуже. Ужасающе хуже.

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

Я не виню врача за уровень отзывчивости. Они общались как можно лучше, учитывая количество людей, которым они помогают в своей практике. Но мне часто приходила мысль: «Зачем вообще (звонить или) им писать по электронной почте? Вряд ли они получат это сообщение достаточно скоро, чтобы что-то с этим сделать.

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

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

Так что, если бы я мог создать систему, позволяющую поставщикам медицинских услуг быстрее определять эффективные / неэффективные лекарства?

Идея: анализ отзывов об опыте приема лекарств

Количественные обзоры создают чистые простые данные. Данные, которые можно визуализировать, анализировать, отслеживать и сравнивать.

Ежедневно собирая отзывы пациентов о лекарствах и выполняя анализ настроений, можно:

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

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

Вот что я решил посмотреть, смогу ли я построить.

В неизвестное

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

Интернет предоставил потрясающие данные. Набор данных Drug Review (Drugs.com) из репозитория машинного обучения UCI, предоставленный Феликсом Грэссером и Сурьей Каллумади.

«Набор данных содержит отзывы пациентов о конкретных лекарствах вместе с соответствующими состояниями и 10-звездочный рейтинг пациентов, отражающий общую удовлетворенность пациентов. Данные были получены путем сканирования интернет-сайтов с обзорами фармацевтических препаратов. (Drugs.com) »

Отличный набор данных, содержащий текстовые обзоры, рейтинг, а также поля категорий для состояния и лекарств.

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

Попытка №1 - выстрел в темноте

Я погуглил, прочитал много и выбрал простое стартовое руководство, чтобы начать свое путешествие по НЛП. Моя первая попытка НЛП началась с того, что я взял небольшой код из учебника Анализ настроений с помощью Python и применил его к моему набору данных. (См. Мою записную книжку здесь) Я быстро понял, что адаптация даже самого лучшего написанного кода к новому набору данных может быть довольно сложной задачей. Регулярное выражение, предусмотренное для очистки данных, было недостаточным, поэтому я написал и протестировал свой собственный.

После нормализации и векторизации текста обзора я разделил оценки обзора из 11 категорий на три. «Положительный», «Отрицательный» и «Нейтральный». Затем, используя логистическую регрессию scikit-learn, я обучил модель и проверил точность работы модели.

После небольшой настройки эта модель показала конечную точность 81,95%. В этот момент я не был уверен, как измерить производительность этой модели, и не был уверен, является ли только точность достоверным показателем.

Но когда я проверил веса для каждой из 10 верхних и нижних 10 характеристик (слов), я понял, что есть некоторые несоответствия, которые я не мог объяснить.

Я не из тех, кто сдаётся. Итак, мне нужно было узнать больше, и я искал более подробное руководство.

Попытка №2 - Разбор черного ящика

После некоторого расспроса с одним из моих друзей он порекомендовал пост от Insight AI Эммануэль Амейсен. Используя этот пост в качестве руководства и Код Леонардо Аполонио« Как решить-НЛП » в качестве основы, я отправился в свое следующее путешествие в НЛП с моим недавно изученным набором данных. (Моя записная книжка здесь.)

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

Работая с руководством, я следовал простому процессу «остановиться и выучить» всякий раз, когда появлялся словарный запас машинного обучения, которого я не понимал. Я узнал о внедрении, Word2Vec, Bag-of-Words, корпусе, токенизации, нормализации, символах, отличных от ASCII, о стемминге, лемматизации и векторизации при подготовке данных. Этот процесс трудоемкий, но эффективный.

Мое мышление: заставить черный ящик работать, а затем разорвать черный ящик

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

«Рискуйте, делайте ошибки, РАССКАЗЫВАЙТЕСЬ!» - Мисс Фризл

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

Но действительно ли это сработало?

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

  • Оценка эффективности различных встраиваний с помощью проекционной визуализации.

  • Использование точности, отзыва, f1, и точности для оценки эффективности логистической регрессии.

  • Использование матрицы неточностей для визуализации производительности модели.

  • Визуализация проверки функций с помощью графика «Важные слова».
  • Использование Lime, объяснителя черного ящика, для word2vec для извлечения и проверки функций.

Каковы результаты всей этой работы?

Самой производительной моделью встраивания + логрега была моя модель Bag-of-Words с точностью 78%. Точность CNN составила ~ 75%, оставив много возможностей для улучшения.

Но в результате вес и важность функций резко улучшились.

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

Попытка №3 - Путешествие с мыслями о конце.

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

Подготовка данных с помощью моего нового набора трюков

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

На этот раз я проверил свои данные NaN с помощью MissingNo. Я думаю, что этот пакет визуализации очень умный.

Затем, как и раньше, я поместил свои значения в корзину и проверил распределение на графике.

Я удалил из набора данных предложения нестандартной длины.

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

Привет, LSTM

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

Моя простая модель LSTM показала точность 88,4%.

Еще более впечатляющим было то, насколько хорошо он предсказывал положительные настроения с точностью 90%.

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

Последствия

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

Можно ли эффективно предсказать тональность отзыва?

Да. Совершенно верно.

Достаточна ли моя модель, чтобы сделать это значимым образом?

Конечно, лучше, чем ничего, но это далеко не идеально.

Готово ›Отлично.

И это сообщение в блоге готово.

Примечание для читателей: на момент публикации этой статьи моя жена нашла некоторое облегчение от депрессии благодаря тестированию на генные препараты. Если вы или ваш любимый человек страдаете от депрессии и недовольны эффективностью вашего лекарства, я настоятельно рекомендую его. Это должно быть частью каждого диагноза депрессии.