gpt4 book ai didi

machine-learning - (双向)RNN 用于简单文本分类

转载 作者:行者123 更新时间:2023-11-30 08:54:51 25 4
gpt4 key购买 nike

TL;DR:双向 RNN 对简单文本分类有帮助吗?填充是否有害?

在我最近的工作中,我为同一任务(即文本分类)创建了 LSTM 模型和 BLSTM 模型。 LSTM 模型做得非常好,但我决定尝试一下 BLSTM,看看它是否可以进一步提高准确性。最后,我发现 BLSTM 的收敛速度要慢得多,而且令人惊讶的是,它过度拟合了,尽管我以 50% 的概率应用了 dropout。

在实现过程中,我对 LSTM 和 BLSTM 使用了展开的 RNN,希望能够加快训练速度。为了满足要求,我手动将输入文本填充到固定长度。

假设我们有一个句子“我早上睡得很晚,错过了对尼布甲尼撒的采访”,然后在转换为预先训练的词嵌入索引数组时,在其末尾填充 0。所以我们得到类似 [21, 43, 25, 64, 43, 25, 6, 234, 23, 0, 0, 29, 0, 0, 0, ..., 0] 的结果。请注意,“th”(应该是“the”)是一个拼写错误,而“Nebuchadnezzar”这个名字太罕见,因此这两个名字都不出现在词汇表中,因此我们也将其替换为 0,这对应于一个特殊的完整 -零词向量。

以下是我的感想:

  1. 有些人喜欢在将语料库输入 GloVe 或 Word2Vec 模型之前将未知单词更改为特殊单词,例如“< unk >”。这是否意味着我们必须先建立词汇表,然后将一些低频词(根据最小计数设置)更改为“< unk >”才能进行训练?训练 RNN 时,将未知词变为 0 还是将其删除,是不是更好?

  2. 就我而言,输入 LSTM 或 BLSTM 网络的尾随 0 会弄乱输出。尽管没有来自外部的新信息,但单元状态仍然会在接下来的每个时间步中更新,因此最终单元的输出将受到长尾随 0 的严重影响。我相信,BLSTM 会受到更大的影响,因为它还按照相反的顺序处理文本,例如 [0, 0, 0, ..., 0, 321, 231],特别是如果我们设置初始值忘记通往 1.0 的大门,以在一开始就培养内存。我看到很多人使用填充,但是如果文本被填充到很长,并且在 BLSTM 的情况下,会不会造成灾难?

对这些问题有什么想法吗? :-o

最佳答案

我基本上同意法布里斯上面的回答,但添加一些评论:

  1. 您不应该对 UNK 和 PAD 使用相同的 token 。大多数深度学习库都会掩盖 PAD,因为它不提供任何信息。另一方面,UNK 确实向您的模型提供信息(这里有一个单词,我们只是不知道它是什么,它可能是一个特殊的单词),所以您不应该掩盖它。是的,这确实意味着在单独的预处理步骤中,您应该检查训练/测试数据,建立一个词汇表,例如前 10,000 个最常见的单词,并将其他所有内容切换为 UNK。

  2. 如 1 中所述,大多数库只是屏蔽(即忽略)填充字符,因此这不是问题。但正如你所说,你没有必要填充句子。例如,您可以在训练时按长度对它们进行分组,或者一次将一个句子输入模型中。

关于machine-learning - (双向)RNN 用于简单文本分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com