TL; DR:双向RNN是否对简单的文本分类有帮助并且是填充邪恶的?
在我最近的工作中,我为同一个任务创建了一个LSTM模型和一个BLSTM模型,即文本分类 . LSTM模型做得非常好,但我决定给BLSTM一个机会,看看它是否可能进一步提高准确性 . 最后,我发现BLSTM收敛得慢得多,令人惊讶的是,它过度拟合,即使我以50%的概率应用辍学 .
在实现中,我使用展开的RNN用于LSTM和BLSTM,期望更快的训练 . 为了满足要求,我手动将输入文本填充到固定长度 .
假设我们有一句话“我早上睡得很晚,错过了对Nebuchadnezzar的采访”,然后在转换为一系列预训练的单词嵌入指数时用0填充 . 所以我们得到类似[21,43,25,64,43,25,6,234,23,0,0,29,0,0,0,...,0]的东西 . 请注意,“th”(应该是“the”)是一个拼写错误,名称“Nebuchadnezzar”太罕见,因此它们都不在词汇表中,因此我们将其替换为0,这对应于特殊的全部 - 零字矢量 .
以下是我的反思:
有些人喜欢改变生词进入一个特殊的词,如“”喂胼到手套箱或Word2Vec模型前 . 这是否意味着我们必须首先构建词汇和改变一些低频词(按分钟计设置)为“”培训过吗?是否比将未知单词更改为0或在训练RNN时删除它们更好?
对于LSTM或BLSTM网络的尾随0,就我而言,使输出混乱 . 虽然没有来自外部的新信息,但是对于随后的每个时间步,单元状态仍然会更新,因此最终单元的输出将受到长尾0的严重影响 . 而且我相信,BLSTM会受到更大影响,因为它也会按照逆序处理文本,就像[0,0,0,...,0,321,231],特别是如果我们设置初始值忘记门到1.0,以便在开始时培养记忆力 . 我看到很多人都使用填充但是如果文本填充到很长的时间并且在BLSTM的情况下它不会导致灾难吗?
对这些问题有什么想法吗? :-o