Esta seção aborda várias formas de criar embeddings, bem como transformar embeddings estáticos em contextuais.
Técnicas de redução da dimensionalidade
Muitas técnicas matemáticas capturam as estruturas importantes de um espaço de alta dimensão em um espaço de baixa dimensão. Em teoria, qualquer uma dessas técnicas pode ser usada para criar um embedding para um sistema de machine learning.
Por exemplo, a análise de componentes principais (PCA, na sigla em inglês) é usada para criar embeddings de palavras. Com base em um conjunto de instâncias, como vetores de saco de palavras, a PCA tenta encontrar dimensões altamente correlacionadas que possam ser reduzidas a uma única dimensão.
Treinamento do embedding como parte de uma rede neural
Você pode criar um embedding ao treinar uma rede neural para sua tarefa de destino. Essa abordagem fornece um embedding personalizado para seu sistema específico, mas pode demorar mais do que treinar o embedding separadamente.
Em geral, você pode criar uma camada escondida de tamanho d na sua rede neural, designada como a camada de embedding, em que d representa ambos o número de nós na camada escondida e o número de dimensões no espaço de embedding. Essa camada de embedding pode ser combinada com quaisquer outros recursos e camadas escondidas. Como em qualquer rede neural profunda, os parâmetros serão otimizados durante o treinamento para reduzir a perda dos nós na camada final.
Voltando ao exemplo de recomendação de alimentos, nosso objetivo é prever novas refeições que agradem o usuário com base nos pratos favoritos dele no momento. Primeiro, podemos compilar dados adicionais sobre os cinco pratos favoritos do usuário. Em seguida, podemos modelar essa tarefa como um problema de aprendizagem supervisionada. Definimos quatro desses cinco pratos principais como dados de recursos, e separamos aleatoriamente o quinto prato como o rótulo positivo que nosso modelo busca prever, otimizando as previsões com uma perda softmax.
Durante o treinamento, o modelo da rede neural vai aprender os pesos ideais para os nós na primeira camada escondida, que serve como a camada de embedding. Por exemplo, se o modelo tiver três nós na primeira camada escondida, ele poderá determinar que as três dimensões mais relevantes para os alimentos são a semelhança com sanduíches, doces e líquidos. A figura 12 mostra o valor de entrada com codificação one-hot para "cachorro-quente" transformado em um vetor tridimensional.
![Figura 12. Rede neural para a codificação one-hot de cachorro-quente. A primeira camada é
de entrada com cinco nós, cada um classificado com um ícone do alimento que
representa (borscht, cachorro-quente, salada, … e shawarma). Esses nós têm
os valores [0, 1, 0, …, 0], respectivamente, que representam a codificação
one-hot de "cachorro-quente". A camada de entrada é conectada a uma camada de embedding
de três nós, com os respectivos valores: 2,98, -0,75 e 0. A
camada de embedding é conectada a uma camada escondida de cinco nós, que então é
conectada a uma camada de saída de cinco nós.](https://developers.google.com/static/machine-learning/crash-course/embeddings/images/one_hot_hot_dog_embedding.png?authuser=00&hl=pt-br)
hot dog
fornecida como entrada para uma rede neural profunda. Uma camada de embedding traduz
a codificação one-hot no vetor de embedding tridimensional
[2.98, -0.75, 0]
.
Durante o treinamento, os pesos da camada de embedding serão otimizados para que os vetores de embedding de exemplos semelhantes sejam mais próximos uns dos outros. Conforme mencionado anteriormente, as dimensões que um modelo real vai escolher para os embeddings provavelmente não serão tão intuitivas e compreensíveis como este exemplo.
Embeddings contextuais
Uma limitação dos vetores de embedding estáticos word2vec
é que as palavras podem ter significados diferentes de acordo com o contexto. "Sim" significa uma coisa quando está sozinho, e o oposto na frase "pois sim". "Postar" pode significar "enviar pelo correio",
"pôr em determinado local", "ficar em pé"
ou "compartilhar algo na Internet",
entre outras possibilidades.
No entanto, com os embeddings estáticos, cada palavra é representada por um único
ponto no espaço vetorial, mesmo que tenha uma variedade de significados.
No último exercício,
você descobriu as limitações dos embeddings estáticos para a palavra
laranja, que pode significar uma cor ou um tipo de fruta. Com apenas um
embedding estático, laranja sempre vai ficar mais perto de outras cores, e não de suco, quando treinada com o conjunto de dados word2vec
.
Os embeddings contextuais foram criados para lidar com essa limitação. Eles permitem que uma palavra seja representada por vários embeddings que incorporam informações sobre a própria palavra e as outras que estão próximas. Laranja teria um embedding diferente para cada frase única apresentando a palavra no conjunto de dados.
Alguns métodos para criar embeddings contextuais (por exemplo,
ELMo) tiram o embedding
estático de um exemplo, como o vetor word2vec
para uma palavra em uma frase, e o transformam em uma função que incorpora informações sobre as palavras
próximas dele. Isso gera um embedding contextual.
Clique aqui para saber mais sobre os embeddings contextuais
- Especialmente para modelos ELMo, o embedding estático é agregado a embeddings retirados de outras camadas, que codificam leituras da frase de frente para trás e de trás para frente.
- Os modelos BERT mascaram parte da sequência que o modelo usa como entrada.
- Os modelos de transformador usam uma camada de autoatenção para pesar a relevância de outras palavras em uma sequência para cada palavra. Eles também adicionam a coluna relevante de uma matriz de embedding posicional (veja codificação posicional) a cada embedding de token aprendido anteriormente, elemento por elemento, para produzir o embedding de entrada que é alimentado ao resto do modelo para inferência. Esse embedding de entrada, exclusivo para cada sequência textual, é um embedding contextual.
Enquanto os modelos descritos acima são modelos de linguagem, os embeddings contextuais são úteis em outras tarefas generativas, como imagens. Considere embeddings estáticos somente de valores RGB de pixels na foto de um cavalo. Quando eles são combinados com uma matriz posicional representando cada pixel e com a codificação dos pixels próximos, criando embeddings contextuais, o modelo recebe muito mais informações.