使用反馈一次预测一个输出序列

数据挖掘 分类 rnn lstm 序列到序列
2021-09-28 01:59:53

我想解决以下分类问题:给定输入序列和真实输出的零个或多个初始项,预测输出序列中的下一项。

例如,我的训练集是一个由问答对组成的大型语料库。现在我想预测对“你好吗?”的反应。一次一个字。

一些合理的回答可能是“我很好。”、“好的。”、“很好,谢谢。” 等等。因此,可能的第一个词的预测分布将包括这些示例中的第一个词等。

但是现在如果我看到第一个词是“非常”,我希望我对第二个词的预测能够反映出“好的”现在不太可能,因为“非常好的”不是一个常见的响应。

我想重复这个过程,在给定输入句子和输出句子中的每个单词的情况下预测下一个单词。

一种方法可能是在诸如How are you<END> I am fine<END>. 但如果我理解正确,这也将学习预测“你好吗”部分中的单词,我认为这可能会偏离目标。

也许输入和部分输出的单独层然后合并到解码器层?

3个回答

我假设,您的数据看起来像这样(一对问答)

Question,Answer
How are you?,I'm fine.
How are you?,OK.
How are you?,Very well, thanks.

我建议将其转换为三个特征:(Question 保持不变), InputSeq是在零和单词数减一之间的所有可能长度中生成的答案的前缀。

最后NextWord是预期的结果。

因此,对于您的初始数据,您将以以下设置结束。

Question, InputSeq, NextWord
How are you,,I'm
How are you,I'm,fine
How are you,,OK
How are you,,Very
How are you,Very,well
How are you,Very well,thanks

该模型将QuestionInputSeq 作为特征并预测NextWord.

经过更多的研究,我相信这可以通过编码器-解码器网络的直接应用来解决。

教程中,我们可以简单地将sampled_token_indexandsampled_char替换为actual_token_indexand actual_char,根据计算得出。当然在我们的例子中它是actual_word.

总而言之,我们将训练集划分为输入/输出对,其中输出示例以<START>标记开头并以 结尾<STOP>,并在这些对上训练序列到序列模型,如教程中所述。

然后在推理时,我们将<START>标记输入模型以预测下一个单词。然后在我们收到实际的下一个单词后,我们将到目前为止的实际(观察到的)输出输入到模型中,依此类推。

在此处输入图像描述 其他答案有一些有趣的想法,但不幸的是,他们并没有真正解决如何处理可变长度输入和输出。我相信基于 RNN 的 seq2seq 模型是解决这个问题的最佳方法。

高密度和低树深的随机森林将如何执行此操作?我认为这对于这项任务来说应该是非常好的(如果不是最好的)方法。在训练过程中,您也可以简单地使用部分可能的答案作为属性。