RNN-LM(语言模型与RNN)-基于cs224n的最全总结

语言建模与循环神经网络(language Modeling and RNN)


在这里插入图片描述
在这里插入图片描述

语言模型的实质就是预测下一个出现的词的概率 给一段文本依次预测

N-gram model

在这里插入图片描述

N-gram就是由n个连续单词组成的块

核心思想:通过统计不同n-grams出现的概率,然后预测下一个词语。

假设与定义:

在这里插入图片描述

一个简单的条件概率模型:第n个单词是什么只取决于前面n-1个单词

如何计算?

通过对大型语料库的计数来计算概率

在这里插入图片描述

N-gram的几个典型问题:
  1. 只考虑前面的N-1个单词,可能忽略很多有用的背景信息,例如学生打开了__,前面的信息可能有时钟和监考人这些信息,这意味着学生打开了试卷是极有可能的,但如果这些信息被忽略了,就意味着事实上模型的预测是失败的。

  2. 稀疏性问题,因为有些词在N-gram块中出现的概率极小甚至可能在训练语料库中没有出现,但这些词却往往是极其有用的,例如前面举的例子:学生打开了__ 一个对于生物学学生很重要但却出现概率极小的词是培养皿。一个典型的解决办法是什么?平滑(smoothing),可以想象一个概率分布图,如下:
    在这里插入图片描述

    经过平滑后就应该是这样:

在这里插入图片描述

随手可视化,别介意·· 一个可行的解决方法是我们应该加一个△(delta)对语料库中的每个单词进行计数

3.第二个可能出现的稀疏问题是前N-1个单词的组合根本没有出现过,这意味着其权重w为0,我们无法计算其概率分布,那么这时候我们就应该改为去寻找N-2个单词,看看会发生什么。

4.还有一个重要的问题是:N不应该被设置为很大(<=5),因为越大导致的稀疏性问题就可能会愈发严重,在预测时你永远找不到合适的组合。

在这里插入图片描述

存储问题:增加n存储消耗变大!

在这里插入图片描述

​ 在实践中使用N-gram language model:
在这里插入图片描述

你可以不断抽样和使用模型预测来依次生成一段文本。

下面我们来看看由trigram生成的文本:

在这里插入图片描述

可以看到,实际上其在语法上是表现优秀的,但是其很明显句义又是不连贯的,当然这因为我们使用的是trigram,但提高N又会存在很多问题,所以这个问题还值得我们的深入研究!

逗号等标点符号在语言建模中一般也被视为一个词

如何建立神经语言模型?

在这里插入图片描述

A fixed-window neural language Model

在这里插入图片描述

输出是从a-z中所有单词的出现概率,这里的例子仍然是学生打开了___

与N-gram的对比:
  1. 没有稀疏问题的存在,因为实际分布的情况怎么,我们直接编码连接成vector输入进神经网络即可,神经网络会给予我们一个输出
  2. 不需要存储所有的n-grams的可能性,只需要存储词汇表中所有单词的向量表示(word2vectors word embedding)
存在的问题:
  1. windows的大小永远都是不够的,如果你想要足够的上下文信息

  2. 且windows越大,W越大

  3. W矩阵和各个词向量之间都是独立的各部分相乘,训练时没有体现任何联系

在这里插入图片描述

在这里插入图片描述

所以,其实我们想要的是一串词应该共享一些权重,因为这有利于处理传入的word embedding的共性.

RNN-LM

在这里插入图片描述

RNN的核心是每一步的输出由前一步的输入经过计算后的结果和这一步的输入构成,且每一步计算使用的是相同的权重矩阵,所以我们sequence有多长都可以。

A RNN laguage Model:

在这里插入图片描述

这就是基于RNN的语言模型的结构,首先将word进行one-hot编码(V个单词的语料库),然后使用各种方法实现word2vector或者说word embedding(skip-gram or CBOW),这一步我们一般可以使用一个训练好了的分词器+索引对应表,然后随机初始化一个h(0),最开始的hidden state,然后使用RNN进行一步步的计算,并在最后的h(4)经过一个线性映射,加一个bias,然后用一个softmax函数,得到最后对于下一个词词汇表中的各种词的预测概率。(We和Wh在整个NN中都是相同的权重矩阵,当然也是需要反向传播进行计算和学习的

优缺点

在这里插入图片描述

优点:

  1. 能够处理任何长度的sequence,因为Wh矩阵不随长度改变
  2. 当前时间t的hidden state含有很多前面步骤的信息
  3. 对于输入处理来说,计算是对称的,因为我们只应用一个Wh矩阵

缺点:

  1. 计算时间太长
  2. 在实践中,其实想要获取很多前面的信息依旧是非常困难的事情
RNN模型的训练
  1. 给 定 一 个 大 型 语 料 库 , 里 面 含 有 单 词 X ( 1 ) , X ( 2 ) , ⋅ ⋅ ⋅ ⋅ ⋅ X ( T ) . 给定一个大型语料库,里面含有单词X^{(1)},X^{(2)},·····X^{(T)}. X(1),X(2),X(T).

  2. 喂 给 R N N − L M ; 每 一 步 t 都 计 算 出 一 个 y ^ ( t ) ( 即 每 一 步 都 计 算 出 一 个 语 料 库 中 词 的 概 率 分 布 , 基 于 当 前 给 予 的 词 ) 喂给RNN-LM; 每一步t都计算出一个\hat{y}^{(t)} (即每一步都计算出一个语料库中词的概率分布,基于当前给予的词) RNNLMty^(t)()

  3. 每 一 步 t 的 损 失 函 数 的 计 算 是 计 算 预 测 的 概 率 分 布 y ^ ( t ) , 和 下 一 个 本 来 应 该 正 确 的 单 词 y ( t ) ( o n e − h o t   v e c t o r   f o r   x ( t + 1 ) ) : 每一步t的损失函数的计算是计算预测的概率分布\hat{y}^{(t)},和下一个本来应该正确的单词y^{(t)}(one - hot\ vector \ for\ x^{(t+1)}): ty^(t),y(t)(onehot vector for x(t+1)):
    在这里插入图片描述

  4. 最后将整个模型的全局损失平均做一个整体计算:
    在这里插入图片描述

一个关于具体过程的截图:

在这里插入图片描述

注意事项(caveat):
  1. 实践中一次计算整个语料库的loss和gradient是太奢侈的,我们往往需要选择一个具体的sentence(或者说一个合适的试用我们这个场景的文档)在训练的时候
  2. 使用SGD,不一次计算所有样本,每次计算一批样本来进行更新
  3. 实际训练中,我们往往计算一个sentence(actually a batch of sentences)的 gradients and update weights. Repeat.

在这里插入图片描述

反向传播与梯度计算:

在这里插入图片描述

总的梯度就等于每一步计算出的梯度的和。-这是因为多变量链式法则计算出的结果

在这里插入图片描述

RNN的反向传播计算实际上是一个积累的过程:

在这里插入图片描述

随机梯度下降确实只是一个近似值(approximation),并不是完全和计算所有样本的梯度是相同的,所以选择batch这个超参数是很重要的。

用RNN生成文本

在这里插入图片描述

生成的文本依然会incoherent,但是结构会比N-gram好,具体的例子我就不列举了,这个应用没有啥具体的意义。

实际上的语言识别生成文本都是有条件的语言模型生成,而不是像我们使用随机生成的方法。

RNN-LM模型的评估(一般语言模型的评估)

我们将评估指标称之为 perplexity(困惑) 其越小,代表我们建立的语言模型效果越好,其值就等于我们的交叉熵损失的指数
在这里插入图片描述

RNN模型的发展带来的优秀效果

在这里插入图片描述

语言建模的重要性

实际上,语言建模代表着很多最基本,最重要的nlp任务或者说子组件,如语义理解,文本生成,句法结构的掌握,因为你需要预测下一次单词,其也有很多应用。

在这里插入图片描述

总结 Recap

  1. 语言模型是一个可以预测下一个单词的系统

  2. RNN是一个新的神经网络家族的成员:

    1. 其以一个sequence of vector 作为输入
    2. 每一步都应用同样的权重 W
    3. 可以有选择性地在每一步产生输出
  3. RNN并不是语言模型,只是我们可以基于它来建立一个语言模型

  4. RNN还有很多其他用途

    1. 例如 pos 词性标注:

在这里插入图片描述

  1. 文本分类(如情绪分类 sentiment classification)
    在这里插入图片描述

情绪分类我们需要编码出一个句向量其代表postive(输出就是它),那么有两个常见的方法,一个是在最终隐藏层去输出它,一个是综合所有的隐藏层去输出,那么实时证明,综合所有的隐藏层去输出是更好的选择。(做一个max-pooling (element-wise max)或者平均池化(mean of all hidden states)等)。

在这里插入图片描述

  1. 用RNN作为编码器,作为问题输入的编码,使用所有的hidden states

    网络结构:

在这里插入图片描述

  1. 用RNN来有条件的生产文本(语音识别):

在这里插入图片描述

第一个输入是需要我们进行调整的。

RNN家族还有很多其他成员,RNN也可以和其他NN进行组合,例如我见过的CNN-GRU组合用于声音信号二分类
在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值