Классификация обзоров 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
), которые могут быть предложениями, абзацами или даже целыми документами.
Шаг 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 для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.