header-logo

Comunicações de marketing orientadas por inteligência artificial

iCrowdNewswire Portuguese

Um guia para processamento de linguagem natural (Parte 1) AI

Nov 22, 2017 4:25 PM ET

Apresente-se no mundo do processamento de linguagem natural, aprendendo sobre alguns algoritmos básicos para derrubar e separar palavras automaticamente.

O processamento de linguagem natural (PNL) compreende um conjunto de técnicas que podem ser usadas para atingir muitos objetivos diferentes. Dê uma olhada na tabela a seguir para descobrir qual técnica pode resolver seu problema específico.

O QUE VOCÊ PRECISA

ONDE OLHAR

Agrupar palavras similares para pesquisa

Símbolo , palavras de divisão , documentos de análise

Encontrar palavras com o mesmo significado para pesquisa

Análise Semântica Latente

Gerando nomes realistas

Dividindo palavras

Compreender quanto tempo demora para ler um texto

Tempo de leitura

Entender o quão difícil de ler é um texto

Legibilidade de um texto

Identificando o idioma de um texto

Identificando uma língua

Gerando um resumo de um texto

SumBasic (baseado em palavras), métodos baseados em gráfico: TextRank (baseado em relacionamento), análise semântica latente (baseada em semântica)

Encontrar documentos semelhantes

Análise Semântica Latente

Identificando entidades (cidades, pessoas) em um texto

Analisando Documentos

Compreender a atitude expressa em um texto

Analisando Documentos

Traduzindo um texto

Analisando Documentos

Vamos falar sobre a análise no sentido geral de analisar um documento e extrair seu significado.   Então, vamos falar sobre a análise real das linguagens naturais, mas passaremos a maior parte do tempo em outras técnicas. Quando se trata de compreender as linguagens de programação, a análise é o caminho a seguir. No entanto, você pode escolher alternativas específicas para idiomas naturais. Em outras palavras, na maior parte vamos falar sobre o que você usaria em vez de analisar para atingir seus objetivos.

Por exemplo, se você quisesse encontrar   tudo for declarações em um arquivo de linguagem de programação, você analisá-lo e, em seguida, contar o número de for s. Em vez disso, provavelmente você vai usar algo como tentar encontrar todas as menções de gatos em um documento de linguagem natural.

Isso é necessário porque a teoria por trás da análise de linguagens naturais pode ser a mesma que está por trás da análise de linguagens de programação; no entanto, a prática é muito diferente. Na verdade, você não vai construir um analisador para um idioma natural – ou seja, a menos que você trabalhe em inteligência artificial ou como pesquisador, e mesmo nesses casos, raramente você vai usar um. Em vez disso, você encontrará um algoritmo que funciona como um modelo simplificado do documento e que pode oResolva seu problema específico.

Em suma, você vai encontrar truques para evitar que realmente tenha que analisar um idioma natural. É por isso que esta área de ciência da computação geralmente é chamada de processamento de linguagem natural em vez de análise de linguagem natural.

Algoritmos que requerem dados

Vamos ver soluções específicas para cada problema. Lembre-se, essas soluções específicas podem ser bastante complexas. Quanto mais avançados são, menos dependem de algoritmos simples. Normalmente, eles precisam de um vasto banco de dados de dados sobre o idioma. Uma conseqüência lógica disso é que raramente é fácil adotar uma ferramenta para que um idioma seja usado para outro. Ou melhor, a ferramenta pode funcionar com poucas adaptações, mas para construir o banco de dados seria necessário muito investimento. Então, por exemplo, você provavelmente encontrará uma ferramenta pronta para usar para criar um resumo de um texto em inglês, mas talvez não seja um para um italiano.

Por esse motivo, nesta série, nos concentramos principalmente em ferramentas de língua inglesa. Embora mencionemos se essas ferramentas funcionam para outras línguas, você não precisa saber as diferenças teóricas entre os idiomas, como o número de gêneros ou casos que eles têm. No entanto, você deve estar ciente de que quanto mais diferente for um idioma do inglês, mais difícil será aplicar essas técnicas ou ferramentas a ele.

Por exemplo, você não deve esperar encontrar ferramentas que possam funcionar com o chinês (ou melhor, o sistema de escrita chinês ). Não é necessariamente que essas linguagens sejam mais difíceis de entender programaticamente, mas pode haver menos pesquisa sobre elas ou os métodos podem ser completamente diferentes dos adotados para o inglês.

A Estrutura deste Guia

Este artigo é organizado de acordo com as tarefas que queremos realizar – o que significa que as ferramentas e as explicações são agrupadas de acordo com a tarefa para a qual elas são usadas. Por exemplo, há uma seção sobre como medir as propriedades de um texto, como sua dificuldade. Eles também geralmente estão em ordem ascendente de dificuldade – é mais fácil classificar palavras do que documentos inteiros. Começamos com técnicas simples de recuperação de informações e terminamos no campo apropriado do processamento de linguagem natural.

Nós pensamos que esta é a maneira mais útil de fornecer as informações que você precisa: se você precisa fazer o X, mostramos diretamente os métodos e ferramentas que você pode usar.

Palavras classificadoras

Com a expressão classificando palavras , incluímos técnicas e bibliotecas que agrupam palavras juntas.

Agrupar Palavras Similares

Vamos falar sobre dois métodos que podem agrupar palavras similares para fins de recuperação de informações. Basicamente, estes são métodos usados ​​para encontrar documentos com as palavras que nos preocupamos com um conjunto de documentos. Isso é útil porque, se um usuário procura por documentos que contenham a palavra “amigo”, eles provavelmente estão igualmente interessados ​​em documentos que contenham “amigos” e, possivelmente, “amiga” e “amizade”.

Então, para ser claro, nesta seção, não vamos falar sobre métodos para agrupar palavras semanticamente conectadas, como identificar todos os animais de estimação ou todas as cidades inglesas.

Os dois métodos estão gerando e dividindo palavras em grupos de caracteres. Os algoritmos para o primeiro são dependentes do idioma, enquanto os que não são os últimos. Vamos examinar cada um deles em parágrafos separados.

Stemming

O teste é o processo de encontrar o tronco, ou raiz, de uma palavra. Neste contexto, o caule não é necessariamente a raiz morfológica de acordo com linguistas. Então, não é a forma de uma palavra que você encontraria, digamos, em um vocabulário. Por exemplo, um algoritmo pode produzir o “consolo” do caule para a palavra “consolador”, enquanto em um vocabulário, como raiz, você encontra “console”.

Uma aplicação típica de stemming é agrupar todas as instâncias de palavras com a mesma haste para uso em uma biblioteca de pesquisa. Então, se um usuário procurar documentos que contenham “amigo”, eles também podem encontrar aqueles com “amigos” ou “amigos”.

Algoritmo de transferência de porteiro

Vamos falar sobre um algoritmo que elimina sufixos para encontrar o caule: o algoritmo efetivo e amplamente utilizado de teste de porteiro. O algoritmo foi originalmente criado por Martin Porter para inglês. Existem também algoritmos baseados em Porter / inspirado para outras línguas, como francês ou russo. Você pode encontrá-los no site Snowball . Snowball é uma linguagem simples para descrever algoritmos de derivação, mas os algoritmos também são descritos em inglês simples.

Uma descrição completa do algoritmo está além do escopo deste guia. No entanto, sua base é fácil de entender. Fundamentalmente, o algoritmo divide uma palavra em regiões e, em seguida, substitui ou remove determinados sufixos se estiverem completamente contidos na referida região. Assim, por exemplo, o algoritmo Porter2 (ou seja, a versão atualizada), afirma que:

R1 é a região após a primeira não-vogal seguindo uma vogal, ou o fim da palavra se não existe tal não-vogal.

E então, você deve substituir “-cional”   com “-tion” se for encontrado dentro de R1.

Por exemplo:

  1. A palavra “confrontação” tem como região R1 “-frontação”

  2. “-cional” está completamente contido em seu R1

  3. “Confrontable” torna-se “confronto”

O Porter Stemmer é puramente algorítmico; não depende de um banco de dados externo ou regras computadas (ou seja, regras criadas de acordo com um banco de dados de treinamento). Esta é uma grande vantagem porque torna previsível e fácil de implementar. A desvantagem é que não pode lidar com casos excepcionais e os erros conhecidos não podem ser facilmente resolvidos. Por exemplo, o algoritmo cria o mesmo caule para universidade e universal.

O Porter Stemmer não é perfeito – mas é simples, eficaz e fácil de implementar. Para um idioma como inglês, um produtor pode ser realizado por qualquer desenvolvedor competente. Então, há muitos lá fora para todas as linguagens de programação notáveis ​​e não vamos listá-los aqui.

Problemas típicos com outros idiomas

A maioria das línguas que são um pouco próximas do inglês, como idiomas alemães ou mesmo romances, geralmente são fáceis de impedir. Na verdade, a criação do próprio algoritmo é complexa e requer um grande conhecimento da linguagem. No entanto, uma vez que alguém fez o duro trabalho de criar um algoritmo, implementar um é fácil.

Na sequência, existem muitos problemas com dois tipos de idiomas que você costuma encontrar. O primeiro tipo é a linguagem aglutinativa . Deixando de lado o significado lingüístico da expressão, a questão é que as linguagens aglutinantes acumulam prefixos e sufixos na raiz de uma palavra.

Em particular, o turco é problemático porque é uma linguagem aglutinativa e concatenativa, o que significa que basicamente, em turco, uma palavra pode representar uma frase inglesa completa. Isso dificulta o desenvolvimento de um algoritmo decisivo para o turco, mas também o torna menos útil. Isso ocorre porque, se você tiver uma palavra turca, pode acabar com uma haste para cada sentença, então você perde muita informação.

O segundo tipo de problema está relacionado ao idioma sem palavras claramente definidas . O chinês é o principal exemplo de uma linguagem que não tem alfabeto, mas apenas símbolos que representam conceitos. Então, stemming não tem significado para o chinês. Mesmo determinar os limites dos conceitos é difícil. O problema de dividir um texto em suas palavras componentes é chamado de segmentação de palavras . Com o inglês, você pode encontrar os limites das palavras apenas olhando o espaço em branco ou a pontuação. Não há coisas semelhantes em chinês.

Dividindo palavras

Um método alternativo para agrupar palavras similares depende de dividi-las. O fundamento deste método é separar as palavras na seqüência de caracteres. Esses caracteres são chamados de k-gramas , mas também são conhecidos como caracteres de n-gramas (n-gramas também podem indicar grupos de palavras). A sequência de chaO racters é construído de forma deslizante, avançando por um personagem em cada etapa, começando e terminando com um símbolo especial que indica os limites da palavra. Por exemplo, os 3 gramas para o feliz são:

  • $ ha

  • hap

  • aplicativo

  • ppy

  • py $

Com o símbolo $ usado para indicar o começo e o fim da palavra.

O método exato usado para pesquisa está além do escopo deste artigo. Em termos gerais, você aplica o mesmo processo ao (s) termo (s) de pesquisa e, em seguida, compare as ocorrências dos k-gramas da entrada com uma das palavras nos documentos. Normalmente, você aplica um coeficiente estatístico, como o coeficiente de Jaccard , para determinar quanto são similares as palavras devem ser agrupadas (ou seja, quantos gramas devem ter em comum). Por exemplo, com um alto coeficiente, você pode agrupar gato e gatos ou dividir gato e gato.

É importante observar algumas coisas: a ordem dos k-gramas e os erros ortográficos. A ordem dos k-grams não importa; em teoria, você poderia ter palavras completamente diferentes que passassem a ter os mesmos k-gramas. Na prática, isso não acontece. Este método é impreciso, o que significa que ele também pode proteger contra erros de ortografia do usuário. Por exemplo, mesmo que o usuário insira “locamotive” em vez de “locomotive”, provavelmente ainda mostrará os resultados corretos. Isso ocorre porque 7 de 10 matchs de 3 gramas. Os jogos exatos classificariam mais alto, mas a palavra “locamotive” não existe e, portanto, provavelmente não tem correspondências.

Limites e Eficácia

A grande vantagem desta técnica é que não é apenas puramente algorítmica e muito simples, mas também funciona com todos os idiomas. Você não precisa criar k-gramas para o inglês de forma diferente dos do francês. Você simplesmente separa as palavras da mesma maneira. No entanto, é importante notar que a eficácia está nos detalhes – você precisa escolher o número certo de k para obter os melhores resultados.

O número ideal depende do comprimento médio da palavra no idioma. Deve ser menor ou igual a isso. Diferentes idiomas podem ter valores diferentes, mas em geral, você pode fugir com quatro ou cinco. Você não terá os melhores resultados com apenas uma escolha, mas funcionará.

A desvantagem é que ele parece extremamente estúpido, vamos enfrentá-lo: é tão simples que não deve funcionar. Mas, na verdade, ele funciona bem, se não for melhor do que stemming (PDF) . É descaradamente eficaz, e tem muitos outros usos. Nós vamos ver um agora.

Gerando Nomes

O caso geral de gerar palavras falsas que parecem palavras reais é difícil e de uso limitado. Você poderia criar frases para um idioma falso, mas isso é praticamente isso. No entanto, é possível criar por programação nomes falsos realistas para uso em jogos ou para qualquer necessidade de construção do mundo.

Existem vários métodos viáveis. O mais fácil funciona de forma semelhante a esta:

  1. Crie um banco de dados de nomes do mesmo tipo que você deseja gerar (ou seja, nomes romanos, Space Lizards Names, etc.).

  2. Divida os nomes de entrada em k-gramas (ou seja, 3 gramas de Mark -> $ ma – mar – ark – rk $).

  3. Associe uma probabilidade aos k-gramas: quanto mais freqüentemente aparecem no banco de dados original, maior a chance de aparecerem no nome gerado.

  4. Gere os novos nomes!

Existem muitas variantes. Por exemplo, você pode combinar um número diferente de k-gramas para fins especiais (ou seja, todos os nomes começam com um 2 gramas, mas terminam em 4 gramas).

Você também pode melhorar a solidez dos nomes gerados simplesmente olhando as probabilidades das seqüências que aparecem em uma determinada ordem. Por exemplo, se você começar aleatoriamente com “ar”, a seguinte sílaba pode ser mais provável “th” do que “ou”.

Este método não é perfeito, mas geralmente funciona bem o suficiente. Você pode ver alguns exemplos simples em langgen ou VNameGenerator , que mostra variações do método mencionado e alguns outros.

Conclusão

Este é o fim da Parte 1! Na Parte 2, falaremos sobre a classificação de documentos. Em outras publicações, discutiremos documentos de compreensão, análise de documentos, análises de sentimentos, bibliotecas de PNL e muito mais. Fique ligado!

See Campaign: http://dzone.com/articles/a-guide-to-natural-language-processing-part-1
Contact Information:
Gabriele Tomassetti

Tags:
, Wire, Artificial Intelligence Newswire, United States, Portuguese

image


Keywords:  afds, afdsafds

Tags:  News