# 1.6 语言模型和序列生成（Language model and sequence generation）

在语音识别中，某句语音有两种翻译：

* **the apple and pair salad**
* **the apple and pear salad**

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

* $$P( \text{The apple and pair salad}) = 3.2 \times 10^{-13}$$
* $$P\left(\text{The apple and pear salad} \right) = 5.7 \times 10^{-10}$$

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

概率计算的表达式为：

$$
P(y^{<1>},y^{<2>},\cdots,y^{\<T\_y>})
$$

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

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

**The Egyptian Mau is a bread of cat.**

每句话结束末尾，需要加&#x4E0A;**< EOS >**&#x4F5C;为语句结束符。若语句中有词汇表中没有的单词，&#x7528;**< UNK >**&#x8868;示。假设单词“Mau”不在词汇表中，则上面这句话可表示为：

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

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

![](https://2314428465-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Le0cHhI0S0DK8pwlrmD%2F-Le0cKOp1vaxoORIi4ak%2F-Le0ccWxoYEeT8r833DU%2F360import.png?generation=1556953083139540\&alt=media)

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

单个元素的softmax loss function为：

$$
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(\hat y,y)=\sum\_tL^{<t>}(\hat y^{<t>},y^{<t>})
$$

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

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

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