Задачи 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-моделью.- Генерация медленнее классификации, потому что модель вызывается многократно.