Задачи pipeline: тональность, NER, генерация

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

Задача (task) в pipeline — это строка-идентификатор, которая определяет тип модели и формат входа-выхода, например "ner" или "text-generation".

Анализ тональности

Задача sentiment-analysis определяет эмоциональную окраску текста — позитив, негатив (иногда нейтраль). Применяется для анализа отзывов, комментариев, обращений в поддержку.

clf = pipeline("sentiment-analysis")
print(clf("I love this!"))
# [{'label': 'POSITIVE', 'score': 0.9998}]

Распознавание именованных сущностей (NER)

NER (Named Entity Recognition) находит в тексте имена людей, организации, локации, даты. Это базовая задача NLP — связь с одноимённым курсом прямая.

ner = pipeline("ner", grouped_entities=True)
print(ner("Илон Маск основал SpaceX в США"))
# [{'entity_group': 'PER', 'word': 'Илон Маск'},
#  {'entity_group': 'ORG', 'word': 'SpaceX'},
#  {'entity_group': 'LOC', 'word': 'США'}]

Параметр grouped_entities=True склеивает токены одной сущности в одно слово — иначе «SpaceX» может разбиться на части.

Генерация текста

Задача text-generation продолжает заданный текст. Под капотом — decoder-модель (вроде GPT), которая предсказывает следующее слово раз за разом. Связь с курсом по LLM: это и есть упрощённая суть работы языковых моделей.

gen = pipeline("text-generation", model="gpt2")
print(gen("Машинное обучение это", max_new_tokens=20))

Как работает под капотом

Для классификации модель выдаёт логиты по числу классов, и постобработка выбирает максимальный. Для NER модель размечает каждый токен меткой (это token-classification), а постобработка склеивает соседние токены одной сущности. Для генерации модель работает авторегрессионно: предсказала слово, добавила его ко входу, предсказала следующее — и так до лимита токенов. Поэтому генерация медленнее классификации: модель вызывается много раз.

Частые ошибки

  • Забыть grouped_entities в NER. Получите разрозненные кусочки слов вместо целых сущностей.
  • Генерировать без лимита. Без max_new_tokens текст может получиться очень длинным или зациклиться.
  • Ожидать осмысленности от gpt2 на русском. Маленькие модели на русском работают слабо — берите подходящую.

Итог

  • sentiment-analysis — классификация тональности текста.
  • ner — извлечение сущностей (люди, организации, места); используйте grouped_entities=True.
  • text-generation — авторегрессионное продолжение текста decoder-моделью.
  • Генерация медленнее классификации, потому что модель вызывается многократно.
Проверьте себя
1. Что делает задача NER?
AОпределяет тональность текста
BНаходит именованные сущности: людей, организации, места
CПереводит текст
DСжимает текст
2. Зачем в NER нужен параметр grouped_entities=True?
AЧтобы ускорить модель
BЧтобы склеить токены одной сущности в целое слово
CЧтобы перевести сущности
DЧтобы убрать стоп-слова
3. Почему генерация текста медленнее классификации?
AМодель генерации больше по размеру всегда
BМодель вызывается многократно, предсказывая по одному слову
CИспользуется более медленный токенизатор
DГенерация требует интернета
py
Курс по теме
Пройдите курс «Python с нуля» — по шагам, с проверкой
8 уроков · ~14 ч · теория, упражнения и экзамен с бейджем
Открыть курс →