spaCy: Processamento de Linguagem Natural avançado em Python

Fazer com que uma máquina entenda texto não é uma tarefa fácil, mas os últimos anos resultaram em grandes avanços conceituais. Para o desenvolvedor de algoritmos, estes avanços têm sido apresentados como bibliotecas especializadas em tratar dados no formato de texto. spaCy é uma biblioteca desenvolvida com foco no seu uso em ambientes de produção, possibilitando a criação de aplicativos que processam e “entendem” grandes volumes de texto. Ela pode ser usada para extrair informações, entender linguagem natural ou preprocessar textos para posterior uso em modelos de deep learning.

Curso sobre o spaCy

Tarefas

Através do emprego de processos independentes e modelos linguísticos estatísticos, o spaCy realizar as principais tarefas relacionadas ao universo do Processamento de Linguagem Natural (PLN).

Tokenização

É o processo de segmentar o texto em tokens, que são as formas mais elementais (geralmente palavras e pontuação) que carregam significado. O processo de tokenização deve levar em consideração detalhes como, por exemplo, se determinada pontuação indica ou não separação de tokens. Por exemplo, na frase “Vou viajar pra N.Y.”, o segmento N.Y. indica a entidade Nova York, e deve ser considerado um único token. Os modelos disponíveis no spaCy permitem essa tokenização especializada, produzindo resultados altamente adequados para as tarefas seguintes.

Part-of-Speech (POS) Tagging

Essa tarefa trata de determinar se um token é substantivo, verbo, adjetivo, advérbio ou outra classe qualquer. O processo de POS tagging pelo spaCy permite resolver conflitos como, por exemplo, decidir se a palavra casa é substantivo (como em “Estou indo para casa.”) ou verbo (como em “O padre casa os noivos.”)

Determinação de Dependência

Envolve descrever as relações entre os tokens presentes dentro de uma frase, como determinar o sujeito, o objeto e o verbo que os conecta. Elucidar essas relações é essencial para entender o significado de um texto.

Lemmatização

Esse processo reduz as flexões das palavras ao seu lemma ou raiz. Por exemplo, a palavra no plural aviões é derivada do lemma avião, assim como o verbo assistimos tem origem no lemma assistir. A lemmatização costuma simplificar e generalizar os resultados de algumas tarefas de PLN posteriores.

Detecção de sentenças

O spaCy determina onde uma sentença começa e termina, o que é usado em tarefas posteriores para, por exemplo, definir se duas sentenças são relacionadas entre si, se uma é conclusão da outra, se uma indica um acontecimento posterior ao relatado na outra, e assim por diante.

Reconhecimento de entidades nomeadas

Esta tarefa, geralmente conhecida pelo seu nome em inglês (named entity recognition, NER), trata de rotular entidades reais mesmo em situações ambíguas, como pessoas (tal como o ator conhecido pelo nome artístico The Rock), empresas (Apple, que pode se referir à fruta) ou lugares (São Paulo, a cidade ou o santo?).

Similaridade

O spaCy possui métodos implementados para comparar textos, trechos ou documentos inteiros, calculando similaridades de acordo com vários métodos de embedding e métricas estabelecidas na área de PLN.

Classificação de textos

O spaCy também pode processar textos para lhes atribuir rótulos ou categorias, o que ele faz com base em alguns dos métodos descritos anteriormente.

Sintaxe

A sintaxe de uso do spaCy é bastante simplificada: um modelo linguístico pode ser carregado e usado para instanciar uma classe com o texto de interesse, através da qual todos os métodos estão disponíveis. Simples assim:

nlp = spacy.load('modelo_linguistico')
doc = nlp('Esta é uma frase modelo')
for token in doc:
    print(token.text)
[Output]
Esta
é
uma
frase
modelo

Além do texto (text), outros atributos dos tokens podem ser acessados, como lemma_, pos_ (para POS-tag), dep_ (para relação de dependência) ou is_stop (que indica se se trata de uma stopword).

As entidades nomeadas podem ser recuperadas do iterável doc.ents, que contêm atributos como start_char (número do caractere onde a entidade começa), end_char e label_ (nome da categoria a que pertence).

nlp = spacy.load('modelo_linguistico')
doc = nlp('Eu moro em São Paulo')
for ent in doc.ents:
    print(ent.text, ent.start_char, ent.end_char, ent.label_)
[Output]
São Paulo 11 19 GPE

Conclusão

O spaCy é uma poderosa ferramenta para Processamento de Linguagem Natural avançado em Python, disponibilizando, através de uma sintaxe simples e intuitiva, as principais ferramentas para extrair informações e anotar textos, dados que podem depois ser usados em modelos de PLN mais complexos.

Curso sobre o spaCy

Sobre o autor

1 comentário em “spaCy: Processamento de Linguagem Natural avançado em Python”

Deixe um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.