RNN语言模型的Keras实现中输入和输出层的大小

问题描述 投票:0回答:1

作为论文的一部分,我正在尝试建立一个递归的神经网络语言模型。

从理论上讲,我知道输入层应该是一个单热向量层,其中神经元的数量等于我们词汇表中单词的数量,然后是嵌入层,在Keras中,它显然会转换为顺序模型中的单个嵌入层。我也知道输出层也应该是我们词汇表的大小,以便每个输出值将1-1映射到每个词汇表单词。

但是,在Keras嵌入层(https://keras.io/layers/embeddings/)文档和本文(https://machinelearningmastery.com/how-to-develop-a-word-level-neural-language-model-in-keras/#comment-533252)中,输入层和输出层的词汇量都任意增加了一个! Jason表示这是由于Keras中的Embedding层的实现,但这并不能解释为什么我们还要在输出层中使用+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的分词器时,我们的单词索引是:1, 2, ..., n。在这种情况下,正确的方法是:

  1. 设置mask_zero=True,以不同方式对待0,因为从不存在将0(整数)索引输入到Embedding层,并保持词汇量与词汇数(n)相同吗?

  2. 设置mask_zero=True,但将词汇量增加一个?

  3. 未设置mask_zero=True并保持词汇量与词汇数?

作为论文的一部分,我正在尝试建立一个递归的神经网络语言模型。从理论上讲,我知道输入层应该是单热向量层,其中神经元的数量等于...

tensorflow keras neural-network word-embedding language-model
1个回答
0
投票

我们加+1的原因导致我们有可能在测试或生产过程中碰到看不见的单词(在词汇量之外)的可能性,通常为那些UNKNOWN考虑一个通用术语,即为什么我们在前面添加一个OOV单词,该单词类似于所有单词。在github上检查此问题,该问题得到详细解释:

© www.soinside.com 2019 - 2024. All rights reserved.