Extração de Informações

Por: em 21 de junho de 2018

Uma das áreas de maior interesse em Processamento de Linguagem Natural é a que trata de extração de informações de textos. Grande parte da pesquisa científica desenvolvida no Brasil nos últimos anos foi direcionada para esta área [1]. Tal interesse se justifica pela necessidade de se recuperar informações da enorme quantidade de dados gerada continuamente pela Internet e também por bases de dados tradicionalmente criadas e mantidas em formato não estruturado, como é o caso de processos jurídicos, artigos científicos, e receitas e prescrições médicas. O acesso a estas informações normalmente é realizado de forma manual, mesmo quando indexadas e disponibilizadas por meio de um mecanismo automatizado de busca. Por outro lado, as técnicas de Extração de Informações se propõem a criar metadados obtidos a partir dos textos analisados, sendo o formato de triplas <E1 Rel E2>, onde E1 e E2 são entidades e Rel é o relacionamento entre elas, o mais utilizado para representá-los. Entidades são pessoas, organizações e locais enquanto os relacionamentos indicam como as entidades se interligam semanticamente. No entanto, para um programa de computador, textos são apenas cadeias de caracteres. Como fazer para obter entidades e relações semânticas computacionalmente?

Técnicas e Algoritmos

De maneira geral, técnicas de extração de informações buscam por tipos de relacionamentos conhecidos a priori, por exemplo, E1 é parte de E2, ou E1 é um tipo de E2. Tais relacionamentos são obtidos através de regras definidas por especialistas e implementadas computacionalmente através de expressões regulares aplicadas sobre pedaços do texto (chunks). A Fig.1 apresenta uma arquitetura clássica para extração de informações. De acordo com este modelo, primeiro o texto é dividido em sentenças (sentence segmentation), depois cada sentença é dividida em tokens (palavras, números e caracteres especiais) e, então, os tokens são etiquetados com sua função morfossintática (part of speech tagging). A partir dai, são identificadas entidades (entity detection) e, por fim, os relacionamentos (relation detection).

 

Fig.1 Arquitetura para Extração de Informações [2].

 

Vamos usar um exemplo para ilustrar o funcionamento do modelo apresentado. Inicialmente definiremos a função ie_preprocess que realiza as três primeiras etapas do fluxo da Fig.1:

 

 Em seguida, vamos analisar a frase “We saw the yellow dog”, executando a função ie_preprocess:

O resultado da execução da função apresenta os tokens da sentença etiquetados com as funções morfossintáticas – PRP, VBD, DT, JJ, e NN. O passo seguinte é identificar as entidades. Faremos isso primeiramente identificando os sintagmas nominais a partir de pedaços da sentença (chunks):

Reparem que definimos a composição de um sintagma nominal NP usando uma expressão regular “NP: {<DT>?<JJ>*<NN>|<PRP>}” que gerou, como resultado, dois sintagmas nominais: (NP We/PRP) e (NP the/DT yellow/JJ dog/NN). Podemos representar visualmente os sintagmas e seu relacionamento através de uma árvore:

Como podemos observar, os dois sintagmas nominais se relacionam através do verbo “saw”. A tripla encontrada no exemplo foi < NP VBD NP >.

Existem conjuntos de textos já previamente etiquetados que permitem a busca direta de entidades e relacionamento através de expressões regulares, como por exemplo, o corpus Brown. Abaixo selecionamos os primeiros relacionamentos do padrão {<V.*> <TO> <V.*>}:

Vamos agora analisar o corpus “ieer”, que possui etiquetas que identificam entidades tais como pessoas, organizações, localizações e tempo transcorrido. Processaremos artigos do periódico New York Times e utilizaremos o padrão de relacionamento “IN” para procurar por organizações que se encontram em determinadas localizações.

 Neste exemplo, o programa trouxe as entidades relacionadas pelo padrão “IN”.

Os resultados apresentados mostram a localização das organizações identificadas. Por exemplo, a WHYY, empresa de mídia, encontra-se na Philadelphia. Já o Freedom Forum encontra-se em Arlington, enquanto a Georgia-Pacific encontra-se em Atlanta. Podemos repetir o processamento buscando por pessoas ou invés de organizações. Neste caso, o padrão do tipo “ORG” é substituído pelo tipo “PERSON”.

Os resultados apresentados mostram as localidades das pessoas identificadas pelo processamento. Por exemplo, Miller foi citado, pois iniciará um show na Philadelphia. Já Jerry Yang foi citado por ser fundador de uma empresa localizada em Santa Clara.

Outra abordagem é a Extração de Informações Abertas – OIE [3][4][5], que é adequada quando as relações de destino são desconhecidas e os dados textuais são heterogêneos. As técnicas de OIE extraem todos os tipos possíveis de relacionamento de uma determinada coleção de documentos e podem ser divididas em duas categorias principais: baseadas em dados e em regras. O ReVerb [3][6] extrai relacionamentos baseados em uma restrição simples: cada sequência de palavras que conectam duas entidades, deve ser:

1) Um verbo (por exemplo, inventado);

2) Um verbo seguido imediatamente por uma preposição (por exemplo, localizado em);

3) Um verbo seguido por substantivos, adjetivos ou advérbios terminados em uma preposição (por exemplo, tem peso atômico de).

Se houver várias correspondências possíveis para um único verbo, a correspondência mais longa possível é escolhida. Se o padrão corresponder a várias sequências adjacentes, o ReVerb as mescla em uma única frase de relação. Durante a extração, o sistema primeiro procura por uma frase relacional correspondente e, depois, pelos argumentos (e1, e2) do relacionamento, evitando, assim, confundir um substantivo na frase relacional de um argumento.

De maneira geral, existem diversas bibliotecas que auxiliam na extração de informações de textos escritos em inglês, porém não existem muitas para processar textos em português. O nlpnet [7] é uma delas. O nlpnet [7] foi desenvolvido em linguagem python para etiquetagem morfossintática e para a extração de informações de textos escritos em português. O nlpnet usa dois tipos de redes neurais: MLP (Multilayer Perceptron) para etiquetagem morfossintática e Convolutional para extração de informações. Vamos realizar um processamento simples para mostrar como o nlpnet funciona.

Analisando o código, vemos que após a importação da biblioteca nlpnet, foi definido o diretório de acesso aos modelos treinados, instanciado o objeto tagger e analisada a sentença “O rato roeu a roupa do rei de Roma”. O resultado foi carregado em um dicionário com a tripla A0 V A1, sendo A0 composto por uma lista com os elementos “O” e “rato”; V composto pelo verbo “roeu” e A1 uma lista com os elementos “a”, “roupa”, “do”, “rei”, “de”, “Roma”.

 

Conclusões 

Neste post fizemos uma breve introdução sobre técnicas computacionais de extração de informações de textos. Esta é uma área de grande importância no processamento de linguagem natural, dada a grande aplicabilidade em sistemas que usam intensamente dados não estruturados como é o caso de sistemas jurídicos, médicos e acadêmicos. Vimos conceitos e aplicações práticas, observando os resultados obtidos em cada cenário.

 

PLN no Datalab 

O Latam Datalab atua ativamente em pesquisas envolvendo processamento da língua natural. Técnicas de extração de informações são amplamente usadas para resolver problemas de áreas nas quais o uso de textos é intensivo, tais como jurídico, inteligência de mercado e atendimento ao consumidor.

 

Referências 

[1] Ladeira, M.P. Processamento da Linguagem Natural: Caracterização da Produção Científica dos Pesquisadores Brasileiros. Tese de Doutorado, UFMG, Minas Gerais, 2010.
[2] Bird, Steven, Edward Loper and Ewan Klein (2009), Natural Language Processing with Python. O’Reilly Media Inc. Disponível em https://www.nltk.org/book/ch07.html. Acesso: 01/06/2018.
[3] Blog do David Batista. Disponível em: http://www.davidsbatista.net/blog/2017/05/08/ReVerb/. Acesso: 01/06/2018.
[4] Etzioni et al. (2008). Open Information Extraction: the Second Generation. Disponível em: https://homes.cs.washington.edu/~mausam/papers/ijcai11.pdf.
Acesso: 01/06/2018.
[5] Banko, et al. (2007). Open Information Extraction from the Web. Disponível em:
https://www.aaai.org/Papers/IJCAI/2007/IJCAI07-429.pdf. Acesso: 01/06/2018.
[6] Fader et al. (2011). Identifying Relations for Open Information Extraction. Disponível em: http://www.aclweb.org/anthology/D11-1142. Acesso:01/06/2018.
[7] Fonseca, E. R. and Rosa, J.L.G. A Two-Step Convolutional Neural Network Approach for Semantic Role Labeling. Proceedings of the 2013 International Joint Conference on Neural Networks, 2013. p. 2955-2961.

21 de junho de 2018