NLP nas empresas | Como ajustar um modelo de linguagem natural como BERT a um novo domínio…



Original Source Here

Seguindo nosso artigo apresentando os adapters da biblioteca de adapter-transformers e seus diversos interesses para empresas e organizações que desejam utilizar modelos de Inteligência Artificial (IA) para automatizar seus processos de NLP (Natural Language Processing) internos e externos, estamos publicando uma série de artigos acompanhados de notebooks e/ou scripts que são tutoriais que permitem implementar os adapters em seus negócios e atividades. Começamos essa série com este artigo sobre o lang adapter que permite ajustar um modelo de linguagem natural como BERT a qualquer domínio linguístico.

Outro artigo a ler:

Sumário

  • Contexto
  • Modelo de linguagem natural ajustado a um novo domínio
  • Tutorial | Ajusto fino do BERT geral em português no domínio dos textos do dataset SQuAD 1.1 em português
    — Notebook language_modeling_adapter.ipynb
    — Mudanças principais em notebooks e scripts originais
    — Uso do modelo com adapter

Contexto

No artigo NLP nas empresas | Uma solução para colocar os modelos BERT em produção com Adapters para transformers”, apresentamos a biblioteca adapter-transformers que permite treinar módulos chamados adapter a partir de um modelo transformer do tipo BERT sem alterar os valores de seus embeddings, nem os dos parâmetros de suas camadas.

O interesse é imediato: assim, é possível treinar tantos adapters quanto uma empresa ou organização tenha tarefas de NLP (Natural Language Processing) para realizar em um determinado idioma e isso a partir do mesmo modelo de linguagem natural. Na produção, apenas esse modelo deve ser armazenado e acessível por meio de uma API, bem como os vários adapters.

Essa solução simplifica muito o uso desses diferentes modelos de NLP (um modelo = modelo original + adapter), pois apenas um modelo de linguagem natural deve ser armazenado (o modelo original) mais os adapters (o peso de uma adapter é apenas entre 1 e 3% do peso do modelo original).

Imagine se uma empresa ou organização tivesse que arquivar tantos modelos originais ajustados quanto tem tarefas de NLP quando um modelo BERT large pesa mais de 1,3 GB …

Modelo de linguagem natural ajustado a um novo domínio

Na Internet hoje é fácil baixar um modelo de linguagem natural como o BERT que já é treinado em sua língua. Por exemplo, existe o modelo BERT large em português da Neuralmind que está no hub de modelos de Hugging Face.

Esse modelo BERT foi treinado a partir de um corpo geral de textos em português (BrWac). Isso significa que esse modelo aprendeu um conhecimento geral de português. Se sua empresa ou organização trabalha com documentos de um campo linguístico específico, como a saúde, o jurídico, etc. é altamente recomendável ajustar esse modelo BERT geral ao seu domínio linguístico antes de fazer o seu ajuste fino para realizar tarefas específicas de NLP.

Se o ideal fosse fazê-lo a partir de um vocabulário extraído desse domínio específico, esse processo de ajuste fino requer vários GB de textos (e, portanto, grandes meios de computação com GPUs).

Se for como a maioria das empresas ou organizações e seu conjunto de dados for muito menor, o ajuste fino do modelo de linguagem natural original (o BERT large em português da Neuralmind aqui) é possível enquanto mantém o seu vocabulário. E isso pode ajudar a obter um modelo de linguagem natural mais eficiente para as tarefas de NLP no seu domínio linguístico.

Assim, 2 possibilidades se apresentam:

  • ou ajusta todos os embeddings e parâmetros do modelo original: este é o método clássico para o qual existe, por exemplo, um notebook e um script da Hugging Face. O problema já mencionado é que usará tantos modelos em produção quantas tarefas de NLP tiver;
  • ou treina apenas um adapter de idioma (lang adapter): este é o método por meio da biblioteca adapter-transformers

Tutorial | Ajusto fino do BERT geral em português no domínio dos textos do dataset SQuAD 1.1 em português

Notebook language_modeling_adapter.ipynb

Estamos usando aqui o dataset SQuAD 1.1 em português (versão em português do dataset SQuAD v1.1 inglês cuja tradução foi feita pelo grupo Deep Learning Brasil: squad-pt.tar.gz no Google Drive (fonte)) não para treinar o modelo na tarefa de perguntas e respostas (QA: Question Answering), mas para especializar o modelo de linguagem natural para as peculiaridades linguísticas desse dataset (pode fazer o mesmo com qualquer dataset que tiver!).

Em uma segunda etapa (essa será o assunto de outro artigo), poderemos usar esse modelo especializado para realizar tarefas de NLP do mesmo domínio linguístico que o desse dataset.

Como o dataset é relativamente pequeno, seguiremos a explicação dada no parágrafo anterior e manteremos o vocabulário do modelo de linguagem natural geral (aqui, o modelo BERT large em português da Neuralmind). Além disso, como não queremos ter que armazenar em produção vários modelos de vários GB (um modelo por tarefa), vamos treinar um adapter da biblioteca adapter-transformers chamado lang adapter.

Por fazer isso, publicamos um notebook (language_modeling_adapter.ipynb) realizado a partir dos seguintes notebooks e scripts para o ajuste fino de um Modelo de Linguagem Mascarada (MLM) de tipo transformer como o BERT (base ou grande) com qualquer datasets:

Nota: o notebook language_modeling_adapter.ipynb está na pasta language-modeling no github.

Mudanças principais em notebooks e scripts originais

Atualizamos o notebook language_modeling.ipynb para o nosso notebook language_modeling_adapter.ipynb com as seguintes alterações:

  • Avaliação: opção de avaliação do modelo por meio da acurácia do dataset de validação, e não por meio do loss desse dataset
  • EarlyStopping: selecionando o modelo com a maior precisão de avaliação (paciência de 3 antes de terminar o treinamento)
  • MAD-X 2.0: opção que permite não treinar adapters na última camada do modelo transformer (leia a página 6 de UNKs Everywhere: Adapting Multilingual Language Models to New Scripts).

Uso do modelo com adapter

Em primeiro lugar, deve baixar o modelo original do hub de modelos da Hugging Face:

from transformers import AutoModelForMaskedLM, AutoTokenizermodel_checkpoint = "neuralmind/bert-base-portuguese-cased"model_mlm = AutoModelForMaskedLM.from_pretrained(model_checkpoint)
tokenizer_mlm = AutoTokenizer.from_pretrained(model_checkpoint, use_fast=True)

Então, é necessário acrescentar (e ativar) o lang adapter que treinamos:

# load the language adapter
task_mlm_load_as = 'mlm'
lang_adapter_name = model_mlm.load_adapter(
str(load_lang_adapter),
config=lang_adapter_config,
load_as=task_mlm_load_as,
with_head=True
)

# Set the adapters to be used in every forward pass
model_mlm.set_active_adapters([lang_adapter_name])

Finalmente, usando a biblioteca Pipeline da Hugging Face, podemos usar nosso modelo com lang adapter para encontrar uma palavra oculta em uma frase tirada do dataset SQuAD 1.1 em português:

from transformers import pipeline
nlp = pipeline("fill-mask", model=model_mlm, tokenizer=tokenizer_mlm)
nlp("O panteísmo sustenta que [MASK] é o universo e o universo é Deus.")

Aqui está o resultado:

{'sequence': 'O panteísmo sustenta que Deus é o universo e o universo é Deus.',
'score': 0.8649417161941528,
'token': 2538,
'token_str': 'Deus'},

Nosso modelo ajustado obteve uma melhor pontuação (0,865 vs. 0,739) ao encontrar a palavra mascarada Deus. Parece que nosso modelo ajustado no dataset SQuAD 1.1 em português com um lang adapter funcionou 🙂

Nota: com uma frase tirada da Wikipedia como “O primeiro caso da COVID-19 foi descoberto em Wuhan, na China”, é o contrario: é o modelo original que encontra a palavra escondida China com a melhor pontuação. Era esperado: ao ajustar o modelo original, o especializamos para a “linguagem” do dataset usado.

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.

AI/ML

Trending AI/ML Article Identified & Digested via Granola by Ramsey Elbasheer; a Machine-Driven RSS Bot

%d bloggers like this: