Como usar a Camada de incorporação de Keras corretamente?

7

Estou um pouco confuso sobre o uso adequado da camada de incorporação no Keras para fins de seq2seq (eu gostaria de reconstruir o tutorial de tradução automática do TensorFlow se2seq no Keras). Minhas perguntas são as seguintes:

Entendo que as camadas de incorporação transformam valores de palavras em uma frase em representação de dimensão fixa e longa. Mas observo dois usos distintos das camadas de incorporação: uma por um lado (como este tutorial no Keras Blog ) utiliza vetores word2vec pré-treinados externos por meio do weightsparâmetro:

from keras.layers import Embedding

embedding_layer = Embedding(len(word_index) + 1,
  EMBEDDING_DIM,
  weights=[embedding_matrix],
  input_length=MAX_SEQUENCE_LENGTH,
  trainable=False)`

enquanto em outros casos não existe uma saída externa, mas os usuários apenas saem para a camada Incorporação para decidir os vetores de representação. Não entendo qual é a diferença real entre essas abordagens em relação ao resultado desejado? Talvez a solução somente interna não seja uma representação semântica? Qual é o sentido de aplicar a camada de incorporação a uma matriz externa cuja linha já possui comprimento fixo?

Além disso, qual é o objetivo / efeito do trainableparâmetro da camada de incorporação? Estou correto ao supor que esse conjunto como True permita que a camada de incorporação ajuste os pesos importados do word2vec para levar em consideração os exemplos de treinamento reais?

Além disso, como instruir a camada de incorporação a codificar corretamente "metacaracteres"? Configurando o mask_zeroparâmetro True, ele pode incorporar zeros de preenchimento, mas e UNK (desconhecido), EOS (Fim da frase)? (A propósito, não consigo entender qual é o sentido de assinar explicitamente o final da frase em uma entrada baseada em frase ...)

E finalmente: como um modelo poderia prever a tradução de uma palavra que não está representada no conjunto de treinamento? Ele tenta aproximar com o "mais próximo" do vocabulário?

Hendrik
fonte

Respostas:

4

Você trouxe alguns pontos muito bons. Vamos examinar tudo isso:

Uma incorporação de palavras é uma representação matemática de uma palavra. Isso é necessário, pois não podemos trabalhar com texto como entrada simples.

Para obter essas incorporações de palavras, existem diferentes maneiras, métodos e configurações de como calculá-las. cbow, pular grama e assim por diante.

Existem diferentes combinações de palavras pré-treinadas, por exemplo,

Este é apenas um trecho dos mais conhecidos. Como você pode ver, eles usaram conjuntos de dados diferentes - portanto, vocabulário e incorporação de palavras diferentes, respectivamente.

Não entendo qual é a diferença real entre essas abordagens em relação ao resultado desejado? Talvez a solução somente interna não seja uma representação semântica? Qual é o sentido de aplicar a camada de incorporação a uma matriz externa cuja linha já possui comprimento fixo?

Keras é uma caixa de ferramentas incrível e a camada de incorporação é uma possibilidade muito boa para colocar as coisas em funcionamento rapidamente. Converta o texto em uma matriz de contagem a quente, use-o como entrada na camada de incorporação de palavras e pronto.

Por outro lado, se você usar vetores de palavras pré-treinados, converte cada palavra em um vetor e usa-a como entrada para sua rede neural. Essa abordagem daria mais flexibilidade quando se trata de engenharia de recursos.

Como mencionado acima, os vetores de palavras pré-treinados receberam principalmente conjuntos de dados de texto gerais. Você pode encontrar o tipo de dado especial (por exemplo, Tweets) onde as pessoas escrevem ou se comportam de maneira diferente. Portanto, você pode treinar suas próprias incorporações, em seu próprio conjunto de dados - no final do dia, isso depende da sua tarefa / problema e das métricas que você está ajustando.

Além disso, qual é o objetivo / efeito do parâmetro treinável da camada de incorporação?

Como você disse corretamente, é para treinar novamente os pesos das combinações com o conjunto de dados que você usa.

Não consigo entender qual é o ponto de assinar explicitamente o final da frase em uma entrada baseada em frase

Uma das coisas mais importantes da PNL é a engenharia de recursos. É o mesmo que você sentado na escola e aprendendo um idioma, o que precisa ser considerado, vocabulário, gramática e regras. Coisas que tornam mais fácil para você, como ser humano, entender a linguagem. O mesmo é aplicado aqui. Você pode vê-lo como uma parte da engenharia de recursos, tudo resume-se à imagem maior.

E finalmente: como um modelo poderia prever a tradução de uma palavra que não está representada no conjunto de treinamento?

Ou você converte a palavra que não foi encontrada em um <UNK>token (palavra desconhecida) que representa seu grupo. No entanto, é necessário ter o <UNK>token nas incorporações de palavras treinadas. Ou você pode usar o arquivo binário de texto rápido, que calcula vetores de palavras em tempo real para palavras desconhecidas.

PSc
fonte
11
Em relação à sua última sugestão, outra opção é aprender a incorporação de palavras usando uma RNN que usa uma sequência de n-gramas como entrada. Esse tipo de modelo aprende efetivamente representações etimológicas (raízes, afixos) e é tolerante a palavras fora do vocabulário. Verifique este documento: cc.gatech.edu/~ypinter3/papers/…
David Marx