[Algoritmos] [PLN#10] Information Extractor - como extrair triplas

O Processamento de Linguagem Natural além de identificar palavras importantes e compreender como elas podem ser utilizadas, também busca encontrar relações entre as palavras.  A linguística claramente mostra que uma frase é composta por palavras que são conectadas por um contexto e informações. Mas seria possível um programa de computador compreender quais são as conexões existentes em um texto em linguagem natural?

Os esforços para compreender a linguagem a ponto de conseguir interagir com ela é um desafio que já obteve muitos avanços na área de Inteligência Artificial. Um destes esforços importantes é o computador Watson da IBM que promete ser uma grande porta de entrada para desenvolvedores que desejam integrar o PLN em suas aplicações.

Veja esta matéria bastante divertida feita pelo Jovem Nerd sobre a exposição de arte organizada pelo grupo de estudos da IBM.



Mesmo que empresas grandes como a IBM, Google, Microsoft tenham despertado para o poder do Processamento de Linguagem Natural como ferramenta útil, estas empresas ainda caminham juntamente com a comunidade e desfrutam de descobertas compartilhadas por inúmeros estudiosos do mundo todo. 

É claro que compreender partes da fala humana e gerar uma resposta automaticamente é um trabalho bastante complexo. Mas neste post vamos explicitar uma parte importante sobre a extração de informações. O algoritmo denominado Subject-Verb-Object é bastante utilizado na literatura de processamento de linguagem natural, pois identifica sequências comuns na comunicação humana.

Este algoritmo tem como premissa que muitas frases criadas tem a estrutura de um sujeito (agente) que realiza uma ação (verbo) sobre um determinado objeto. Observe o exemplo:

Maria dirige o carro.

Na frase acima temos: "Maria" como o sujeito, "dirige" como a ação tomada e "o carro" como objeto. Sendo assim, esta sequência forma uma tripla que contém uma informação válida. Esta busca por informações em um texto é denominada "Information Extraction" ou "Extração de Informações".

Mais uma vez a Universidade de Stanford, como destaque neste tipo de pesquisa, disponibiliza gratuitamente o projeto desenvolvido pelo seu grupo de PLN um extrator de informações. O download destes pacotes pode ser feito neste link. Esta ferramenta é baseada no Stanford parser e utiliza vários algoritmos para extrair estes relacionamentos. 

Veja um  exemplo de utilização do código na linguagem Java:


import edu.stanford.nlp.ie.util.RelationTriple;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.naturalli.NaturalLogicAnnotations;
import edu.stanford.nlp.util.CoreMap;

import java.util.Collection;
import java.util.Properties;

/**
 * A demo illustrating how to call the OpenIE system programmatically.
 */
public class OpenIEexample {

    public static void main(String[] args) throws Exception {
        // Create the Stanford CoreNLP pipeline
        Properties props = new Properties();
        props.setProperty("annotators", "tokenize,ssplit,pos,lemma,depparse,natlog,openie");
        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

        // Annotate an example document.
        Annotation doc = new Annotation("I like milk, I am a cat.");
        pipeline.annotate(doc);

        // Loop over sentences in the document
        for (CoreMap sentence : doc.get(CoreAnnotations.SentencesAnnotation.class)) {
            // Get the OpenIE triples for the sentence
            Collection<RelationTriple> triples = sentence.get(NaturalLogicAnnotations.RelationTriplesAnnotation.class);
            // Print the triples
            for (RelationTriple triple : triples) {
                System.out.println(triple.confidence + "\t"
                        + triple.subjectLemmaGloss() + "\t"
                        + triple.relationLemmaGloss() + "\t"
                        + triple.objectLemmaGloss());
            }
        }
    }
}

---------------------------Output -----------------------------

1.0 I be cat


Lembrando que outros códigos sobre este assunto estão em nosso GitHub. Clique na imagem abaixo para acessar:



[Algoritmos] [PLN#10] Information Extractor - como extrair triplas [Algoritmos] [PLN#10] Information Extractor - como extrair triplas Reviewed by Vinicius dos Santos on 18:14:00 Rating: 5

Nenhum comentário

Escreve ai sua opinião!