Embeddings: dados de entrada categóricos

Os dados categóricos se referem a recursos de entrada que representam um ou mais itens discretos de um conjunto finito de opções. Por exemplo, pode ser o conjunto de filmes que um usuário assistiu, o conjunto de palavras em um documento ou a profissão de uma pessoa.

Os dados categóricos são representados de maneira mais eficiente por meio de tensores esparsos, que são tensores com muito poucos elementos diferentes de zero. Por exemplo, se estivermos criando um modelo de recomendação de filmes, podemos atribuir um ID exclusivo a cada filme possível e, em seguida, representar cada usuário por um tensor esparso de filmes que eles assistiram, conforme mostrado na Figura 3.

Um exemplo de entrada para o problema com a recomendação de filmes.

Figura 3. Dados para nosso problema de recomendação de filmes.

Cada linha da matriz na Figura 3 é um exemplo que captura um histórico de visualização de filmes de um usuário, e é representada como um tensor esparso porque cada usuário assiste apenas a uma pequena fração de todos os filmes possíveis. A última linha corresponde ao tensor esparso [1, 3, 999999], usando os índices de vocabulário mostrados acima dos ícones de filme.

Da mesma forma, é possível representar palavras, frases e documentos como vetores esparsos em que cada palavra no vocabulário tem um papel semelhante aos filmes do exemplo de recomendação.

Para usar essas representações em um sistema de machine learning, precisamos de uma maneira de representar cada vetor esparso como um vetor de números para que itens semanticamente semelhantes (filmes ou palavras) tenham distâncias semelhantes no espaço vetorial. Mas como representar uma palavra como vetor de números?

A maneira mais simples é definir uma camada de entrada gigante com um nó para cada palavra no seu vocabulário ou pelo menos um nó para cada palavra que aparece nos seus dados. Se 500.000 palavras únicas aparecerem nos seus dados, você poderá representar uma palavra com comprimento de 500.000 vetor e atribuir cada palavra a um slot no vetor.

Se você atribuir "horse" para indexar 1247, então para inserir "horse" em sua rede, você pode copiar 1 para o 1247o nó de entrada e 0s para todo o restante. Esse tipo de representação é chamado de codificação one-hot, porque apenas um índice tem um valor diferente de zero.

Normalmente, seu vetor pode conter contagens de palavras em um bloco de texto maior. Isso é conhecido como uma representação de "saco de palavras". Em um vetor de saco de palavras, vários dos 500.000 nós teriam um valor diferente de zero.

No entanto, independentemente dos valores diferentes de zero, um nó por palavra oferece vetores de entrada muito esparsos, que são vetores muito grandes com relativamente poucos valores diferentes de zero. As representações esparsas têm alguns problemas que podem dificultar o aprendizado eficiente de um modelo.

Tamanho da rede

Grandes vetores de entrada significam um número muito grande de pesos para uma rede neural. Se houver M palavras no vocabulário e N nós na primeira camada da rede acima da entrada, você terá pesos MxN para treinar para essa camada. Um grande número de ponderações causa mais problemas:

  • Quantidade de dados. Quanto mais pesos no modelo, mais dados você precisa para treinar de maneira eficaz.

  • Quantidade de computação. Quanto mais pesos, mais computação é necessária para treinar e usar o modelo. É fácil exceder os recursos do seu hardware.

Falta de relações significativas entre os vetores

Se você alimentar os valores de pixel de canais RGB em um classificador de imagens, faz sentido falar sobre valores de "close". O azul avermelhado é próximo do azul puro, tanto semanticamente quanto em termos da distância geométrica entre os vetores. Mas um vetor com 1 no índice 1247 para "quose;horse" não está mais perto de um vetor com 1 no índice de 50.430 para "quolo;antelope"" do que um vetor com 1 no índice de 238 para "television".

A solução: embeddings

A solução para esses problemas é usar embeddings, que convertem grandes vetores esparsos em um espaço de menor dimensão que preserva relações semânticas. Vamos analisar as incorporações de maneira intuitiva, conceitual e programática nas seções a seguir deste módulo.