NLP: explorando modelos para Linguagem Natural

NLP: explorando modelos para Linguagem Natural

O Processamento de Linguagem Natural (Natural Language Processing - NLP, em inglês) vem crescendo continuamente e têm recebido muita atenção nos últimos tempos na área de Aprendizado de Máquina.

Isso acontece pela grande capacidade que os modelos de NLP têm para lidar com conteúdos textuais.

Através deles, podemos realizar diversas tarefas diferentes envolvendo a linguagem humana, desde a geração até a classificação de texto.

Neste artigo, vamos entender o que são modelos de NLP, e explorar os diferentes tipos de modelos de NLP, como os seguintes:

  • tradução
  • resumo
  • geração e resposta a textos, entre outros.

E o melhor de tudo: vamos trazer exemplos práticos com código para você já ter capacidade de aplicar agora mesmo.

Então, vem comigo nesta leitura e vamos explorar os modelos de NLP!

O que são modelos de NLP

Os modelos de NLP podem ser utilizados para realizar diferentes tipos de tarefas relacionadas a textos.

Somos capazes de utilizar modelos pré-treinados, e até mesmo realizar a tunagem, onde utilizamos um modelo pré-treinado em um conjunto de dados específico para a tarefa que desejamos realizar.

Para fazer isso, temos diversos modelos robustos disponibilizados gratuitamente em plataformas como o Hugging Face.

Dito isso, a partir de agora, vamos explorar diversos exemplos de aplicações dos modelos de NLP, entre eles: classificação de texto, classificação zero-shot, resumo de texto, tradução de texto, geração de texto e resposta a textos.

Classificação de texto

A classificação de texto tem como objetivo rotular textos. Um exemplo de aplicação seria a análise de sentimentos, onde classificamos um texto em positivo, negativo ou neutro.

O DISTILBERT é um exemplo de modelo para classificação de texto. Através dele conseguimos digitar um texto e avaliar se foi um comentário positivo ou negativo.

No exemplo a seguir, vamos utilizar um modelo tunado com foco no inglês a partir do DISTILBERT:

from transformers import pipeline

classifier = pipeline(model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")

classifier("This cake looks so delicious!")

Resultado:

[{'label': 'POSITIVE', 'score': 1.0}]

O resultado final apresenta um rótulo e uma pontuação. O rótulo indica se o comentário foi positivo ou negativo e a pontuação demonstra o nível de positivo/negativo deste comentário.

No nosso exemplo, a frase inicial diz o seguinte: “Este bolo parece delicioso!”. O resultado marca corretamente que ele foi positivo.

Classificação zero-shot

Na classificação zero-shot, você consegue classificar textos que não foram vistos durante o treinamento.

A ideia é que consigamos utilizar o modelo para outras tarefas, além das que foram treinadas anteriormente.

Isso acontece sem precisarmos dar nenhum exemplo prévio do texto que desejamos classificar.

Para isso, podemos utilizar um texto de entrada e definir quais são os possíveis rótulos que podem ser aplicados.

Com isso, o modelo irá apontar quais rótulos são mais prováveis de pertencer ao texto, apenas com a sua própria capacidade desenvolvida durante seu treinamento inicial.

Para esse tipo de classificação, podemos utilizar os seguintes modelos:

  • BART
  • Llama
  • Gemma
  • Bloom

Além disso, podemos utilizar o modelo padrão da tarefa “zero-shot-classification” na função pipeline().

Como exemplo, vamos fornecer um texto falando que este artigo aborda modelos de NLP, com os possíveis rótulos: educação, política e negócios:

from transformers import pipeline

classifier = pipeline("zero-shot-classification")
classifier(
    "This is a article about NLP models",
    candidate_labels=["education", "politics", "business"],
)

Resultado:

{'sequence': 'This is a article about NLP models',
 'labels': ['education', 'business', 'politics'],
 'scores': [0.8445963859558105, 0.111976258456707, 0.043427448719739914]}

Como podemos verificar no resultado, uma pontuação de 0 a 1 é dada para cada rótulo listado. Nesse caso, o rótulo com maior nota foi o de “education” (educação), indicando corretamente o tema do texto inserido.

Resumo de texto

Como o próprio nome indica, esse tipo de modelo é capaz de resumir textos. Existem modelos com diferentes capacidades, seja para textos grandes, pequenos, apenas uma linguagem ou várias linguagens.

Esse resumo pode ser realizado de duas formas: tirando partes importantes do texto e usando para gerar o resumo; ou pegando a ideia principal e escrevendo um resumo com texto novo/criado.

O modelo padrão utilizado pela tarefa de resumo do pipeline é DISTILLBART. Podemos escolher entre manter a tarefa padrão ou então escolher o modelo que iremos utilizar.

Alguns exemplos de modelos que são capazes de realizar resumo:

  • BART
  • mT5
  • pegasus

Para verificar na prática como essa tarefa funciona, vamos manter o seu modelo padrão no pipeline. Como esse modelo aceita apenas textos em inglês, vamos utilizar um texto nessa língua.

Para isso, vamos usar um texto em inglês explicando o que é NLP:

from transformers import pipeline

summarizer = pipeline("summarization")
summarizer(
    """
    Natural Language Processing (NLP) is a branch of artificial intelligence that focuses on enabling machines to understand, interpret, and generate human language. It bridges the gap between human communication and computer comprehension, making it possible for computers to process large amounts of natural language data. NLP draws on both linguistics and computer science, utilizing algorithms to analyze and understand the structure and meaning of language.

The process begins with breaking down text into smaller components, such as words or phrases, a step known as tokenization. This is followed by identifying the grammatical role of each word, which helps in understanding the sentence's overall structure. More advanced techniques include recognizing entities like names of people or places, as well as analyzing the sentiment or emotional tone behind the text. NLP also enables machines to translate text from one language to another, making services like Google Translate possible.

One of the most common uses of NLP is in the development of virtual assistants, like Siri and Alexa, which rely on this technology to understand and respond to voice commands. Sentiment analysis, another key application, is widely used by companies to gauge public opinion on social media or customer feedback. Additionally, NLP has revolutionized machine translation, allowing for more accurate and faster translations across multiple languages. Overall, NLP is transforming how humans interact with technology, providing more intuitive and natural ways for people to communicate with machines.
"""
)

Resultado:

[{'summary_text': 'Natural Language Processing (NLP) is a branch of artificial intelligence that enables machines to understand, interpret, and generate human language. It bridges the gap between human communication and computer comprehension. NLP breaks down text, analyzes grammar, recognizes entities, and detects sentiment. Common uses include virtual assistants, sentiment analysis, and machine translation.'}]

Através do resultado final, conseguimos perceber que esse modelo padrão fez o resumo pegando trechos do próprio texto. Dessa forma, conseguimos entender claramente qual os principais pontos do texto.

Tradução de texto

A tradução de texto também é uma das tarefas realizadas por modelos de NLP. Assim como os modelos de resumo, eles possuem diferentes capacidades, como tamanho do texto e linguagens.

Para realizar a tradução, podemos utilizar os seguintes modelos:

  • Helsinki
  • T5
  • NLLB

As línguas disponíveis para tradução variam de modelo para modelo, onde alguns possuem mais variedade que outros.

Por exemplo, NLLB é um modelo do Facebook e tem capacidade para 196 línguas, enquanto o T5, do Google, cobre apenas 5.

Para exemplificar, vamos traduzir um texto do inglês para o português utilizando o modelo do Facebook:

from transformers import pipeline

translator = pipeline("translation", model="facebook/nllb-200-distilled-600M", src_lang=”eng_Latn”, tgt_lang=”por_Latn”)
translator("I am excited to use NLP models..")

Resultado:

[{'translation_text': 'Eu estou animado para utilizar modelos de NLP.'}]

No caso do modelo utilizado, tivemos que especificar tanto a linguagem de origem, o inglês, quanto a linguagem final, o português. Para isso, temos que inserir o código de cada língua corretamente, de forma que o modelo entenda.

Geração de texto

Os modelos de geração de texto são capazes de continuar um texto a partir de uma entrada, como uma frase inicial. Após essa frase, ele gera o restante do texto com base na ideia central do texto inicial.

Assim como os modelos Classificação Zero-Shot, para esse tipo de tarefa, temos alguns modelos para utilizar:

  • Llama
  • Gemma
  • Bloom
  • Mixtral

Podemos escolher alguns desses modelos, mas também é possível utilizar o modelo padrão da tarefa, e é isso que vamos fazer para nosso exemplo.

Vamos dar uma frase inicial para que o modelo continue gerando o restante do texto:

from transformers import pipeline

generator = pipeline("text-generation")
generator("In this article, we will teach you how to")

Resultado:

[{'generated_text': 'In this course, we will teach you how to understand and use '
                 data flow and data interchange when handling user data. We '
                    'will be working with one or more of the most commonly used '
                    'data flows — data flows of various types, as seen by the '
                    'HTTP'}]

Nesse exemplo, utilizamos a frase “Neste artigo, vamos ensinar você a” para iniciar a geração de texto.

Como a geração é aleatória, o resultado trouxe um texto falando sobre fluxo de dados. Para obter um resultado novo, basta rodar o código novamente.

Resposta a textos

Anteriormente, exploramos um tipo de modelo que consegue gerar textos. Além disso, temos modelos para extrair textos a partir de uma entrada.

Nesse caso, podemos extrair respostas a perguntas a partir de um dado contexto. Diferente da geração de texto, nesse tipo de tarefa o resultado é retirado do próprio texto inserido.

Como exemplos de modelos, temos:

  • BERT
  • Roberta
  • Llama

Para exemplificar, vamos fazer uma pergunta sobre o artigo:

from transformers import pipeline

question_answerer = pipeline("question-answering")
question_answerer(
    question="What is this article about?",
    context="This article focus on NLP models",
)

Resultado:

{'score': 0.7385916471481323, 'start': 22, 'end': 32, 'answer': 'NLP models'}

Como podemos perceber, o resultado final é baseado no contexto dado para a pergunta, indicando a pontuação, onde a resposta começa e termina, além de qual é a resposta da pergunta.

Banner da Escola de Data Science: Matricula-se na escola de Data Science. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Conclusão

Neste artigo, conseguimos explorar os principais modelos de NLP, onde desvendamos o funcionamento e como aplicar na prática com código.

Através desses modelos, conseguimos realizar tarefas que vão desde a classificação de texto até a geração de novos textos.

Além disso, temos acesso a todos esses modelos de forma gratuita, o que nos permite desenvolver aplicações sem maiores custos.

Durante a leitura, fomos capazes de:

  • Explorar os principais modelos de NLP;
  • Conhecer os modelos para cada tipo de tarefa;
  • Verificar na prática como aplicar cada modelo.

Quer aprender a desenvolver aplicações utilizando modelos de NLP? Para isso, confira a formação Dominando Hugging Face com Python.

Além disso, para mais informações sobre modelos de NLP em geral, acesse a documentação do Hugging Face sobre Transformers.

Um abraço e até mais!

Créditos

Marcelo Cruz
Marcelo Cruz

Sou formado em Ciência da Computação pela UNIR. Atualmente, sou Instrutor na Escola de Dados. Gosto muito de aprender e compartilhar conhecimento. Apaixonado por Python e Dados.

Veja outros artigos sobre Data Science