【发布时间】:2016-02-23 14:51:23
【问题描述】:
TL;DR:Bidirectional RNN 是否有助于简单的文本分类并且填充是邪恶的?
在我最近的工作中,我为同一个任务创建了一个 LSTM 模型和一个 BLSTM 模型,即文本分类。 LSTM 模型做得很好,但我决定试一试 BLSTM,看看它是否可以进一步提高准确性。最后,我发现 BLSTM 的收敛速度要慢得多,而且令人惊讶的是,它过拟合了,尽管我以 50% 的概率应用了 dropout。
在实施过程中,我对 LSTM 和 BLSTM 都使用了展开的 RNN,期望更快的训练。为了满足要求,我手动将输入文本填充到固定长度。
假设我们有一个句子“我早上睡得很晚,错过了与 Nebuchadnezzar 的采访”,然后在转换为预训练词嵌入的索引数组时在其末尾填充 0。所以我们得到类似 [21, 43, 25, 64, 43, 25, 6, 234, 23, 0, 0, 29, 0, 0, 0, ..., 0]。请注意,“th”(应该是“the”)是一个错字,而且“Nebuchadnezzar”这个名字太少见了,所以它们都没有出现在词汇表中,所以我们也用 0 替换它,这对应于一个特殊的完整 -零词向量。
以下是我的感想:
有些人喜欢在将语料库输入到 GloVe 或 Word2Vec 模型之前将未知词转换为特殊词,例如“”。 Does it mean that we have to first build the vocabulary and change some low-frequency words (according to min count setting) into "" before training?训练 RNN 时,是不是比把未知词改成 0 还是直接去掉更好?
就我而言,输入 LSTM 或 BLSTM 网络的尾随 0 会使输出混乱。尽管没有来自外部的新信息,但单元状态仍会在随后的每个时间步中更新,因此最终单元的输出将受到长尾随 0 的严重影响。在我看来,BLSTM 会受到更大的影响,因为它还会以相反的顺序处理文本,例如 [0, 0, 0, ..., 0, 321, 231],特别是如果我们设置初始忘记门到 1.0 以在开始时培养记忆。我看到很多人使用填充,但如果文本被填充到很长并且在 BLSTM 的情况下会不会造成灾难?
对这些问题有任何想法吗? :-o
【问题讨论】:
标签: machine-learning neural-network lstm recurrent-neural-network