我有点困惑在 Keras 中正确使用嵌入层以实现 seq2seq 目的(我想在 Keras 中重建TensorFlow se2seq 机器翻译教程)。我的问题如下:
我知道嵌入层将句子中的单词值转换为固定维度的长表示。但我观察到嵌入层的两种不同用法:一方面(如Keras 博客上的本教程)通过参数利用外部预训练的 word2vec 向量weights
:
from keras.layers import Embedding
embedding_layer = Embedding(len(word_index) + 1,
EMBEDDING_DIM,
weights=[embedding_matrix],
input_length=MAX_SEQUENCE_LENGTH,
trainable=False)`
而在其他情况下,没有这样的外部输出,但用户只需留给嵌入层来决定表示向量。我不明白这些方法之间关于预期结果的真正区别是什么?也许内部解决方案不是语义表示?将嵌入层应用于行已经具有固定长度的外部矩阵有什么意义?
trainable
此外,嵌入层参数的目的/作用是什么?我是否正确猜测此设置为 True 让嵌入层微调导入的 word2vec 权重以考虑实际训练示例?
此外,如何指示嵌入层正确编码“元字符”?将mask_zero
参数设置为 True 它可以包含填充零,但是 UNK(未知)、EOS(句末)呢?(顺便说一句,我不明白在基于句子的输入中显式签署句末的意义是什么......)
最后:模型如何预测训练集中未表示的单词的翻译?它是否试图用词汇表中“最接近”的词来近似它?