Como escrever seu próprio transliterador

Formada no centro de CS em 2018, Daria Rodionova , fala sobre transliteração: o que é, quais são as abordagens à transliteração, como criar seu próprio transliterador e como melhorar o modelo.

Transliteração é uma tradução gráfica de uma palavra de um alfabeto para outro, desde que tenhamos uma tabela de correspondência de sinais de um sistema para outro. De fato, o que a transliteração não lembra de um tradutor simplificado? Aqui, os idiomas são alfabetos e o número possível de regras de tradução é simplificado para quatro importantes:

  • Um para um: B → B, R → P, P → P
  • Um para muitos: Y → PRIMEIRO
  • Muitos-para-um: SCH → U, CH → H, YU → U
  • Muitos para muitos: depende do contexto, por exemplo, IE -> IE

Até recentemente, todo o Runet era escrito em latim. Então, nem todos os dispositivos tinham um layout cirílico disponível, mas o ASCII estava na vanguarda - enquanto as codificações ainda não podiam processar cirílico. Como resultado, em vez de uma mensagem em russo, o destinatário recebeu abracadabra.

Há 15 anos, quando o alfabeto cirílico ficou disponível em telefones celulares, as mensagens SMS em latim continuavam sendo recebidas das operadoras móveis. Não vou esconder que decifrei essas mensagens com prazer :) E agora as pessoas geralmente correspondem em letras latinas nos fóruns ou nas salas de bate-papo, porque não há teclado russo à mão.

Por que a transliteração automática é necessária


Geralmente eles falam sobre a transliteração direta de palavras russas no alfabeto latino. Quando você precisar traduzir nomes geográficos ou nomes para documentos estrangeiros, artigos científicos.

Transliteração reversa é a conversão de uma palavra em latim para uma palavra em cirílico. É necessário em muitas áreas; portanto, em cada uma delas, com o tempo, um padrão apareceu. E agora existem vários padrões ao mesmo tempo, segundo os quais as palavras são transliteradas ambiguamente.

Muitas vezes ouvimos nas notícias sobre traduções ridículas e transliterações de nomes geográficos. Por exemplo, a combinação das letras "sch" pode ser a sequência "MF" ou a letra "", como na palavra Schyot. Mesmo nos fóruns, existem diferentes visões sobre como escrever a letra "" em letras latinas. Lá você também pode encontrar a ambiguidade da combinação "ch". Parece que isso é sempre "H"! Não, também é um "X" no final das palavras: geralmente as letras "I / S" vão antes dele. E como você traduzirá "YE" do latim? Em "E" ou em "S"? Mais detalhes podem ser encontrados no artigo "Translit sem regras" .

Descrição Teórica do Transliterador


Este é um transdutor de estado finito, composto por nós, cada um dos quais pode processar o símbolo de entrada e produzir uma saída. Se dermos uma definição formal, o transdutor consiste em 6 componentes (Q, Σ, Γ, I, F, δ), onde:

Q - muitos estados
Σ - alfabeto de entrada
Γ - alfabeto de saída
I é um subconjunto dos estados iniciais de Q
F é um subconjunto de estados finais de Q
δ é a transição de Q ⨉ (Σ ⋃ {e}) para Q ⨉ (Γ ⋃ {e})

No caso geral, o conjunto Q representa vários estados. Escrevemos um em um devido ao número de letras no alfabeto:

  • início, estado 1 ou substituição de um personagem por outro,
  • estado 2 ou substituindo vários caracteres por um,
  • estado 3 ou substituindo um caractere por vários,
  • estado 4 ou substituindo um grupo de caracteres por outro grupo, final.

Lembra-se de quantas regras de tradução definimos no início do artigo? :) Como Σ, o alfabeto latino e uma citação são usados ​​para denotar um sinal flexível, e o conjunto Γ contém o alfabeto de destino - o alfabeto cirílico. O conjunto de estados inicial e final consiste em caracteres alfabéticos ou combinações de caracteres alfabéticos, pois isso pode ocorrer ao codificar as letras H, W, U, Y, Y.

Por enquanto, o transdutor foi utilizado em alguns problemas de PNL, inclusive na análise morfológica de palavras:
imagem

Aqui está outro exemplo de um transdutor simples para um tradutor. O último esquema é mais adequado para o design de transliteração. Uma diferença: em cada estado q, estamos processando não uma palavra, mas seu símbolo.
imagem

Mais sobre transdutores

Bem, tentaremos criar um transliterador que possa analisar dados de entrada de diferentes GOSTs e converter grafias diferentes em um único alfabeto cirílico. Em outras palavras, projetaremos a lógica de transição do transdutor.

Abordagens básicas à transliteração


Existem várias abordagens para a construção de um transliterador, duas das quais são ML e baseadas em regras.

ML - qualquer modelo probabilístico de seq para seq (Markov como base). É baseado no princípio de Viterbi, quando segmentamos simultaneamente a palavra latina e procuramos a sequência mais provável de estados latentes ou combinações cirílicas.

Estados são um número finito de combinações cirílicas. Observações ou sequência de entrada - combinações latinas, transições - entre combinações latinas e cirílicas, emissões (probabilidades de observação após a transição para um novo estado) - a probabilidade da combinação latina em algumas combinações cirílicas.

Além disso, o modelo de transliteração ML pode ser definido como um problema de tradução automática. Assim, por exemplo, você pode treinar um modelo para transcrever palavras em um idioma. Primeiro, você precisa compilar uma tabela de correspondência de sons em letras e, em seguida, treinar nos exemplos da probabilidade de traduzir letras em sons.

Agora não consideraremos o modelo ML, porque não há um conjunto de dados representativo com opções de transliteração em mãos. A coleta de dados é uma tarefa separada. Vamos voltar à transliteração e focar na abordagem baseada em regras . Para fazer isso, precisamos de um dicionário (salva-vidas para qualquer linguista), uma tabela de compatibilidade de letras e uma tabela para transliterar fonemas.

Como isso funciona?


O processo de transliteração mais simples consiste em três etapas:

  • Seguimos a sequência, que deve ser traduzida para o russo.
  • Estamos procurando uma combinação de sons na tabela de transliteração dos fonemas.
  • Se forem encontrados fonemas, transliteramos a combinação atual e corrigimos a incompatibilidade de letras usando expressões regulares.

A subsequência pode ter uma interpretação ambígua em caracteres russos. É aqui que a ramificação das regras começa. As principais armadilhas do terceiro passo:

1. Tradução sonora CH. No início de uma palavra, podem ser Ch, X e K. No final de uma palavra, também existem duas opções: Ch, X. A heurística mais simples usada na implementação atual é a presença do fonema de E / S antes do som CH. Você pode perguntar: por que temos certeza de que antes da letra O é possível converter CHR em XP e antes de E em KR? Trata-se de encontrar palavras que começam com a República Tcheca nos dicionários atuais do idioma russo. Até o momento, ninguém encontrou palavras em russo no início do ChRO / CRI.

2. Aprendendo a reconhecer o sinal sólido de separação. Nesse caso, coletamos os possíveis prefixos em uma expressão regular, verificamos o próximo caractere, que deve ser uma vogal iotada em transliteração (EYUYA). Se tudo estiver bem, colocamos um sinal sólido na frente da vogal. Também existem análises errôneas, como a palavra "embuste", que de fato deve ser desmontada como "embuste".

3. Onde traduzimos os sons iotados para E / E / Y / Y, e onde - deixamos algumas vogais. Sabemos que as vogais iotadas seguem os prefixos após um sinal sólido em divisão; na etapa anterior, reconhecemos a última. Portanto, nossa carta atual é a mesma vogal. Também recebemos uma vogal no início de uma palavra. Obviamente, aqui não há análise errônea: IONY → JONES em vez de JONA. Mas essa análise pode ser reduzida. Novamente usamos o dicionário, no qual vemos que na palavra que começa com IO, as letras TAD geralmente seguem. Adicione esta observação às nossas regras.

4. Onde ESTÁ e onde OH? Aqui, também é aplicada uma heurística simples, na qual um som consoante é verificado antes da sequência desejada de caracteres. Se for GDZHKTSCHShSCH, obtemos a OI final, caso contrário, pegamos a combinação OI da tabela de conversão.

Como melhorar este modelo


  • Considere como reconhecer um sinal macio em palavras.
  • Conecte um dicionário eletrônico de ortografia real no qual as heurísticas se baseiam. Ajudaria a acompanhar a relevância de nossas regras e, possivelmente, introduziria um conceito como "peso das regras". Então, passamos lentamente para o modelo ML.
  • Use no contexto do verificador ortográfico. Obviamente, isso não é mais uma tarefa de transliteração, mas a ortografia ajudaria a obter um resultado mais significativo :)

Detalhes de transliteração de auto-estudo

Ficarei feliz em responder as perguntas nos comentários e pensar em melhorias do transliterador :)

Source: https://habr.com/ru/post/pt479542/


All Articles