4. Language model and sequence generation
对于下面的例子:
The apple and pair salad.
The apple and pear salad.
两句话有相似的发音,但是想表达的意义和正确性却不相同,如何让我们的构建的语音识别系统能够输出正确地给出想要的输出。也就是对于语言模型来说,从输入的句子中,评估各个句子中各个单词出现的可能性,进而给出整个句子出现的可能性。
使用RNN来构建语言模型:
所谓训练集(Training Set)就是一大堆语言文本的集合(语料库)。Tokenize:将句子使用字典库标记化。
注意:未出现在字典库中的词使用“UNK”来表示。
第一步:使用零向量对输出进行预测,即预测第一个单词是某个单词的可能性;
第二步:通过前面的输入,逐步预测后面一个单词出现的概率;
训练网络:使用softmax损失函数计算损失,对网络进行参数更新,提升语言模型的准确率。
5. Sampling novel sequences
在完成一个序列模型的训练之后,如果我们想要了解这个模型学到了什么,其中一种非正式的方法就是进行一次新序列采样(sample novel sequences)。
对于一个序列模型,其模拟了任意特定单词序列的概率,如P(y,⋯,y),而我们要做的就是对这个概率分布进行采样,来生成一个新的单词序列。
如下面的一个已经训练好的RNN结构,我们为了进行采样需要做的:
首先输入x=0,a=0在这第一个时间步,我们得到所有可能的输出经过softmax层后可能的概率,根据这个softmax的分布,进行随机采样,获取第一个随机采样单词y^;
然后继续下一个时间步,我们以刚刚采样得到的y^作为下一个时间步的输入,进而softmax层会预测下一个输出y^,依次类推;
如果字典中有结束的标志如:“EOS”,那么输出是该符号时则表示结束;若没有这种标志,则我们可以自行设置结束的时间步。
图1是基于单词的一个采样模型,图2是基于字母的采样模型。
图1
图2
但是基于字符的语言模型,一个主要的缺点就是我们最后会得到太多太长的输出序列,其对于捕捉句子前后依赖关系,也就是句子前部分如何影响后面部分,不如基于词汇的语言模型那样效果好;同时基于字符的语言模型训练代价比较高。所以目前的趋势和常见的均是基于词汇的语言模型。但随着计算机运算能力的增强,在一些特定的情况下,也会开始使用基于字符的语言模型。
领取专属 10元无门槛券
私享最新 技术干货