【发布时间】:2020-08-19 05:19:16
【问题描述】:
作为我论文的一部分,我正在尝试构建一个循环神经网络语言模型。
从理论上,我知道输入层应该是一个单热向量层,其神经元数量等于我们词汇表中的单词数量,然后是一个嵌入层,在 Keras 中,它显然转换为序列模型中的单个嵌入层。我也知道输出层也应该是我们的词汇量的大小,这样每个输出值就可以映射到每个词汇表单词 1-1。
然而,在嵌入层 (https://keras.io/layers/embeddings/) 和本文 (https://machinelearningmastery.com/how-to-develop-a-word-level-neural-language-model-in-keras/#comment-533252) 的 Keras 文档中,输入层和输出层的词汇量都任意增加了 1! Jason 解释说这是由于在 Keras 中实现了嵌入层,但这并不能解释为什么我们还要在输出层中使用 +1 神经元。我正想根据概率对可能的下一个词进行排序,但我有一个概率太多,我也不知道要映射到哪个词。
有谁知道达到预期结果的正确方法是什么? Jason 是否只是忘记从输出层子跟踪一个,而嵌入层出于实现原因只需要 +1(我的意思是官方 API 中已说明)?
任何有关该主题的帮助将不胜感激(为什么 Keras API 文档如此简洁?)。
编辑:
这篇Keras embedding layer masking. Why does input_dim need to be |vocabulary| + 2? 的帖子让我觉得 Jason 实际上确实错了,当我们的单词索引为:0, 1, ..., n-1 时,词汇的大小不应该加一。
但是,当使用 Keras 的 Tokenizer 时,我们的单词索引是:1, 2, ..., n。在这种情况下,正确的做法是:
设置
mask_zero=True,以区别对待0,因为从来没有 Embedding 层中的 0(整数)索引输入并保持 词汇量大小与词汇量相同(n)?设置
mask_zero=True,但将词汇量增加一?未设置
mask_zero=True并保持词汇大小与 词汇量有多少?
【问题讨论】:
标签: tensorflow keras neural-network word-embedding language-model