Modelos utilizados para processamento de linguagem natural

Ricardo Mazza Zago
itau-data
Published in
11 min readSep 29, 2022

Uma breve história e seus usos

No Itaú, trabalhamos com uma elevada quantidade de textos das mais variadas fontes, para gerar insights, extrair informações de documentos, melhorar processos, mitigar riscos, entre outros objetivos. Para esse trabalho utilizamos uma serie de técnicas de NLP (Natural Language Processing ou Processamento de Linguagem Natural, em português), de expressões regulares (regex), algumas técnicas de embeddings já tradicionais e outras no estado da arte, que utilizam arquiteturas “Deep Learning”.

Para o uso de NLP, o primeiro passo é transformar os textos em uma representação que os modelos de Machine Learning possam interpretar. Uma simples e muitas vezes eficiente abordagem, é chamada Bag-of-Words (ou saco-de-palavras, em português).

Bag-of-Words

O Bag-of-Words utiliza a contagem de ocorrências de palavras num texto com base em uma lista de palavras, chamada de vocabulário, para construção de um vetor para treinamento de modelos. O vocabulário é construído com as palavras mais comuns do corpus, que é o conjunto de textos.

Por exemplo, supondo um vocabulário com as palavras “é”, “um”, “dois” e “três” a representação da frase “é um dois três” nesse vocabulário, daria origem ao vetor [1, 1, 1, 1]. A contagem de vezes que cada palavra do vocabulário aparece no texto é utilizada como entrada para o modelo de Machine Learning. A frase “é um, é dois” daria origem ao vetor [2, 1, 1, 0], já que a palavra “é” aparece duas vezes e “três” não aparece.

Os vetores resultantes contêm alguma informação do texto e podem ser utilizados para o treinamento de modelos. É claro, existem problemas nessa técnica, como se basear apenas na contagem de vezes que cada palavra aparece, sem levar em consideração sua ordem, nem o uso da palavra nos demais textos, ponto endereçado na próxima técnica.

TF-IDF

O TF-IDF (Term Frequency–Inverse Document Frequency ou em português, Frequência do Termo–Inverso da Frequência nos Documentos) é uma técnica que considera a importância relativa da palavra em relação às demais. Ou seja, a palavra “com” pode aparecer muitas vezes no texto, mas isso não a faz importante, todavia, se a palavra “cachorro” aparece muitas vezes no texto, provavelmente o tema do texto é sobre o animal.

A importância de cada palavra, ou seja, os vetores são construídos pela equação [1]:

No qual t representa o termo, d o documento e D o corpus. O primeiro termo é responsável pela importância da palavra no documento analisado, já o segundo penaliza as palavras muito comuns. O uso do log é justificado pela “Lei de Zipf”.

Ambos os métodos citados trazem alguns problemas. Talvez o principal seja o tamanho do vetor, que cresce com o tamanho do vocabulário. Existem tratamentos como lematização e stemização, que visam reduzir o tamanho do vocabulário, por exemplo: “amigo” e “amiga” virariam “amig”. No geral os vetores resultantes são esparsos, ou seja, contêm muitos zeros. Na próxima técnica, o tamanho dos vetores é reduzido e os vetores deixam de ser esparsos.

Word2vec

O Word2vec é uma técnica criada em 2013 por um grupo de pesquisadores do Google [2]. Foi a primeira técnica que permitiu o treinamento de embeddings com grandes dimensões em bilhões de palavras.

Nas técnicas citadas anteriormente, o vetor era criado com o texto como um todo, no Word2vec cada palavra tem o seu vetor ou embedding. Para obter o do texto, basta somar ou fazer a média com o das palavras individuais.

Esta técnica ficou famosa por permitir operações matemáticas entre os embeddings, por exemplo:

rei — homem + mulher ≈ rainha

A explicação da maneira que os embeddings são treinados está fora do escopo deste artigo, mas basicamente podem ser utilizadas duas técnicas: o CBOW (Continuous Bag-of-Words Model) ou o Skip-gram. No primeiro, o embedding de uma palavra deve ser encontrado baseado nas palavras que vem antes e depois na frase, já no segundo, dado uma palavra, é buscado os embeddings do contexto em que ela aparece.

Outras técnicas, utilizando diferentes arquiteturas e métodos de treinamento, mas com resultados parecidos foram apresentadas posteriormente, como por exemplo o GloVe (Global Vectors for Word Representation) [3], desenvolvido pela Universidade de Stanford e o StarSpace, desenvolvido pelo Facebook [4].

Uma fragilidade desta técnica é que uma palavra pode ter diferentes significados a depender do contexto. Um exemplo é a palavra “verão”, que tanto pode ser a estação do ano, quanto “eles irão ver”. No Word2Vec, o embedding, independe do contexto, possui os mesmos valores, para ambos os significados.

ELMo

O ELMo (Embeddings from Language Model) [5] é uma técnica que utiliza Redes Neurais Recorrentes para geração de embeddings, introduzida em 2017 foi desenvolvida por pesquisadores do Allen Institute for Artificial Intelligence.

Os embeddings de cada palavra são gerados considerando toda a frase, não fixados previamente como no Word2vec. Desta forma, os embeddings passam a ser contextuais. Por exemplo, a depender do contexto que a palavra “verão” aparecer, ela terá um embedding diferente e correspondente a este.

Redes neurais recorrentes são modelos que mantêm um estado interno, assim, alimentando-as com uma frase, este estado interno é moldado pela sequência de palavras. No caso do ELMo, a rede é bidirecional, pois é alimentada na direção de leitura normal da frase e a inversa.

Um problema muito comum em redes recorrentes é o gargalo existente devido ao estado da rede recorrente, em que a performance diminui em frases mais longas. Para mitigar esse efeito, são utilizadas redes LSTM (Long Short-Term Memory) [6], que possuem mecanismos que ajudam a diminuir esse efeito e o mecanismo de atenção explicado a seguir.

Mecanismo de Atenção e Tradução

Bahdanau [7] em 2014 introduziu o conceito de Atenção (Attention) no uso de redes recorrentes para tradução de sentenças entre idiomas.

Redes recorrentes podem ser utilizadas para tradução da seguinte forma: o embedding do texto é enviado para uma rede, palavra por palavra. Com o término do texto, indicado por uma sinalização de fim da frase (<EOS>), o estado da rede contém as informações necessárias para a tradução. O estado é decodificado na mesma ou em outra rede recorrente, que passa a resultar na tradução. A Figura apresentada num paper do Google [8] ilustra a tradução de uma hipotética frase “ABC” para “WXYZ”.

Exemplo de tradução de “ABC” para “WXYZ”, fonte [8]

Esta abordagem possui o clássico problemas de redes recorrentes, na qual, em frases mais longas, o gargalo existente no estado da rede neural recorrente prejudica a sua tradução. Bahdanau [7] introduziu o conceito de atenção que mitiga esse problema. No lugar de enviar o estado final da rede recorrente, envia-se uma ponderação dos estados individuais de cada palavra do texto, em que uma palavra que tem mais importância para aquela parte do texto, terá mais peso (atenção).

Exemplo do mecanismo de atenção de uma tradução do inglês para o francês. Destaca-se palavras que devido às diferenças no idioma trocam de ordem, “european economic area” para “zone économique européenne”. Fonte Bahdanau [7]

Transformers

Os modelos Transformers são uma evolução da aplicação de Atenção, foram introduzidos pelo Google em 2017 [9], num paper com o ousado título Attention Is All You Need (Atenção é tudo que você precisa). Assim como o ELMo, eles são modelos que geram embeddings contextuais.

Portanto, como não é mais feito o uso de redes recorrentes, o problema do gargalo da informação deixa de existir, além disso, todas as entradas são lidas de uma vez pelo modelo, não mais uma a uma sequencialmente. Isso traz uma vantagem em que passa a ser mais fácil paralelizar a execução, aumentando o desempenho computacional da implantação, e diminuindo o tempo de treinamento dos modelos. Vantagem que foi utilizada para treinar modelos com número de parâmetros muito maior.

Explicar o funcionamento dos modelos Transformers está fora do escopo desse artigo, mas basicamente são definidos dois componentes, um encoder e um decoder, que a depender da aplicação podem ser combinados ou usados individualmente. A seguir será comentado sobre os principais modelos que fazem uso desses componentes.

Ilustração do Transformer componentes Encoder (esqueda) e Decoder (direita). Fonte [9]

GPT

O GPT (Generative Pre-Training) [10] é uma série de modelos Transformers desenvolvidas pela OpenAI que utilizam a camada “decoder” introduzida no paper de 2017. A versão inicial tem 117 milhões de parâmetros, o que para os padrões atuais é uma quantidade modesta, já o com maior quantidade de parâmetros na versão 2 possui 1,5 bilhão e na terceira versão, 175 bilhões de parâmetros.

O objetivo do GPT é predizer a próxima palavra dada uma frase. Com essa simples tarefa é possível fazer usos impressionantes do modelo. No texto de anúncio do GPT-2 [11], observam-se alguns exemplos, como escrever uma notícia sobre a descoberta de unicórnios que falam inglês na cordilheira dos Andes (vale a leitura, o texto ficou bem bacana), apenas começando a escrever a notícia e ele completando o restante. No GPT-3 [12] é possível pedir para ele escrever código fonte como JavaScript ou uma query SQL.

Uma característica muito importante dos modelos GPT é que, com apenas o pré-treinamento genérico, eles conseguem generalizar o aprendizado para várias tarefas, fato conhecido como zero-shot learning. Por exemplo, é possível realizar traduções, escrevendo uma frase em inglês e depois pedindo para traduzir para outros idiomas. Resumir um artigo, escrever o artigo e depois pedir para resumir.

Um ponto a se destacar, é que treinar esses modelos está se tornando extremamente custoso, é necessária uma grande quantidade de texto e muito poder computacional. O GPT original levou 1 mês utilizando 8 GPUs [10], enquanto o GPT-3 levaria 288 anos em uma Nvidia V100 [13].

Tendência do número de parâmetros dos modelos de NLP estado da arte ao longo dos anos. Fonte [13]

BERT

Em 2018, o Google publicou o modelo BERT (Bidirectional Encoder Representations from Transformers) [14], que faz uso do componente “encoder”, permitindo a geração de embeddings contextuais para representação de texto. O BERT faz a leitura da frase completa, bidirecional, enquanto o GPT, pela característica de geração de texto, permite apenas a leitura das palavras anteriores.

Originalmente o BERT foi treinado apenas em textos em inglês, posteriormente os pesquisadores lançaram uma versão treinada em 104 idiomas [15]. Isso permitiu que apenas um modelo fosse utilizado para tarefas em diversas línguas, inclusive o português.

São feitas duas etapas: uma chamada de pré-treinamento, que é a etapa que demanda muito texto e capacidade computacional e o “fine-tunning”, em que são “colados” no BERT as camadas para o uso do modelo para a tarefa e feito o treinamento. Esse treinamento, ao menos em relação ao pré-treinamento, é menos custoso computacionalmente.

Para o treinamento do BERT são utilizadas duas técnicas: MLM (Masked Language Model) e NSP (Next Sentence Prediction). No MLM, o modelo é levado a descobrir qual palavra foi mascarada no texto, já o NSP, visa que o modelo decida se a próxima frase é a sequência da anterior ou não.

Com o lançamento do BERT outros modelos foram desenvolvidos, como o RoBERTa de 2019, desenvolvido por pesquisadores do Facebook [16]. Neste modelo, a etapa de treinamento NSP foi removida, em cada época de treinamento a palavra mascarada é alterada, a quantidade de texto utilizada no treinamento foi aumentada 10x de 16 GB para 160 GB, dentre outras mudanças, que possibilitaram um aumento nas métricas de qualidade em relação ao BERT.

Um problema dos modelos Transformers citados até agora é que apesar de performarem melhor do que os modelos baseados em redes recorrentes, a complexidade computacional da atenção cresce com o quadrado do tamanho do texto, ficando inviável o uso para textos longos. O BERT por exemplo, tem uma limitação do tamanho da entrada de 512 tokens, que daria um pouco menos do que esse número em palavras, já que uma palavra pode ser constituída de mais de um token.

Para mitigar esse problema, em 2020 o Allen Institute for Artificial Intelligence publicou o Longformer [17] e o Google o Big Bird [18]. Eles fazem alterações na implantação da atenção que permitem que a quantidade de tokens de entrada seja aumentada.

Algumas observações

Neste artigo foram apresentadas diversas técnicas para processamento de linguagem natural, passando por abordagens clássicas como bag-of-words e TF-IDF até técnicas no estado da arte, como o GPT e as evoluções do BERT. Sem dúvidas ainda existirão muitos desenvolvimentos, provavelmente novos conceitos, que ainda não foram explorados, que farão o campo como um todo prosperar.

É importante destacar que uma infinidade de excelentes modelos não foi citada. Os citados foram os relevantes à vida acadêmica e profissional do autor. As publicações para cada um dos modelos estão nas referências. Em caso de interesse em algum específico, a leitura do artigo pode ser muito interessante. A maioria dos artigos estão no arXiv e possuem acesso gratuito.

O uso dos modelos próximos ao estado da arte, como GPT-1 e BERT pode parecer algo muito distante, devido ao custo computacional. No entanto, com bibliotecas fornecidas pela Hugging Face [19] e serviços online como o Google Colab e o Amazon SageMaker Studio Lab, que permitem acesso a GPUs, esses modelos podem ser utilizados a custo zero. O Hugging Face conta com diversos modelos pré-treinados, usando suas bibliotecas é possível realizar o download e posteriormente o fine-tunning para sua aplicação.

Referências

[1] LANE, Hobson; HOWARD, Cole; HAPKE, Hannes Max, Natural language processing in action: understanding, analyzing, and generating text with Python, Shelter Island, NY: Manning Publications Co, 2019.

[2] MIKOLOV, Tomas; CHEN, Kai; CORRADO, Greg; et al. Efficient Estimation of Word Representations in Vector Space. 2013. Disponível em: <http://arxiv.org/abs/1301.3781>. Acesso em: 23 ago. 2022.

[3] GloVe: Global Vectors for Word Representation. Disponível em: <https://nlp.stanford.edu/projects/glove/>. Acesso em: 23 ago. 2022.

[4] WU, Ledell; FISCH, Adam; CHOPRA, Sumit; et al. StarSpace: Embed All The Things! 2017. Disponível em: <http://arxiv.org/abs/1709.03856>. Acesso em: 23 ago. 2022.

[5] PETERS, Matthew E.; NEUMANN, Mark; IYYER, Mohit; et al. Deep contextualized word representations. 2018. Disponível em: <http://arxiv.org/abs/1802.05365>. Acesso em: 23 ago. 2022.

[6] HOCHREITER, Sepp; SCHMIDHUBER, Jürgen. Long Short-Term Memory. Neural Computation, v. 9, n. 8, p. 1735–1780, 1997. Disponível em: <https://direct.mit.edu/neco/article/9/8/1735-1780/6109>. Acesso em: 23 ago. 2022.

[7] BAHDANAU, Dzmitry; CHO, Kyunghyun; BENGIO, Yoshua. Neural Machine Translation by Jointly Learning to Align and Translate. 2016. Disponível em: <http://arxiv.org/abs/1409.0473>. Acesso em: 23 ago. 2022.

[8] SUTSKEVER, Ilya; VINYALS, Oriol; LE, Quoc V. Sequence to Sequence Learning with Neural Networks. 2014. Disponível em: <http://arxiv.org/abs/1409.3215>. Acesso em: 23 ago. 2022.

[9] VASWANI, Ashish; SHAZEER, Noam; PARMAR, Niki; et al. Attention Is All You Need. 2017. Disponível em: <http://arxiv.org/abs/1706.03762>. Acesso em: 23 ago. 2022.

[10] Improving Language Understanding with Unsupervised Learning. OpenAI. Disponível em: <https://openai.com/blog/language-unsupervised/>. Acesso em: 23 ago. 2022.

[11] Better Language Models and Their Implications. OpenAI. Disponível em: <https://openai.com/blog/better-language-models/>. Acesso em: 23 ago. 2022.

[12] BROWN, Tom B.; MANN, Benjamin; RYDER, Nick; et al. Language Models are Few-Shot Learners. 2020. Disponível em: <http://arxiv.org/abs/2005.14165>. Acesso em: 23 ago. 2022.

[13] NARAYANAN, Deepak; SHOEYBI, Mohammad; CASPER, Jared; et al. Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM. 2021. Disponível em: <http://arxiv.org/abs/2104.04473>. Acesso em: 23 ago. 2022.

[14] DEVLIN, Jacob; CHANG, Ming-Wei; LEE, Kenton; et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. 2019. Disponível em: <http://arxiv.org/abs/1810.04805>. Acesso em: 23 ago. 2022.

[15] BERT Multilingual. Github. Disponível em: <https://github.com/google-research/bert/blob/master/multilingual.md>. Acesso em: 23 ago. 2022.

[16] LIU, Yinhan; OTT, Myle; GOYAL, Naman; et al. RoBERTa: A Robustly Optimized BERT Pretraining Approach. 2019. Disponível em: <http://arxiv.org/abs/1907.11692>. Acesso em: 23 ago. 2022.

[17] BELTAGY, Iz; PETERS, Matthew E.; COHAN, Arman. Longformer: The Long-Document Transformer. 2020. Disponível em: <http://arxiv.org/abs/2004.05150>. Acesso em: 23 ago. 2022.

[18] ZAHEER, Manzil; GURUGANESH, Guru; DUBEY, Avinava; et al. Big Bird: Transformers for Longer Sequences. 2021. Disponível em: <http://arxiv.org/abs/2007.14062>. Acesso em: 23 ago. 2022.

[19] Hugging Face — The AI community building the future. Disponível em: <https://huggingface.co/>. Acesso em: 23 ago. 2022.

--

--