终其一生,我们只不过在寻找自己

0%

CS224n-6 语言模型, n-Gram, RNN

为什么先写P6呢,因为P4是反向传播,公式太多,P5是语法分析,枯燥乏味。为了防止没有更新下去的动力,先来写P6。接下来的三讲P6-P8都是由助教Abby讲的,逻辑超级清楚,一步一步循序渐进。爱了爱了。B站链接
P6 语言模型->RNN模型的进化,P7 LSTM,P8 Attention
附图
附上Abby靓照


Language Modeling is the task of predicting what word comes next.
根据前面前半句,预测后半句。就比如输入法的联想候选词,搜索栏弹出的候选搜索项目,都属于语言模型。
为什么要研究语言模型呢?因为很多任务里都会涉及到,比如:

  • Predictive typing 预测之后的输入
  • Speech recognition 语音识别
  • Handwriting recognition 手写识别
  • Spelling/grammar correction 语法纠正
  • Authorship identification
  • Machine translation 机器翻译
  • Summarization 文章总结
  • Dialogue 对话系统
  • etc.
    所以,这一节很重要。

n-Gram语言模型

传统方法训练语言模型,就用的CS224n-2-word2vec-word-Senses之前提到过的n-Gram语言模型,原理也很简单,就是通过统计频率:前半句出现过,之后最有可能跟着的词是什么。

n-Gram: 就是连续的n个词(一般不会大于5)当做一个最小单元,统计出现的频率。

n-Gram语言模型的假设:第t+1个词的选择,只依赖于前n-1个词。

这里有点马尔科夫链和时间序列ARIMA模型的内味了。

根据假设就能得到:

举个栗子:天气很好,我想吃___
如果这里用4-Gram 模型,那填空的位置,只与前面三个字”我想吃”有关,假如,之前的数据集里出现了1000词“火锅”,500次“糖”,那么这里肯定填“火锅”

  • 想法越简单,问题就必然存在:
  1. 分母为0怎么办? “我想吃”这三个字数据集里没有
    S: backoff 4-Gram退化成3-Gram,只看前两个词“想吃”,因为数据集里可能有“他想吃”
  2. 分子为0怎么办?假如这里的语境是“我脑子有问题,我想吃翔”,但是数据集里没出现过这个短语
    S: smoothing 对于没出现的词都加一个小数量。

    (我感觉没啥用啊,翔还是不会被选中)

  3. 存储问题,n-Gram越小,情况越多,需要存储的空间太大
    S: 增加n
  4. 稀疏性问题,没办法解决

窗口语言模型

任务:输入前几个单词,输出之后可能的单词概率

比如说:用第三讲的窗口模型,就可以转化为一个分类器,候选种类是所有可能出现的单词。

解决了n-Gram的稀疏性问题,也不需要储存大量的频率(只需要储存词向量)

  • 想法越简单,问题就必然存在:
  1. 窗口的大小不好确定,太小了不准确,太大了权重W得变长,训练的也不好。W的长度=n*词向量长度。
  2. 窗口内的单词权重一样,没有利用上位置信息

BOOM! RNN

这个时候,再来介绍RNN就顺理成章了。

RNN优点:

  • 长度没有限制
  • 理论上可以用上之前的所有信息
  • 输入的长度和模型大小无关
  • 权值共享,对于每个输入处理都是一样的

想法越简单,问题就必然存在:

  • 计算太慢
  • RNN对于之前的信息(无论重要与否)都会容易丢失(梯度消失)

    🐟的记忆只有3s.

训练过程

训练一个RNN的数据集就是一个corpus语料库,然后开始预测,每一步都计算loss(预测值和真实值的偏差),直到模型收敛。
这里用交叉熵作为损失:

当我们跑完一轮之后(一般跑一段话,或者一个句子就行),就可以得到当前的参数对应的loss,对于每个位置的损失求平均就好,然后计算梯度,得到新的参数,然后用新的参数去训练后面的语料。

RNN反向传播

反向传播也就是当我们计算梯度的时候,发挥作用。
这里用了“backpropagation through time”。因为我们得到的loss J是加起来这一批的loss,所以我们求导的时候也是对于每次的预测都进行求导(实际上用了链式法则)

RNN语言模型的评价指标


困惑度的理解可以参考知乎这篇文章

困惑度Perplexity就是模型对于测试数据认知,如果说模型很容易生成测试数据集,那么困惑度就小。
换一种理解:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好。

困惑度不需要应用什么任务,直接输入数据,就能比较模型好坏。

  • 模型困惑度比较

    可以发现lstm>RNN>5-gram

RNN的其他任务(当然LSTM也可以)

  • 词性标注
  • 句子分类(eg:情感分类)

  • encoder 问答系统

  • 语音识别等

下节课讲LSTM,GRU,多层LSTM,想想还有点小激动呢

-------------    你的留言  是我更新的动力😊    -------------