Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

什么是语言模型

S1 = “The apple and pair salad”
S2 = “The apple and pear salad”
S1和S2语音相近,为什么选择S2而不是S1?
因为语言模型。在语言模型中,P(S2) > P(S1),因此选择S2。
语言模型用于评估一个句子发生的可能性。

怎样构建语言模型

训练集:大量的语料库corpus

tokenize

即把单词序列转成token序列,token是one-hot向量。
除了每个字符有对应的token以外,增加两个token:

  • <EOS>:表示序列结束的字符
  • <unk>:表示字符不在字典中
    标点不用转成token

定义模型结构

定义损失函数

$$ \begin{aligned} L(\hat y^t, y^t) &=& -\sum_i(y_i^t\log\hat y_i^t) \ L &=& \sum_t L(\hat y_t, y_t) \end{aligned} $$

图像中第t个unit用于计算给出t-1个单词的情况下,第t个单词是某个单词的概率。
把前t个unit的结果相乘表示t个单词组成一句话的概率。

新序列采样

目的:训练了一个语言模型之后,想了解模型学到了什么

softmax采样

由softmat生成每个单词的概率分布。
用np.random.choice基于概率分布进行采样。

这里和训练的主要区别是:使用$\hat y$还是y作为下一个t的输入。

字符级别的RNN

上面都是单词级别的RNN。
也可以训练一个字符级别的RNN。
优点:不用担心出现未知的token
缺点:
生成的序列比较长。序列太长,前面对后面的影响就会小。
训练成本高。