Construindo um modelo linguistico de Markov

Leonardo Pinheiro
22/12/2014

Introdução

O objetivo deste trabalho é a descrição de um modelo capaz de prever a próxima palavra digitada, como o utilizado em aplicativos de celular.

Os tópicos abordados são os seguintes:

  • Abordagem dos dados utilizados: extratos de textos em inglês do twitter, blogs e artigos de notícias.
  • Descrição do modelo linguistico de Markov.
  • Desenvolvimento de um aplicativo web capaz de realizar predições utilizando a biblioteca shiny do R.

Os dados

Exemplo de texto e 3-gram.

twitter[1]
[1] "How are you? Btw thanks for the RT. You gonna be in DC anytime soon? Love to see you. Been way, way too long."
trigram[1,]
   X0  X1   X2 Frequency
1 way too long        10

Modelo teórico

Markov Language model - produz previsões baseadas no último n-gram visto. Quanto maior o n-gram melhor a predição, mas mais difícil de encontrar no texto.

markov

Katz Back-off Model passa para um n-gram de tamanho menor caso o n-gram digitado não seja encontrado na base de dados.

Processamento e modelagem

  • N-gramization usando Python NLTK Package
  • N-grams são guardados como tabelas de frequências para checar probabilidades.
  • Os dados são guardados usando SQLite para poupar memoria.
  • Uma função implementa o Katz back-off model checando as tabelas de frequencias procurando quadrigrams, trigrams, bigrams and unigrams nesta ordem.
  • The app retorna as três palavras mais prováveis de acordo com o modelo de Markov.

Conclusões e melhorias propostas

  1. Usar mais dados. O app foi construindo usando uma amostra de 550000 mil trechos de textos das bases de dados.

  2. Usar dados específico do usuário e baseados em contexto. O vocabulário de um usuário específico é melhor que um vocabulário geral. O contexto do texto também influencia a predição.

  3. Modelos mais avançados (Ex.: Linear interpolation).

  4. E não esqueça de olhar o app https://lspinheiro.shinyapps.io/swiftkey/. Obrigado!