О чём эта работа
Ты обучаешь программу отличать положительный отзыв от отрицательного. Метод опирается на частоты слов. Классификатор считает, насколько типично каждое слово для каждого класса, и складывает эти свидетельства. Слово «наивный» в названии означает допущение, что слова встречаются независимо друг от друга. Допущение заведомо неверное, но на практике метод всё равно работает, и объяснение этого парадокса становится сильной частью защиты.
Из каких частей собрать проект
- Корпус. Нужен размеченный набор русских рецензий с оценками. Опиши, откуда он взят, сколько в нём текстов и как отзывы отнесены к классам. Если размечаешь сам, зафиксируй правило, например оценка выше семи это положительный класс, ниже четырёх отрицательный, середина исключается.
- Подготовка текста. Приведение к нижнему регистру, удаление знаков препинания, разбиение на слова. Отдельно реши судьбу частицы «не», потому что для тональности она важна. Формы «не понравилось» и «понравилось» должны различаться, поэтому частицу часто приклеивают к следующему слову.
- Обучение. Посчитай частоты слов по классам и вероятности. Обязательно опиши сглаживание, когда к каждому счётчику добавляется единица, иначе одно незнакомое слово обнуляет всё произведение. Работай с логарифмами вероятностей, чтобы числа не исчезали в ноль.
- Оценка качества. Раздели корпус на обучающую и тестовую части, лучше в нескольких разных разбиениях. Посчитай точность, полноту и их среднее гармоническое по каждому классу, а не только общую долю правильных ответов.
- Разбор ошибок. Выпиши десяток неверно классифицированных отзывов и объясни каждый. Обычно это ирония, сравнение с другим фильмом и отзывы, где хвалят актёров и ругают сюжет. Этот раздел ценится выше, чем лишняя доля процента точности.
Что оценит преподаватель
Первым делом спросят про базовый уровень. С чем ты сравниваешь свои проценты. Если в корпусе поровну классов, случайное угадывание даёт около половины, и всякая точность должна сопоставляться с этим числом. Второй вопрос про понимание формулы. Будь готов объяснить, откуда берётся произведение вероятностей и зачем нужны логарифмы. Третье это честность оценки. Одно разбиение на обучение и тест даёт случайное число, несколько разбиений со средним значением выглядят убедительно.
Где брать материал
Теорию бери в учебниках по обработке естественного языка и машинному обучению, там наивный байесовский классификатор разобран с выводом формул. Открытые корпуса русских отзывов существуют, ищи их в репозиториях учебных наборов данных и в материалах научных конференций по компьютерной лингвистике. Если собираешь сам, обязательно проверь условия использования сайта, откуда берёшь тексты.
Типичная ошибка в этой теме
Самая частая ошибка численная. Вероятности перемножаются, произведение сотни маленьких чисел обращается в ноль, и классификатор начинает выдавать один и тот же класс. Лечится переходом к сумме логарифмов. Вторая ошибка методическая. Точность считают одной цифрой по всему корпусу, хотя при перекосе классов она обманчива. Корпус из девяноста процентов положительных отзывов даёт девяносто процентов точности программе, которая всегда отвечает «положительный».
С чего начать в первый день
Возьми двести отзывов, посчитай двадцать самых частых слов в каждом классе и выпиши их рядом в две колонки. Ты сразу увидишь, работает ли идея вообще, потому что списки должны заметно различаться. Заодно станет понятно, какие служебные слова стоит выбросить.
Частые вопросы
Сколько отзывов нужно для обучения
Несколько тысяч дают устойчивый результат, но заметное качество появляется уже на нескольких сотнях. Размер корпуса обязательно укажи рядом с цифрами качества.
Нужно ли приводить слова к начальной форме
Для русского это обычно помогает, потому что падежные формы дробят частоты. Сделай оба варианта и приведи сравнение, это готовый раздел работы.
Можно ли взять готовую библиотеку
Можно, но тогда собственная реализация тоже нужна хотя бы в простом виде, иначе проект превращается в вызов одной функции. Сравнение своей и библиотечной версии выглядит хорошо.