You've successfully subscribed to edrone Blog
Great! Next, complete checkout for full access to edrone Blog
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Success! Your billing info is updated.
Billing info update failed.

Word2Vec: Função de Perda

A diferença entre os vetores probabilísticos e os vetores-alvo é crucial para que a rede neural possa aprender. Como medir esta diferença? Como funciona o processo de aprendizagem? E como sabemos quando o nosso modelo está "inteligente" o bastante?

Marcin Lewek
Marcin Lewek

Na parte anterior, terminamos com dois vetores: o vetor softmax e o vetor-alvo. Este artigo é a terceira parte de uma série sobre Word2Vec, então recomendo fortemente que você avance apenas após ter lido a parte II.


Word2vec: Modelo Skip-Gram
Podemos fazer os computadores entenderem palavras ao transformá-las em números – ou melhor, vetores. Mas como fazer os computadores entenderem relações entre as palavras? Uma das formas é o Modelo Skip-Gram.

Na etapa anterior, obtivemos um vetor de saída que é praticamente inútil, pois é difícil interpretar seus componentes como indicadores para uma palavra-alvo. Por isso utilizamos a função Softmax. O resultado foi um vetor cujos componentes, quando somados, são iguais a 1.

diagrama com exemplo de rede neural usando função softmax

Agora temos com o que trabalhar, pois o vetor softmax representa uma distribuição probabilística da palavra-alvo. Probabilística porque, em Aprendizado de Máquina, trabalhamos sempre com aleatoriedade controlada. Há alguma chance de qualquer vetor ser dado como resultado – saiba mais sobre isso na parte I desta série, onde falamos sobre a relação entre vetores one-hot.


O que é Word2Vec - Modelo de Linguagem baseado em Deep Learning
Word2Vec é um método de Aprendizado de Máquina para construir um modelo de linguagem baseado em ideias de Aprendizado Profundo. No entanto, a rede neural usada aqui é um tanto superficial (tem apenas uma camada escondida).

Entropia cruzada

Assim como o vetor de entrada,  o vetor-alvo é one-hot: composto por vários "0.0" e um único "1.0". O vetor softmax, por outro lado, é composto por tudo menos "0.0" e "1.0". Compará-los é crucial para entender se a nossa rede neural está fazendo um bom trabalho ou falhando. Para isso, usaremos a entropia cruzada.

resultados das fórmulas softmax e entropia cruzada aplicadas a redes neurais

Fórmula de entropia cruzada:

\[ {H(p,q)=-\sum _{x} p(x)\ \ \log q(x)} \]

Para usá-la, pegamos nosso vetor-alvo e nosso vetor softmax:

\[ \overrightarrow{V_T} = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0] \newline \overrightarrow{V_S} = [0.411, 0.411, 0.151, 0.001, 0.000, 0.024] \]

Inserimos os vetores na fórmula:

\[ H(\overrightarrow{V_T},\overrightarrow{V_S})\ =\ -\ [  \overrightarrow{V_T}\ \cdot \ ln\ ( \ \overrightarrow{V_S}\ ) \ ]  \]

\[ H\ =\ -\ [  0\ \cdot \ ln\ ( \ 0.411\ ) \ +\ 1\ \cdot \ ln\ ( \ 0.411\ ) \ +\ ...\ +\ 0\ \cdot \ ln\ ( \ 0.024\ ) \ ] \]

Note que, novamente, o vetor one-hot age como um indicador!

\[ H\ =\ -\ [  1\ \cdot \ ln\ ( \ 0.411\ ) ] = 0.478\]

A entropia cruzada indica a distância entre a previsão da nossa rede neural e a resposta desejada (vetor-alvo). O que podemos fazer com esta informação?

Propagação Retrógrada: Gradiente Descendente Estocástico

Para máquinas, "aprender" significa minimizar o valor do erro.

Nossa função é encontrar o mínimo da função de perda. Redes neurais atualizam os pesos das relações entre os nódulos para minimizar o valor da entropia cruzada. Isto não pode ser visualizado facilmente pois, como você sabe, estamos lidando com um espaço multidimensional. Porém, para explicar como funciona, vamos simplificar e apresentar um exemplo em espaço 3D: são duas dimensões para os pesos (os valores abstratos que iremos ajustar) e a terceira dimensão indica o valor da entropia cruzada.

Representação tridimensional de uma função de perda.
Ladeira abaixo!

Cada combinação de pesos resultará em um valor diferente, e o processo de otimização envolverá "descer a ladeira" até chegar ao valor mais baixo possível. Quanto mais baixo for este valor, mais próximo estaremos da previsão correta!

Em suma, estamos comparando quão longe nossa previsão está do resultado desejado, e atualizando os nódulos para que a rede obtenha melhores resultados. Esta é uma representação simplificada de como o algoritmo funciona, mas infelizmente o Word2Vec é um pouco mais complicado.

Este é apenas o começo

O exemplo apresentado é a versão mais simples possível do (já relativamente simples) Word2Vec, que foca na previsão de palavras. Enquanto isso, também queremos treinar o modelo, mais ou menos "matando dois coelhos com uma cajadada". Porém, o modelo de aprendizagem que apresentamos é pouco eficiente devido às seguintes razões:

  • Uma "rodada" é chamada de época. Ela cobre o período em que nossa rede neural está processando todos os exemplos de treinamento. No "mundo real", não se usa apenas seis palavras, mas sim milhões delas.
  • Geralmente, o treinamento de uma rede neural envolve mais do que uma época. Muito mais.
  • À medida que o vocabulário cresce, também cresce o número de dimensões. Vetores de seis dimensões são muito mais fáceis de se processar do que vetores com milhões de dimensões.
  • Nós estamos calculando a probabilidade de ocorrências de palavras ao mesmo tempo em que estamos usando estes resultados para atualizar a rede neural. Não é necessariamente ruim, mas funciona melhor como um método de otimização do que de aprendizado.

Em outras palavras

O método apresentado envolve gerar um resultado e então dizer à máquina se ela tomou uma decisão certa ou errada. Na prática, estamos torcendo por previsões corretas para depois "empurrá-las" através da rede neural.

É como dar um problema de matemática para uma criança pela primeira vez, observá-la enquanto ela se debate para resolver, e no fim dizer "errado, a resposta certa é 5". E fazer isso de novo e de novo. Não é muito didático, concorda?

Em vez disso, podemos mostrar exemplos de respostas certas e erradas sem perder tempo com os cálculos, pois sabemos que a criança (no caso, a rede neural) ainda não foi treinada. Chamamos isso de...

Skip-Gram com Amostragem Negativa

A ideia aqui é apresentar à máquina um par de palavras, e já dizer se elas aparecem no mesmo trecho ou não!

Se as palavras estiverem no mesmo trecho, daremos um valor de "1". Se não, o valor será "0". Nesta abordagem, teremos duas palavras (a palavra analisada e a palavra-alvo) como dado de entrada, e o dado de saída será o valor correto ("1" ou "0"). E como ficam os exemplos incorretos?

As respostas de treinamento que são erradas (verdadeiro negativo) são geradas usando a palavra analisada e uma outra palavra retirada aleatoriamente do texto e que não está no trecho da palavra analisada.

Você se lembra do corpus que usamos na parte I?

corpus de word2vec

Usando este corpus como exemplo e aplicando o modelo Skip-Gram com Amostragem Negativa (Skip-Gram with Negative Sampling – SGNS), as primeiras amostras poderiam ser algo como a imagem abaixo. Para fins didáticos, eu escolhi duas amostras negativas para cada amostra positiva. Assim como o tamanho do trecho, o número de amostras negativas é uma escolha do analista!

Amostras de skip-gram com amostragem negativa
Amostras do primeiro trecho em nosso corpus.

O que vem depois?

Agora vamos usar duas matrizes:

  • Matriz de valores embutidos – representa as palavras de entrada (input)
  • Matriz de contexto – representa as palavras-alvo

Como sempre, no início estaremos trabalhando com valores aleatórios. Mas não se preocupe, logo faremos os ajustes!

Vamos agora observar o processo de treinamento. Como ele funciona?

  1. Escolhemos um vetor da matriz de valores embutidos e um da matriz de contexto.
  2. Calculamos o produto deste par de vetores.
  3. Aplicamos uma função logística ao resultado, de forma que o resultado seja um valor entre 0 e 1.
  4. Subtraímos o valor da relação "pertence ou não pertence ao trecho" (1 ou 0).
  5. Como resultado, teremos a margem de erro referente a cada vetor (tanto o de entrada como o da palavra-alvo), permitindo que nossa rede neural seja ajustada.

O processo acima é aplicado em cada par de palavras de treinamento, e então repetido de novo (e de novo) por todo o vocabulário até atingir a precisão desejada. Após terminarmos nosso processo de pré-treinamento, vamos guardar a matriz de valores embutidos para uso posterior.

O que faremos com ela? Explicaremos na parte IV!

Artificial intelligenceAVADeep learningMachine learningWord2vecNLP

Marcin Lewek

Digital marketer and copywrier specialized in Artificial Intelligence, design, and digital marketing itself. Science, and holistic approach enthusiast, after-hours musician, and sometimes actor.