APIs de NLU

Humanos conseguem falar sem nem mesmo utilizar das palavras. A linguagem é, historicamente, algo crucial para a vida em sociedade, sendo fundamental para a expressão e comunicação entre nós. E estamos cientes de que a escrita é um ponto tão marcante nas nossas vidas que ela mesma é o que dá início a não só a nossa, mas a toda marcação temporal da história. E, como seres complexos, nossa escrita nem sempre é muito clara ou fácil de entender – por vezes, até para nós mesmos. Já pensou no quanto pode ser difícil categorizar a linguagem humana, que ainda se modifica com o passar do tempo?

Pois bem, para nós, é fácil entender que “Vossa Mercê” se tornou “você” e depois “vc”. Mas imagine para um ser que só entende coisas no sentido literal, em um único canal de expressão? Para um computador conseguir encontrar sentido e extrair significado, bem como classificar entidades em grandes volumes de texto, é necessário um grande esforço de Aprendizado de Máquina. Antes do Processamento de Linguagem Natural (NLP), porém, não seria possível abranger as variedades das línguas e nem qualquer jargão. E nos deparávamos com grandes problemas: como o computador pode entender o que o ser humano diz e escreve? Como a IA entenderia essa variedade linguística, se até com uma linha de código diferente do padrão um sistema já pode entrar em colapso?

Imagine a seguinte situação: você precisa avaliar o que o público tem comentado sobre um dos seus produtos e precisa fazê-lo com o maior número de pessoas possível. Como extrair diretamente a opinião dos textos, sem ter que ler 100 artigos de blog, e já entender quem está falando o que sobre seu produto, por exemplo?

Em outro ambiente, pense no cenário congestionado do Poder Judiciário e a demanda dos escritórios de juízes, repletos de textos jurídicos com linguagem rebuscada. Além de facilitar o trabalho de qualquer operador do direito por reduzir o tempo massivo de leitura, uma IA que consegue, realmente, extrair sentimentos de textos poderia ser utilizada para checar se as partes em suas situações sentem remorso, tristeza, felicidade, desejo de vingança, prazer… fatores que também influenciam no julgamento dado por um Juiz. E isso é só o começo. Já que robôs já estão proferindo sentenças judiciais nos EUA, usando essa mesma tecnologia de Processamento de Linguagem Natural (NLP, em inglês).

Computadores vs Humanos

Para nós, é muito fácil interpretar a linguagem humana. Nós conseguimos ir até além do discurso falado, compreendendo ainda as expressões faciais, os sentimentos e a linguagem corporal. Nós sentimos e visualizamos a mensagem em texto.

Porém, para uma máquina, é muito complicado entender algo que não se baseie em dados estruturados. Elas não têm o mesmo entendimento intuitivo, pois foram desenvolvidas para entender humanos somente através de dialetos da programação. Computadores não conseguem ler entrelinhas.

Além de não conseguirem entender facilmente o que um dado não-estruturado significa, como frases em textos quaisquer, era muito difícil realizar a comunicação entre humanos e computadores através de outro canal, senão com uma programação bem estruturada.

Mas o NLP está mudando totalmente essa comunicação tradicional e abrir nossos horizontes para uma nova forma de “conversar” com PCs. O NLP dá ao software a capacidade de entender a linguagem humana e os dados não-estruturados, abrangendo as variedades que compõe cada língua que falamos, como o português, por exemplo.

Tomaremos de exemplo a frase:

“O novo produto da empresa está pegando fogo!”

Para nós fica muito claro: um produto que uma empresa desenvolveu que está dando muito certo. Nós entendemos intuitivamente, sem dificuldade alguma. Mas os PCs costumam levar as coisas muito ao pé da letra… Imagina: como fazer ele entender que o produto não está realmente pegando fogo e na verdade essas duas palavras juntas podem gerar uma expressão com uma conotação completamente diferente?

O processo de comunicação Humano – Computador com NLP

Lidando com dados não-estruturados, as regras que você dá na programação não conseguem ser aplicadas. Ou seja, não existem técnicas padronizadas para esse processo. Quando você quer falar com um PC da mesma forma que fala com outra pessoa, as regras que o PC seguia para entender o que antes seria uma programação tornam-se abstratas e difíceis de concretizar. Para isso, utilizamos técnicas do Processamento de Linguagem Natural.

Assim, quando queremos automatizar o entendimento de grandes volumes de texto, extrair sentimentos deles ou, ainda, classificar entidades e relacioná-las ao conteúdo textual, dentre outros, uma API de NLP/NLU precisa passar por um processo geral:

  1. Ler textos escritos em Linguagem Humana (não em programação);
  2. Interpretar significado através de seus filtros;
  3. Traduzir de volta para nós, trazendo as respostas que procuramos.

Seguindo esse molde, a API não dá somente o que você pediu, mas de acordo com a intenção do que pediu. Por exemplo, em ferramentas de busca ou em tradução de linguagens, quando o Google diz “você quis dizer ___?” a NLP está no processo de aprendizado de como nós pesquisamos com nossas palavras, em vez de precisarmos buscar palavras-chave específicas.

Mas como eu posso realizar essas três etapas gerais em um Processamento de Linguagem Natural?

Treinando o Computador para construir a API

Em geral, as APIs de NLP funcionam através de Redes Neurais e modelos de Deep Learning; ou seja, elas extraem, examinam e utilizam padrões em dados, sendo capazes de aprender e corrigir seus erros relacionando-se com pessoas. Logo, eis a primeira dica de aplicações de NLP: o quanto mais você utiliza, mais você treina. Mas chega de papo e vamos logo para a prática.

Quando vamos trabalhar com Machine Learning, geralmente criamos uma pipeline. Isto é, quebramos o problema em vários pedacinhos para poder resolver cada um separadamente, aplicando o Machine Learning em cada parte. Assim, podemos interligar todas as partes e resolver problemas complexos utilizando o método de pipeline.

Primeiro teremos que ensinar o computador sobre como a linguagem humana funciona e como instruir a máquina a ver sentido nisso.

Vamos levar algumas etapas para entender como é criada a pipeline e como funciona o background de uma API de NLP 😀

Tomaremos de base este textinho sobre IA extraído da Wikipédia:

A construção de máquinas inteligentes interessa à humanidade há muito tempo, havendo na história tanto um registro significante de autômatos mecânicos (reais) quanto de personagens místicos (fictícios) construídos pelo homem com inteligência própria, tais como o Golem e o Frankenstein. Tais relatos, lendas e ficções demonstram expectativas contrastantes do homem, de fascínio e de medo, em relação à Inteligência Artificial.”

1) Segmentação

Iniciaremos nossa pipeline segmentando o texto que vamos analisar.

  1. “A construção de máquinas inteligentes interessa à humanidade há muito tempo”
  2. “[…] havendo na história tanto um registro significante de autômatos mecânicos (reais) quanto de personagens místicos (fictícios) construídos pelo homem com inteligência própria, tais como o Golem e o Frankenstein.”
  3. “Tais relatos, lendas e ficções demonstram expectativas contrastantes do homem, de fascínio e de medo, em relação à Inteligência Artificial.”

Fica muito mais fácil desenvolver nossa pipeline assim, separando o texto pelas suas ideias, do que tentar analisar tudo de uma vez só e deixar vários detalhes para trás. Nós veremos que todo detalhe faz diferença por aqui. Por isso que a pipeline é uma ótima alternativa 😀

2) Tokenização

Vamos começar com a primeira frase que separamos na nossa segmentação.

“A construção de máquinas inteligentes interessam à humanidade há muito tempo.”

Para tokenizar essa parte, nós iremos separar cada palavra do texto (tokens – blocos constituintes do texto) para montar nosso primeiro esqueleto do que vamos analisar. A tokenização fica assim:

“A” “construção” “de” “máquinas” “inteligentes” “interessam” “à” “humanidade” “há” “muito” “tempo” “.”

Em português, essa etapa é razoavelmente fácil. Mas em outros idiomas, como o Chinês, não existem limites visuais entre as palavras, que por sua vez são compostas por morfemas monossilábicos, represantando sons – imagina!

Ah, e segmentamos até a pontuação, pois ela também expressa uma ideia, que é somente a de encerramento da frase, neste caso.

3) Previsão de classes gramaticais

Agora, nós precisamos classificar cada token que separamos. Na verdade, nós podemos jogar cada um deles em um modelo pré-treinado, que identifica cada palavra com sua classe gramatical. Ainda, podemos adicionar algumas palavras que estavam no contexto.

APIs de NLU

Já podemos ter alguma ideia de como daremos significado e interligaremos as palavras para que a nossa pipeline faça sentido!

4) Lematização

Aqui, o intuito nada mais é do que descobrir a forma mais básica de cada palavra em cada frase. Então, agora temos:

APIs de NLU
A única alteração que fizemos foi do verbo “interessa” para a sua forma mais simples, “interessar”. Facilita a compreensão do computador nós sempre colocarmos os verbos na sua forma não-conjugada, como de “eu gosto de chocolate” para “eu [gostar] de chocolate”. Ficou claro?

5) Apontando as “stop words”

Stop words são as palavras que não tem tanto significado sozinhas, que não terão muita importância agora para nós, pois queremos principalmente o significado dessas palavras em conjunto. São elas conjunções, preposições, artigos ou até mesmo advérbios e outros que não tragam ideias tão fortes à frase. Enfim, geralmente checamos uma série de stop words pré listadas, mas como elas variam de acordo com a aplicação que você deseja, não podemos arriscar ao pé-da-letra.

Olha como fica quando extraímos as stop words:


Agora já filtramos as principais ideias do texto! Calma, estamos nos aproximando do resultado e já sairemos da gramática XD

6) Análise de dependência

Finalmente, nós vamos tentar interligar ao máximo todas as palavras. Vamos relacioná-las entre seus agentes, objetos, entidades…

Primeiro, o objetivo é encontrar uma única palavra “mãe”, o verbo principal que se relaciona com todas as outras palavras, que será a nossa raíz.

APIs de NLU

Nós ainda podemos estabelecer qual tipo de relação que existe entre cada par de palavras, qual é a forma que uma depende da outra. Olha como fica:

APIs de NLU

A Análise de dependência pode ser, realmente, uma tarefa difícil, principalmente por ser uma etapa tão dependente do contexto e também de conhecimento de gramática do Ensino Médio XD .

Acontece que podemos somente jogar as palavras em um modelo pré-pronto de machine learning que nos dá um resultado do significado de cada palavra nessa etapa. Mas cuidado, por depender do contexto, muitas vezes os resultados podem não ser perfeitos, necessitando de revisão prévia!

No momento, já podemos visualizar que “máquinas inteligentes”, “interessa” e “humanidade” tem ligações e já pode-se compreender que as máquinas inteligentes interessam à humanidade!

7) Encontrando palavras sintaticamente relacionadas

Esta etapa é opcional, mas dependendo do seu objetivo, ela pode ser bem útil lá na frente, pois estaremos agregando as palavras pela ideia que representam em conjunto. Ou seja, podemos juntar algumas delas como se fossem um substantivo só que tem mais sentido assim, mais valor do que isolado. Podemos fazer isso pelo que concluímos da nossa análise de dependência.

Então, algo que antes era assim:                                                       Pode ficar assim:

APIs de NLU

 

 

 

 

 

 

 

 

 

Assim, se não precisamos de muitos detalhes e advérbios/adjetivos, dentre outros, e queremos extrair ideias mais gerais, podemos utilizar desta ferramenta para agilizar o nosso processo.

8) Reconhecimento de Entidades Nomeadas (REN)

Aqui, o nosso objetivo vai ser agregar valor automaticamente aos substantivos da frase. Ou seja, vamos listar automaticamente essas palavras que são relacionadas a coisas do mundo real e linkar com seu real significado.

Para isso, é só utilizar um modelo pronto de REN, que realiza essa listagem automática. Ocorre que esses modelos fazem uma análise prévia, estatística e contextual dos nossos tokens, possibilitando categorizá-los facilmente conforme sua utilização na vida real. Ele identifica quais são os tipos de substantivo, podendo até mesmo diferenciar “Harry” – nome de pessoa – e “Harry Potter” – nome de livro, produto, ou até mesmo do próprio personagem, dependendo do contexto na frase.

Ele listará o substantivo de acordo com legendas de: nomes de pessoas, companhias, localizações geográficas e geopolíticas, nomes de produtos, datas e tempos, quantidades de dinheiro e até mesmo nomes de eventos.

Agora, dê uma olhada lá em cima, no primeiro tópico, onde falamos de “segmentação”.

Deu?

A última frase que segmentamos é a que utilizaremos de exemplo, agora. Veja:

“[…] havendo na história tanto um registro significante de autômatos mecânicos (reais) quanto de personagens místicos (fictícios) construídos pelo homem com inteligência própria, tais como o Golem e o Frankenstein.”

Como podemos observar, temos vários substantivos nessa frase, destacados em vermelho. Mas, isolando cada um deles, percebemos que somente “Golem” e “Frankenstein” são palavras que remetem a significados únicos e reais no mundo. O modelo de REN classificaria estes únicos substantivos como “nomes de pessoas” ou, ainda, “personagens”.

É por isso que o Reconhecimento de Entidades Nomeadas é tão utilizado; é prático, eficaz e pode ser aplicado de várias e várias formas.

9) Resolução de Referência

Tanto na língua portuguesa quando em várias outras, como na inglesa – mas muito mais na nossa -, hora ou outra poderemos nos deparar com palavras que, num contexto, podem significar exatamente a mesma coisa que outra mas ser escrita de maneira completamente diferente.

É o caso dos pronomes (ela, ele, isso, etc), por exemplo. Nós constantemente utilizamos destas palavras para não ficarmos repetindo o mesmo termo num texto. E, nestes casos, nos deparamos com um grande problema: como que o computador iria associar que “ela” pode ser exatamente a mesma coisa, num contexto específico, que “máquina”, tomando de exemplo?

Por isso, realizamos essa etapa. Vamos ligar todos os tokens que se relacionam à mesma entidade na nossa pipeline de NLP. Agora, releia o texto que extraímos da Wikipédia lá no começo:

A construção de máquinas inteligentes interessa à humanidade há muito tempo, havendo na história tanto um registro significante de autômatos mecânicos (reais) quanto de personagens místicos (fictícios) construídos pelo homem com inteligência própria, tais como o Golem e o Frankenstein. Tais relatos, lendas e ficções demonstram expectativas contrastantes do homem, de fascínio e de medo, em relação à Inteligência Artificial.”

Nesse parágrafo não temos a utilização dos pronomes para substituir substantivos, então usaremos este outro de exemplo:

“A Inteligência Artificial tem sido ferramenta crucial no desenvolvimento de empresas de tecnologia. Assim, ela não somente se encaixa nesse meio, mas também nas áreas da saúde, entretenimento, marketing, dentre outros. Por isso que não podemos deixar de pensar nela e pesquisá-la, cada vez mais.”

Olha como fica quando fazemos a resolução de referência:

APIs de NLU

 

 

0 respostas

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

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