Давайте рассмотрим пример анализа настроений в обзорах IMDB. Наши данные были собраны исследователями из Стэнфорда, и их можно найти здесь в CSV-файле.

У нас есть 50 000 отзывов о фильмах, и каждый отзыв имеет классификацию «положительный» или «отрицательный». У нас нет нулей, поэтому нам не нужен простой импутер. Однако у нас есть 418 дубликатов в столбце «обзор». Мы удаляем их, и у нас остается 49 582 строки и 2 столбца.

Давайте посмотрим на колонку обзора без какой-либо очистки. С самого начала я вижу, что текстовые данные нужно будет немного обработать. Мы должны удалить знаки препинания и цифры и перевести весь текст в нижний регистр. В противном случае наша модель выучит какую-то комбинацию символов, не имеющую никакого значения. Это облако слов иллюстрирует мою точку зрения. Чаще всего встречается слово «br». Это бесполезно.

Прежде чем мы двинемся дальше, давайте разобьем наши данные на 75 / 25. Таким образом, мы избежим утечки данных и сможем приступить к определению функции для обработки всех этих изменений. Мы прописываем текст в нижнем регистре, удаляем знаки препинания и ненужные символы и останавливаем такие слова, как «the» и «of», потому что они бесполезны. Затем мы токенизируем наши данные. Токенизация — это метод разделения строки на более мелкие части, называемые токенами. Здесь токенами могут быть слова, символы или подслова. Когда мы выполняем токенизацию корпуса, мы получаем токены. Мы используем следующие токены для создания словаря. Наш словарный запас представляет собой набор уникальных токенов в тексте. Мы строим наш словарь, рассматривая каждую уникальную лексему в тексте и рассматривая первые k часто встречающихся слов. Это повышает производительность нашей модели обработки естественного языка.

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

Теперь, когда мы очистили и токенизировали наши текстовые данные, мы можем преобразовать их в векторы Term Frequency-Inverse Document Frequency. TF-IDF представляет собой комбинацию двух показателей: TF и ​​IDF. Мы используем TF-IDF, когда у нас есть несколько документов. Почему? Потому что уникальные слова содержат больше информации о содержании документа, чем слова, многократно используемые во всех документах. Например, если бы мы рассматривали каждый обзор в наших данных как отдельный документ, просмотр того, сколько раз используется слово «фильм» или «фильм», не даст много информации об этом обзоре. Тем не менее, количество раз, когда используется «tour de force», может служить хорошим сигналом о том, что обзор, вероятно, положительный.

Затем мы подгоняем и преобразовываем векторизатор tf-idf в X_train и преобразуем X_test, а также маркируем encode y_train и y_test, чтобы «положительный» теперь был равен 1, а «отрицательный» — 0. Затем мы запускаем фиктивную модель. Наш манекен может предсказать, был ли отзыв положительным или отрицательным, с точностью 50%. Ужасный.

Наконец, мы запускаем пару моделей и выполняем поиск по сетке, чтобы найти лучший показатель точности и параметры модели. Эврика, нашей лучшей моделью был Ridge, и он может предсказать, был ли отзыв положительным или отрицательным, с точностью 90%.