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

Анализ настроений за 10 минут с VADER и NLTK на основе правил

Использование «Словаря, учитывающего валентность, и sEntiment Reasoner» в наборе данных обзоров IMDB для анализа настроений на основе правил

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

Когда использовать подход, основанный на правилах, вместо статистического НЛП

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

1 - Проблема, связанная с доменом:

У нас есть отличные предварительно обученные модели, такие как GPT-3, BERT, ELMo, которые творит чудеса с общими языковыми проблемами. Однако, когда мы пытаемся использовать их в проблемах, специфичных для предметной области, таких как анализ настроений финансовых новостей или классификация юридических текстов, эти современные модели могут не удовлетворить специфику, требуемую для таких задач. Следовательно, мы должны либо настроить эти модели с дополнительными помеченными данными, либо полагаться на модели, основанные на правилах.

2 - Отсутствие помеченных данных:

Даже если мы можем захотеть настроить модель, это не всегда возможно. Особенно, если у вас небольшая команда или у вас нет средств для найма людей через платформы для фрилансеров, такие как Amazon Mechanical Turk, вы не можете генерировать помеченные данные для точной настройки предварительно обученной модели, не говоря уже о создании своей собственная модель глубокого обучения. Наконец, может оказаться невозможным собрать значимый объем данных для обучения модели глубокого обучения. В конце концов, статистические модели НЛП очень требовательны к данным.

3 - Доступное ограниченное финансирование для обучения:

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

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

Однако прежде чем начать, давайте рассмотрим некоторые основы:

Что такое лексикон?

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

Лексика - это словарь человека, языка или отрасли знаний.

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

Что такое ВАДЕР?

Одна из самых популярных моделей анализа настроений на основе правил - VADER. VADER, или Valence Aware Dictionary и sEntiment Reasoner, - это инструмент анализа настроений на основе лексики и правил, специально адаптированный к настроениям, выраженным в социальных сетях.

VADER похож на GPT-3 моделей НЛП, основанных на правилах.

Поскольку он настроен для контента социальных сетей, он лучше всего работает с контентом, который вы можете найти в социальных сетях. Тем не менее, он по-прежнему предлагает приемлемые оценки F1 на других наборах тестов и обеспечивает сопоставимую производительность по сравнению со сложными статистическими моделями, такими как Support Vector Machines, как вы можете видеть ниже:

Обратите внимание, что есть несколько альтернативных лексиконов, которые вы можете использовать в своем проекте, например, Гарвардский генеральный опросник, Лофран Макдональд, Ху и Лю. В этом руководстве мы воспользуемся лексикой VADER вместе с ее методологией.

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

Давайте начнем:

Анализ настроений в наборе данных IMDB

Что такое набор данных обзоров IMDB?

Набор данных обзоров IMDB - это большой набор данных обзоров фильмов, собранный и подготовленный Эндрю Л. Маасом из популярной службы оценки фильмов IMDB. Набор данных IMDB Reviews используется для двоичной классификации тональности, независимо от того, является ли отзыв положительным или отрицательным. Он содержит 25 000 обзоров фильмов для обучения и 25 000 для тестирования. Все эти 50 000 отзывов являются данными, которые могут использоваться для контролируемого глубокого обучения. Кроме того, есть еще 50 000 непомеченных обзоров, которые мы не будем использовать в этом тематическом исследовании. В этом примере мы будем использовать только обучающий набор данных.

Загрузка и обработка набора данных

Мы начнем с загрузки набора данных IMDB с помощью API данных Keras. Однако Keras предоставляет набор данных в закодированной версии. К счастью, мы также можем загрузить индексный словарь, чтобы преобразовать его в оригинальные обзоры. Следующие строки загрузят закодированные обзоры вместе с индексом. Мы также создадим обратный индекс для декодирования:

Прежде чем декодировать весь набор данных, давайте посмотрим на операцию на примере:

Output: this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert redford's is an amazing actor and now the same being director norman's father came...

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

Наконец, мы создадим DataFrame pandas из вложенного списка, который мы создали выше:

Теперь, когда наши данные готовы, мы можем загрузить VADER.

Загрузка анализатора настроений VADER

Самый продвинутый инструмент NLP Python, NLTK, предоставляет модуль для VADER, и мы можем легко импортировать SentimentIntensityAnalzer с помощью следующего кода:

Чтобы проверить, как работает наша модель, давайте добавим в простое предложение нейтральные и отрицательные слова:

Мы используем калькулятор polarity_score нашей модели SentimentIntensityAnalyzer. Эта модель дает нам четыре балла: (i) отрицательность, (ii) позитивность, (iii) оценка нейтральности предложения и, наконец, (iv) сложная оценка тональности предложения. Составная оценка - это, по сути, агрегированная версия первых трех оценок, и мы будем использовать ее для измерения настроения наших отзывов. Вот результат нашего фиктивного предложения: «Привет, мир. Я ужасен ».

Расчет показателей полярности и прогнозирование.

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

Вместо цикла for мы будем использовать более эффективную альтернативу: применить лямбда-функцию к нашему столбцу набора данных Text и создать новый столбец для сохранения результатов с именем Prediction. Следующая единственная строка делает это:

Редактирование этикеток и создание столбца точности:

Приведенный выше код просто преобразует отрицательные составные оценки в -1, а положительные составные оценки в 1. Поскольку в нашем наборе данных IMDB Reviews есть 1 для положительных настроений и 0 для отрицательных настроений, мы заменим 0 на -1, чтобы мы могли вычислить точность наши прогнозы, которые будут в новом столбце под названием Точность:

Создайте столбец для матрицы неточностей

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

Приведенный выше код создаст столбец Conf_Matrix и пометит каждое предсказание аббревиатурами True Positives, True Negatives, False Positives и False Negatives.

Давайте посмотрим, как выглядит хвост нашего последнего DataFrame:

Выход:

Расчет точности, отзыва, прецизионности и оценки F1:

Чтобы увидеть, как мы поступили с нашей моделью VADER, я воспользуюсь несколькими настраиваемыми формулами для расчета точности, отзыва, точности и оценки F1. Хотя есть несколько API-решений для вычисления матрицы путаницы, я решил использовать собственные вычисления:

Благодаря столбцу Conf_Matrix эти вычисления просты в обработке, и вот результаты:

Как видите, без единой секунды обучения или настройки мы достигли точности 70% в наборе данных обзоров фильмов. Не забывайте, что VADER - это лексикон социальных сетей. Следовательно, использование Lexicon, основанного на обзорах фильмов, дало бы нам еще более высокую производительность.

Поздравления

Вы успешно создали классификатор настроений, основанный на НЛП, основанном на правилах. Одно из самых больших преимуществ методов НЛП, основанных на правилах, состоит в том, что они полностью объяснимы по сравнению с гламурными моделями НЛП на основе трансформаторов, такими как BERT и GPT-3. Таким образом, помимо экономичности модели, ее объяснимость - еще одна веская причина полагаться на модели НЛП, основанные на правилах, особенно в чувствительных областях.

Подпишитесь на список рассылки, чтобы получить полный код

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

Если вам понравился этот пост, рассмотрите возможность подписки на Информационный бюллетень! ✉️

"Подпишитесь сейчас"

Кроме того, если вы настаиваете на статистическом НЛП, у меня есть тот же учебник по анализу настроений, сделанный с помощью BERT, TensorFlow и Hugging Face; проверить это:



Поскольку вы читаете эту статью, я уверен, что мы разделяем схожие интересы и работаем / будем работать в схожих отраслях. Итак, подключимся через Linkedin! Пожалуйста, не стесняйтесь отправить запрос о контакте! Орхан Г. Ялчин - Linkedin

Понравилась статья

Если вам понравилась эта статья, ознакомьтесь с другими моими статьями о НЛП: