Faça a correção de erros de digitação sem dicionário
Modelando a sequência de caracteres digitados como observações e a sequência de caracteres corretos como estados ocultos, este exemplo usa dois modelos diferentes para a evolução de letras corretas para a correção de erros tipográficos. O primeiro modelo usa processos de Markov de primeira ordem para codificar frequências do que segue determinado caractere. O segundo modelo usa os estados de Markov de segunda ordem para codificar frequências do que segue os dois últimos caracteres dados.
Tome A Origem das Espécies de Darwin e converta todos os símbolos que não são letras em espaços.
In[1]:= | ![]() X |
In[2]:= | ![]() X |
Introduza erros de digitação, a uma taxa de 20%, substituindo aleatoriamente um caractere por um dos seus vizinhos imediatos no teclado QWERTY padrão. O caractere de espaço nunca é digitado incorretamente.
In[4]:= | ![]() X |
In[5]:= | ![]() X |
Out[6]= | ![]() |
Pegue os primeiros 80.000 caracteres para ser uma sequência de teste, e o restante do texto como uma sequência de treino. A sequência de teste tem 16,5% de caracteres digitados erroneamente, menos de 20%, porque o caractere de espaço nunca foi digitado incorretamente.
In[7]:= | ![]() X |
Out[7]= | ![]() |
Modele o fluxo de caracteres digitados usando processo de Markov oculto. Caracteres corretos são estados ocultos, enquanto os caracteres efetivamente digitados são observações.
In[8]:= | ![]() X |
Estime o processo oculto de Markov usando dados de treinamento.
In[9]:= | ![]() X |
Out[9]= | ![]() |
In[10]:= | ![]() X |
Use decodificação posterior para corrigir erros na porção de teste do texto digitado incorretamente.
In[11]:= | ![]() X |
Out[11]= | ![]() |
O texto corrigido ainda tem 11% de erros de digitação, 5,5% a menos do que o texto original digitado.
Out[12]= | ![]() |
In[13]:= | ![]() X |
Out[13]= | ![]() |
Modele a evolução dos estados ocultos usando um processo de Markov de segunda ordem; ou seja, assuma que a probabilidade do caractere depende apenas dos dois caracteres precedentes. O processo de Markov de segunda ordem é modelado como um processo de Markov de primeira ordem com o espaço de estados de pares de caracteres consecutivos aumentado.
In[14]:= | ![]() X |
In[15]:= | ![]() X |
A probabilidade do caractere efetivamente digitado depende somente do caractere real subjacente.
In[16]:= | ![]() X |
Repita a decodificação posterior com o modelo oculto de Markov da mais alta ordem.
In[17]:= | ![]() X |
Out[17]= | ![]() |
A porcentagem de erros agora foi reduzida para menos de 6%.
In[18]:= | ![]() X |
Out[18]= | ![]() |
Out[19]= | ![]() |