Классификация обзоров IMBD на устройстве в Swift

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

Источник

Представьте, что вы только что запустили новую рекламную кампанию или новый продукт, как в новом фильме Диснея «Король Лев», и хотите иметь четкое представление о том, что люди думают о фильме. В этом может помочь обработка естественного языка (NLP) и, в частности, задача анализа настроений (SA). Проще говоря, это метод, который позволяет быстро определить, положительно или отрицательно отзываются люди о данной теме - в данном случае это фильмы.

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

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

Вот 5 шагов, которые нам нужно сделать, чтобы получить достойный результат в приложении для iOS:

А вот как будет выглядеть окончательный результат:

Шаг 1: создайте приложение с одним представлением

Для начала нам нужно создать проект iOS с приложением с одним представлением:

Создать контроллер представления

Нам нужен только один контроллер представления:

  • ViewController ():

Здесь мы установим наш UICollectionView со всеми отзывами IMDB и покажем, является ли обзор положительным или отрицательным.

Создать навигацию

  • MainTabBarController ():

Это наша основная навигация, в которой мы создадим полную структуру навигации для нашего приложения.

Навигация в iOS довольно проста и проста в реализации. Здесь я изменил некоторые вещи, например шрифт для панели навигации и т. Д., Чтобы он выглядел красиво.

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

Чтобы воспользоваться этим методом, вам нужно удалить main.storyboard и настроить файл AppDelegate.swift следующим образом:

Обязательно удалите раскадровку «Main» из информации о развертывании.

Шаг 2. Установите pp a UICollectionView - ViewController.swift

Создать и настроить макет коллекции

Сначала создайте экземпляр объекта UICollectionView и объекта cellId:

Затем настройте макет и добавьте делегатов:

Еще нам нужен CollectionViewCell. Я создал собственный, который вы можете найти в этом репозитории GitHub.

Заполнить представление коллекции

Нам нужна модель для размещения нашего текста и прогноза, поэтому для простоты я создал struct под названием «Модель»:

Нам также необходимо создать массив Models, который будет использоваться для заполнения UICollectionView:

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

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

Добавить новый текст:

Нам нужно настроить tabBar и добавить rightBarButtonItem со знаком «плюс», который позволит нашим пользователям добавлять текст и предсказывать настроение.

Эта кнопка также должна вызывать UIAlertController с TextField:

Как видите, rightBarButtonItem нужна цель:

Шаг 3. Обучите модель

Есть два способа обучить нашу модель. Первый - через Xcode, а второй - через специальный скрипт Python (с использованием пакета turicreate). Самая важная часть здесь - получить файл .mlmodel, который может быть проанализирован и понят Xcode. Мы можем воспользоваться тем, как Xcode использует файл .mlmodel, чтобы получить уверенность, и использовать его для обновления нашей Коллекции с соответствующим прогнозом.

Я решил сделать это только с Swift, а это значит, что я буду использовать CreateML библиотеку, которая поддерживает некоторые интересные алгоритмы машинного обучения.

Набор данных:

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

У меня были проблемы с файлом .CSV, но когда я преобразовал его в файл .JSON, все заработало отлично. Похоже, что когда у вас большой и не такой чистый набор данных, класс MLTextClassifier испытывает трудности с его синтаксическим анализом. (Файл .JSON находится в репозитории GitHub как imdb.json ).

Давайте начнем:

Откройте игровую площадку и напишите этот код:

Самая важная строка здесь - это MLTextClassifier, где мы в основном берем MLDataTable, который содержит все проанализированные данные файла JSON, и преобразуем его в таблицу столбцов, где каждая строка представляет объект - в данном случае IMDB Review.

MLTextClassifier учится связывать метки (столбец: Sentiment) с характеристиками вводимого текста (столбец: SentimentText), которые могут быть предложениями, абзацами или даже целыми документами.

Apple

Шаг 4: Протестируйте модель

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

Я бы посоветовал получать настоящие комментарии IMDB с 50% -ным разделением комментариев ниже 5 звезд и 50% более 5 звезд.

Чтобы протестировать вашу модель, используйте приведенный ниже код:

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

Теперь, когда у нас есть модель - и, в частности, файл .mlmodel - мы можем перетащить ее в наш проект, а Xcode сделает все остальное (проанализирует файл и т. Д.).

Шаг 5. Интегрируйте модель в приложение

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

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

Вот и все! Вот что вы должны увидеть, когда закончите этот проект.

Это довольно простое приложение для полудня в выходные, но если вы хотите выйти за рамки этого, вам нужно будет создать собственную модель, которая будет соответствовать конкретным потребностям, с помощью Turi Create, или вы даже можете создать модель с помощью PyTorch и преобразуйте его в файл .mlmodel.

В заключение я хотел бы отметить, что с помощью очень небольшого количества строк кода мы можем получить что-то приличное и идеально пригодное для использования (для некоторых контекстов), только используя Swift.

Спасибо за прочтение. Если у вас есть какие-либо вопросы, напишите мне по адресу [email protected].

Этот проект доступен для загрузки из моей учетной записи GitHub:



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

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

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