Эфир 18.11 · Поток 318 ноября в 19:00 МСК — бесплатный практический эфир по ИИ-агентам · Живой Поток 3 стартует 23.11Эфир 18 ноября →Поток 3 (23.11)
РелизРазбор · На радарHabr AI→ оригинал

Дообученный Tesseract читает мансийский текст: ошибки символов упали с 18,5% до 0,85%

Югорский НИИ информационных технологий дообучил Tesseract 5 на мансийском языке. Базовая русская модель путала буквы с макроном и ошибалась в 18,5% символов. Вместо ручной разметки сканов команда сгенерировала 1,3 млн строк синтетикой, и ошибки упали до 0,85%. Модель открыта на Hugging Face.

AI-обработка оригинала Habr AI; редакция Hamidun News
Дообученный Tesseract читает мансийский текст: ошибки символов упали с 18,5% до 0,85%
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Ключевой факт #1Нормализация Unicode NFC убирает разные коды одной буквы
Ключевой факт #21,3 млн синтетических пар из десятков шрифтов вместо сканов
Ключевой факт #3Трансферное обучение с rus.traineddata через tesstrain

Представьте, что вам нужно оцифровать тысячи страниц на языке, для которого нет ни готового OCR, ни размеченных сканов. Именно с этим столкнулись исследователи из Югорского НИИ информационных технологий, когда собирали корпус мансийского языка. Их решение оказалось на удивление приземлённым и при этом очень эффективным: доля ошибочных символов упала с 18,5% до 0,85%, то есть примерно в 20 раз.

В чём была проблема

Мансийская письменность построена на кириллице, но содержит долгие гласные с макроном (а̄, о̄, ӯ, э̄, ы̄) и букву ӈ. Стандартная русская модель Tesseract этих символов не знает. Она теряет черту над буквой или превращает её в мусор. А долгота гласной в мансийском меняет смысл слова, так что потеря макрона это потеря информации.

На примере строки «Хӯл тэ̄нутыг ва̄рнэ ма̄гыс» русская модель выдала «Хул тэнутыг варнэ магьгсь»: макроны пропали, а «ы» превратилась в «ьг». Дообученная модель прочитала всю строку без единой ошибки.

Есть и вторая, менее заметная проблема. Одну и ту же букву в Unicode можно записать по-разному: как один готовый символ или как «у» плюс комбинируемый макрон. Для человека они одинаковы, для модели и для сравнения строк это разные последовательности. Достаточно открыть консоль Python: длина двух визуально одинаковых «ӯ» окажется 1 и 2, а сравнение вернёт False.

Как собрали данные без сканов

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

Пайплайн состоит из четырёх шагов:

  • Все тексты нормализуются по форме Unicode NFC, чтобы у каждой буквы было ровно одно представление.
  • Строки рендерятся несколькими десятками гарнитур, включая FreeSerif, DejaVu Sans, Arial и Times New Roman, в размерах 12, 14, 24 и 26 pt и в трёх начертаниях.
  • Каждый символ размечается рамкой. Автоматический расчёт по метрикам шрифта ошибается на диакритике, поэтому авторы ввели три словаря поправок: для отдельных символов, для кегля и для конкретной гарнитуры. Значения подбирали экспериментально.
  • Длинный текст режется функцией split_by_width, чтобы ни один символ не вылезал за край картинки.

На выходе получилось 1,3 млн пар «картинка .tif + файл .gt.txt с правильным ответом».

Как дообучали Tesseract

Третья часть рецепта это трансферное обучение. Внутри Tesseract 5 работает CRNN: свёрточная часть находит штрихи и черты, LSTM читает признаки слева направо, а функция потерь CTC избавляет от ручной разметки границ букв. В качестве старта взяли rus.traineddata из tessdata_best. Мансийский алфавит почти совпадает с русским, поэтому модели нужно выучить в основном новые буквы.

Инструмент tesstrain сам достаёт LSTM-часть с весами, собирает полный список символов из обучающих данных и расширяет выходной слой под объединённый алфавит. Ключевым параметром оказалось число итераций: мало и новые буквы не усвоятся, много и модель переобучится на синтетике. Помогла ранняя остановка по валидационной выборке.

Итог по метрикам: CER снизился с 18,5% до 0,85%, а WER с 42,1% до 1%. Человеку остаётся вычитывать результат, а не набирать текст заново.

Ограничения и практический вывод

Модель уверенно читает чистый типографский текст кеглем 12–26 pt. Хуже она работает с очень мелким или крупным шрифтом, с латиницей и со старыми изданиями со стёртой печатью. Авторы планируют добавить в обучение реальные архивные сканы. Заметим и то, что оценка сделана на тех же синтетических условиях, поэтому на реальных книгах цифры, скорее всего, будут хуже.

Для практика полезен сам рецепт. Если вы работаете с языком или доменом, где мало размеченных данных:

  • Сначала нормализуйте Unicode, это дешёвая и часто недооценённая мера.
  • Генерируйте синтетику из реальных текстов с разнообразием шрифтов.
  • Доучивайте готовую модель, а не обучайте с нуля.

Авторы считают, что тот же подход подойдёт для хантыйского, ненецкого и других кириллических языков с диакритикой. Модель mns.traineddata лежит на Hugging Face (URIIT/mns-tesseract): достаточно положить файл в папку tessdata и указать язык mns. Попробовать можно и в браузере на Этнопортале.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: в чём была проблема?

Мансийская письменность построена на кириллице, но содержит долгие гласные с макроном (а̄, о̄, ӯ, э̄, ы̄) и букву ӈ. Стандартная русская модель Tesseract этих символов не знает. Она теряет черту над буквой или превращает её в мусор. А долгота гласной в мансийском меняет смысл слова, так что потеря макрона это потеря информации. На примере строки «Хӯл тэ̄нутыг ва̄рнэ ма̄гыс» русская модель выдала «Хул тэнутыг варнэ магьгсь»: макроны пропали, а «ы» превратилась в «ьг».

Что известно по теме: как собрали данные без сканов?

Готовых мансийских сканов нужного объёма не существует, а размечать их вручную пришлось бы годами. Поэтому команда сгенерировала данные сама: берёт настоящий мансийский текст, рисует его на картинке разными шрифтами, и правильный ответ известен заранее. Пайплайн состоит из четырёх шагов: Все тексты нормализуются по форме Unicode NFC, чтобы у каждой буквы было ровно одно представление.

Что известно по теме: как дообучали Tesseract?

Третья часть рецепта это трансферное обучение. Внутри Tesseract 5 работает CRNN: свёрточная часть находит штрихи и черты, LSTM читает признаки слева направо, а функция потерь CTC избавляет от ручной разметки границ букв. В качестве старта взяли rus.traineddata из tessdata_best. Мансийский алфавит почти совпадает с русским, поэтому модели нужно выучить в основном новые буквы.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Единое AI-пространство · Nomad

Протестируйте новые LLM и мультимодальные модели в одном окне

Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.

Открыть Nomad AI →Автономный Nomad Agent
Что вы думаете?
Загружаем комментарии…