Processamento de Linguagem Natural com NLTK e Python

O processamento de linguagem natural (PLN) é uma subárea da Inteligência Artificial que tem como objetivo a compreensão automática de linguagens humanas, de maneira que possam ser manipuladas por computadores. Em geral, essas técnicas estão voltadas aos seguintes aspectos: fonologia, morfologia, sintaxe, semântica e pragmática.

Desta forma, uma dúvida muito comum é se existem diferenças entre processamento de linguagem natural e os mecanismos de busca, como Google ou Yahoo, por exemplo. A resposta para essa questão é sim e vou explicar um pouco sobre isso! Em geral, os mecanismos de busca utilizam várias métricas para definir a relevância de uma página baseado em um conjunto de palavras-chave, como: frequência de palavras, posição da palavra no documento, distância entre palavras e também a quantidade de páginas que referenciam a página. Essa última foi a técnica utilizada inicialmente pelo sistema de busca do Google e que o tornou o principal buscador da atualidade! Esse algoritmo foi chamado de Page Rank e em suma, faz o cálculo da importância da página baseado no número de links direcionados a ela. Com isso, concluímos que algoritmos de busca estão relacionados à encontrar conteúdo relevante baseado em palavras-chave definidas pelo usuário.

Por outro lado, PLN diz respeito à interpretação de frases do tipo: “este filme é para adulto” e “este filme é de um adulto”. A primeira frase está mais relacionada a um filme que pode ser assistido somente por um adulto (como uma classificação por faixa etária), enquanto que a segunda frase pode se referir a um filme que pertence a um adulto (o disco bluray é de um adulto). Na frase “Maria caiu, derrubou o computador e quebrou o braço”, um sistema de PLN deve ser capaz de identificar quem quebrou o braço, ou foi a Maria ou foi o computador. Para nós humanos é fácil obter essa resposta e sabemos que o braço é da Maria, porém, um computador não consegue identificar isso facilmente! Por isso, as técnicas de PLN podem ser muito complexas e requerem também conhecimentos em linguística.

Um dos primeiros exemplos nessa área foi o software SHRDLU, desenvolvido entre 1968 e 1970 por um pesquisador da Universidade de Stanford chamado Terry Winograd. A imagem abaixo mostra um exemplo dessa aplicação desenvolvido em Java, que pode ser baixado no link: http://hci.stanford.edu/~winograd/shrdlu/index.html.

Note que nesta figura existem vários blocos e o objetivo é que o usuário converse com o sistema para que o gancho pegue e solte os blocos. Abaixo segue uma transcrição traduzida para o português de uma interação entre uma pessoa e o software.

Pessoa: Pegue o grande bloco azul.
Computador: Ok (faz a ação).
Pessoa: Pegue a pirâmide.
Computador: Eu não entendo a qual pirâmide você se refere.
Pessoa: Encontre um bloco que é mais alto do que o que você está segurando e coloque ele dentro da caixa.
Computador: Ok (faz a ação).

Neste pequeno exemplo de conversa podemos observar o funcionamento de um sistema de PLN, no qual o usuário escreve em “texto natural” e o computador deve entender e executar as ações correspondentes! Em resumo, esse tipo de sistema é utilizado para que uma pessoa possa efetivamente conversar com um computador. Eu escrevi um artigo sobre o Teste de Turing e abordei sobre outros exemplos, como a ELIZA , a Sete Zoom e o robô Ed. Se quiser saber mais informações e até mesmo testar uma conversa on-line com um computador, acesse este link: https://iaexpert.academy/2016/07/19/historico-da-ia-teste-de-turing/.

A principal aplicação desta tecnologia são os conhecidos “chatbots” ou robôs de conversa, que são sistemas inteligentes projetados para conversarem com humanos. Algumas lojas on-line, universidades, operadoras de telefonia e televisão já tem utilizado esses softwares há algum tempo para atendimento ao cliente. Desta forma, antes do cliente pedir ajuda para uma pessoa ele/ela conversa com o software para depois o caso ser repassado para um humano resolver, mas isso nas situações nas quais o sistema não conseguir resolver por conta própria! É importante salientar que essas técnicas não são somente para conversas em texto, mas também para conversas com voz, que pode ser implementado por meio do framework Modular Audio Recognition Framework escrito em Java (http://marf.sourceforge.net/). Veja abaixo um vídeo do Olhar Digital que mostra um pouco mais sobre isso.

Uma das ferramentas mais utilizadas para processamento de linguagem natural é o NLTK (Natural Language Toolkit - http://www.nltk.org/), que foi desenvolvido em Python e apresenta uma gama muito grande de recursos, como: classificação, tokenização, stemming, tagging, parsing e raciocínio semântico. Todas essas funções são utilizadas para análise dos textos, e abaixo é mostrado um exemplo de código que extrai uma árvore semântica de um conjunto de texto. Essa árvore apresenta as classes de cada palavra, ou seja, se uma palavra é uma preposição, artigo, verbo, passado, futuro e consegue identificar até nomes próprios. Por meio da identificação de algumas dessas categorias em combinação com outras técnicas é possível identificar a semântica das frases, semelhante aos exemplos de frases citados anteriormente.

Outras vantagens do NLTK é a existência de versões para Windows, Mac OS X e Linux, sendo também open source e existindo uma grande comunidade ativa de desenvolvedores que estão sempre atualizando e adicionando novos recursos. Para finalizar, coloco aqui duas experiências práticas que tive com essa biblioteca. A primeira foi o desenvolvimento de um artigo para a revista SQL Magazine da Devmedia, na qual desenvolvemos um exemplo prático para identificar emoções em frases, da área da Computação Afetiva (http://www.devmedia.com.br/mineracao-com-aprendizagem-de-maquina/30663). Outro exemplo foi a escrita do artigo científico "Comparativo entre o Algoritmo de Luhn e o algoritmos GistSumm para Sumarização de Documentos", que foi publicado na Revista de Informática Teórica e Aplicada da Universidade Federal do Rio Grande do Sul. Você pode baixar o artigo no link abaixo:

Para saber um pouco mais sobre a prática do NLTK, assista o vídeo abaixo 🙂