2016-11-18 35 views
0

我正在尝试编写一个以可变长度句子作为输入的动态rnn。我对如何计算交叉熵损失感到困惑。计算张量流中基于句子的语言模型的序列损失

像sequence_loss_by_example和sparse_softmax_cross_entropy_with_logits这样的Tensorflow方法似乎需要两个参数,网络的输出logits和目标标签。

我很困惑这些目标标签的形状。看来这两件事的尺寸应该匹配。在我目前的实现中,我的输入将是,例如[word1,word2,word3,句子结束标记]。在这种情况下,我似乎无法弄清楚我的目标标签会是什么样子。看起来他们会是相同的,但在这种情况下,它看起来像我只是预测了我作为输入获得的词。所以这感觉不对。我在这里错过的任何明显的东西?

还有一个问题:我有一个未知词汇,用于词汇表外的单词。在计算损失时,像处理其他单词一样对待这个令牌是否是一个问题?或者我应该以某种方式增加预测未知单词的成本?

+0

如果我理解正确,在语言模型中定义损失的一种方法是预测下一个单词, be [word2,word3] – sygi

+0

Hrm,所以第一个单词不会被预测?句子标记的结尾也不会被预测吗? – Boris

+0

您可以预测第一个单词,例如传递[START,word1,word2,word3]并预测EOS令牌 - 输出将是[w1,w2,w3,EOS] – sygi

回答

0

设置一个更大的规模和垫的剩余空间用零或任何特殊字符,而您可以在以后设置的模板的权重为0

例:[字词1,word2和WORD3,最终OF-句子标记,PAD_word,PAD_word,PAD_word,PAD_word,...,PAD_word]