Впровадження пунктуації та капіталізації в розпізнаному тексті

Ви отримуєте транскрипцію зустрічі — суцільний потік слів без крапок і великих літер. Читати неможливо, автоматичний аналіз (сумаризація, пошук ключових фраз) дає сміття. Клієнти скаржаться, менеджери витрачають години на ручне форматування. Кожна годинна транскрипція потребує 2–3 годин ручної корек

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Ви отримуєте транскрипцію зустрічі — суцільний потік слів без крапок і великих літер. Читати неможливо, автоматичний аналіз (сумаризація, пошук ключових фраз) дає сміття. Клієнти скаржаться, менеджери витрачають години на ручне форматування. Кожна годинна транскрипція потребує 2–3 годин ручної корекції, що обходиться в $20–30. На одному проєкті транскрибація судових засідань перетворилася на кашу: відсутність крапки змінювала сенс свідчень, адвокати витрачали дні на вичитування. Ми вирішуємо це завдання за кілька годин — підключаємо постобробку пунктуації на базі Transformer-моделей (механізм self-attention та CRF-шари). У нас 5+ років досвіду в NLP та над 20 впроваджених рішень для розпізнавання мовлення. Автоматична пунктуація знижує витрати на виправлення однієї транскрипції до $5–8, а економія часу сягає 70%. Гарантуємо підвищення F1 на 5–10% на вашому домені; якщо F1 нижче 85%, донавчаємо модель безкоштовно.

Чому стандартні STT-движки не ставлять розділові знаки?

Speech-to-text моделі (Whisper, Google STT, Azure Speech) оптимізовані під Word Error Rate. Розділові знаки та капіталізація тексту — другорядна ціль, часто вимкнена за замовчуванням для економії ресурсів. Навіть якщо вбудована пунктуація є, її якість на російській нестабільна (F1 80–85%). Для юридичних, медичних або фінансових транскриптів цього недостатньо — помилки в комах змінюють сенс. Наприклад, у фразі "казнити не можна помилувати" розстановка коми критична, а модель може її пропустити. Вбудована пунктуація Whisper дає F1 85%, але на специфічних доменах падає до 78%. deepmultilingualpunctuation працює в 3 рази швидше на GPU (50 мс на токен проти 150 мс) і при цьому точніший на 3–5%.

Як ми обираємо модель для пунктуації?

Вибір залежить від домену та вимог до latency. Для загальних новин достатньо Whisper large-v3 з F1 85%. У специфічних областях, таких як медицина чи юриспруденція, точність падає до 78–80%. Тут ми рекомендуємо fine-tuned моделі. Fine-tuned ruBERT на 5–10% точніший за Whisper у цих доменах (F1 89–91%). Для задач з низькою latency використовуємо deepmultilingualpunctuation з INT8 quantization — 50 мс на токен.

Як ми відновлюємо пунктуацію та капіталізацію тексту в транскриптах?

Використовуємо два підходи — залежно від движка та вимог до latency. Вбудовані механізми (якщо якість влаштовує)

# Whisper — пунктуація включена за замовчуванням segments, _ = model.transcribe(audio, language="ru") # Google STT config = speech.RecognitionConfig(enable_automatic_punctuation=True) 

Постобробка (STT постобробка) на transformer-моделях (рекомендовано)

Зауважимо: коли вбудована пунктуація не дотягує, підіймаємо окремий сервіс. Беремо Whisper без пунктуації, виводимо текст в один рядок і відправляємо в спеціалізовану модель. Наприклад, deepmultilingualpunctuation (модель kredor/punctuate-all) показує F1 88% на російській, що на 3% вище вбудованої пунктуації Whisper. Для відновлення пунктуації також використовуємо fine-tuning пунктуації на ваших даних.

from transformers import pipeline punctuator = pipeline( "token-classification", model="kredor/punctuate-all", aggregation_strategy="simple" ) def add_punctuation(text: str) -> str: result = punctuator(text) output = "" for token in result: word = token["word"] label = token["entity_group"] output += word if label == "COMMA": output += "," elif label == "PERIOD": output += "." elif label == "QUESTION": output += "?" output += " " return output.strip() 

Пайплайн обробляє 1000 токенів за ~200 мс на GPU. Для прискорення використовуємо INT8 quantization — latency падає до 50 мс без втрати якості.

Модель Підтримка RU F1 (крапка/кома) Context window Latency (GPU)
Whisper large-v3 вбудована 85% до 30 сек аудіо
deepmultilingualpunctuation так 88% 512 токенів 200 мс
ruBERT fine-tuned так 92% 256 токенів 300 мс
mT5-small fine-tuned так 90% 512 токенів 350 мс

Що дає fine-tuning під ваш домен?

Якщо ваші транскрипції містять специфічну термінологію (медицина, юриспруденція, технічна документація), fine-tuning на корпусі з 10 000+ речень підвищує F1 до 92% і вище. Ми використовуємо ruBERT або mT5, донавчаємо на ваших даних із розміткою. Це дозволяє моделі точніше розставляти розділові знаки та капіталізацію, знижуючи кількість правок на 30–40%. Вартість такого проєкту — від $1.4k–1.9k, термін — 2–3 тижні.

Порівняння якості на різних доменах

Для вибору моделі ми тестуємо на ваших даних. Нижче типові значення F1 на різних доменах (наші вимірювання):

Модель Загальні новини Медицина Юриспруденція
Whisper large-v3 85% 78% 80%
deepmultilingualpunctuation 88% 82% 84%
ruBERT fine-tuned 92% 89% 91%
mT5 fine-tuned 90% 87% 88%

Метрики та оцінка якості: використовуємо F1-score для кожного розділового знаку та accuracy для капіталізації. Детальний звіт — після прогону на вашій розміченій вибірці (зазвичай 1000 речень).

Покрокова інтеграція постобробки (деталі)

  1. Аналіз поточного STT-пайплайну, збір датасету (мінімум 1000 речень із розміткою).
  2. Вибір baseline моделі — тестуємо Whisper, deepmultilingualpunctuation, ruBERT на ваших даних.
  3. Написання сервісу на FastAPI з ендпоінтом /punctuate, gRPC опціонально. Підтримка кількох моделей одночасно.
  4. Інтеграція в CI/CD: Docker-образ, helm-чарт для Kubernetes, моніторинг latency p99.
  5. A/B тест на 10 000 транскрипцій, порівняння метрик (F1, CER).
  6. Документація Swagger, воркшоп для команди.

Що входить у роботу

Ми не просто підключаємо модель. В рамках впровадження:

  • Аналіз вашого STT-пайплайну, замір якості на розміченій вибірці (1000 речень).
  • Вибір моделі — порівнюємо Whisper vs post-processing на ваших даних.
  • Інтеграція — код на Python (FastAPI або gRPC), ендпоінт /punctuate, документація Swagger.
  • Тестування — A/B тест на 10 000 транскрипцій, звіт за метриками (F1, CER).
  • Деплой — Docker-образ, helm-чарт для Kubernetes, налаштування моніторингу (latency p99, throughput).
  • Навчання команди — воркшоп 2 години, письмова інструкція.
  • Підтримка 1 місяць — інциденти, консультації.

Терміни та як почати

Типовий проєкт — від 5 днів до 3 тижнів, залежно від вимог до кастомного fine-tuning. Оцінка за вашим сценарієм безкоштовно та займає 1 день. Замовте безкоштовний пілот на ваших даних — ми протестуємо три моделі та надамо звіт із F1-метриками. Отримайте консультацію нашого NLP-інженера — покажемо на реальному прикладі, як пунктуація підвищує якість downstream-задач (сумаризація, пошук, діалогові системи).