Почему важен анализ настроений?

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

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

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

Обучение модели

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

Мы будем использовать набор данных epinions.com, который можно скачать здесь. Это .csv файл, содержащий обзоры продуктов с ярлыками.

Начнем с кода.

Начнем с импорта необходимых библиотек:

Мы импортируем re, библиотеку регулярных выражений, которая предоставляет операции сопоставления, упрощающие обработку текстовых данных. Функции библиотеки nltk импортируются для форматирования текста в соответствии с нашими требованиями, а sklearn предлагает необходимые инструменты машинного обучения.

Библиотека coremltools помогает нам преобразовать модель sklearn в модель Core ML.

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

import nltk
nltk.download()

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

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

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

Для нашей модели мы используем следующую функцию для выбора функции:

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

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

Последний цикл for сохраняет каждое слово в словаре «слова».

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

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

После векторизации функции мы извлекаем особенности каждого предложения во фрейме данных и сохраняем их в «x».

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

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

В машинном обучении нам необходимо выполнить последовательность преобразований наших данных перед фактическим обучением модели. Конвейер Scikit-learn дает нам единый интерфейс для всех шагов преобразования и итоговой оценки. Он инкапсулирует все преобразователи и предикторы внутри.

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

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

Мы создадим словарь, содержащий имя параметра (String) в качестве ключа и список настроек параметров в качестве значения.

Затем мы определяем переменную как GridSearchCV с 5 параметрами:

  1. clf - наша оценка.
  2. params - это созданная нами param_grid.
  3. cv определяет стратегию перекрестной проверки. В нашем случае cv=10 указывает количество складок в KFold.
  4. verbose контролирует многословие. Чем выше значение, тем больше сообщений.
  5. n_jobs определяет количество заданий, которые будут выполняться параллельно.

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

В конце мы сохраняем модель с лучшим результатом в переменной, используя best_estimator_ функцию GridSearchCV.

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

У нас есть готовая модель, но теперь нам нужно преобразовать ее в модель Core ML, прежде чем мы сможем использовать ее в нашем приложении. Мы делаем это с помощью coremltools.

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

Вот и все! Были сделаны. После запуска этого кода у вас будет собственная модель анализа настроений Core ML, готовая к реализации в вашем приложении для iOS.

Если вы хотите узнать, как реализовать модель Core ML в своем приложении, ознакомьтесь с официальной документацией:



Если вы столкнетесь с какой-либо проблемой при обучении или внедрении своей модели, сообщите мне!

Обсудите этот пост в Hacker News

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

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

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.