Почему важен анализ настроений?
Анализ тональности стал горячей темой в области обработки естественного языка и машинного обучения. Анализ настроений - это процесс изучения текста на предмет мнений и чувств. Существует бесчисленное количество реальных примеров использования анализа настроений, которые включают в себя понимание того, как потребители относятся к продукту или услуге, поиск признаков депрессии или определение реакции людей на определенные рекламные и политические кампании.
Приложения анализа настроений обширны и мощны. Анализ настроений можно использовать, чтобы дать предприятиям ценную информацию о том, как люди относятся к их бренду. Применительно к каналам социальных сетей анализ настроений может дать представление о том, что люди думают об определенной теме или рекламе.
Это также очень важный инструмент в области психического здоровья, который можно использовать для выявления признаков депрессии или тревоги у человека и информирования членов семьи.
Обучение модели
В этой статье мы будем обучать модель машинного обучения с помощью конвейера обучения 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 параметрами:
clf
- наша оценка.params
- это созданная нами param_grid.cv
определяет стратегию перекрестной проверки. В нашем случаеcv=10
указывает количество складок в KFold.verbose
контролирует многословие. Чем выше значение, тем больше сообщений.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 для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.