Реалізація класифікації тексту: від TF-IDF до LLM

Ручний розбір потоку звернень не масштабується: листи накопичуються, пріоритети губляться, а рішення ухвалюються навмання. Ми розробляємо класифікацію тексту під ключ — від розмітки прикладів до передачі навченої моделі та регламентів вашій команді. У результаті типові звернення розподіляються автоматично, а час на обробку скорочується в рази.
Часті запитання

Класифікація тексту: чому ручний розбір не масштабується

Потік звернень зростає швидше, ніж команда встигає його розбирати. Ручний розбір звернень впирається у пропускну здатність людей: один оператор за зміну обробляє обмежену кількість листів, і як тільки потік перевищує норму, черга обробки заявок зростає швидше, ніж її розчищають. Затримка накопичується — нерозібране чекає, до нього додаються нагадування та повторні листи.

Ціна затримки — не лише час відповіді на звернення. Поки черга коротша за зміну, пауза майже непомітна; коли вона перевалює за добу, частина звернень перетворюється на «клієнт пішов, не дочекавшись».

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

Далі страждає аналітика: накопичені розбіжності в мітках ламають зведені звіти, і рішення приймаються за шумними даними — тема здається непопулярною, хоча попит просто розмазався по сусідніх категоріях.

Класифікація тексту закриває най дорожчу сходинку — маршрутизацію: модель відносить звернення до категорії, віддає оцінку впевненості та передає людині лише спірні випадки.

Нижче розбираємо, як це закривається на практиці: від статистичних моделей на кшталт TF-IDF до мовних, чим вони відрізняються, як вимірюється якість і як нова сходинка вбудовується в поточну чергу обробки заявок без зупинки підтримки.

Де автоматичний розбір звернень дає вимірюваний ефект

Частка автоматично розібраних звернень — базова метрика, і рахувати її потрібно за зверненнями, закритими без участі людини, а не за кількістю відповідей моделі.

На типовому потоці — заявки, питання щодо замовлення, скарги, запити документів — класифікація тексту впевнено закриває від половини до трьох чвертей, решта усвідомлено йде оператору.

Швидкість сортування потоку змінюється помітніше, ніж здається: раніше звернення чекало оператора в загальній черзі, у пікові години — до наступної зміни.

Тепер маршрутизація заявок відбувається в момент надходження: тема, терміновість, мова та адресат визначаються відразу, а очікування вимірюється хвилинами, а не змінами.

Зниження ручної обробки — наслідок того, що оператор перестає бути сортувальником і працює лише зі складними випадками. Якщо впевненість моделі нижче порогу, звернення йде людині з позначкою та причиною рішення, а не у випадковий відділ чи в загальну чергу.

Найцінніше тут — зниклий клас помилок, а не швидкість. Це заявки, які добами лежали нерозібраними, дублі від одного клієнта, звернення не тому адресату й занижений пріоритет у термінових. Такий клас закривається правилом обробки, а не пильністю конкретного співробітника.

Перевірюваність ефекту закладається до старту автоматичного розбору: беремо історичний потік, розмічаємо вибірку й дивимося, яка частка розбирається без людини і на чому модель помиляється.

Якщо потік малий або однотипний, помітної частки автоматичних рішень не буде — це теж чесний результат розбору, і його краще отримати до початку робіт.

Порівняння підходів: правила, навчання на прикладах, готові моделі

Вибір підходу визначається трьома параметрами, які зазвичай не промовляють на старті: скільки класів потрібно розрізняти, скільки розмічених прикладів є в наявності й наскільки «живі» формулювання приходять у вхідних даних.

На формальному словнику виграють правила, на стійкій тематиці — навчання на розмічених прикладах, на довгому хвості класів і потоці нових формулювань — готова мовна модель. Нижче порівняння з обмеженнями, які виявляються в експлуатації, а не в демонстраціях.

Варіант Коли підходить Обмеження
Правила та словники Класи описуються формальними ознаками: реквізити, маркери, шаблонні звернення Тримаються на ручній підтримці, ламаються на нових формулюваннях, кожна зміна словника — ризик регресу
Навчання на розмічених прикладах (TF-IDF та лінійні моделі) Є 1–2 тис. прикладів на клас, тематика та стиль стабільні Точність на рідкісних класах падає, розмітку доводиться оновлювати при зміні тематики
Готова мовна модель Багато класів, мало розмітки, живі формулювання та запити користувачів Дорожче на обсязі, потрібні контроль якості та явна точка відкату до попередньої версії

Зовнішні вимірювання на відкритих наборах задач обробки тексту, які агрегує Papers with Code, показують: при 1–2 тис. розмічених прикладів на клас розрив між класичними моделями та готовими мовними моделями майже зникає.

Він тримається у двох місцях — рідкісні класи та формулювання, яких не було у вибірці. Тому при експлуатації частіше збирають гібрид: модель на ознаках закриває часті класи як швидкий фільтр, а готова модель підключається там, де впевненість класифікатора нижче порогу.

Впровадження класифікації тексту: етапи від аудиту до передачі

Розмітка та навчання — половина роботи; друга половина — відтворюваний порядок, при якому результат переноситься на нові дані. Нижче — етапи впровадження класифікації тексту в тому вигляді, в якому ми їх проходимо: від аудиту даних до передачі моделі в експлуатацію.

  1. Аудит даних. Вивантажуємо корпус, рахуємо частку дублів, порожніх полів і текстів без корисного навантаження, дивимося розподіл за темами. Фіксуємо, що розмічено, а що доведеться розмічати, і скільки прикладів потрібно добрати до робочого обсягу.
  2. Схема класів. Збираємо таксономію без перетинів: один текст — один клас або кілька, що робити зі змішаними випадками. Спірну вибірку проганяємо через двох розмітників і знімаємо розбіжності правилами, а не усними домовленостями.
  3. Робоча модель і базова лінія. Йдемо від простих частотних моделей до векторних представлень і мовних моделей, нарощуючи складність лише там, де вона дає приріст на відкладеній вибірці. Поріг впевненості підбираємо під ціну помилки.
  4. Налаштування та інтеграція. Описуємо попередню обробку входу, відсікання сміття, версіонування моделі та розмітки, логування передбачень разом із впевненістю — без цього розбір помилок через місяць перетворюється на ворожіння.
  5. Перевірка якості. Рахуємо точність і повноту за кожним класом, розбираємо матрицю помилок і прикордонні приклади. Окремо дивимося поведінку на даних іншого періоду або джерела: так видно, де модель тримається на ознаках часу, а не на сенсі тексту.
  6. Передача в експлуатацію. Віддаємо регламент дообучення, правила відкату на попередню версію, моніторинг частки невпевнених відповідей та інструкції для команди замовника.

Комплект постачання: моделі, схеми та регламенти розмітки

Модель без оточення — це артефакт, який через місяць ніхто не зможе ні перенавчити, ні пояснити. Тому комплект постачання збираємо так, щоб задача класифікації тексту жила без нас: від ваг до правил, за якими розмітники розбирають спірні випадки.

  • Навчена модель і код виклику — ваги, обгортка для інференсу, зафіксовані залежності; піднімається на вашому контурі однією командою, без збірки «за пам'яттю».
  • Схема класів — таксономія з межами між схожими категоріями, прикладами на кожну та списком пар, які плутаються найчастіше.
  • Регламент розмітки — інструкція для анотаторів: розв'язання конфліктів, порядок ескалації спірних випадків, вимоги до узгодженості між розмітниками.
  • Політика доступу до даних — де лежать тексти, хто і на якій підставі їх читає, що маскується перед журналюванням і як влаштований слід звернень.
  • Документація по моделі — метрики якості за кожним класом, а не одне усереднене число; відомі обмеження та ознаки початку деградації.
  • Набір перевірочних прикладів — еталонна вибірка з мітками, на якій проганяється кожна нова версія: просідання видно до викату, а не після скарг.
  • Конфігурації розгортання — описи середовищ, схеми сервісів, ліміти та черги; стенд відтворюється без читання чужого коду та питань до нас.

Усе це передаємо разом із розбором для вашої команди: де змінювати список класів, як додавати приклади і коли пора перенавчати.

Кейс: розбір вхідних звернень до і після впровадження

Вихідна картина

Звернення падали в загальну чергу, а розбір тримався на правилах за ключовими словами: вони впевнено розбирали 42% потоку і розсипалися на перефразуваннях.

Решту вручну сортували оператори — медіана до потрапляння до потрібного спеціаліста становила близько трьох годин, а частка помилкових міток сягала 28%. У пікові дні черга зростала швидше, ніж її встигали розбирати.

Що змінили

З архіву зібрали корпус звернень і зафіксували схему класів, а контрольну вибірку — тисячу звернень — відклали і в навчанні не використовували.

На ній заміряли якість на кожному кроці: спочатку базова модель на частотних ознаках, потім модель на попередньо навченому мовному представленні, поверх — правила для рідкісних і юридично значущих категорій. Розмітку звірили з операторами, щоб мітки збігалися з їхньою картиною світу.

Після впровадження автоматично розбирається 88% звернень, частка помилкових міток — 6%, час сортування скоротився до 12 хвилин. Контрольна вибірка перерозмічається щомісяця: якщо розбіжностей на ній більше 5%, запускається повторне навчання на свіжих даних.

Такий контур показує зсув у мові клієнтів або появу нової категорії до того, як це помітять за скаргами, — логіка оцінки якості розібрана в публікаціях ACL Anthology.

Чим відрізняється власна модель від готової мовної моделі?

Це вибір не «краще чи гірше», а під які дані та яку ціну помилки. Власний класифікатор навчається на вашій розмітці, готова мовна модель розв'язує задачу за інструкцією, без навчання. Різниця проявляється на ваших класах, а не на демонстраційних прикладах.

Власна модель виграє там, де класи вузькі та близькі: «скарга на строки доставки» і «претензія до якості» для загальної моделі майже одне й те саме, а для бізнесу — різні маршрути обробки.

Навчаючись на ваших прикладах, класифікатор проводить межу так, як її провели ви, і на своїх класах дає якість, вимірювану на відкладеній вибірці.

Готова мовна модель потрібна, коли розмічених прикладів немає, а рішення потрібне швидко.

Вона розбирає формулювання, які не зустрічалися в навчанні, і не потребує підготовки корпусу — але на рідкісних рубриках відповідає нестабільно, а якість доводиться перевіряти вибірково: відповідь формується заново на кожному запиті.

Доопрацювання під нові класи теж влаштоване по-різному. Власній моделі додають розмічені приклади й перенавчають — поведінка відтворювана, метрики зіставні від версії до версії.

У готової моделі правлять інструкцію та підбирають вдалі приклади, і після правки не можна гарантувати, що раніше правильні відповіді не поїхали.

На практиці частіше працює зв'язка: готова мовна модель розмічає великий масив тексту, на цій розмітці навчається власний класифікатор, і далі він працює швидко та передбачувано. Критерій вибору один — якість на своїх класах і те, як часто ці класи будуть змінюватися.

Часті технічні питання по проєкту

Розмітка та підтримка моделі визначають, чи окупиться класифікація. Нижче — п'ять питань, які найчастіше звучать на технічних сесіях, з відповідями по суті.

Скільки даних потрібно розмітити для старту?

Для базової моделі за розрідженими ознаками вистачає кількох тисяч прикладів на клас — цього достатньо, щоб закрити 80–90% типових звернень. Нейромережа потребує більшого обсягу, але до неї ми переходимо лише там, де проста модель стабільно помиляється.

Що робити, якщо історичних даних немає?

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

Розмітники трактують категорії по-різному — це проблема?

Це головна стеля якості. До розмітки фіксуємо інструкцію з прикордонними прикладами, потім рахуємо узгодженість між розмітниками, а спірне розбираємо на сесії. Якщо категорію можна прочитати двояко — правимо інструкцію, а не дані.

Як зловити деградацію якості?

Слідкуємо за часткою впевнених передбачень, розподілом класів і часткою звернень, що пішли на ручний розбір. Зміна вхідних текстів — дрейф даних, лікується перенавчанням; просідання метрик при тому ж вході — деградація, і відкат на попередню версію повертає якість.

Як часто потрібно дообучати модель?

За подією, а не за календарем: метрики пішли за поріг або накопичилася партія розмічених виправлень. Кожен цикл дає версію з журналом метрик і можливістю відкату, тому дообучення не стає незворотним.

Обговоримо задачу: що потрібно від вас і коли повернемося з планом

Щоб оцінка була предметною, а не «за відчуттями», нам потрібен мінімум контексту: де класифікація вбудовується в процес, який обсяг текстів через неї проходить і що вважається помилкою. Розмова займає у замовника одну розмову, зате знімає половину уточнень на етапі оцінки.

  • Постановка задачі: який процес обслуговуємо — маршрутизацію звернень, розмітку відгуків, сортування документів — і що саме розв'язує модель.
  • Вихідні дані від замовника: вивантаження текстів за період, бажано з уже проставленими мітками хоча б на частині прикладів.
  • Список категорій і правила їх перетину: що робити, якщо текст підходить до двох одразу.
  • Вимоги до якості: яка частка помилок припустима і яка помилка дорожча — пропуск чи хибне спрацювання.
  • Точка інтеграції: куди повертаємо результат — у систему заявок, сховище документів чи внутрішній сервіс, і в якому вигляді.
  • Обмеження: персональні дані, закритий контур, вимоги до зберігання — вони визначають, які моделі припустимі.

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

Опишіть задачу та додайте, що є за даними, — повернемося з оцінкою та планом робіт.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139