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.com.br/index.php/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 🙂

15 Comentários

  1. Ieda Sinetti disse:

    Seu site caiu como uma luva! Não tenho formação em tecnologia, mas na área linguística. Li um pouco sobre Processamento de Linguagem Natural e desde então tenho ficado cada vez mais interessada. Tenho encontrado poucos sites e materiais relacionados a esse assunto, fiquei empolgada ao encontrar o seu! Parabéns e obrigada.

    12 de janeiro de 2017
    Responder
    • Olá Ieda! Obrigado pelo comentário! 🙂 No canal do Youtube eu publiquei um vídeo sobre o NLTK que é uma ferramenta para trabalhar com essa área…

      12 de janeiro de 2017
      Responder
  2. Gustavo disse:

    E ai Jones! Cara estou fazendo um artigo cientifico de um estudo comparativo entre os classificadores Naive Baiyes, KNN e Árovre de decisão para o desenvolvimento de um chatbot responsivo, afim de apontar as vantagens e desnvantagens de cada método no auxilio do processamento da linguagem natural. Gostaria de algumas dicas sobre quais ferramentas, linguagens e bibliotecas se enquadrariam bem neste escopo, por exemplo, phyton, nltk, weka, aiml… e como poderia estruturar este fluxo? Desde já agradeço! Abraço!

    10 de Maio de 2017
    Responder
    • Olá Gustavo! Mas você já usaria alguma base de dados para validar os algoritmos? As ferramentas e linguagens dependeriam dessa base de dados também. Manda e-mail para [email protected] para vermos melhor 🙂

      12 de Maio de 2017
      Responder
  3. Juliano disse:

    Olá, essa biblioteca de NLTK para python consegue trabalhar com textos em português? Estou achando difícil encontrar uma biblioteca para classificar textos da nossa lingua.

    30 de Maio de 2017
    Responder
    • Olá Juliano! Consegue sim, se você procurar por “NLTK português” vai achar bastante material 🙂

      31 de Maio de 2017
      Responder
  4. Wellington Rutes disse:

    Valeu Jones!

    12 de abril de 2018
    Responder
  5. Wellington Rutes disse:

    Você é de Canoinhas – SC?

    Vi que o artigo publicado é da UNC.

    12 de abril de 2018
    Responder
  6. Wellington Rutes disse:

    Ah é em Porto União. =)

    12 de abril de 2018
    Responder
  7. André Felipe Jesus do Nascimento Silva disse:

    Olá Joes, boa noite!!
    Estou estudando vários assuntos da I.A a fim de escrever dois trabalhos para faculdade com esse mesmo tema. E de tudo que li, PLN parece ter me soado bem melhor aos meus ouvidos. Logo, tenho uma variedade de assuntos e cenários onde posso usar isso, mas preferi restringir a identificação de sentimentos e emoções nas Redes Sociais. Com isso eu poderia definir quão bem estão falando de alguma empresa ou pessoa. Bem comum isso,.. mas tenho uma dúvida boba: “Como é feita essa conexão do meu sistema inteligente com o Twitter, por exemplo? Seria por meio de uma API?” Podes me ajudar…

    Um forte abraço!!

    22 de Maio de 2019
    Responder
  8. Aisha disse:

    Olá. Estou a trabalhar com processamento de linguagem natural, tem uma biblioteca para JAVA?

    27 de fevereiro de 2020
    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *