Привет, Хабр. Меня зовут Аделина Ямалтдинова, я разработчик технологического сервиса «Классификатор» — одной из частей платформы «Преферентум».

Как вы могли догадаться из названия, сервис нужен для классификации неструктурированной информации — документов, заявок, звонков и т. д. Он применяется для маршрутизации обращений на горячую линию, сортировки входящих документов в СЭД, тематической классификации, выявления негативных отзывов, определения типа и контроля комплектности документации и т. п. Таким образом, «Классификатор» упрощает переход компаний к интеллектуальной автоматизации различных бизнес‑процессов, обогащая используемые системы ИИ.

В статье я расскажу об устройстве нашего «Классификатора» и о том, как мы его улучшаем.

Логика работы «Классификатора»

Сразу оговорюсь — «Классификатор» ориентирован на простых пользователей, то есть на бизнес‑заказчиков, у которых есть данные из систем, но нет ни навыков, ни времени разбираться с разработкой (например, на том же Питоне). Сервис поддерживает простые и наглядные алгоритмы классификации, работает мгновенно, не требует мощного железа, а главное — обеспечивает объяснимость получаемого результата: любой пользователь может понять, почему классификация прошла именно так, а не иначе.

Решение вышеперечисленных задач по классификации требует предварительного обучения системы (у нас она называется CLASS, написана на C#.NET). Информация о рубриках и вся статистика хранится в индексе, представляющем собой множество файлов проприетарного формата в директории локального компьютера. Для обучения «Классификатора» ему на вход подается некоторое количество текстов с указанием их рубрики. Система вносит соответствующую информацию в индекс, при этом сами обучающие материалы не сохраняются.

Чтобы повышать эффективность работы сервиса, настройки весов, которые определялись при автоматическом машинном обучении, можно «подкручивать» руками. Помимо этого, ИИ постоянно обучается, гибко адаптируясь к изменениям, например к реорганизации структуры компании.

Схемы до/после внедрения в Service Desk
Схемы до/после внедрения в Service Desk

Обучение классификатора

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

Во время обучения внутри системы происходит следующее:

  1. Предварительная обработка данных:

    • Токенизация: каждый текст разбивается на слова (токены).

    • Очистка: удаляются стоп‑слова (частицы, союзы, предлоги и т. д.), а оставшиеся — приводятся к нормальной форме.

  2. Составление термов и биграмм:

    • Термы — это отдельные слова в тексте.

    • Биграммы — это пары последовательных слов.

Для каждой рубрики создается список термов и биграмм.

  1. Создание признакового пространства: для каждой рубрики формируется вектор признаков (он же «словарь»), где каждый элемент соответствует частоте появления определенного терма или биграммы в этой рубрике.

Обучение. Общая схема формирования словаря
Обучение. Общая схема формирования словаря
В тексте трижды встречается слово «космический» — это позволяет сделать вывод, что оно наиболее определяющее для рубрики «Космос»
В тексте трижды встречается слово «космический» — это позволяет сделать вывод, что оно наиболее определяющее для рубрики «Космос»

Обучение состоит в том, что внешняя система вызывает функцию ADD(rubric, text) нужное количество раз, при этом на вход подается указание рубрики (если такой еще нет, то она будет добавлена) и неструктурированный текст.

Таблица параметров обучения
Таблица параметров обучения

Настройка

Настройка относится к взаимодействию системы с обученной моделью. Как только мы выбираем папку, где будет храниться наш индекс, перед нами открывается большая таблица с различными настройками классификации. Они играют ключевую роль в достижении точных результатов, так как позволяют гибко корректировать параметры работы индекса, при этом не влияя на обученную модель. Например, параметр «Процент определения 1-й рубрики» может отправить на ручную классификацию текст, у которого ранг второй рубрики больше, чем указанный процент от ранга первой рубрики. Это необходимо, когда классификация «неуверенная» и стоит задача такие случаи передавать на классификацию реальному человеку. Для каждой обучающей выборки требуется индивидуальный подход к настройке параметров.

Таблица настроек классификации
Таблица настроек классификации

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

Мэджик для клиента — собственно классификация

Для каждого текста, который поступает на вход, вычисляются коэффициенты связи найденных термов/биграмм из словаря, полученного на этапе обучения. Так происходит для каждой рубрики. Полученные коэффициенты составляют ранг рубрики. Рубрика с наивысшим рангом считается самой вероятной для текста.

Классификация производится функцией CLASSIFY(text), которая для входного текста возвращает ранжированный список пар [rank, rubric].

Мэджик‑эффект на примере реального кейса. Крупный российский банк внедрил «Классификатор» для автоматического распределения обращений пользователей в корпоративном Service Desk. Это решение помогло банку поддерживать высокий уровень обслуживания без увеличения штата сотрудников технической поддержки даже во время перехода на новую автоматизированную банковскую систему (тогда количество обращений резко выросло). Система эффективно обрабатывает запросы клиентов и маршрутизирует их с точностью на уровне 93–95%, обеспечивая при этом время отклика менее одной секунды. Чтобы подключить классификатор, банку понадобилось 15 минут.

Как мы улучшили сервис

Мы стремимся сделать процесс настройки классификатора более интуитивным и доступным для всех пользователей, независимо от их уровня опыта в машинном обучении.

Обучение и настройка

Новая версия — «Классификатор 2.0» — анализирует обучающие выборки и автоматически предлагает оптимальные параметры, экономя время и усилия.

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

Раньше. Подбор оптимальных параметров выглядел следующим образом:

  1. Создать индекс.

  2. Обучить классификатор.

  3. Проверить качество на тестовой выборке.

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

  5. Изменить настройки загрузки.

  6. Обучить классификатор.

  7. Проверить качество на тестовой выборке.

  8. Повторить пункты 4–7 до удовлетворительного результата.

Теперь. Были выбраны три влияющих на качество классификации параметра загрузки, а также автоматизирован процесс подбора. Мы создаем временный индекс и обучаем его на выборке так же, как это делал бы человек. Затем прогоняем на тестовой выборке, вновь имитируя действия человека. Затем сохраняем результаты. Всего получается 8 циклов — на больших выборках может потребоваться длительное время, но пользователю при этом не нужно контролировать процесс, поэтому он может оставить программу и заниматься своими делами.

Подробнее про выбранные параметры.

При создании индекса по умолчанию параметры имеют значения:

«Термы — именные группы» = False (при True в качестве термов используются именные группы, иначе — просто слова).

«Использовать дериваты для термов» = False (при True слово приводится к нормальной дериватной форме).

«Морфоконтроль биграмм» = True (при True не все рядом стоящие термы образуют биграмму).

В части настройки. Также вместе с параметрами загрузки подбирается наилучшее соотношение термов к биграммам. Это соотношение учитывается при определении рубрики, его можно объяснить как «что будет более значимым при проведении классификации: словосочетания или отдельные слова?»

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

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

Результат автоподбора обучения и настройки
Результат автоподбора обучения и настройки

Как видно из таблицы сверху, подбор предлагает поменять настройку «Использовать дериваты для термов» на True и изменить соотношение термов к биграммам до 10, показывая, что качество классификации на выбранной тестовой выборке будет 87,6%. Качество при настройках по умолчанию было 85,8% (не сделала скриншот результатов, полученных после прогона тестовой выборки с настройками по умолчанию, поэтому вам придется поверить на слово=) ).

Поиск дублей в обучающей выборке

В «Классификатор 2.0» мы добавили проверку обучающей выборки на наличие повторяющихся текстов. Эта функция помогает выявить и игнорировать дубликаты, что улучшает качество обучения модели и делает классификацию более точной.

Для обучения классификатору нужны разнообразные тексты, чтобы он мог понять, какие слова могут встречаться в рубрике. Дубликаты могут вредить:

  1. Если повторный текст загружен в одну и ту же рубрику, он укрепит значимость уже загруженных слов, а не обучится чему‑то новому. Это не очень хорошо, но не смертельно.

  2. Гораздо большая проблема — одинаковые тексты в разных рубриках. Если в «Космос» попадает «Спорт», то классификатор будет работать некорректно.

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

Двухуровневая классификация

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

Иногда бывают рубрики, которые часто путаются между собой, например, если соотношение текстов в обучающей выборке неравномерно (например, загрузили 100 текстов: 40 из них относится к рубрике «Космос», 40 — к «Спорту», остальные — к «Медицине» и «Театру»).

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

Результат проверки точности до создания второго уровня классификации
Результат проверки точности до создания второго уровня классификации

Как видно, рубрика «Документ о полномочиях» определилась верно только в 62% текстов. Создадим второй классификатор для рубрик «Документ о полномочиях» и «Прочие документы» (точность определения 96%) и заново запустим проверку качества на тестовой выборке:

Результат проверки точности до создания второго уровня классификации
Результат проверки точности классификации после создания второго уровня классификации. «Документ о полномочиях» — 92% (было 62%), «Прочие документы» — 98% (было 96%)
Результат проверки точности классификации после создания второго уровня классификации. «Документ о полномочиях» — 92% (было 62%), «Прочие документы» — 98% (было 96%)
Конечная точность классификации всех документов после внедрения второго классификатора

Тема классификации обширна, на Хабре уже есть множество интересных статей как по теории, так и по реализации. Поэтому предполагаю, что многие из вас сталкивались с подобными сервисами. В данном материале я постаралась дать общее представление о логике работы нашего «Классификатора» и рассказать об улучшениях, которые мы сделали, опираясь на запросы конечных пользователей. Буду рада узнать о вашем опыте создания таких сервисов или взаимодействия с ними.

Комментарии (0)