1.6 语言模型和序列生成(Language model and sequence generation)

在语音识别中,某句语音有两种翻译:

  • the apple and pair salad

  • the apple and pear salad

语言模型会计算出这两句话各自的出现概率:

  • P(The apple and pair salad)=3.2×1013P( \text{The apple and pair salad}) = 3.2 \times 10^{-13}

  • P(The apple and pear salad)=5.7×1010P\left(\text{The apple and pear salad} \right) = 5.7 \times 10^{-10}

选择概率最大的语句作为正确的翻译

概率计算的表达式为:

P(y<1>,y<2>,,y<Ty>)P(y^{<1>},y^{<2>},\cdots,y^{<T_y>})

如何使用RNN构建语言模型:

首先需要一个足够大的训练集,训练集由大量的单词语句语料库(corpus)构成。然后,对corpus的每句话进行切分词(tokenize),建立vocabulary,对每个单词进行one-hot编码。例如下面这句话:

The Egyptian Mau is a bread of cat.

每句话结束末尾,需要加上< EOS >作为语句结束符。若语句中有词汇表中没有的单词,用< UNK >表示。假设单词“Mau”不在词汇表中,则上面这句话可表示为:

The Egyptian < UNK > is a bread of cat. < EOS >

准备好训练集并对语料库进行切分词等处理之后,接下来构建相应的RNN模型:

x<1>x^{<1>}a<0>a^{<0>}均为零向量。Softmax输出层y^<1>\hat y^{<1>}表示出现该语句第一个单词的概率,softmax输出层y^<2>\hat y^{<2>}表示在第一个单词基础上出现第二个单词的概率,即条件概率,以此类推,最后是出现< EOS >的条件概率

单个元素的softmax loss function为:

L<t>(y^<t>,y<t>)=iyi<t>log y^i<t>L^{<t>}(\hat y^{<t>},y^{<t>})=-\sum_iy_i^{<t>}log\ \hat y_i^{<t>}

这是softmax Loss Function ,注意与1.4 binary classification 的 Loss Function区别

该样本所有元素的Loss function为:

L(y^,y)=tL<t>(y^<t>,y<t>)L(\hat y,y)=\sum_tL^{<t>}(\hat y^{<t>},y^{<t>})

对语料库的每条语句进行RNN模型训练,最终得到的模型可以根据给出语句的前几个单词预测其余部分,将语句补充完整。例如给出“Cats average 15”,RNN模型可能预测完整的语句是“Cats average 15 hours of sleep a day.”

整个语句出现的概率等于语句中所有元素出现的条件概率乘积。例如某个语句包含y<1>,y<2>,y<3>y^{<1>},y^{<2>},y^{<3>},则整个语句出现的概率为:

P(y<1>,y<2>,y<3>)=P(y<1>)P(y<2>y<1>)P(y<3>y<1>,y<2>)P(y^{<1>},y^{<2>},y^{<3>})=P(y^{<1>})\cdot P(y^{<2>}|y^{<1>})\cdot P(y^{<3>}|y^{<1>},y^{<2>})

Last updated