Modelos de NLP em português

Fonte do texto deste post: Faster than training from scratch — Fine-tuning the English GPT-2 in any language with Hugging Face and fastai v2 (practical case with Portuguese)

Sobre a necessidade de modelos de linguagem, não apenas em inglês

Mesmo que o inglês seja hoje a língua mais falada no mundo, o mundo é multilíngue. Portanto, é necessário ter modelos de linguagem natural treinados em todos os idiomas existentes, e não apenas em inglês, pois esses modelos constituem a base essencial para o treinamento de modelos capazes de executar uma tarefa específica em linguística (classificação, perguntas e respostas, síntese, pesquisas de entidades nomeadas, etc.).

No entanto, **se for extremamente simples e gratuito fazer o download de um modelo de idioma treinado em inglês através da biblioteca Transformers do Hugging Face, por exemplo, muitas vezes é muito mais difícil encontrar on-line um modelo treinado em outro idioma como o português.

Existem duas opções: use um modelo de tradução em conjunto com o modelo PNL em inglês ou refine um modelo pré-treinado em inglês em outro idioma.

Opção 1 | Pipeline rápido para localizar qualquer modelo baseado em transformer em qualquer idioma

A maneira mais fácil de obter esses modelos de idioma específicos para o idioma seria usar um pipeline de modelos pré-treinados e baseados em transformer como o seguinte:


Pipeline rápido para localizar qualquer modelo baseado em transformer (aqui, um modelo de linguagem natural) para qualquer idioma, por exemplo em português

Por exemplo, para obter um GPT-2 em português, poderíamos fazer o download a partir da biblioteca Transformers do Hugging Face, do modelo pré-treinado em inglês OpenAI GPT-2 e do tradutor MarianMT (também poderíamos usar o modelo BART ou T5 para a tradução) para criar o seguinte pipeline:

       (input) Portuguese to English (MarianMT) 
            >> English pre-trained language model (GPT-2) 
                >> (output) English to Portuguese (MarianMT)

Portanto, de graça e com apenas algumas linhas de código, podemos obter qualquer modelo de linguagem em qualquer idioma e até qualquer modelo de PNL especializado em tarefas de PLN (classificação, perguntas e respostas, síntese, pesquisas de entidades nomeadas, etc.) usando o mesmo pipeline. Not bad!

No entanto, o problema dessa solução simples é que dependemos da qualidade do treinamento de 2 modelos de PNL pré-treinados, o que aumenta muito o risco de perder as singularidades e nuances linguísticas do idioma desejado.

Opção 2 | Ajuste fino de um modelo pré-treinado

Portanto, muitas vezes torna-se necessário ter que treinar seu próprio modelo de linguagem.

No entanto, treinando do zero um poderoso modelo de linguagem baseado em transformer como GPT-2 ou GPT-3 do OpenAI, BART do Facebook ou T5 do Google requer dezenas ou mesmo centenas de GB de texto, que é impossível ou difícil de encontrar ou requer uma computação gigantesca que apenas poucas empresas do mundo possuem. Por exemplo,


Modelos de PNL ao longo do tempo, com seu número de parâmetros (crédito da imagem: blog TensorFlow)

Assim, como é fácil fazer o download de alguns GB de textos de um corpus on-line (Wikipedia, OSCAR, Common Crawl, por exemplo) e alugar uma GPU NVIDIA V100 por US $ 1,24 por hora (GCP, AWS, Azur, por exemplo), é mais realista para a maioria das pessoas e organizações que desejam usar um modelo de idioma diferente do inglês de ajustar um modelo já pré-treinado em inglês usando poucos GB de textos (ou seja, ajustar um modelo obtido pelo Transfer Learning) usando um framework de Deep Learning como TensorFlow + Keras ou PyTorch + fastai.


As 3 etapas principais do ajuste fino do inglês GPT-2 para o português com o Hugging Face e o fastai v2 (imagem editada da fast.ai NLP)

Este tutorial mostra como implementar esta segunda opção e aqui estão exemplos de uso para geração de texto usando o GPT-2 em português criado por esse método (o GPorTuguese-2):