内容大纲:
语言模型:
N-gram语言模型:
n-gram指的是n个连续的词。通过统计不同n-gram的词频信息来预测下一个词是什么。
假设前提:长文本的第X(t+1)这个词出现概率等于前面的n-1个词预测下一个词出现的概率,也就是说:
怎么求上面的概率呢?
在一个很大的语料文本中计算他们出现的次数做比例。
举个例子:
对于4-gram,我们忽略掉除了三个文本之前的词汇,然后分别计算连续三个词汇出现的次数,以及与空缺文本之前的三个词汇拼接的空缺个文本出现的概率。
这样可能会出现的稀疏问题:
分子项为0,也就是说没有对应的w。(平滑smoothing.:设置一个最小值k,对于文本语料|V|中每一个词。)
底数为0,也就是说语料库中寻找不到这三个词汇同时出现的情况。(backoff:三个不同时出现那我们就计算两个词,是在不行计算最近的一个词)
语料存储的问题:
我们需要计算大量词汇出现的次数,而且这些词汇组合非常多,需要大量存储空间。而且N越大组合的可能性就越大。
由于上面两个原因:不应该将N-gram的N设置比较大的数。
由于N-gram语言模型的特性,因此可以用来生成文本。
我们知道n-gram模型是基于一种计数的方式,增加n会导致稀疏问题,那能不能换一个模型来避免这种情况。
自然语言模型:
A fixed-window neural Language Model:
我们输入fixed window长度的词汇,通过词向量矩阵的一系列变换,最后得到一个向量用来预测下一个词的分布概率。
Softmax是将向量映射为概率分布。
对比前面的模型:
优点:
- 没有稀疏的问题。因为是通过softmax映射为|V|个词的概率分布。
- 不要存储所有的n-gram
缺点:
- Fixed window太小了。
- 但是会窗口大的话,W矩阵也会比较大。
- 窗口不能无限大。
- 不同的词汇x1,x2乘以W中不同的权重。对于不同的输入实际上会有不同的权重。(一个词学到的参数,没有办法共享给其他词汇;有一些词汇会有一些共性,实际中需要去学习所有词汇的权重,而不能共享一些权重,这样不高效)
由于自然语言模型只能处理固定长度,实际上我们希望能够处理任意长度的输入。
这个时候提出了一个新的模型—RNN。
Recurrent Neural Networks (RNN):
核心是使用了同一个权重举证W,因此可以处理任意长度的矩阵:(与N-gram不同,n-gram需要针对每一个词取一个权重)
输入的x1,x2.....会是一个序列。
RNN语言模型:
RNN语言模型的优点:
- 可以处理任意长度的输入。
- 模型的量级不会随着输入的增加而增加。
- 信息的复用,能有利用前面的信息。
- 使用的权重都一样,能够共享一些学习信息。
RNN语言模型的缺点:
- 循环的计算比较慢,没有办法并行处理。因为每次计算的依赖关系。
- 在实际应用场景中,很多层之前的信息很难利用到。(太远了记忆效果差)
训练RNN语言模型方法:
- 获得语料数据,将数据喂给RNN-LM。
- 预测出每一个步长的y
- 交叉熵损失函数
训练过程如下:
训练过程如下:
如果语料是几亿条的语料,那岂不是要算很久很久?
实际应用当中我们通常会控制训练预料的长度。(一个文档)
然后求偏导数,通过SGD来更新参数Wh,We。
那我们怎么通过反向传播更新权重:随步长的方向传播计算
可以用RNN模型来生成文本信息。
评估语言模型:
为什么需要语言模型?
语言模型是一个基础任务,帮我我们理解语言。
语言模型是很多自然语言处理任务的子模块。
RNN可以用在序列词性标注。
RNN在情感分类应用:
语音识别:
问答:
利用RNN语言模型将问题编码。