Словарь тональности из прошлого урока считает слова по спискам «хороших» и «плохих». Но язык хитрее: «не советую» — из хороших слов, а смысл плохой; «дорого, но стоит того» — оба лагеря сразу. Машинное обучение решает это иначе: не мы задаём слова, а модель сама выучивает, какие сочетания слов о чём говорят, — на примерах, которые мы разметили.
Идея та же, что у словаря, но перевёрнутая. В словарном подходе мы пишем правила заранее. В ML мы даём модели обучающую выборку — тексты, где ответ уже известен (например, 500 отзывов, каждый вручную помечен «позитив/негатив»), и модель сама находит закономерности.
Конвейер такой: (1) векторизация — текст превращается в числа; простейший способ — «мешок слов» (bag of words): для каждого текста считаем, сколько раз встретилось каждое слово; (2) обучающая и тестовая выборки — делим размеченные данные на две части: на одной учим, на другой проверяем. Модель нельзя проверять на тех же текстах, на которых она училась, — она их «запомнит», а не поймёт; (3) обучение — модель (например, наивный Байес или логистическая регрессия) находит, какие слова тянут к какому классу; (4) проверка — прогоняем на отложенной выборке и смотрим долю верных ответов (accuracy); (5) применение — обученная модель размечает новые тексты, которых никто не видел. Ключевое отличие от словаря: модель учитывает сочетания и частоты слов, а не просто их наличие, и её можно обучить на любую задачу — не только тональность, но и тему, спам, язык вражды. Цена — нужна размеченная выборка, и качество модели не выше качества разметки.
800 обращений в поддержку, размечены на «жалоба / вопрос / благодарность». Обучили модель на 600, проверили на 200 — 88% верных. Теперь новые обращения сортируются автоматически: жалобы сразу к старшему оператору. Словарь так не смог бы: «спасибо, что хоть что-то работает» по словам позитив, а по смыслу жалоба — модель, обученная на живых примерах, это различает.
Модель уже видит 10 размеченных отзывов (позитив/негатив). Нажми «Обучить и проверить» — она выучит, какие слова к какому классу тянут, покажет точность на отложенных примерах и разберёт твой текст.
Цель: проверь и позитивный, и негативный текст — увидь, что модель различает оба класса.
Когда брать ML вместо словаря: когда важны нюансы (сарказм, отрицание, смешанные оценки) и есть кому разметить хотя бы несколько сотен примеров. Когда достаточно словаря: быстрая прикидка, нет размеченных данных, нужна полная прозрачность правил. Главная ловушка ML — качество разметки: если размечали небрежно или предвзято, модель выучит эту предвзятость. И всегда проверяй на отложенной выборке: точность на обучающих данных врёт, потому что модель их помнит.
Почему модель нельзя проверять на тех же текстах, на которых она обучалась?