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 weights
parâ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 trainable
parâ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_zero
parâ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?
fonte