吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Sampling novel sequence
这一节主要讲了如何从一个训练好的RNN中进行采样得到序列
从训练好的RNN中采样出一个序列
之前在序列产生中讲到,首先RNN输入a<0>(0向量)和x<1>(0向量),通过一个RNN cell产生一个输出y。
y = softmax(np.dot(Wya, a) + by),可以知道y是一个向量,向量每个entry表示对应index单词的概率。之前直接选择概率最大的那个作为y,在这里利用采样的方法,根据每个entry的概率值来产生y(np.random.choice)
再将这样产生的y作为下一个输入,即x<2> = y<1>,x = y
采用这样的方法直到最后y输出<EOS>
或者句子达到之前设定的长度才停下,这样就利用RNN产生了一个序列
这样有可能会sample得到<UNK>
,可以采用两种处理方法:一种就是如果产生<UNK>
就重新进行采样,另一种就是将<UNK>
保留在句子中
字母级语言模型
这里将一个字母作为一个x<t>
好处是不会产生<UNK>
,例如可以产生Mau这种可能不在字典中的名字,而不是用<UNK>
来代替
缺点是序列过长,如果序列前后存在一定关联,则字母级的模型可能难以捕捉到这种关联,同时由于序列更长了,计算量也比之前更大一些
序列生成的例子,利用RNN来产生一段新闻风格和莎士比亚风格的文字