Ads Top

Usando aprendizado de máquina para processamento de linguagem natural

Você pode gerar os números a serem colocados nos vetores usando um algoritmo de aprendizado de máquina. 



O aprendizado de máquina, um subcampo da inteligência artificial, cria sistemas de computador que podem aprender automaticamente a partir dos dados sem serem programados explicitamente.


Algoritmos de aprendizado de máquina podem fazer previsões sobre novos dados, aprender a reconhecer imagens e fala, classificar fotos e documentos de texto, automatizar controles e auxiliar no desenvolvimento de jogos.


O aprendizado de máquina permite que os computadores realizem tarefas que seriam difíceis, senão impossíveis, para eles fazerem de outra forma. 


Se você quiser, digamos, programar uma máquina para jogar xadrez usando uma abordagem de programação tradicional em que você especifica explicitamente o que o algoritmo deve fazer em cada contexto, imagine quantas condições if ... else você precisaria definir. 


Mesmo se você tiver sucesso, os usuários de tal aplicativo descobrirão rapidamente os pontos fracos em sua lógica que podem aproveitar durante o jogo até que você faça as correções necessárias no código.


Em contraste, os aplicativos construídos em algoritmos de aprendizado de máquina não dependem de lógica predefinida, mas usam a capacidade de aprender com a experiência anterior. 


Portanto, um aplicativo de xadrez baseado em aprendizado de máquina procura posições que lembra dos jogos anteriores e faz o movimento que leva à melhor posição.


No spaCy, além de gerar vetores de palavras, o aprendizado de máquina permite que você realize três tarefas: análise de dependência sintática (determinar as relações entre palavras em uma frase), marcação de classes gramaticais (identificar substantivos, verbos e outras classes gramaticais) e reconhecimento de entidade nomeada (classificando nomes próprios em categorias como pessoas, organizações e locais).


O ciclo de vida de um sistema de aprendizado de máquina típico tem três etapas: treinamento do modelo, teste e previsões, já falamos sobre em uma série de posts.


Por que usar o aprendizado de máquina para processamento de linguagem natural?



As previsões do seu algoritmo não são declarações de fato; eles são normalmente calculados com um certo grau de certeza. 


Para alcançar um grau mais alto de precisão, você precisará implementar algoritmos mais complicados, que são menos eficientes e menos práticos de implementar. Normalmente, as pessoas se esforçam para alcançar um equilíbrio razoável entre precisão e desempenho.


Como os modelos de aprendizado de máquina não podem prever perfeitamente, você pode se perguntar se o aprendizado de máquina é a melhor abordagem para construir os modelos usados em aplicativos de PNL. 


Em outras palavras, existe uma abordagem mais confiável baseada em regras estritamente definidas, semelhante àquela usada por compiladores e interpretadores para processar linguagens de programação? A resposta rápida e não. Aqui está o porquê.


Para começar, uma linguagem de programação contém um número relativamente pequeno de palavras. Por exemplo, a linguagem de programação Java consiste em 61 palavras reservadas, cada uma com um significado predefinido na linguagem.


Em contraste, o Oxford English Dictionary, lançado em 1989, contém 171.476 entradas para palavras em uso atualmente. Em 2010, uma equipe de pesquisadores da Universidade de Harvard e do Google contou cerca de 1.022.000 palavras em um corpo de textos digitalizados contendo aproximadamente 4% de todos os livros já publicados. 


O estudo estimou que o idioma cresceria em vários milhares de palavras por ano. Atribuir cada palavra a um número correspondente demoraria muito.


Mas mesmo que você tentasse, seria impossível, por vários motivos, determinar o número de palavras usadas em um idioma natural. Em primeiro lugar, não está claro o que realmente conta como uma palavra individual. 


Por exemplo, devemos contar o verbo “contar” como uma palavra, ou duas, ou mais? Em um cenário, “contar” pode significar “ter valor ou importância”. Em um cenário diferente, pode significar "dizer números um após o outro". Claro, “contar” também pode ser um substantivo.


Devemos contar as inflexões - forma plural de substantivos, tempos verbais e assim por diante - como entidades separadas também? Devemos contar empréstimos (palavras adotadas de línguas estrangeiras), termos científicos, gírias e abreviações? 


Evidentemente, o vocabulário de uma linguagem natural é definido vagamente, porque é difícil descobrir quais grupos de palavras incluir. Em uma linguagem de programação como Java, uma tentativa de incluir uma palavra desconhecida em seu código forçará o compilador a interromper o processamento com um erro.


Uma situação semelhante existe para regras formais. Como seu vocabulário, muitas regras formais de uma linguagem natural são definidas vagamente. 


Alguns causam polêmica, como os infinitivos divididos, uma construção gramatical em que um advérbio é colocado entre o verbo do infinitivo e sua preposição. 


Aqui está um exemplo:


spaCy permite que você extraia programaticamente o significado de um enunciado.


Neste exemplo, o advérbio “programaticamente” separa a preposição e o infinitivo “extrair”. Aqueles que acreditam que os infinitivos divididos estão incorretos podem sugerir reescrever a frase da seguinte forma:


spaCy permite que você extraia o significado de uma expressão de forma programática.


Mas, independentemente de como você se sente a respeito dos infinitivos divididos, sua aplicação de PNL deve compreender as duas sentenças igualmente bem.


Em contraste, um programa de computador que processa código escrito em uma linguagem de programação não é projetado para lidar com esse tipo de problema. 


A razão é que as regras formais para uma linguagem de programação são estritamente definidas, não deixando possibilidade de discrepância. 


Por exemplo, considere a seguinte instrução, escrita na linguagem de programação SQL, que você pode usar para inserir dados em uma tabela de banco de dados:


INSERT INTO table1 VALUES(1, 'Adelino', 'Fabiano')


A declaração é bastante autoexplicativa. Mesmo que você não conheça SQL, pode facilmente adivinhar que a instrução deve inserir três valores na tabela 1. Agora, imagine que você a altere da seguinte maneira:


INSERT  VALUES(1, 'Adelino', 'Fabiano') INTO table1


Do ponto de vista de um leitor de língua inglesa, a segunda afirmação deve ter o mesmo significado que a primeira. Afinal, se você ler como uma frase em inglês, ainda faz sentido. 


Mas se você tentar executá-lo em uma ferramenta SQL, vai acabar com o erro faltando a palavra-chave INTO. Isso ocorre porque um analisador SQL - como qualquer outro analisador usado em uma linguagem de programação - depende de regras codificadas, o que significa que você deve especificar exatamente o que deseja que ele faça da maneira esperada. 


Nesse caso, o analisador SQL espera ver a palavra-chave INTO logo após a palavra-chave INSERT sem nenhuma outra opção possível.


Desnecessário dizer que tais restrições são impossíveis em uma linguagem natural. Levando todas essas diferenças em consideração, é bastante óbvio que seria ineficiente ou mesmo impossível definir um conjunto de regras formais que especificaria um modelo computacional para uma linguagem natural da maneira que fazemos para as linguagens de programação.



Nenhum comentário:

Tecnologia do Blogger.