NLP & fastai | Portuguese Language Model

Pierre Guillou
7 min readSep 24, 2019

--

Você já ajudou alguém a terminar sua frase? Nesse caso, você usou seu Modelo de Linguagem (ML ou LM em inglês: Language Model), ou seja, a modelagem de seu idioma treinada e registrada em sua rede neural. Na inteligência artificial aplicada ao PNL, também é possível treinar um ML no idioma de sua escolha, fazendo-o prever a próxima palavra de uma frase a partir das palavras já expressas. Neste post, explico como criei um ML Bidirecional do português treinando um modelo de Deep Learning.

Outros posts da série PNL e fastai: Topic Modeling | Sentiment Classification | Language Model | Transfer Learning | ULMFiT | MultiFiT | French Language Model | RNN | LSTM & GRU | SentencePiece | Sequence-to-Sequence Model (seq2seq) | Attention Mechanism | Transformer Model | GPT-2

Edição do 15/10/2019

Este post é uma versão modificada da v1 publicada em setembro de 2019. De fato (obrigado ao David Vieira), observamos que o ajuste fino do LM e do classificador não usava o modelo e vocabulário SentencePiece treinados com o modelo de linguagem geral para o português.

Portanto, treinamos novamente o LM e o classificador no conjunto de dados de jurisprudência do TCU e obtivemos melhores resultados: acurácia do classificador de 97.95% em vez de 97.39% :-)

Motivação

Participante desde 2017 dos cursos fastai de Jeremy Howard e Rachel Thomas no Deep Learning (DL), estou particularmente interessado nas possibilidades do DL aplicado ao PNL (Deep Learning aplicado ao Processamento de Linguagem Natural ou NLP em inglês: Natural Language Processing) através do novo curso fastai de Rachel Thomas: A code-first introduction to NLP (julho de 2019).

Um momento importante neste curso é o vídeo intitulado “ULMFit for non-English Languages (NLP Video 10)”, no qual Jeremy Howard mostra como treinar um Modelo de Linguagem (ML) no idioma de sua escolha. Desejando verificar as possibilidades do PNL aplicado ao português, e assim, contribuir para a comunidade de língua portuguesa em PNL, criei um ML geral Bidirecional do português que usei para criar 2 aplicativos de classificação pelo Transfer Learning: um para classificar os textos do campo jurídico (acurácia de 97,95%) e um para classificar comentários de clientes Olist (acurácia de 92.80%).

Notas:

Agradeço a Monique Monteiro, Fernando Melo e Erick Muzart Fonseca dos Santos por disponibilizar o dataset do TCU usado pelo treinamento do classificador de textos jurídicos, bem como pelos feedbacks da experiência sobre o treinamento de um modelo de linguagem do português publicados no fórum ULMFit — Portuguese e durante as turmas do curso de Deep Learning em Brasília (Brasil).

Ponto chave: MultiFiT

As arquiteturas e hiperparâmetros do Modelo de Linguagem e do classificador de textos, bem como o método de treinamento, são os do artigo MultiFiT, não os do artigo ULMFiT.

De fato, após vários testes, parece que a configuração do MultiFiT oferece melhores resultados e mais rápido.

Fontes:

  • MultiFiT (Efficient Multi-lingual Language Model Fine-tuning) (setembro de 2019, autores: Julian Eisenschlos, Sebastian Ruder, Piotr Czapla, Marcin Kardas, Sylvain Gugger, Jeremy Howard)
  • ULMFiT (Universal Language Model Fine-tuning for Text Classification) (maio de 2018, autores: Sebastian Ruder, Jeremy Howard)

Modelo de Linguagem: em busca do Santo Graal

Desde 2018, o treinamento de modelos de linguagem natural (prever a próxima palavra) tem sido um passo fundamental no PNL: não estamos mais fazendo análise estatística da linguagem, começamos a entender a linguagem.

A mídia escreveu extensivamente sobre o impressionante desempenho dos modelos de linguagem natural GPT-2 da OpenAI (“OpenAI has released the largest version yet of its fake-news-spewing AI”, MIT — agosto de 2019), BERT do Google (“New Google Brain Optimizer Reduces BERT Pre-Training Time From Days to Minutes” — Synced, april de 2019; “Allen Institute for AI Announces BERT-Breakthrough: Passing an 8th-Grade Science Exam” — NVIDIA, setembro de 2019) e RoBERTa do Facebook (“Facebook is betting the next big interface is conversation” — fastcompany, setembro de 2019).

De fato, esses modelos são capazes, graças a uma arquitetura da ordem do bilhão de parâmetros e a um treinamento em corpus de várias dezenas de GB de textos, não apenas de (começar a) entender um texto (avaliação de acordo com as técnicas de resumo, perguntas/respostas, etc.), mas também de gerar novos textos. A criatividade de uma IA em linguagem natural se torna possível.

O modelo de linguagem treinado aqui com a configuração do MultiFiT e com seus 42 milhões de parâmetros não pode competir com esses modelos em tais tarefas.

Sua ambição é poder ser usado para a classificação de textos de qualquer campo (jurídico, médico, informação / mídia, finanças, marketing, ciências sociais, esporte etc.) da língua do treinamento com alto desempenho (mais de 95% da acurácia), rapidamente (pela técnica de Transfer Learning) e mesmo com pequenos corpus. Além disso, seu treinamento é possível em qualquer plataforma on-line da GPU por um custo baixo (menos de US $ 20).

Resultados

Publiquei o código usado para treinar meus modelos no diretório github dos meus Modelos de Linguagem assim que o link para baixar os parâmetros do ML geral Bidirecional do português (MultiFiT) e seu vocabulário.

Notebooks dos modelos

Desempenhos

Os 4 modelos foram treinados no GCP com 1 GPU NVIDIA Tesla V100.

ML geral Bidirecional do português

  • forward : (accuracy) 39.68% | (perplexity) 21.76
  • backward: (accuracy) 43.67% | (perplexity) 22.16
  • Treinamento: 16 horas em um corpus de 100 milhões de tokens extraídos da Wikipedia em português.

ML especializado Bidirectional do português usado no corpus de jurisprudência do TCU

  • forward : (accuracy) 51.56% | (perplexity) 11.38
  • backward: (accuracy) 52.15% | (perplexity) 12.54
  • Treinamento: menos de 5 minutos para ajustar o modelo de linguagem bidirecional aos textos do TCU.

Classificador de textos do corpus de jurisprudência do TCU

  • Accuracy) 97.95% | (f1 score) 0.9795
  • Treinamento: menos de 5 minutos para treinar o classificador bidirecional aos textos do TCU.

Classificador de textos do corpus de Olist

  • Accuracy) 92.80% | (f1 score) 0.9467
  • Treinamento: menos de 5 minutos para treinar o classificador bidirecional aos textos do Olist.

Usando o classificador para prever a classe dos textos

A biblioteca fastai v1, como todas as bibliotecas do Deep Learning, permite usar o modelo treinado em novos dados para obter previsões de classe (no caso em que o modelo é um classificador), mas, além disso, possui um função show_intrinsic_attention() que fornece uma interpretação da classificação com base na sensibilidade da entrada.

Quanto mais escura a palavra sombreada no exemplo abaixo, mais ela contribui para a classificação. Legal!

Usando o classificador para prever a categoria dos textos jurídicos do TCU (notebook: lm3-portuguese-classifier-TCU-jurisprudencia.ipynb)

Anexo | Arquiteturas e hiperparâmetros

ML geral Bidirecional do português

Notebook: lm3-portuguese.ipynb (nbviewer)

  • (batch size) bs = 50
  • (QRNN) 4 QRNN (default: 3) with 1550 hidden parameters each one (default: 1152)
  • (SentencePiece) vocab of 15000 tokens
  • (dropout) mult_drop = 0
  • (weight decay) wd = 0.01
  • (number of training epochs) 10 epochs
  • (learning rate) modified version of 1-cycle learning rate schedule (Smith, 2018) that uses cosine instead of linear annealing, cyclical momentum and discriminative finetuning

ML especializado Bidirectional do português usado no corpus de jurisprudência do TCU

Notebook: lm3-portuguese-classifier-TCU-jurisprudencia.ipynb (nbviewer)

  • (batch size) bs = 50
  • (QRNN) 4 QRNN (default: 3) with 1550 hidden parameters each one (default: 1152)
  • (SentencePiece) vocab of 15000 tokens
  • (dropout) mult_drop = 1.0
  • (weight decay) wd = 0.1
  • (number of training epochs) 20 epochs
  • (learning rate) modified version of 1-cycle learning rate schedule (Smith, 2018) that uses cosine instead of linear annealing, cyclical momentum and discriminative finetuning
  • (loss) FlattenedLoss of weighted LabelSmoothingCrossEntropy

Classificador de textos do corpus de jurisprudência do TCU

Notebook: lm3-portuguese-classifier-TCU-jurisprudencia.ipynb (nbviewer)

  • (batch size) bs = 18
  • (SentencePiece) vocab of 15000 tokens
  • (dropout) mult_drop = 0.3
  • (weight decay) wd = 0.1
  • (number of training epochs) 14 epochs (forward) and 19 epochs (backward)
  • (learning rate) modified version of 1-cycle learning rate schedule (Smith, 2018) that uses cosine instead of linear annealing, cyclical momentum and discriminative finetuning
  • (loss) FlattenedLoss of weighted LabelSmoothingCrossEntropy

Classificador de textos do corpus de Olist

Notebook: lm3-portuguese-classifier-olist.ipynb (nbviewer)

  • (batch size) bs = 18
  • (SentencePiece) vocab of 15000 tokens
  • (dropout) mult_drop = 1.0
  • (weight decay) wd = 0.1
  • (number of training epochs) 9 epochs
  • (learning rate) modified version of 1-cycle learning rate schedule (Smith, 2018) that uses cosine instead of linear annealing, cyclical momentum and discriminative finetuning
  • (loss) FlattenedLoss of weighted CrossEntropyLoss

--

--