打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Bert系列之前世今生

 提纲

1. 简介

2. 统计语言模型

3. 神经网络语言模型

    3.1 FFNN语言模型

    3.2 RNN语言模型

4. ELMo

5. Bert

1. 简介

    在学习前面有关Bert的若干文章后,相信大家对于Bert是有一定的认识跟了解,那么这个时候不妨问自己一个问题,你觉得Bert是凭空诞生的吗?在Bert之前又有哪些语言模型呢?

    写这篇文章的目的主要是分享下自己对于在自然语言处理领域中关于语言模型的发展历史的一些看法,希望大家能从其中对整个发展历史有一定的了解。总体思路是从统计语言模型到神经网络语言模型,从ELMo到Bert,依据时间构建整个语言模型的演变历程。

什么是语言模型?

    通俗的讲,语言模型就是计算一个句子合理性的模型。什么叫做合理性?我想可以理解像不像人话吧。比如下面这两个例子。

图1: 语言模型的案例

2. 统计语言模型

图2: 统计语言模型简述

    其实这两个问题的主要原因都是由于n太大了,所以我们可以假设词语出现的概率,只跟在它前面的n个词语相关(马尔可夫假设),然后设置一个合适的n就可以了。假设n等于1,相应的语言模型就是我们常说的2-gram语言模型。对应的概率计算公式就退化为下图。

图3: 2-gram语言模型计算方式

    借助于马尔可夫假设,我们可以获得只考虑前n-1个词的n-gram语言模型,但是这种基于统计的语言模型还会有以下两个问题。

a) 数据稀疏

    n-gram语言模型由于是统计特定语料来计算词语或者词语之间的概率的,即便是2阶语言模型,语料也很难覆盖所有词语的2阶组合,那么没有出现过的词语或者词语组合根据统计估算得到的概率都会是0。即使为了解决这种问题对词语组合的概率计算引入一定的平滑,整体上效果也不达预期。

b) 泛化能力差

    一个好的语言模型应该具备一定的泛化能力,但是基于统计的n-gram语言模型计算的词语组合的概率都是基于完全匹配的,不会考虑到词语本身的语义信息。

3. 神经网络语言模型

    由于基于统计的语言模型的若干弊端,加上神经网络强大的泛化能力受到越来越多人的关注,将神经网络应用到语言模型的构建成为一种可能。为此,神经网络语言模型应运而生。通过前面的章节,我们知道语言模型的概率计算其实可以分解为计算相应的条件概率即可,这就是为什么后面的神经网络语言模型的目标函数都是跟计算条件概率相关的原因。

3.1 FFNN Language Models

图4: FFNN Language Models的结构

    FFNN Language Models,也就是前馈神经网络语言模型,总共包括三层,分别是嵌入层,全连接层跟输出层。嵌入层是将当前词映射成向量,跟平时的方式不同,平时的嵌入层都是将词通过词嵌入矩阵映射成对应词的向量,但是这里是先获取当前位置词前面的n-1个词,然后根据词嵌入矩阵获取这n-1个词的词向量在合并到一起,作为当前词的表征。可以理解为这里的词嵌入是将获取当前词的前面n-1个词的表征。这样后面的全连接层跟输出层接收的就是当前词的n-1个上文的词向量作为输入,从而去预测当前词的概率(这里的通过softmax计算当前位置属于词表V中每个词的概率,然后选取其中概率最大的位置的词作为预测结果)。通过这种方式可以实现用当前词位置之前的n-1个词去预测当前词,试想如果这里的嵌入层是将获取当前词的词向量,然后再通过全连接层跟输出层去预测当前词的概率 ,输入跟输出不就是一个意思吗?这样不就是很奇怪吗?

    通过将词映射到低维度的空间进行表征可以解决稀疏性的问题,模型也会具有一定的泛化能力。著名的word2vec提到的两种训练词向量的方法CBOW和Skip-gram都是基于这种方式提出的(关于词向量的内容有计划后续在别的篇章整理出来统一分享)。但是这种方式还是存在一定的缺陷的,首先就是上文窗口的限制,也就是当前词相关上文n-1个词的限制,真实的场景下人理解句子并没有只能看到前面n-1个词这种限制。其次是没有考虑到时序信息,序列中的词是有前后关系,但是这种方式会忽略到时序信息,把不同位置的词都统一对待。

3.2 RNN Language Models

图5: RNN Language Models结构

    RNN Language Models,即循环神经网络语言模型,就是为了解决前面窗口限制的问题提出的。通过循环神经网络,可以存储历史上文的信息,不受窗口长度的限制,在每个时间步上,通过当前词跟循环神经网络的记录的所有上文的状态,去预测当前词的概率(这里其实我没太懂,用当前词的词向量作为输入预测当前位置词的概率?或许是理解有误,其实是用当前词的词向量作为输入去预测下一个位置词的概率)。RNN语言模型虽然可以利用不受长度限制的上文进行预测,但是RNN本身的问题使得训练模型成为一个极大的挑战,很容易在训练的时候发生梯度消失或者梯度爆炸等问题。所以后续又提出了用LSTM来替代RNN的方案。

4. ELMo

    前面的方法学到的词的表示都是唯一的,跟上下文无关,这显然不符合真实的场景。想想汉语中的多义词,不就是同一个词在不同场景下有不同的语义嘛?为此,语言模型也应该让词学习到上下文的相关信息。同时前面的方法其实都是单向的,就是在计算当前词的概率是都只使用到到上文的信息,但是人的理解习惯却是可以根据上下文来理解当前语义的。为此ELMo通过前向跟后向的两个独立的LSTM来捕捉上下文特征,同时通过多层LSTM的堆叠来增强特征提取能力。因为双向的原因,ELMo计算条件概率会分为两部,包括利用上文计算当前词的概率和利用下文计算当前词的概率两个部分。

图6: ELMo结构

    如上图所示,ELMo是由多个双向LSTM组成,最后每个位置上词的表示是通过词本身的词向量加上LSTM(包括前向跟后向)在当前词的位置的状态共同组成的。在具体训练过程中,通过使用最后一层的LSTM的状态预测下一个位置的词的概率(无论前向还是后向)。在具体的下游任务,可以将文本通过ELMo得到的相关词向量跟LSTM状态值通过加权平均作为当前词的额外特征去增强下游任务效果,这也是典型的Feature_based的预训练模型方法。

    ELMO在提出之后由于出色的效果曾经小火一段时间,通过词向量加上LSTM的输出,确实可以获得跟上下文相关的文本表征,在一定程度上解决一词多义的问题。但是模型本身还是有一定问题的。用两个单向的LSTM并不能在真正同时用到上下文的信息,ELMo的前向LSTM跟后向LSTM是分别独立进行的,相互之间没有联系,所以其实并没有真正同时利用到上下文的信息。

5. Bert

    在ELMo提出不久后,Bert横空出世,成为大家追捧的新的方法。比起ELMo,Bert通过transformer的attention机制真正实现了同时利用到上下文信息来预测当前位置的词的概率。

关于Bert的相关介绍有兴趣的同学可以去查看我之前写的文章,这里就不再赘述了。这里主要总结下Bert跟ELMo的差异。

a) Bert是预训练模型中Finutune-based的方法,而Elmo是Feature-based的方法。

b) transformer的特征提取能力比LSTM更强。同时transformer可以实现并行加速计算,但是LSTM只能串行。

c) Bert采用的是一体化特征融合方式,而ELMo采取的是双向拼接的融合方式。

参考文献

1.(2019)A Survey on Neural Network Language Models

https://arxiv.org/pdf/1906.03591v1.pdf

2. (RNNLM, 2010) Recurrent neural network based language model

http://www.fit.vutbr.cz/research/groups/speech/publi/2010/mikolov_interspeech2010_IS100722.pdf

3.(ELMo, 2018) Deep contextualized word representations

https://arxiv.org/pdf/1802.05365.pdf

4.(Bert, 2018) BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

https://arxiv.org/pdf/1810.04805.pdf

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
赛尔笔记 | 自然语言处理中的迁移学习(上)
一文读懂深度学习:从神经元到BERT
【深度学习】小白看得懂的BERT原理
【技术综述】深度学习在自然语言处理中的应用发展史
哈尔滨工业大学车万翔:自然语言处理新范式
NLP 高引论文解读两篇 | BERT模型、SQuAD数据集
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服