Классификация отзывов о фильмах на тональность (позитивный/негативный), а также прогноз рейтинга для этого отзыва (от 1 до 10).
Задача проекта состояла в построении двух моделей:
1. Предсказания тональности.
2. Предсказания рейтинга отзыва.
А также в построении API, используя Django, которое будет принимать текст отзыва и отправльять ответ с двумя классами. Для решения подобных задач наиболее эффективным и распространенным методом является использование предобученных нейронных сетей. Одной из популярных платформ для работы с такими моделями является Hugging Face.
В качестве решения рекомендуется использовать модели на базе архитектуры BERT, например, distilbert/distilbert-base-uncased. Данная модель, доступная на Hugging Face, является широко используемой и показала себя весьма эффективной. Она подходит для англоязычным текстам и также неплохо себя показывает на небольших вычислительных мощностях.
В ходе работы было проведено дообучение модели анализа тональностей ("fine-tuning"). Процесс обучения завершился успешно, модель обучалась с высокой скоростью. Результатом стало получение Accuracy равной 0.845, при высоких значениях других метрик. Accuracy была выбрана, поскольку в обучающей выборке наблюдался полный баланс классов.
В ходе работы было проведено дообучение модели рейтинга не получилось добиться высокого качества, наилучшим результатом по макроусредненному F1 стало 0.237, F1 было выбрано, поскольку в нашем случае, наблюдался дисбаланс классов для значений рейтинга.
Тестировались различные виды нейросетей. Начиная от одного слоя эмбеддинга, RNN, LSTM, GRU, заканчивая полносвязными нейросетями.
Наилучшее качество на тесте показала простая модель, состоящая из слоя эмбеддинга и выходного слоя. Наилучшее Accuracy для анализа тональностей получилось 0.855, для модели рейтинга F1 = 0.312
В качестве прототипа сервиса была написана простая API, используя Django и DRF. Была описана модель прогноза текста, прописан один view-класс(с возможностью POST – запроса), серилизатор.
В качестве виртуальной машины был выбран yandex cloud. Где была создана виртуальная машина на основе Ubuntu. Проект был развернут на сервере, запущен, установлен gunicorn, nginx, настроен домен (greenatommltest.ddns.net).
API ожидает POST запрос на адрес http://greenatommltest.ddns.net/api/predict/ с передачей текста отзыва в виде JSON. Пример запроса: {"text":"The best film ever, very good, i like it"}. Пример ответа: { "text": "The best film ever, i like it", "predicted_rating": 10, "predicted_tonality": 1 } "predicted_rating": 10 – означает, что модель прогнозирует оценку 10. "predicted_tonality": 1 – означает, что модель прогнозирует позитивную тональность, в противном случае – негативную.
Предобученная модель типа DistilBERT - distilbert/distilbert-base-uncased оказалась неэффективной в нашем случае, модель обучалась значительно дольше, а по качеству была хуже.
- Подготовлены и проанализированы данные.
- Обучены по 2 модели классификации (кастомная и предобученная) для рейтинга и анализа тональностей.
- Создан проект Джанго и сделан API.
- Проект развернут на удаленном сервере.