4 对数线性语言模型
本节讨论另一种语言模型:对数线性语言模型。它的计算方法跟上面提到的基于计数的语言模型很不同。
4.1 模型公式化
对数线性语言模型也是计算给定前几个词的条件下下一个词的条件概率,但是方法不一样,基本分为以下几步:
- 计算特征:对数线性语言模型围绕特征这个概念。特征是“上下文中某个对预测下一个词有用的东西”。更精确地,我们定义一个特征函数 ϕ(et−1t−n+1) ,以上下文为输入,输出一个实值特征向量 x∈ℝN 来用 N 个特征描述上下文。
- 计算得分:有了特征向量之后,我们就要用它预测每个单词的概率。为此,我们计算一个得分向量
s∈ℝ|V| 对应每个词的似然。我们用模型参数 W∈ℝ|V|×N,b∈ℝN 来计算得分向量:
s=Wx+b- 计算概率:把得分向量转换成概率向量:
p=softmax(s)
解读:
p
表示了在上下文
4.2 学习模型参数
首先我们要定义损失函数
l ,一个表达我们在训练数据上做的有多差的函数。大多数情况下,我们假设这个损失等于负对数似然:
l(εtest;θ)=−logP(εtest⎪θ)=−∑E∈εtrainlogP(E⎪θ)解读:这里的参数不再是 P(et⎪et−1t−n+1) ,而是 W,b 。不同的参数得到不同的损失,我们要通过训练找到那个使损失最小的参数。比如,我们要计算一个句子 E 的损失,就计算参数对于
E 的负对数似然。通过之前的 计算概率 公式依次计算 E 的分句的条件概率,再用链式法则计算参数对于E 的似然 P(E⎪θ) ,相应也得到了负对数似然。用随机梯度下降更新参数。为了要保证训练过程稳定,还有其他东西要考虑:
- 调整学习率:一开始学习率比较大,然后逐渐减少。
- 早停:通常会留出一个开发集(验证集),在这个集上测量对数似然,然后保留那个最大对似然的模型。这是为了防止过拟合。另一个防止过拟合的办法是当开发集上的对数似然停止提高的时候减小学习率。
- 洗牌顺序:有的时候顺序有所偏向,为了防止最后训练的模型更贴合结尾部分的数据,我们需要把整个数据训练的顺序洗牌。
4.3 对数线性模型的导数
略
4.4 语言模型的其他特征
对数线性模型好的原因是它允许我们灵活地选择我们认为对预测下一个词有用的特征,包括:
- 上下文特征:如之前所说。
- 上下文类:把相似的词归为一类。
- 词后缀特征:比如ing。
- 词袋特征: 跟只用句子里前n个词相反,我们可以用之前所有的词,然后不顾顺序。这样我们会损失排列信息,但是会知道哪些词会一同出现。
5 神经网络和前馈语言模型
略
6 循环神经网络语言模型
6.1 - 6.4 略
6.5 Online, Batch, and Minibatch Training
对于每一个样例进行参数更新的学习叫做online学习。与之相反,batch学习将整个训练集视为单个单元,计算这个单元的梯度,然后在遍历所有数据之后进行参数更新。
这两个更新策略各有权衡:
- online学习更快地找到一个好的答案。
- 训练结束后,batch学习更稳定,因为它不受最后看见的数据的影响。
- batch学习更容易陷入局部最优解。online学习的随机性使得模型能够跳出局部最优,找到一个全局最优。
minibatching是以上两者的折中。minibatching每次计算n个训练样例的梯度。