NLP - 预训练模型

1. 早期NLP预训练模型

1.1 神经网络语言模型(NNLM)

  • NNLM由Begio在2003年提出发表在JMLR上。神经网络语言模型的训练目标是给定 w_t 的上文n-1个词w_{t-n+1}, ..., w_{t-2}, w_{t-1},预测 w_t 出现的概率 P(w_t|w_{t-n+1}, ..., w_{t-2}, w_{t-1});每个词输入到模型中首先经过One-hot编码,然后查询Look up Table(C),得到每个词的Word embedding:x=(C(W_{t-n+1}), ..., C(w_{t-2}), C(w_{t-1}))(n-1个词向量进行拼接得到x);x经过隐藏层,之后再经过softmax层得到词w_t生成的条件概率;其中y_{w_t} \in \mathbb{R}^{|V|},假设词表大小为|V|C的维度为|V| \times m,其中m表示词向量维度。h表示隐层的维度;

y_{w_t} = b+Wx+U tanh(d +Hx)
P(w_t|w_{t-n+1}, ..., w_{t-2}, w_{t-1}) = \frac{ e^{ y_{w_t}} }{ \sum_i {e^{ y_i}} }
L(\theta) = \sum_{t} logP(w_t|w_{t-n+1}, ..., w_{t-2}, w_{t-1})

  • 上式中,b,d为偏置,W为输入层到输出层参数,加入输入到输出层的连接能够使得模型快速收敛。H为输入层到隐藏层的参数,U为隐藏层到输出层的参数。各个参数的维度如下:x \in \mathbb{R}^{(n-1)m \times 1}W \in \mathbb{R}^{|V| \times (n-1)m}H \in \mathbb{R}^{h \times (n-1)m}U \in \mathbb{R}^{|V| \times h}
  • 可以看出NNLM主要的计算集中在隐藏层、输出层之间的矩阵向量运算,以及输出层上的softmax归一化操作。 因此后续的相关研究工作中,很多是针对这一部分进行优化的,其中就包括了word2vec的工作。
  • 对神经网络语言模型而言,词向量word embedding只是副产物;Look up table(C)存储着每个词的词向量,它是一个矩阵,矩阵的每一行代表一个单词的词向量,行数等于词汇表大小;矩阵的列数等于词向量维数。
神经网络语言模型.png

1.2 Word2vec模型

1.2.1 CBow和Skip-Gram模型

  • Wor2vec模型 :跟NNLM模型结构类似,去除了中间的隐藏层减少了计算量,并且其目标主要是用来训练词向量。word2vec模型包含两种结构CBow和Skip-Gram,CBow模型利用单词的上下文预测当前词生成的条件概率,Skip-Gram模型利用当前词预测上下文词生成的条件概率。最后在输出层为了减小softmax的计算,使用层次Softmax和负采样(Negative Sampling)方法减小输出层计算量。层次softmax实现采用的是哈夫曼树,将计算复杂度从 |V| 减小到 log|V|

  • 对于CBow模型其目标函数为如下对数似然函数:其中Context(w)表示w上下文中的词;\mathcal{ C}代表整个语料库;
    \mathcal {L} = \sum_{w \in \mathcal{C}} log p(w | Context(w))

  • 对于Skip-Gram模型其优化目标函数如下:
    \mathcal{L}= \sum_{w \in \mathcal{C}} log p(Context(w) | w)
    p(Context(w)|w) = \prod_{u \in Context(w)} p(u | w)

word2vec模型.png

1.2.2 层次softmax

  • 对于层次softmax实现的CBow模型而言,包括三层:输入层、投影层、输出层;假设Context(w)w前后各c个词组成;与NNLM模型相比:(1)在投影层NNLM是通过词向量拼接的方式得到x_w,然而CBow模型是通过向量相加的方式;(2)NNLM有隐藏层,然而CBow模型去除了隐藏层;(3)NNLM输出层是线性结构,CBow模型的输出是树形结构;
  • 输入层:包含Context(w)2c个词的词向量;假设每个词向量维度为m
  • 投影层:将输入的2c个词的向量做求和累加,即x_w = \sum_{i=1}^{2c} v(Context(w)_i) \in \mathbb{R}^m
  • 输出层:输出层对应一棵二叉树,它是以语料中出现过的词当叶子结点,以各词在语料中出现的次数当权值构造出来的Huffman树;在这棵Huffman树中,叶子结点共N个,分别对应词典D中的词;非叶子结点N-1个;
  • 符号定义如下:
    (1)p^w表示从根结点出发到达w对应叶子结点路径;
    (2)l^w表示路径p^w中包含结点的个数;
    (3)p^w_1, p^w_2, ..., p^w_{l_w}表示路径p^w中的l^w个结点;其中p^w_1表示根结点,p^w_{l_w}表示词w对应的结点;
    (4)d^w_1, d^w_2, ..., d^w_{l_w} \in (0,1),表示词w的Huffman编码,它由l^w-1位编码构成;
    (5)\theta^w_1, \theta^w_2, ..., \theta^w_{l_w-1} \in \mathbb{R}^m,路径p^w中非叶子结点对应的向量;
层次softmax实现CBow模型.png
  • 条件概率p(w|Context(w))的定义,更具体的说就是如何利用向量x_w \in \mathbb{R}^m以及Huffman树来定义函数p(w|Context(w))由上图可以看出,从根结点出发到达“足球”这个叶子结点,中间共经历了4次分支,而每一次分支都可视为进行了一次二分类; 每一次分类的概率如下所示:

第1次:p(d^w_2|x_w, \theta^w_1) = 1 - \sigma(x^T_w \theta^w_1)
第2次:p(d^w_3|x_w, \theta^w_2) = \sigma(x^T_w \theta^w_2)
第3次:p(d^w_4|x_w, \theta^w_3) = \sigma(x^T_w \theta^w_3)
第4次:p(d^w_5|x_w, \theta^w_4) = 1 - \sigma(x^T_w \theta^w_4)

  • 最终条件概率p(足球|Context(足球))的计算公式如下:
    p(足球|Context(足球)) = \prod_{j=2}^{5} p(d^w_j | x_w, \theta^w_{j-1})
    p(w|Context(w)) = \prod_{j=2}^{l^w} p(d^w_j | x_w, \theta^w_{j-1})

  • 层次softmax基本思想: 对于词典D中的任意词w,Huffman树中比存在一条从根结点到词w对应结点的路径p^w(并且这条路径是唯一的)。路径p^w上存在l^w-1个分支,将每个分支看做做一次二分类,每一次二分类就产生一个概率,将这些概率乘起来就是所需的p(w|Context(w))将原来softmax回归问题,转换成了Huffman树上求解多个二分类的问题,时间复杂度由O(|V|)下降至O(log|V|)。

1.2.3 负采样方法

  • 与层次softmax相比,NEG不使用复杂的Huffman树,而是利用相对简单的随机负采样,能大幅度提高性能;在CBow模型中已知词的Context(w)需要预测w,因此对于给定的Context(w)w就是一个正样本,其他词就是负样本了。 假设 u表示正负样本的集合,其中只有一个正样本w;则条件概率p(u|Context(w))的计算公式如下:
    p(u|Context(w)) = \begin{cases} \sigma(x^T_w \theta^u), & L^w(u) = 1; \\ 1 - \sigma(x^T_w \theta^u), & L^w(u) = 0; \end{cases}
  • 最终的优化目标如下:从下面的公式可以看出,为了最大化目标函数我们需要最大化正样本的概率,并且最小化所有负样本概率;
    \begin{align} \mathcal{L} &= \sum_{w \in \mathcal{ C}} log g(w) \\ &= \sum_{w \in \mathcal {C}} log \left( \sigma(x^T_w \theta^w ) \prod_{u \in NEG(w)} [1 - \sigma(x^T_w \theta^u)] \right) \end{align}
  • 负采样算法: 对于一个给定的词w,如何生成NEG(w)呢?通常的要求是对于那些高频词,被选为负样本的概率应该比较大,反之对于哪些低频词被选中负样本的概率应该比较小。本质上就是一个带权采样的过程。

(1)假设词典\mathcal{D }中的每一个词w对应一个线段l(w),长度为:len(w) = \frac{counter(w) }{\sum_{u \in \mathcal{D}} counter( u)}counter(w)表示w在语料中出现的次数;现在将语料中所有词的长度进行拼接得到长度为1的单位线段;
(2)随机采样的策略就是每次生成一个[0, 1]之间的随机数,当随机数命中某个线段的范围,将这个线段对应的单词作为负样本;

负采样算法实现.png

1.3 Glove模型

  • Glove模型:基于全局信息统计词与词之间的共现,构建共现矩阵X_{ij}。构建词向量(w_i^T \tilde{w_j}) 与共现矩阵之间的近似关系,由此构建目标函数 J(\theta)。优化目标函数得到词向量。具体原理参考:GloVe详解

w_i^T \tilde{w_j} + b_i + \tilde{b_j} = log(X_{ij}) \\ J(\theta) = \sum_{i,j=1}^{V} f(X_{ij}) (w_i^T \tilde{w_j} + b_i + \tilde{b_j} - log(X_{ij}))^2

  1. 早期的预训练模型,训练出的词向量是 静态固定不变 的。即相同的单词,在不同的上下文情况下,其词向量是一样的。
  2. 对于一词多意的问题很难解决。比如下面的例子,bank在不同的上下文下对应不同的意思:银行,河堤;
  3. 因此考虑如何解决,在不同的上下文情况下,单词得到不同的词向量?即获取 动态词向量
一词多意问题.png

2. 动态词向量模型

2.1 ELMo模型

  • ELMo模型发表在2018 NAACL会议上,并获得最佳论文奖。ELMo模型使用双层双向LSTM网络,对句子进行建模。其训练目标还是给定单词上下文词,预测当前词出现的条件概率,模型结构如下。左边是一个前向双层LSTM网络,用于编码单词w_t的上文信息;右边是一个后向双层LSTM网络,用于编码单词w_t的下文信息。

前向语言模型:p(t_1, t_2, ..., t_N) = \prod_{k=1}^{N} p(t_k|t_1, t_2, ..., t_{k-1}) \\ 后向语言模型:p(t_1, t_2, ..., t_N) = \prod_{k=1}^{N} p(t_k|t_{k+1}, t_{k+2}, ..., t_N) \\ 目标函数:L(\theta) = \sum_{k=1}^N \left( logp(t_k|t_1, t_2, ..., t_{k-1}, \theta_x, \overrightarrow{\theta}_{LSTM}, \theta_S) + logp(t_k|t_{k+1}, t_{k+2}, ..., t_N, \theta_x, \overleftarrow{\theta}_{LSTM}, \theta_S) \right)

  • 上式中,\theta_x表示单词向量,\theta_S表示softmax层的参数;
ELMo模型.png
  • ELMo词向量的应用:对于每一个token而言t_k,假设LSTM网络层数为L,则token可由2L+1个向量表示;通过对token的每个向量 \{ x_k^{LM}, \overrightarrow{h_{k,j}^{LM}}, \overleftarrow{h_{k,j}^{LM}} \}进行加权输出,将加权后的向量利用到下游任务中。其中三种向量的权值,根据具体任务训练得到。

\begin{align} R_k & = \{ x_k^{LM}, \overrightarrow{h_{k,j}^{LM}}, \overleftarrow{h_{k,j}^{LM} } | j = 1, 2, ..., L \} \\ & = \{ h_{k,j}^{LM} | j=0,1,2, ..., L \} \end{align}

2.2 BERT模型

  • BERT模型2018年由谷歌提出,使用Transformer的Encoder作为BERT基础结构。BERT与ELMo模型不同,它的训练使用了两个任务:Masked LM 和 Next Sentence Prediction (NSP)
BERT模型.png

2.2.1 Masked LM任务

  • Masked LM任务与Word2vec中的CBow模型有点类似,通过Mask一些输入的词,利用上下文的信息预测这个词。
  • 具体的Mask策略: 对于输入的句子,随机的masked句子中15%的词;为了防止fine-tuning的时候[MASK]标记没有出现的问题,预训练阶段并不是将词都替换成[MASK],具体策略如下:
    (1)80%的概率,将词替换成特殊标记[MASK]
    (2)10%的概率,随机将词替换成词表中任意一个词;
    (3)10%的概率,维持当前词不变;
Masked LM.png

2.2.2 NSP任务

  • NSP任务是一个二分类任务;NSP任务,对于fine-tuning阶段QA和NLI效果提升起着重要作用。
NSP.png

2.2.3 BERT模型输入

  • 首先输入的句子会使用WordPiece模型得到子词解决unk问题,然后每一个token会有一个对应的embedding(Token embedding);其次对于输入的两个句子都有其对应的embedding(Segment embedding),最后每一个位置都有对应的Position embedding
    BERT模型的输入.png

2.2.4 如何使用BERT?

1) 单文档分类任务
  • 例如常见的情感分析,就是单文档分类任务;将学习到的[CLS]向量输入到一个线性分类器中,预测得到每个类别的概率。
单文档分类.png
2) 序列标注任务
  • 输入一个句子,输出每个词的label。比如对话系统领域的槽位填充任务就是一个序列标注问题。
序列标注任务.png
3) 多文档分类任务
  • 输入两个句子,输出一个label。比如自然语言推理(Natural Language Inference )任务。
多文档分类任务.png
4) 问答系统
  • Extraction-based Question Answering这种类型的问答,其答案出现在文档中,只需要确定start(s),end(e)的位置。
问答系统.png
  • 如何计算得到start, end?start和end分别学习两个向量,计算最终的softmax输出概率。
计算start.png
计算end.png

2.3 GPT模型

  • GPT模型使用的是Transformer的Decoder,所以其没有考虑下文信息。BERT模型认为这是它主要的缺点。如下图所示,在计算 生成的条件概率时,其只考虑了<BOS>, 潮水, 退了
Transformer Decoder self Attention.png
  • 模型参数数量对比
image.png

参考论文

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351