Домашний проект

Пишем сервис классификации текстов

Страничка курса: https://maxcom.github.io/scala-course-2022/

  • Проект до конца курса
  • Каждую неделю новая часть
    (возможно будут исключения)
  • Срок сдачи первой части - 6 апреля

Классификатор - алгоритм, относящий входные данные к одному из предопределенных классов.

Разработаем классификатор, определяющий, является ли короткий текст позитивным, негативным или нейтральным.

К концу курса проект будет:
  • Классицировать тексты с учетом морфологии и с предварительной очисткой от "мусора"
  • Предоставлять web-интерфейс просмотра и диагностики
  • Загружать тексты из источника через REST API
    (источник Twitter, VK, telegram?)
  • Отслеживать новые тексты в источнике

Первая задача - сам классификатор

На старте программы обучим классификатор на готовых текстах с оценками.

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

Реализуем наивный байесовский классификатор

  • Один из наиболее часто используемых
  • Прост в реализации и отладке
  • Я нашел хорошее описание с примером на Scala
    и тестовыми данными.

Денис Баженов: Наивный байесовский классификатор

В статье есть:

  • Описание в применении к текстам
  • Описание как запрограммировать
  • Пример рассчета - подойдет для тестов
  • Пример реализации на Scala (2.8!)

Для обучения классификатора используем готовый корпус:

Корпус коротких текстов для настройки классификатора

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

Что делаем:

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

В примере реализации есть проблемы с производительностью!

Классификатор должен работать быстро,
максимум секунды.

Решение в репозитории scala-2022-classifier

Как и ранее - ветка work + merge request

Напоминаю: