Тема 6 из 6

Определитель тона отзывов

Соберём всё вместе в программу, которая разбирает сотни отзывов: подготавливает тексты, прогоняет их через модель пачками и печатает понятный отчёт.

Подготовка

def clean(reviews, max_chars):
    result = []
    for text in reviews:
        text = " ".join(text.split())          # лишние пробелы, табуляции, переводы строк
        if not text:
            continue                           # пустые отзывы модели не нужны
        if len(text) > max_chars:
            text = text[:max_chars] + "…"     # очень длинные — обрезать
        result.append(text)
    return result

Токенизатор и сам обрежет слишком длинный текст (truncation=True), но лишний мусор лучше убрать заранее.

Пачками

results = []
for start in range(0, len(texts), batch_size):
    results += classify(texts[start:start + batch_size])

Модель считает пакет из 16 отзывов почти так же быстро, как один. Порядок ответов совпадает с порядком текстов. Сам pipeline тоже умеет пачки: classify(texts, batch_size=16).

Отчёт

Сводка по классам, отдельная строка для неуверенных ответов и примеры — самый негативный отзыв, самые частые темы. Так человек быстро видит картину и может проверить сомнительные случаи.

Модели ошибаются

  • сарказм и ирония («просто супер, третий раз ломается») сбивают модели с толку;
  • модель, обученная на английских отзывах, плохо понимает русские — выбирайте модель под язык и тему (на Hub есть модели для русских отзывов);
  • модели перенимают перекосы данных, на которых их учили.

Поэтому показывайте уверенность, ставьте порог и оставляйте человеку последнее слово в важных решениях.

Что дальше

  • дообучение (Trainer, datasets) — подстроить готовую модель под свои отзывы, имея несколько тысяч размеченных примеров;
  • видеокарта: pipeline(…, device=0) — в десятки раз быстрее;
  • большие языковые модели через API — когда нужно не только определить тон, но и объяснить, что не так.

Итог

  • подготовка: сжать пробелы, убрать пустые, обрезать длинные;
  • пачки: range(0, len(texts), batch_size), порядок сохраняется;
  • отчёт с порогом уверенности и примерами;
  • модели ошибаются — нужен порог и проверка человеком.