НЛП по классификации состояний пациентов с использованием обзоров лекарств

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

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

Постановка проблемы:

Можете ли вы предсказать состояние пациента на основании обзора?

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

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

Лекарство сотворило со мной чудеса. Я полностью поддерживаю это.

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

Этапы конвейера НЛП

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

Набор данных:

Набор данных, который я буду использовать для этой задачи, можно легко загрузить из Хранилище машинного обучения UCI: набор данных обзора лекарств (Drugs.com). Теперь первое, что я сделаю, это загружу данные и посмотрю на это знать, с чем я работаю. Итак, давайте просто импортируем библиотеки и загрузим данные:

как мы видим сверху, данные содержат 161297 строк и 7 столбцов.

Мы видим, что в наборе данных 7 столбцов:

  1. uniqueID : идентификатор для каждого сообщения.
  2. drugName : Название препарата, для которого сделан обзор.
  3. condition: Название заболевания, для лечения которого используется лекарство.
  4. review : Отзыв пациентов о конкретном лекарстве.
  5. rating: Оценки, данные пациентами каждому лекарству по 10-балльной шкале, где 10 представляет максимальную эффективность.
  6. date : Дата записи обзора.
  7. usefulCount : количество пользователей, которые сочли отзыв полезным.

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

pd.set_option(‘display.max_rows’, нет)

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

(40178, 7)

Итак, новая фигура — это 40178 строк и 7 фигур, но не все из них действительно важны для нашей задачи, поэтому нам придется удалить те, которые не важны. Для задачи классификации нам нужны только столбцы состояния и обзора.

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

Исследовательский анализ данных (EDA)

Birth Control          28788
Depression             9069 
Diabetes, Type 2       2554 
High Blood Pressure    2321 
Name: condition, dtype: int64

Наши классы перекошены. Итак, что же такое несбалансированный набор данных? Это происходит, когда обучающие выборки не распределены равномерно по целевым классам. Контроль над рождаемостью, например, имеет 28 788 подсчетов, тогда как другие классы имеют меньше данных. В результате модель может быть смещена в сторону класса с наибольшим количеством обучающих экземпляров, что снижает мощность предсказания модели.

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

Облако Word

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

Анализы противозачаточных средств

Месячные, пилюля, рождение, контроль - наиболее часто встречающиеся слова.

Анализ депрессии

Депрессия, Побочный эффект, Лекарство — наиболее часто встречающиеся слова

Анализ высокого кровяного давления

Кровь, давление, побочный эффект, наиболее часто встречающиеся слова

Анализ диабета 2 типа

наиболее часто встречающиеся слова — side, now, effect и data.

Предварительная обработка текста

Итак, что же такое предварительная обработка в этом контексте?

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

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

Часть 1. Очистка и фильтрация текста

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

  • Удаление шума

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

1. Удаление специального символа из данных

удалит все специальные символы (двойное двоеточие «») из текста, заменив на (одиночное ‘’)

for i, col in enumerate(X.columns):
    X.iloc[:, i] = X.iloc[:, i].str.replace('"', '')
  • В нижнем регистре

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

  • Стоп-слова

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

Чаще всего в тексте используются следующие слова: «the», «is», «in», «for», «where», «when», «to», «at» и т. д.

Перечисленные выше слова являются наиболее распространенными во французском языке.

  • Леммитизация

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

Лемматизация выполняется медленнее по сравнению со стеммингом, но она знает контекст слова, прежде чем продолжить.

  • в чем разница между стеммингом и леммитацией

Стемминг использует основу слова, а лемматизация использует контекст, в котором используется слово.

  • Вывод

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

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

примеры по обеим концепциям:

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

Рекомендуемая инженерия

Преобразование текстовых данных в числовые данные — вот что такое разработка признаков. Однако зачем необходимо преобразовывать текстовые данные в числовые? Мы должны использовать разработку признаков, потому что наша модель машинного обучения не понимает текстовые данные.

Я разделил набор данных перед выполнением предыдущей задачи. То есть 80 % набора данных используется в обучающем наборе, а 20 % — в тестовом.

Моделирование/Построение модели и оценка

Мы пытаемся создать модель на основе данных на этапе моделирования. В этом случае мы также можем использовать несколько подходов для построения модели на основе постановки задачи.

Вот вопрос: какой подход выбрать? Верно? Это основано на двух факторах,

1. Объем данных

2. характер проблемы.

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

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

что такое наивный байесовский классификатор?

Это простой (наивный) метод классификации, основанный на правиле Байеса. Он основан на очень простом представлении документа (так называемом представлении набора слов).

Предположим, у нас есть два класса (положительный и отрицательный), и наш ввод — это текст, представляющий обзор фильма. Мы хотели бы знать, был ли отзыв положительным или отрицательным. Таким образом, у нас может быть набор положительных слов (например, «любовь», «удивительный», «веселый» и «великолепный») и набор отрицательных слов (например, ненависть, ужасный).

Затем мы можем подсчитать, сколько раз каждое из этих слов появляется в документе, чтобы определить, является ли оно положительным или отрицательным.

Этот метод полезен для классификации тем; например, предположим, что у нас есть коллекция академических статей, которые мы хотим разделить на разные темы (информатика, биология, математика).

Ниже приведены различия между Наивным Байесом и Полиномиальным Наивным Байесом:

Наивная байесовская модель – это общая модель.

Полиномиальный наивный байесовский метод — это подмножество наивного байесовского метода, в котором P(Featurei|Class) следует полиномиальному распределению (количество слов, вероятности и т. д.). Алгоритм основан на теореме Байеса и предсказывает тег текста, такого как фрагмент электронной почты или газетная статья. Он вычисляет вероятность каждого тега для данной выборки, а затем выдает тег с наибольшей вероятностью в качестве вывода. Классификация новостей — один из самых популярных вариантов использования алгоритма наивного Байеса. Он широко используется для классификации новостей по различным разделам, таким как политические, региональные, глобальные и так далее.

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

в соответствии с приведенной выше матрицей путаницы 5687 слов классифицируются как противозачаточные состояния, 1746 — как состояние депрессии, диабет типа 2 — 462 и 398 — как высокое кровяное давление.

какой пассивно-агрессивный классификатор?

Ясно, что полиномиальный наивный байесовский метод работает не так хорошо, как другие модели. В онлайн-обучении модель машинного обучения обучается и развертывается в производстве таким образом, что она продолжает учиться по мере поступления новых наборов данных. Таким образом, мы можем сказать, что такой алгоритм, как Passive Aggressive Classifier, лучше всего подходит для систем, которые получают данные в непрерывном потоке.

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

Итак, давайте посмотрим, как работают обе модели, когда используется TFIDF, а не набор слов.

TFIDF

Рассмотрим следующие слова: «the», «in», «on», «a», «an». Это пример группы слов, которые сами по себе не имеют значения, но часто встречаются в каждом документе. Включение этих типов слов в наш алгоритм снижает производительность модели. В результате мы должны исключить эти слова. Для удаления таких слов используется TF-IDF, или Частота термина, обратная частоте документа. Частота появления слова в документе называется частотой термина.

точность полиномиального NB снизилась, давайте рассмотрим пассивно-агрессивные классификаторы.

в то время как для пассивно-агрессивного классификатора точность повысилась. Давайте применим биграммы, чтобы проверить, улучшится ли наша оценка точности

Биграммы

Для генерации 2-грамм мы передаем значение n=2 в функцию ngrams NLTK. Но сначала мы разбиваем предложение на токены, а затем передаем эти токены в функцию ngrams.

Некоторые пары слов всегда встречаются вместе чаще, чем по отдельности. Следовательно, при обучении важно рассматривать такие совместно встречающиеся слова как единое целое или единый токен. Для проблемы распознавания именованных объектов такие токены, как «США», «Северная Америка», «Красное вино», будут иметь смысл, если они будут распознаны как биграммы. N-граммы являются расширением биграмм для работы с более длинными последовательностями.

это хорошо, мы также проверим, изменится ли оценка точности, если мы применим триграммы

триграммы дают наивысшую оценку точности. это определенно улучшилось.

Наиболее важные функции

каковы 10 основных функций в каждом классе, которые играют важную роль.

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

Заключение

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

Вы можете связаться здесь

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