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

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

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

Предпосылки

Настройка данных

Мы будем использовать набор данных Spotify App Reviews on Google Play, который общедоступен в Kaggle.

Изучите наш набор данных

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

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

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

Выполняем стемминг с помощью стеммера из библиотеки NLTK (Natural Language Toolkit).

Извлечение и построение функций из самых распространенных слов
Это все еще много слов. Один из способов справиться с этим — взять самые распространенные слова и построить из них функции.

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

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

Построение нашего представления признаков в виде набора слов
Теперь, когда у нас есть словарь общеупотребительных слов, мы можем построить вектор признаков, подсчитав, как часто каждое из этих слов появляется в каждом обзоре. Это называется **представлением объекта в виде набора слов**. Это приводит к 1000-мерному вектору признаков (1001, если мы включаем смещение).

Создать набор обучающих данных

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

  • Перемешать записи
  • Define X — матрица признаков
  • Определите y — результаты
  • Выполнить регрессию методом наименьших квадратов

Модель поезда

Давайте обучим нашу исходную модель. В этом случае мы используем метод наименьших квадратов из линейной алгебры Numpy numpy.linalg.lstsq:

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

Поскольку наша функция многомерна, наша модель будет:

  • Примечание. Последняя тета-оценка предназначена для смещения

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

  • 10 самых негативных и 9 самых позитивных слов

Сделать прогноз

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

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

Оцените производительность модели

Мы сделали прогнозы, теперь как мы оцениваем наши регрессоры? Мы можем сделать это, рассчитав среднеквадратичную ошибку (MSE) и балла. Тогда какие они?

  • MSE – это среднее значение квадратов ошибок. Ошибка относится к отклонению прогнозируемого значения от фактического значения наблюдения. Чем ближе MSE к 0, тем лучше модель.

  • FVU, или «Необъяснимая доля дисперсии») нормализуют MSE на основе дисперсии данных. FVU можно рассчитать как MSE, деленное на дисперсию меток.

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

Теперь мы можем рассчитать MSE и R² для модели.

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

Оптимизация модели регрессии с использованием регуляризатора

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

Класс «Ridge» из sklearn реализует модель регрессии методом наименьших квадратов (как в нашем примере выше), которая включает регуляризатор. Сила регуляризатора регулируется параметром alpha. В противном случае подгонка модели гребневой регрессии точно такая же, как подгонка обычной модели наименьших квадратов! Вот вызов метода, который мы используем:

model = linear_model.Ridge(1.0, fit_intercept=False)

  • Обратите внимание на два дополнительных параметра: первый — сила регуляризации (alpha). Второй указывает, что мы не хотим, чтобы модель соответствовала перехвату (поскольку наш вектор признаков уже включает его).

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

Предскажем рейтинг того же выборочного обзора.

Кажется, оценка осталась такой же, как у предыдущей модели с номером alpha=1.0.

Следующий шаг, давайте построим прогнозный конвейер из него, чтобы мы могли итерировать модель в набор alpha значений в Части 2 здесь.