前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习基础 | 从Language Model到RNN

深度学习基础 | 从Language Model到RNN

作者头像
NewBeeNLP
发布2021-10-20 10:11:38
5700
发布2021-10-20 10:11:38
举报
文章被收录于专栏:NewBeeNLPNewBeeNLP

作者 | Chilia 整理 | NewBeeNLP

循环神经网络 (RNN) 是一种流行的「序列数据」算法,被 Apple 的 Siri 和 Google 的语音搜索使用。RNN使用内部存储器(internal memory)来记住其输入,这使其非常适合涉及序列数据的机器学习问题。

本文介绍引入RNN的问题--Language Model,并介绍RNN的重要公式,作为Stanford cs224n lecture6的总结和补充。

1. Language Model

在介绍RNN之前,我们先介绍最初引入RNN的问题---「Language Modeling」

「定义:」 Language Modeling就是预测下一个出现的词的概率的任务。(Language Modeling is the task of predicting what word comes next.)

即:

P(x^{t+1}|x^t,x^{t-1}...x^1)
1.1 统计学方法:n-gram language model

简化:一个词出现的概率只和它前面的n-1个词有关系,这就是"n-gram"的含义。因此有:

n-gram model 是不使用深度学习的方法,直接利用「条件概率」来预测下一个单词是什么。但这个模型有几个问题:

  • 由于丢弃了比较远的单词,它不能够把握全局信息。例如,“as the proctor started the clock” 暗示这应该是一场考试,所以应该是students opened their 「exam」. 但如果只考虑4-gram,的确是book出现的概率更大。
  • sparsity problem. 有些短语根本没有在语料中出现过,比如"student opened their petri-dishes". 所以,petri-dishes的概率为0. 但是这的确是一个合理的情况。解决这个问题的办法是做拉普拉斯平滑,对每个词都给一个小权重。
  • sparsity problem的一个更加糟糕的情况是,如果我们甚至没有见过"student open their",那么分母直接就是0了。对于这种情况,可以回退到二元组,比如"student open".这叫做backoff
  • 存储空间也需要很大。
1.2 neural language model

想要求"the students opened their"的下一个词出现的概率,首先将这四个词分别embedding,之后过两层全连接,再过一层softmax,得到词汇表中每个词的概率分布。我们只需要取概率最大的那个词语作为下一个词即可。

「优点:」

  • 解决了sparsity problem, 词汇表中的每一个词语经过softmax都有相应的概率。
  • 解决了存储空间的问题,不用存储所有的n-gram,只需存储每个词语对应的word embedding即可。

「缺点:」

  • 窗口的大小还是不能无限大,不能涵盖之前的所有信息。更何况,增加了窗口大小,就要相应的增加「权重矩阵W」的大小。
  • 每个词语的word embedding只和权重矩阵W对应的列相乘,而这些列是完全分开的。所以这几个不同的块都要学习相同的pattern,造成了浪费。

2. RNN

正因为上面所说的缺点,需要引入RNN。

2.1 RNN模型介绍

「RNN的结构:」

  • 首先,将输入序列的每个词语都做embedding,之后再和矩阵
W_e

做点乘,作为hidden state的输入。

  • 中间的hidden state层: 初始hidden state
h^{(0)}

是一个随机初始化的值,之后每个hidden state的输出值都由前一个hidden state的输出和当前的输入决定。

  • 最后的输出,即词汇表V的概率密度函数是由最后一个hidden state决定的

「RNN的优势:」

  • 可以处理任意长的输入序列
  • 前面很远的信息也不会丢失(这样我们就可以看到前面的"as the proctor start the clock",从而确定应该是"student opened their exam"而不是"student opened their books").
  • 模型的大小不会随着输入序列变长而变大。因为我们只需要
W_e

W_h

这两个参数

W_e,W_h,b

对于每一步都是一样的(共享权重),每一步都能学习

W_e,W_h,b

,更加efficient

「RNN的坏处:」

  • 慢。因为只能串行不能并行
  • 实际上,不太能够利用到很久以前的信息,因为梯度消失。
2.2 RNN模型的训练
  • 首先拿到一个非常大的文本序列
x^{(1)},...x^{(T)}

输入给RNN language model

  • 对于每一步 t ,都计算此时的输出概率分布
\hat y^{(t)}

。(i.e. predict probability distribution of every word, given the words so far)

  • 对于每一步 t,损失函数
J^{(t)}(\theta)

就是我们预测的概率分布

\hat y^{(t)}

和真实的下一个词语

y^{(t)}

(one-hot编码)的交叉熵损失。

  • 对每一步求平均得到总体的loss:
J(\theta) = \frac{1}{T} \sum_{t=1}^T J^{(t)}(\theta)
2.3 Language Model的重要概念--困惑度(perplexity)

我们已知一个真实的词语序列

x^{(1)}...x^{(T)}

,

即,困惑度和交叉熵loss的指数相等。

2.4 基础RNN的应用

(1)生成句子序列

每一步最可能的输出作为下一个的输入词,这个过程可以一直持续下去,生成任意长的序列。

(2)词性标注

每个隐藏层都会输出

(3)文本分类

其实RNN在这个问题上就是为了将一长串文本找到一个合适的embedding。当使用最后一个隐藏状态作为embedding时:

当使用所有隐藏状态输出的平均值作为embedding时:

本文参考资料

[1]

cs224n-2019-lecture06: https://web.stanford.edu/class/cs224n/slides/cs224n-2019-lecture06-rnnlm.pdf

- END -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Language Model
    • 1.1 统计学方法:n-gram language model
      • 1.2 neural language model
      • 2. RNN
        • 2.1 RNN模型介绍
          • 2.2 RNN模型的训练
            • 2.3 Language Model的重要概念--困惑度(perplexity)
              • 2.4 基础RNN的应用
                • 本文参考资料
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档