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

В этой теме я расскажу о:

  • Часть 1: Анализ настроений с помощью логистической регрессии
  • Часть 2: Обзор логистической регрессии

Этот пост является первой частью «Анализ настроений с помощью логистической регрессии».

Отказ от ответственности. Этот пост основан на первой неделе курса Обработка естественного языка с классификацией и векторными пространствами на Coursera. Большинство цифр ниже кредитов принадлежит авторскому праву курса.

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

Часть 1: Анализ настроений с помощью логистической регрессии

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

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

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

1. Контролируемое машинное обучение (обучение)

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

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

2. Анализ настроений

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

Простой пример:

  • Учитывая твит: «Я счастлив, потому что я изучаю НЛП».
  • Цель – предсказать, будет ли этот твит положительным или отрицательным.

Вопрос в том, как мы можем предсказать, будет ли твит положительным или отрицательным?

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

Шаги, которые мы можем предпринять:

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

3. Словарь и извлечение признаков

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

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

Словарь

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

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

Извлечение признаков

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

  • Если да, то мы присвоим этой функции значение 1.
  • Если это не так, то присвойте значение 0.

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

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

Проблема:
При таком подходе мы сразу видим некоторые проблемы:

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

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

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

Есть ли лучший способ извлечь полезные функции из текста?

4. Отрицательные и положительные частоты

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

Положительные и отрицательные подсчеты

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

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

Шаги для получения счетчиков:

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

Вот пример частоты положительных слов в твиттере:

Вот пример частоты отрицательных слов в твиттере:

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

5. Извлечение признаков с помощью частот

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

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

Извлечение признаков с помощью трехмерного вектора

Мы можем извлечь функцию, чтобы представить твит как:

  • Предвзятый термин
  • Сумма положительных частот для слов из словаря, которые появляются в твите.
  • Сумма отрицательных частот слов из словаря, которые появляются в твите.

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

Давайте посмотрим на это на примере: мне грустно, я не изучаю НЛП.

  • Получите сумму положительных частот = 8

  • Получите сумму отрицательных частот = 11

  • Следовательно, в этом примере твит можно представить так:

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

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

Есть несколько общих шагов, которые мы бы сделали, чтобы очистить текст.

A. Предварительная обработка: стоп-слова и знаки препинания

Удалите все слова, которые не добавляют существенного значения твитам, например, стоп-слова и знаки препинания. На практике мы сравнивали бы наш твит с двумя списками — стоп-слов и знаков препинания. Обычно эти списки намного больше.

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

B. Предварительная обработка: дескрипторы и URL-адреса

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

C. Предварительная обработка: выделение корня и нижний регистр

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

После этого наш твит будет предварительно обработан в список слов [tun, great, ai, model]. Ниже мы можем увидеть, как мы убрали дескрипторы, токенизировали их в слова, удалили стоп-слова, выполнили поиск корней и преобразовали все в нижний регистр.

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

  • Удалите дескрипторы и URL-адреса
  • Разбить строку на слова.
  • Удалите стоп-слова, такие как «and, is, a, on и т. д.».
  • Вывод или преобразование каждого слова в его основу. Как танцор, танцующий, танцевавший, становится «танцем». Вы можете использовать стеммер портера, чтобы позаботиться об этом.
  • Преобразовать все слова в нижний регистр.

7. Собираем все вместе

Предварительно мы обсудим

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

В этом разделе мы обобщаем их и собираем вместе.

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

На практике нам пришлось бы выполнять этот процесс на наборе m твитов.

В конце у нас будет матрица X с m строками и тремя столбцами, где каждая строка будет содержать функции для каждого из твитов.

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

Первоначально опубликовано на https://github.com.