Intent classifier без лишних затрат: как разгрузить службу поддержки клиентов и помочь ей быстрее отвечать на запросы

Intent classifier без лишних затрат: как разгрузить службу поддержки клиентов и помочь ей быстрее отвечать на запросы

Представьте: клиент, который получил бракованный товар, обращается в чат горячей линии и мгновенно получает сообщение том, как он может вернуть товар и получить компенсацию. Если речь о крупной компании, то такие быстрые и качественные ответы невозможны без использования классификатора намерений (Intent classifier). В статье я покажу, как без собственного датасета сделать классификатор намерений пользователя для службы поддержки в сфере e-commerce.

И более того, я расскажу, как у меня получилось сделать классификатор для русского языка без датасета на русском языке. Меня зовут Елизавета Колмакова, я Data Scientist компании 1221Systems, которая разрабатывает айти-решения для крупного ритейла.

Intent (интент) — это цель поискового запроса пользователя, та задача, которую он формулирует в своем обращении.

Intent classifier (классификатор намерений) — это модель, которая способна определить, с какой проблемой или целью обратился пользователь в службу поддержки и отнести ее к той или иной выделенной категории.

Есть классический подход к решению такой задачи: когда мы говорим про систему определения интентов в NLP (Natural Language Processing, обработка естественного языка), классический подход предполагает наличие размеченного датасета (большого тренировочного массива данных) и использование популярных архитектур для классификации интентов, таких как BERT. Например, сообщение пользователя "Как вернуть товар?" будет помечено как намерение "Возврат товара". Далее такой датасет используется для обучения модели, которая способна выявлять интенты в тексте.

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

Классический подход включает в себя три элемента:

1. Архитектура

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

2. Данные

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

3. Метрики

Для оценки качества классификатора используются метрики (F1-score на тестовом наборе данных), что позволяет определить точность и полноту классификации и дает более полную картину о производительности модели.

Однако, если у нас нет собственных размеченных данных, классический подход на практике применить не получится. В моем случае данные не были собраны для этой задачи: в распоряжении была лишь небольшая история сообщений без разметки, а создание собственного датасета - это долго (сбор данных по различным интентам займет несколько месяцев) и дорого (нужна настройка системы разметки для каждого обращения, то есть много человеко-часов работы).

Для MVP (Minimum Value Product - продукт с минимально работающим функционалам, достаточный для отражения сути продукта) мне нужно было обойтись меньшими затратами, и я приступила к поиску открытого русскоязычного датасета для службы поддержки в ритейле, и в итоге обнаружила, что подходящих датасетов нет.

Решение, основанное на принципах активного обучения

В этот же момент я начала думать над архитектурой другого решения, основанного на принципах активного обучения (Active learning). Одно из применений такого подхода, называемого few-shot learning, предполагает использование большой языковой модели, например, ChatGPT, для определения интентов. В таком подходе значительно упрощается вопрос датасета, так как нам не нужно иметь полный набор примеров для каждого из намерений, необходимо иметь лишь парочку примеров наших кастомные интентов.

Тогда промпт выглядел бы так:

"Как вернуть товар? (Варианты интентов: Возврат товара, Обмен товара, Уточнение условий возврата)"

Затем можно разработать API запрос к модели Chat GPT, который будет передавать такие промпты и запрашивать модель определить интент на основе предложенных вариантов. Существенный недостаток данного подхода - его ненадежность и растущие расходы на токены при каждой генерации запроса.

Чтобы обойти это ограничение и повысить надежность моего решения, я пришла к тому, что мне необходимо использовать мультиязычный encoder — модель, способную обрабатывать текст на нескольких языках. Это позволяет расширить область поиска данных для классификации интентов до просто "датасет интентов для ритейла" и дает доступ к пробе классического подхода, так как вопрос датасета решился тем, что мультиязычный энкодер даст необходимые знания классификатору, независимо от языка.

Для оптимизации было решено использовать обычную полносвязанную двухслойную нейронку – количество интентов и простота их определения позволили это сделать.

  • Архитектура - использование полносвязанной двухслойной нейронки.

  • Данные - размеченный набор намерений с 300 примерами на каждый интент.

  • Метрика для проверки - f1-score на тестовом наборе данных, что обеспечивает надежное оценивание производительности модели.

Для начала, я выбрала вот этот датасет, содержащий 27 различных интентов. Распределение интентов в этом датасете следующее:

Intent classifier без лишних затрат: как разгрузить службу поддержки клиентов и помочь ей быстрее отвечать на запросы

Далее я решила использовать мультиязычный энкодер LaBSE для перевода текстовых данных в векторный формат. LaBSE - это модель, которая обучена на множестве языках и способна выполнять эффективное переводное кодирование текстов на разных языках.

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

Intent classifier без лишних затрат: как разгрузить службу поддержки клиентов и помочь ей быстрее отвечать на запросы

Особенности такого подхода в том, что здесь падает f1-score в сравнении с использованием датасета на английском языке. Мультиязычные модели могут быть менее точными в работе с русским текстом, чем с английским из-за неравномерного распределения данных и особенностей языка. Поэтому я сравнила успехи разных мультиязычных энкодеров:

  • LaBSE (Language Agnostic BERT Sentence Embedding): Универсальный мультиязычный энкодер, который обучается на текстах на разных языках.

  • mBERT (Multilingual BERT): Мультиязычная версия BERT, которая предназначена для работы с текстами на разных языках.

  • XLM-R (Cross-lingual Language Model - RoBERTa): Мультиязычная модель, основанная на архитектуре RoBERTa и способная работать с множеством языков.

  • mT5 (Multilingual T5): Мультиязычная версия T5 (Text-to-Text Transfer Transformer), которая может обрабатывать тексты на разных языках.XLM (Cross-lingual Language Model): Модель, разработанная Facebook AI Research (FAIR), способная выполнять перевод и обработку текста на нескольких языках.

  • XLM (Cross-lingual Language Model): Модель, разработанная Facebook AI Research (FAIR), способная выполнять перевод и обработку текста на нескольких языках.

Таблица сравнение метрик для этих разных энкодеров

Intent classifier без лишних затрат: как разгрузить службу поддержки клиентов и помочь ей быстрее отвечать на запросы

Обратите внимание на интересную динамику: mBERT оказалась самой слабой, однако лучше случайного выбора (1/27 или 0.03), не сильно лучше была mT5. Самой успешной оказалась LaBSE.

Вывод

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

Но следует помнить, что такая система не надежна для использования в больших продуктах: чем больше сдвиг в областях знаний у данных (а сдвиг между реальными переписками и датасетом есть), тем хуже будет работать классификатор.

55
4 комментария

У вас прикольно получилось! Еще интересная статья на тему ботов https://vc.ru/services/1033411-besplatnyy-konstruktor-chat-botov

Ответить

Комментарий недоступен

Ответить

Здравствуйте! Совсем не хотели вас огорчить. Мы делаем все возможное, чтобы усовершенствовать нашего виртуального помощника и сделать обслуживание максимально комфортным. Например, на данный момент помощник при звонке на 0500 может отвечать на большинство самых основных вопросов.

Звонки от нас могут поступать по разным причинам, одна из которых - сообщить вам о новом персональном предложении. Если вы не желаете их получать, напишите нам в личные сообщения здесь на VC. Будем рады помочь!

Ответить

Комментарий недоступен

Ответить