Создайте модель анализа мнений, встроенную в графический интерфейс.

В век Интернета и социальных сетей реальное мнение людей становится фундаментальным ресурсом в маркетинге и политике.

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

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

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

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

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

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

Перед тем как начать, рекомендую обратить внимание на комментарии к коду.

Скачать набор данных

В этом руководстве мы собираемся использовать набор данных обзоров фильмов IMDB.

Вы можете скачать его из Dropbox.

Создание модели

Вот необходимые вам пакеты Python:

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

В качестве классификатора мы будем использовать SGDClassifier scikit-learn (стохастический градиентный спускаемый классификатор), и мы сериализуем (сохраним) его в файле .pkl.

А теперь давайте код!

Pkl_builder.py

Этот файл создает и сериализует SGDClassifier.

Сначала импортируем необходимые модули и скачиваем stopwords:

Но что такое стоп-слова?

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

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

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

Хорошо, мы близки к завершению создания нашей модели анализа настроений, но перед этим мы должны обучить ее и сохранить в .pkl файле. Обратите внимание, что мы также собираемся сериализовать стоп-слова, которые мы скачали ранее:

Этот код создаст файлы classifier.pkl и stopwords.pkl.

Ваш каталог должен быть таким:

Дерево каталогов

/movieclassifier    
    /pkl_objects        
        classifier.pkl        
        stopwords.pkl    
    pkl_builder.py

Мы создали нашу модель. Давай проверим!

Тестирование нашей модели

На предыдущем шаге мы построили и сериализовали классификатор; теперь мы должны это проверить. Но прежде чем мы это сделаем, мы должны создать векторизатор. Подождите, разве мы его еще не создали?

Да, мы это сделали, но мы создали векторизатор для обучения модели, а не для ее тестирования. К счастью, код очень похож, единственное, что нам нужно сделать, это создать файл vectorizer.py со следующим кодом.

Vectorizer.py

Как видите, этот код идентичен тому, который мы разработали ранее, за исключением того, что он использует файл стоп-слов, который мы создали ранее.

Чтобы протестировать код, вам нужно создать другой файл Python с именем model_test.py и ввести следующий код.

Model_test.py

Здесь мы загрузили файл классификатора и определили нашу функцию классификации, в которой переменная X представляет собой векторизованный документ (документ, преобразованный в анализируемые данные). переменная y - это прогноз, сделанный нашей моделью для полученного обзора.

Затем классифицируется фраза «Мне понравился фильм. Идеально." и печатает прогноз нашей модели и вероятность того, что прогноз верен.

Таким теперь должен быть ваш каталог.

Дерево каталогов

/movieclassifier    
    /pkl_objects       
        classifier.pkl       
        stopwords.pkl    
    pkl_builder.py
    model_test.py    
    vectorizer.py

Попробуй это!

Откройте свой терминал (пользователи UNIX) или командную строку (Windows) и:

  1. Перейдите в каталог /movieclassifier.
  2. Выполните созданный нами ранее скрипт, набрав: python model_test.py.

Оно работает! Потрясающие!

Теперь мы готовы встроить модель в графическое приложение.

Встраивание модели в графическое приложение

Чтобы встроить модель в приложение, мы собираемся использовать пакет Python Kivy, поэтому нам нужно сначала установить его: pip install kivy.

Хорошо, мы можем начать писать код!

App.py (находится в каталоге / movieclassifier) ​​

Сначала мы импортировали необходимые модули. После этого мы загрузили наш классификатор и вставили функцию classify, которую мы определили в model_test.py.

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

Здесь мы только что встроили модель в приложение kivy.

Теперь выполните app.py, и вы увидите волшебство!

Заключение

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

  • Улучшите графику приложения, есть еще кое-что, что нужно улучшить.
  • Применяем модель для других целей. Для этого вам нужно запустить файл pkl_builder.py с другим набором данных. Вместо использования movie_s_a_dataset.csv вы можете использовать dataset.csv, это обучит модель с другим набором данных. Например, новый dataset.csv может быть примерно таким:
review,sentiment
"I really liked this amazon product, the quality is good and the delivery was ok.", 1
"Bad, really bad, when I got the product it was broken.", 0

Очевидно, что для создания достойной работающей модели в наборе данных должно быть не менее 2000 обзоров. Фактически, набор данных, который мы использовали ранее, содержит около 25 000 отзывов.