Representações de codificador bidirecional de transformadores (do inglês, Bidirectional encoder representations from transformers - BERT) é um modelo de linguagem introduzido em outubro de 2018 por pesquisadores do Google. Ele aprende a representar o texto como uma sequência de vetores usando aprendizado autossupervisionado. Ele usa a arquitetura transformer apenas com codificador (encoder-only). O BERT melhorou drasticamente o estado da arte para grandes modelos de linguagem. A partir de 2020, o BERT é uma linha de base onipresente em experimentos de processamento de linguagem natural (PLN).

O BERT é treinado pela previsão de tokens mascarados e pela previsão da próxima frase. Com este treinamento, o BERT aprende representações latentes contextuais de tokens em seu contexto, de forma semelhante ao ELMo e ao GPT-2. Ele encontrou aplicações para muitas tarefas de processamento de linguagem natural, como resolução de correferência e resolução de polissemia. Ele aprimorou o ELMo e gerou o estudo da "BERTologia" (BERTology), que tenta interpretar o que é aprendido pelo BERT.

O BERT foi originalmente implementado no idioma inglês em dois tamanhos de modelo, BERTBASE (110 milhões de parâmetros) e BERTLARGE (340 milhões de parâmetros). Ambos foram treinados no Toronto BookCorpus (800 milhões de palavras) e na Wikipédia em inglês (2.500 milhões de palavras). Os pesos foram lançados no GitHub. Em 11 de março de 2020, 24 modelos menores foram lançados, sendo o menor deles o BERTTINY, com apenas 4 milhões de parâmetros.

Arquitetura

O BERT é uma arquitetura transformer "apenas com codificador" (encoder-only). Em alto nível, o BERT consiste em 4 módulos:

Tokenizador: Este módulo converte um trecho de texto em inglês em uma sequência de números inteiros ("tokens"). Incorporação (Embedding): Este módulo converte a sequência de tokens em uma matriz de vetores de valor real que representam os tokens. Representa a conversão de tipos de tokens discretos num espaço euclidiano de dimensão inferior. Codificador: uma pilha de blocos Transformer com autoatenção (self-attention), mas sem mascaramento causal. Cabeça de tarefa (Task head): Este módulo converte os vetores de representação finais novamente em tokens codificados one-hot, produzindo uma distribuição de probabilidade prevista sobre os tipos de tokens. Pode ser visto como um decodificador simples, que decodifica a representação latente em tipos de tokens, ou como uma "camada de desincorporação" (un-embedding).

A cabeça de tarefa é necessária para o pré-treinamento, mas muitas vezes é desnecessária para as chamadas "tarefas a jusante" (downstream tasks), como resposta a perguntas ou classificação de sentimentos. Em vez disso, a cabeça de tarefa é removida e substituída por um módulo recém-inicializado e adequado à tarefa, e faz-se o ajuste fino (finetune) do novo módulo. A representação do vetor latente do modelo é alimentada diretamente neste novo módulo, permitindo uma transferência de aprendizado eficiente em termos de amostragem.

Incorporação (Embedding) Esta seção descreve a incorporação usada pelo BERTBASE. O outro modelo, BERTLARGE, é semelhante, apenas maior.

O tokenizador do BERT é o WordPiece, que é uma estratégia de subpalavras como a codificação de par de bytes. O tamanho do seu vocabulário é 30.000, e qualquer token que não apareça no seu vocabulário é substituído por [UNK] ("desconhecido").

A primeira camada é a camada de incorporação, que contém três componentes: incorporações de tipo de token, incorporações de posição e incorporações de tipo de segmento.

Tipo de token: O tipo de token é uma camada de incorporação padrão, que traduz um vetor one-hot num vetor denso com base no seu tipo de token. Posição: As incorporações de posição baseiam-se na posição de um token na sequência. O BERT usa incorporações de posição absolutas, onde cada posição numa sequência é mapeada para um vetor de valor real. Cada dimensão do vetor consiste numa função senoidal que recebe a posição na sequência como entrada. Tipo de segmento: Usando um vocabulário de apenas 0 ou 1, esta camada de incorporação produz um vetor denso baseado em se o token pertence ao primeiro ou ao segundo segmento de texto nessa entrada. Por outras palavras, os tokens do tipo 1 são todos os tokens que aparecem depois do token especial [SEP]. Todos os tokens anteriores são do tipo 0.

Os três vetores de incorporação são somados, representando a representação inicial do token como uma função dessas três informações. Após a incorporação, a representação vetorial é normalizada usando uma operação LayerNorm, gerando um vetor de 768 dimensões para cada token de entrada. Depois disso, os vetores de representação são passados adiante por 12 blocos de codificadores Transformer, e são decodificados de volta para o espaço de vocabulário de 30.000 dimensões usando uma camada de transformação afim básica.

Família arquitetônica A pilha de codificadores do BERT tem 2 parâmetros livres: , o número de camadas, e , o tamanho oculto (hidden size). Existem sempre cabeças de autoatenção , e o tamanho do feed-forward/filtro é sempre . Ao variar esses dois números, obtém-se toda uma família de modelos BERT.

Para o BERT:

O tamanho do feed-forward e o tamanho do filtro são sinônimos. Ambos denotam o número de dimensões na camada intermediária da rede feed-forward. O tamanho oculto e o tamanho da incorporação são sinônimos. Ambos denotam a quantidade de números reais usados para representar um token.

A notação para a pilha de codificadores é escrita como L/H. Por exemplo, BERTBASE é escrito como 12L/768H, BERTLARGE como 24L/1024H e BERTTINY como 2L/128H.

Treinamento Pré-treinamento O BERT foi pré-treinado simultaneamente em duas tarefas:

Modelagem de linguagem mascarada (MLM): Nesta tarefa, o BERT ingere uma sequência de palavras, onde uma palavra pode ser alterada aleatoriamente ("mascarada"), e o BERT tenta prever as palavras originais que foram alteradas. Por exemplo, na frase "O gato sentou no [MASK]," o BERT precisaria prever "tapete." Isso ajuda o BERT a aprender o contexto bidirecional, o que significa que ele entende as relações entre as palavras não apenas da esquerda para a direita ou da direita para a esquerda, mas de ambas as direções ao mesmo tempo.

Previsão da próxima frase (NSP): Nesta tarefa, o BERT é treinado para prever se uma frase se segue logicamente a outra. Por exemplo, dadas duas frases, "O gato sentou no tapete" e "Estava um dia ensolarado", o BERT deve decidir se a segunda frase é uma continuação válida da primeira. Isso ajuda o BERT a compreender as relações entre as frases, o que é importante para tarefas como responder a perguntas ou classificação de documentos.

Modelagem de linguagem mascarada

Na modelagem de linguagem mascarada, 15% dos tokens seriam selecionados aleatoriamente para a tarefa de previsão mascarada, e o objetivo do treinamento era prever o token mascarado dado seu contexto. Em mais detalhes, o token selecionado é:

substituído por um token [MASK] com probabilidade de 80%, substituído por um token de palavra aleatória com probabilidade de 10%, não substituído com probabilidade de 10%.

O motivo pelo qual nem todos os tokens selecionados são mascarados é para evitar o problema de mudança no conjunto de dados (dataset shift). O problema de mudança no conjunto de dados surge quando a distribuição das entradas vistas durante o treinamento difere significativamente da distribuição encontrada durante a inferência. Um modelo BERT treinado pode ser aplicado à representação de palavras (como o Word2Vec), onde seria executado sobre frases que não contêm nenhum token [MASK]. Descobriu-se posteriormente que objetivos de treinamento mais diversos são geralmente melhores.

Como exemplo ilustrativo, considere a frase "meu cachorro é fofo". Ela seria primeiro dividida em tokens como "meu1 cachorro2 é3 fofo4". Em seguida, um token aleatório na frase seria escolhido. Digamos que seja o 4º, "fofo4". A seguir, haveria três possibilidades:

com probabilidade de 80%, o token escolhido é mascarado, resultando em "meu1 cachorro2 é3 [MASK]4"; com probabilidade de 10%, o token escolhido é substituído por um token aleatório amostrado uniformemente, como "feliz", resultando em "meu1 cachorro2 é3 feliz4"; com probabilidade de 10%, nada é feito, resultando em "meu1 cachorro2 é3 fofo4".

Após processar o texto de entrada, o 4º vetor de saída do modelo é passado para a sua camada decodificadora, que gera uma distribuição de probabilidade em seu espaço de vocabulário de 30.000 dimensões.

Previsão da próxima frase

Dadas duas frases, o modelo prevê se elas aparecem sequencialmente no corpus de treinamento, gerando [IsNext] (É o próximo) ou [NotNext] (Não é o próximo). Durante o treinamento, o algoritmo às vezes extrai duas frases de um único trecho contínuo no corpus de treinamento, enquanto em outras vezes, ele extrai duas frases de dois trechos descontínuos.

A primeira frase começa com um token especial, [CLS] (para "classificar"). As duas frases são separadas por outro token especial, [SEP] (para "separar"). Após processar as duas frases, o vetor final para o token [CLS] é passado para uma camada linear para classificação binária em [IsNext] e [NotNext].

Por exemplo:

Dado "[CLS] meu cachorro é fofo [SEP] ele gosta de brincar [SEP]", o modelo deve prever [IsNext]. Dado "[CLS] meu cachorro é fofo [SEP] como funcionam os ímãs [SEP]", o modelo deve prever [NotNext].

Ajuste fino (Fine-tuning)

O BERT tem como objetivo ser um modelo pré-treinado geral para várias aplicações no processamento de linguagem natural. Ou seja, após o pré-treinamento, o BERT pode sofrer um ajuste fino (fine-tuning) com menos recursos em conjuntos de dados menores para otimizar o seu desempenho em tarefas específicas, como inferência em linguagem natural (como em Implicação textual) e classificação de texto, e tarefas de geração de linguagem baseadas em sequência para sequência, como resposta a perguntas e geração de respostas conversacionais.

O artigo original do BERT publicou resultados demonstrando que uma pequena quantidade de ajuste fino (para o BERTLARGE, 1 hora em 1 Cloud TPU) permitiu que ele alcançasse um desempenho no estado da arte em uma série de tarefas de compreensão de linguagem natural:

Conjunto de tarefas GLUE (General Language Understanding Evaluation) (consistindo em 9 tarefas); SQuAD (Stanford Question Answering Dataset) v1.1 e v2.0; SWAG (Situations With Adversarial Generations). No artigo original, todos os parâmetros do BERT sofrem ajuste fino, e recomendou-se que, para aplicações a jusante (downstream) que são classificações de texto, o token de saída no token de entrada [CLS] seja alimentado numa camada linear softmax para produzir as saídas de rótulo.

A base de código original definiu a camada linear final como uma "camada de agrupamento" (pooler layer), em analogia com o agrupamento global na visão computacional, embora ela simplesmente descarte todos os tokens de saída, exceto aquele correspondente a [CLS].

Custo O BERT foi treinado no BookCorpus (800 milhões de palavras) e em uma versão filtrada da Wikipédia em inglês (2.500 milhões de palavras) sem listas, tabelas e cabeçalhos.

O treinamento do BERTBASE em 4 TPUs de nuvem (16 chips TPU no total) levou 4 dias, a um custo estimado de 500 dólares americanos. O treinamento do BERTLARGE em 16 TPUs de nuvem (64 chips TPU no total) levou 4 dias.

Interpretação