Языковые модели в проде

На что люди на самом деле жаловались

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

feedback-language-modelsсдано
Работодатель
Тинькофф Банк
Период
2020-2023
Стек
Python, Language models, Text classification, Annotation pipeline, Model evaluation

Проблема

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

Что построено

Продуктом руководил я: на мне были постановка задачи, набор меток, нужных именно бизнесу, и то, что уходило в прод. Сложной оказалась не модель, а таксономия. Метка имеет право на жизнь только тогда, когда независимые разметчики выбирают её одинаково и кто-то дальше по цепочке может по ней что-то сделать, поэтому мы мерили расхождение между разметчиками и выбрасывали или дробили каждую метку, из-за которой они спорили. Классы плыли вслед за продуктами и формулировками, значит приходилось переразмечать под этот дрейф, а не делать вид, что первая таксономия навсегда. Главным было последнее решение: какие случаи модель закрывает сама, а какие обязана отдать человеку.

Результат

Объём жалоб по категориям стал числом, на которое менеджер может смотреть и с которым может спорить, вместо цитаты, выдернутой из выборки, и спор пережили только те метки, по которым действительно принимали решения. Шёл 2020 год, то есть это были языковые модели того поколения, та же трансформерная линия, которую сегодня называют LLM. Линия тянется прямо в сегодняшнюю работу: модели я квантую сам, стенды замеров пишу сам и запускаю всё локально, а не арендую чужой API.

PythonLanguage modelsText classificationAnnotation pipelineModel evaluation
Все проекты