NLP | Modelo de Question Answering em qualquer idioma baseado no BERT base (estudo de caso em português)

Pierre Guillou
9 min readFeb 12, 2021

--

Exemplo de sequência de palavras de um texto que constitui a resposta à uma questão (BERT base)
Exemplo de sequência de palavras de um texto que constitui a resposta à uma questão (BERT base)

Este tutorial apresenta um método universal (e gratuito!) para treinar um modelo BERT base para encontrar uma resposta a uma pergunta em um texto (se chama BERT QA ou BERT Question Answering), o tipo de modelo usado pelo… Google Search! O método é aplicado ao caso do português e o modelo resultante é publicado no Model Hub da Hugging Face enquanto o seu caderno de treinamento está disponível no Google Colab e GitHub (versão nbviewer). Obrigado a todas as organizações (veja o paragrafo “Agradecimentos”) que tornaram possível obter tal modelo eficiente de PLN (Processamento de Linguagem Natural)!

  • Link para testar online e baixar o modelo:
  • Link para o segundo post sobre BERT large QA:

Sumário

  • Contexto
  • Objetivo: modelo BERT QA em português
  • Agradecimentos
  • O que faz um modelo QA?
  • Método para treinar um modelo QA
  • Etapas do treinamento do modelo BERT base QA base em português
  • Exemplo de uso | Nosso modelo BERT QA em português vs o BERT QA do Google Search
  • Outros exemplos de uso
  • Aviso

Contexto

Qual é a utilidade de conhecer um idioma? É claro que é essencial para a atividade humana, permitindo-nos em particular a pesquisa diária de informações (Qual é previsão do tempo para hoje? Quais são as principais manchetes das notícias? Que horas são? Quanto custa este produto? Quando começou a pandemia de Covid-19 no mundo?… ).

No entanto, essa funcionalidade não é mais reservada exclusivamente para humanos. Graças à revolução do PLN (NLP em inglês) por meio de modelos Transformer como o BERT, é possível treinar um modelo para entender uma linguagem (modelo de linguagem natural), mas também para realizar uma tarefa específica, como buscar uma resposta em um texto (modelo de Question Answering, seja modelo QA).

Por exemplo, o Google Search incluiu em seu algoritmo de busca um modelo BERT QA no final de 2019, o que permite publicar a resposta a uma pesquisa diretamente no topo da página de resultados :-)

A questão é se uma pessoa, órgão público ou empresa também pode ter acesso a esse modelo de QA em português?

Página de resultados do Google Search com a resposta à pesquisa, não apenas links

Nota: existem outras tarefas que os modelos PNL recentes podem realizar. Para ver uma lista delas, bem com dos modelos correspondentes, consulte esta página: https://huggingface.co/models

Objetivo: modelo BERT QA em português

Na verdade, devido à importância dessa funcionalidade de QA, a pesquisa nesta área é muito ativa (consulte a lista de artigos no arxiv.org), mas parece se concentrar mais em modelos QA em inglês.

No mínimo, no Model Hub da Hugging Face (HF), não existiam tais modelos BERT QA em português até o dia 10 de fevereiro de 2021.

No Model Hub da Hugging Face, não existiam tais modelos BERT QA em português até o dia 09/02/2021
No Model Hub da Hugging Face, não existiam tais modelos BERT QA em português até o dia 10/02/2021

Este artigo preenche este vazio publicando um modelo BERT QA em português no Model Hub da HF de acordo com as boas práticas sobre o compartilhamento de modelos de PLN e usando apenas recursos online sem taxas de uso.

Portuguese BERT base cased QA (Question Answering), finetuned on SQUAD v1.1 no Model Hub da HF (12/02/2021)
Portuguese BERT base cased QA (Question Answering), finetuned on SQUAD v1.1 no Model Hub da HF (12/02/2021)

Agradecimentos

A publicação online de modelos de PLN é hoje extremamente facilitada por vários órgãos de IA que publicam em Open Source ou que disponibilizam ferramentas online como scripts e plataformas GPU:

Por fim, gostaria de agradecer o AI Lab, laboratório em Inteligência Artificial da Universidade de Brasilia (UnB), do qual faço parte como pesquisador e docente em Deep Learning, e que me permite de atualizar meu conhecimento em Deep Learning, e em PLN em particular.

Et voilà! Sem esses atores, gerar um modelo QA eficiente em português e acessível a todos seria muito mais complicado e certamente impossível devido à complexidade do código para digitar e aos custos de tal projeto (recursos humanos, plataformas com GPU, tempo de computação…).

Lista de organizações que possibilitaram a geração de um modelo BERT base de Question Answering em português. Obrigado!
Lista de organizações que possibilitaram a geração de um modelo BERT base de Question Answering em português. Obrigado!

O que faz um modelo QA?

Um modelo QA é um modelo de linguagem natural (BERT, por exemplo) adaptado à tarefa de responder a perguntas, seja um modelo capaz de extrair de um texto (o contexto) a sequência de palavras que constitui a resposta a uma pergunta.

Método para treinar um modelo QA

O método de 4 etapas a seguir requer um modelo de linguagem natural na língua portuguesa, bem como um dataset de QA em português. Ele segue a identificação de boas práticas para o compartilhamento de modelos de PLN.

  1. Baixe um modelo de linguagem natural já treinado em um corpus geral da língua portuguesa a partir do Model Hub da Hugging Face (HF).
  2. Baixe um dataset de QA em português.
  3. Ajuste (fine-tuning) esse modelo para a tarefa de QA em português usando esse dataset e o caderno question_answering.ipynb da HF.
  4. Publique esse último modelo no Model Hub da HF junto com o seu caderno de treinamento no GitHub e/ou Google Colab.

Nota: entre as etapas 2 e 3, a gente poderia ajustar o modelo de linguagem natural aos textos que constituem o corpus do dataset de QA usando os cadernos de language-modeling da HF. Isso poderia ser interessante no caso de um corpus técnico (por exemplo, na medicina ou no jurídico). Para obter um modelo QA atuando com eficiência nos textos gerais (por exemplo, textos da Wikipedia), não é necessário.

Etapas do treinamento do modelo BERT base QA em português

De acordo com esse método, segui as seguintes etapas para obter meu modelo BERT QA base em português:

Etapa 1 — Modelo de linguagem natural em português

Aqui está a lista dos modelos de linguagem natural na língua portuguesa no Model Hub da Hugging Face:

https://huggingface.co/models?filter=pt,fill-mask

Resolvi baixar o modelo BERT base cased da Neuralmind que é o mais usado ​​e que foi treinado com textos de um corpus geral (BrWaC (Brazilian Web as Corpus)): neuralmind/bert-base-portuguese-cased

Etapa 2 — Dataset de QA em português

O dataset mais usado no mundo de idioma inglês para trainar modelos QA é o SQUAD (Stanford Question Answer Dataset) dataset consistindo em perguntas feitas por crowdworkers em um conjunto de artigos da Wikipedia, onde a resposta para cada pergunta é um segmento de texto, ou extensão, da passagem de leitura correspondente (mais de 100.000 pares de perguntas e respostas em mais de 500 artigos).

No Brasil, o grupo Deep Learning Brasil publicou uma versão em português, usando uma tradução automática pelo Google Tradutor do dataset SQuAD v1.1 em inglês e ficou uns 2 meses fazendo revisão e algumas correções: squad-pt.tar.gz no Google Drive. (fonte)

Etapa 3— Caderno de treinamento

A gente modificou só um pouquinho o caderno question_answering.ipynb da HF para adaptá-lo a esse dataset SQUAD pt.

A plataforma usada foi o Google Colab que permitiu ajustar o modelo BERT base cased em português da Neuralmind para a tarefa QA em 2 horas e 30 minutos em apenas um GPU (Tesla T4, 15GB RAM) e gratuitamente.

Aqui estão as versões das bibliotecas e do GPU usadas:

Python version: 3.6.9 (default, Oct  8 2020, 12:12:24)Pytorch: 1.7.0+cu101Successfully installed datasets-1.3.0 fsspec-0.8.5 huggingface-hub-0.0.2 pyarrow-3.0.0 sacremoses-0.0.43 tokenizers-0.10.1 transformers-4.3.2 xxhash-2.0.0!nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
!nvidia-smi
NVIDIA-SMI 460.39
Driver Version: 460.32.03
CUDA Version: 11.2
Tesla T4, 15109MiB

Etapa 4 — Modelo QA publicado

f1 = 82.50
exact match = 70.49

O modelo BERT QA resultante foi publicado no Model Hub da Hugging Face no dia 12/02/2021:

Portuguese BERT base cased QA (Question Answering), finetuned on SQUAD v1.1 no Model Hub da HF (12/02/2021)
Portuguese BERT base cased QA (Question Answering), finetuned on SQUAD v1.1 no Model Hub da HF (12/02/2021)

Exemplo de uso | Nosso modelo BERT QA em português vs o BERT QA do Google Search

Vamos pegar o exemplo da pergunta feita ao Google Search no início desta postagem (“Quando começou a pandemia de Covid-19 no mundo?”) com o texto da página da Wikipedia onde a pesquisa do Google encontrou a resposta correta:

A pandemia de COVID-19, também conhecida como pandemia de coronavírus, é uma pandemia em curso de COVID-19, uma doença respiratória aguda causada pelo coronavírus da síndrome respiratória aguda grave 2 (SARS-CoV-2). 
A doença foi identificada pela primeira vez em Wuhan, na província de Hubei, República Popular da China, em 1 de dezembro de 2019, mas o primeiro caso foi reportado em 31 de dezembro do mesmo ano.
Acredita-se que o vírus tenha uma origem zoonótica, porque os primeiros casos confirmados tinham principalmente ligações ao Mercado Atacadista de Frutos do Mar de Huanan, que também vendia animais vivos.
Em 11 de março de 2020, a Organização Mundial da Saúde declarou o surto uma pandemia. Até 8 de fevereiro de 2021, pelo menos 105 743 102 casos da doença foram confirmados em pelo menos 191 países e territórios, com cerca de 2 308 943 mortes e 58 851 440 pessoas curadas.

Podemos ler no caderno no GitHub que o nosso modelo encontrou a resposta correta:

Answer: '1 de dezembro de 2019', score: 0.713, start: 328, end: 349

E o que é ainda mais interessante, é que a resposta não depende da formulação da questão (não depende das palavras chave)! Com a questão “Qual é a data de início da pandemia Covid-19 em todo o mundo?”, o nosso modelo encontrou também a resposta correta:

Answer: '1 de dezembro de 2019', score: 0.4922, start: 328, end: 349

Outros exemplos de uso

Usando o mesmo conteúdo, podemos ler no caderno no GitHub que nosso modelo encontrou as respostas corretas para todas as perguntas:

question = “O qué a pandemia de Covid-19?”
Answer: ‘uma doença respiratória aguda’, score: 0.0429, start: 110, end: 139
question = “A Covid-19 tem algo a ver com animais?”
Answer: ‘Acredita-se que o vírus tenha uma origem zoonótica’, score: 0.3732, start: 418, end: 468
question = “Onde foi descoberta a Covid-19?”
Answer: ‘Wuhan, na província de Hubei, República Popular da China’, score: 0.4265, start: 266, end: 322
question = “Quantos casos houve?”
Answer: ‘105 743 102’, score: 0.4607, start: 750, end: 761
question = “Quantos mortes?”
Answer: ‘2 308 943’, score: 0.7313, start: 850, end: 859
question = “Quantos paises tiveram casos?”
Answer: ‘191’, score: 0.4053, start: 810, end: 813
question = “Quantas pessoas foram curadas?”
Answer: ’58 851 440', score: 0.9288, start: 869, end: 879

Aviso

Nosso modelo funciona bem, mas é importante lembrar que os modelos em inglês alcançam um desempenho ainda melhor. Para atingir os mesmos níveis, seria necessário, por exemplo, usar um modelo de linguagem natural mais eficiente como o BERT large da Neuralmind em português e um conjunto de dados de QA em português com mais exemplos.

No entanto, o método explicado neste tutorial será aplicado da mesma maneira.

Sobre o autor: Pierre Guillou é consultor de IA no Brasil e na França, pesquisador em Deep Learning e NLP do AI Lab (Unb) e professor de Inteligência Artificial (UnB). Entre em contato com ele por meio de seu perfil no LinkedIn.

--

--