Ao vivo 18/11 · Turma 318 nov às 19:00 MSK — aula prática gratuita de agentes de IA · Turma 3 ao vivo começa 23/11Aula 18/11 →Turma 3 (23/11)
LançamentoAnálise · No radarHabr AI→ original

Tesseract retreinado lê texto mansi: erros de caracteres caem de 18,5% para 0,85%

O Instituto de Pesquisa de Tecnologias da Informação de Ugra retreinou o Tesseract 5 no idioma mansi. O modelo russo base confundia letras com mácron e errava 18,5% dos caracteres. Em vez de anotar digitalizações manualmente, a equipe gerou 1,3 milhão de linhas sinteticamente, e os erros caíram para 0,85%. O modelo está aberto no Hugging Face.

Processado por IA de Habr AI; editado por Hamidun News
Tesseract retreinado lê texto mansi: erros de caracteres caem de 18,5% para 0,85%
Fonte: Habr AI. Colagem: Hamidun News.
Ouvir artigo
Ficha técnica e números-chave
ParâmetroDados
Fonte originalHabr AI ↗
Editor-chefe
Dado-chave #1A normalização Unicode NFC elimina os diferentes códigos de uma mesma letra
Dado-chave #21,3 milhão de pares sintéticos com dezenas de fontes em vez de digitalizações
Dado-chave #3Aprendizado por transferência a partir de rus.traineddata via tesstrain

Imagine que você precisa digitalizar milhares de páginas em um idioma sem OCR pronto nem digitalizações anotadas. Foi exatamente isso que os pesquisadores do Instituto de Pesquisa de Tecnologias da Informação de Ugra enfrentaram ao montar um corpus do idioma mansi. A solução deles se mostrou surpreendentemente simples e, ao mesmo tempo, muito eficaz: a proporção de caracteres errados caiu de 18,5% para 0,85%, ou seja, cerca de 20 vezes.

Qual era o problema

A escrita mansi baseia-se no cirílico, mas contém vogais longas com mácron (а̄, о̄, ӯ, э̄, ы̄) e a letra ӈ. O modelo russo padrão do Tesseract não conhece esses símbolos. Ele perde o traço sobre a letra ou o transforma em lixo. E a duração da vogal em mansi muda o significado da palavra, então perder o mácron é perder informação.

Na linha «Хӯл тэ̄нутыг ва̄рнэ ма̄гыс», o modelo russo produziu «Хул тэнутыг варнэ магьгсь»: os mácrons sumiram e o «ы» virou «ьг». O modelo retreinado leu a linha inteira sem nenhum erro.

Há ainda um segundo problema, menos evidente. A mesma letra em Unicode pode ser escrita de maneiras diferentes: como um único caractere pré-composto ou como «у» mais um mácron combinante. Para uma pessoa são idênticas; para o modelo e para a comparação de strings, são sequências diferentes. Basta abrir o console do Python: o comprimento de dois «ӯ» visualmente iguais será 1 e 2, e a comparação retornará False.

Como os dados foram reunidos sem digitalizações

Não existem digitalizações mansi prontas no volume necessário, e anotá-las manualmente levaria anos. Por isso a equipe gerou os dados por conta própria: pega texto mansi real, desenha-o em uma imagem com diferentes fontes, e a resposta correta é conhecida de antemão.

O pipeline tem quatro etapas:

  • Todos os textos são normalizados para a forma Unicode NFC, de modo que cada letra tenha exatamente uma representação.
  • As linhas são renderizadas com várias dezenas de fontes, incluindo FreeSerif, DejaVu Sans, Arial e Times New Roman, nos tamanhos 12, 14, 24 e 26 pt e em três estilos.
  • Cada caractere é marcado com uma caixa delimitadora. O cálculo automático a partir das métricas da fonte erra nos diacríticos, por isso os autores introduziram três dicionários de correções: para caracteres individuais, para o tamanho da fonte e para uma fonte específica. Os valores foram ajustados experimentalmente.
  • O texto longo é cortado pela função split_by_width para que nenhum caractere ultrapasse a borda da imagem.

O resultado foram 1,3 milhão de pares «imagem .tif + arquivo .gt.txt com a resposta correta».

Como o Tesseract foi retreinado

A terceira parte da receita é o aprendizado por transferência. Dentro do Tesseract 5 funciona uma CRNN: a parte convolucional encontra traços e linhas, a LSTM lê as características da esquerda para a direita, e a função de perda CTC dispensa a anotação manual dos limites das letras. Como ponto de partida foi usado rus.traineddata do tessdata_best. O alfabeto mansi quase coincide com o russo, então o modelo precisa aprender principalmente as letras novas.

A ferramenta tesstrain extrai sozinha a parte LSTM com os pesos, reúne a lista completa de caracteres dos dados de treinamento e expande a camada de saída para o alfabeto combinado. O parâmetro-chave foi o número de iterações: poucas e as letras novas não são aprendidas; muitas e o modelo sofre sobreajuste aos dados sintéticos. A parada antecipada pelo conjunto de validação ajudou.

Resultado nas métricas: o CER caiu de 18,5% para 0,85%, e o WER de 42,1% para 1%. À pessoa resta revisar o resultado, e não digitar o texto de novo.

Limitações e conclusão prática

O modelo lê com segurança texto tipográfico limpo em corpo de 12–26 pt. Tem desempenho pior com letra muito pequena ou muito grande, com alfabeto latino e com edições antigas de impressão desgastada. Os autores planejam incluir digitalizações reais de arquivo no treinamento. Vale notar também que a avaliação foi feita nas mesmas condições sintéticas, portanto em livros reais os números provavelmente serão piores.

Para o profissional, o útil é a própria receita. Se você trabalha com um idioma ou domínio com poucos dados anotados:

  • Primeiro normalize o Unicode; é uma medida barata e muitas vezes subestimada.
  • Gere dados sintéticos a partir de textos reais com variedade de fontes.
  • Retreine um modelo existente em vez de treinar do zero.

Os autores acreditam que a mesma abordagem servirá para o khanty, o nenets e outros idiomas cirílicos com diacríticos. O modelo mns.traineddata está no Hugging Face (URIIT/mns-tesseract): basta colocar o arquivo na pasta tessdata e indicar o idioma mns. Também é possível testar no navegador no Etnoportal.

História

Perguntas frequentes sobre a notícia

O que se sabe sobre Qual era o problema?

A escrita mansi baseia-se no cirílico, mas contém vogais longas com mácron (а̄, о̄, ӯ, э̄, ы̄) e a letra ӈ. O modelo russo padrão do Tesseract não conhece esses símbolos. Ele perde o traço sobre a letra ou o transforma em lixo. E a duração da vogal em mansi muda o significado da palavra, então perder o mácron é perder informação. Na linha «Хӯл тэ̄нутыг ва̄рнэ ма̄гыс», o modelo russo produziu «Хул тэнутыг варнэ магьгсь»: os mácrons sumiram e o «ы» virou «ьг». O modelo retreinado leu a linha inteira sem nenhum erro.

Como os dados foram reunidos sem digitalizações?

Não existem digitalizações mansi prontas no volume necessário, e anotá-las manualmente levaria anos. Por isso a equipe gerou os dados por conta própria: pega texto mansi real, desenha-o em uma imagem com diferentes fontes, e a resposta correta é conhecida de antemão. O pipeline tem quatro etapas: Todos os textos são normalizados para a forma Unicode NFC, de modo que cada letra tenha exatamente uma representação.

Como o Tesseract foi retreinado?

A terceira parte da receita é o aprendizado por transferência. Dentro do Tesseract 5 funciona uma CRNN: a parte convolucional encontra traços e linhas, a LSTM lê as características da esquerda para a direita, e a função de perda CTC dispensa a anotação manual dos limites das letras. Como ponto de partida foi usado rus.traineddata do tessdata_best. O alfabeto mansi quase coincide com o russo, então o modelo precisa aprender principalmente as letras novas.

ZK
Zhemal Khamidun — CPO da Alpina Digital, gerente de produto do AlpinaGPT. Cria produtos de IA desde 2019. O Hamidun News é um projeto pessoal que virou um agregador em produção com mais de 6.000 leitores.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
O que você acha?
Carregando comentários…