1. 大语言模型的前世今生

本文主要参考transformers教程, 包括了一些自己的思考。

如何建模语言?

发展流程

统计语言模型->NNLM->Word2Vec->LSTM->ELMO->Bert

统计语言模型

统计语言模型的思路是 判断一个文字序列是否构成人类能理解并且有意义的句子。
IBM实验室Jelinek提出一个文字序列 w 1 , w 2 , … , w n w_1, w_2, \ldots, w_n w1,w2,,wn 是否合理,就看这个句子 S S S 出现的概率 P ( S ) P(S) P(S) 如何,出现概率越大的句子越合理:
P ( S ) = P ( w 1 , w 2 , … , w n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) … P ( w n ∣ w 1 , w 2 , … , w n − 1 ) P(S)=P\left(w_1, w_2, \ldots, w_n\right)=P\left(w_1\right) P\left(w_2 \mid w_1\right) P\left(w_3 \mid w_1, w_2\right) \ldots P\left(w_n \mid w_1, w_2, \ldots, w_{n-1}\right) P(S)=P(w1,w2,,wn)=P(w1)P(w2w1)P(w3w1,w2)P(wnw1,w2,,wn1)
任意一个词语 w n w_n wn 的出现概率都取决于它前面出现的所有词(理论上也可以引入后面的词语共同预测单词的出现概率)。但是,随着文本长度的增加,条件概率 P ( w n ∣ w 1 , w 2 , … , w n − 1 ) P\left(w_n \mid w_1, w_2, \ldots, w_{n-1}\right) P(wnw1,w2,,wn1) 会变得越来难计算,因而实际计算时会假设每个词语 w i w_i wi 的出现概率仅与它前面的 N − 1 N-1 N1 个词语有关,即:
P ( w i ∣ w 1 , w 2 , … , w i − 1 ) = P ( w i ∣ w i − N + 1 , w i − N + 2 , … , w i − 1 ) P\left(w_i \mid w_1, w_2, \ldots, w_{i-1}\right)=P\left(w_i \mid w_{i-N+1}, w_{i-N+2}, \ldots, w_{i-1}\right) P(wiw1,w2,,wi1)=P(wiwiN+1,wiN+2,,wi1)
这种假设被称为马尔可夫假设,对应的语言模型被称为 N N N 元 (N-Gram) 模型。特别地, N = 2 N=2 N=2 时,任意词语 w i w_i wi 的出现概率只与它前面的词语 w i − 1 w_{i-1} wi1 有关,被称为二元 (Bigram) 模型;显然, N = 1 N=1 N=1 时的一元模型实际上就是一个上下文无关模型。由于 N N N 元模型的空间和时间复杂度都几乎是 N N N 的指数函数,因此实际应用中最常见的是 N = 3 N=3 N=3 的三元模型。
但是,即使是三元、四元甚至是更高阶的语言模型,依然无法覆盖所有的语言现象。在自然语言中,上下文之间的相关性可能跨度非常大,比如从一个段落跨到另一个段落,这是马尔可夫假设解决不了的。 此时就需要使用 LSTM、Transformer 等模型来捕获词语之间的长程依赖性 (long distance dependency) 了。

NNLM

2003 年,Bengio 提出了神经网络语言模型 (NNLM, Neural Network Language Model),可惜它生不逢时,在之后的十年中都没有引起太大的反响。直到 2013 年,随着越来越多的研究使用深度学习模型进行 NLP 任务,NNLM 才被重新发掘,并成为使用神经网络建模语言的经典范例。
NNLM 的思路非常接近于前面介绍的统计语言模型,它通过输入前面的 n − 1 n-1 n1 个词来预测当前词。
NNLM
首先通过查表 C C C 得到要预测词语 w t w_t wt 前面的 n − 1 n-1 n1 个词对应的词向量 C ( w t − n + 1 ) , … , C ( w t − 2 ) , C ( w t − 1 ) C\left(w_{t-n+1}\right), \ldots, C\left(w_{t-2}\right), C\left(w_{t-1}\right) C(wtn+1),,C(wt2),C(wt1) ,然后将这些词向量拼接后输入到带有激活函数的隐藏层中,最后通过 Softmax 函数预测概率。
特别地,包含所有词向量的矩阵 C C C 也是模型的参数,需要通过学习获得。因此 NNLM 不仅能够能够根据上文预测后接的词语是什么,同时获得了所有词语的词向量 (Word Embedding)。

Word2Vec

真正将神经网络语言模型发扬光大的是 2013 年 Google 提出的 Word2Vec,这个模型提供的词向量在很长一段时间里都是 NLP 模型的标配,即使是后来出现的 Glove 模型也难掩它的光芒。
Word2Vec 的模型结构和 NNLM 基本一致,只是训练方法有所不同,分为 CBOW (Continuous Bag-of-Words) 和 Skip-gram 两种。
word2vec
其中 CBOW 使用待预测词语周围的词语 w ( t − 2 ) , w ( t − 1 ) , w ( t + 1 ) , w ( t + 2 ) w(t-2), w(t-1), w(t+1), w(t+2) w(t2),w(t1),w(t+1),w(t+2) 来进行预测 w ( t ) w(t) w(t) , Skip-gram 则正好相反,它使用当前词语 w ( t ) w(t) w(t) 来预测它的周围词语。

可以看到,与严格参照统计语言模型设计的 NNLM 不同 (每个词语的出现概率只与它前面的词语有关),Word2Vec 在结构上更加自由,训练目标也更多地是为获得词向量服务。特别是其提出的同时通过上文和下文来预测当前词语的 CBOW 训练方法,打破了语言模型的固定思维,为后续一系列神经语言模型的发展奠定了基础。
虽然 Word2Vec 取得了巨大的成功,但是有一片乌云一直笼罩在词向量的上空——多义词问题。一词多义正是语言灵活性和高效性的体现,但 Word2Vec 却对此束手无策,无论词语的上下文如何,Word2Vec 对于一个词语只能提供一个词向量,即多义词被编码到了完全相同的参数空间。

而事实上,早在上世纪 90 年代初,Yarowsky 就给出了一个非常简单又有效的解决方案——运用词语之间的互信息。具体地,对于一个多义词,分别从大量文本中找出这个词在表示不同语义时,同时出现的互信息最大的一些词。当在判别词语语义时,只需要看看上下文中哪些词语出现的多就可以了,即通过上下文来判断这个词语当前表达的语义。
因此,在后来的几年中,标准 NLP 流程都是将 Word2Vec 预训练好的词向量作为模型的输入,然后通过 LSTM、CNN 等模型来重新对句子中的词语进行编码,以便捕获到词语的上下文信息。

ELMO

2018 年 ELMO 模型的提出,直接在词向量端给出了一种简洁优雅的解决方案。与 Word2Vec 训练好之后就固定了的静态词向量不同,ELMO 会自动地根据词语的上下文信息去动态调整词语的词向量,因此自然就解决了多义词问题。
ELMo
具体地,ELMO 首先利用语言模型进行预训练,然后在实际使用时,从预训练网络中提取各层的词向量拼接起来作为新的词向量。
但是 ELMO 也依然存在缺陷,首先它使用 LSTM 作为编码器,而不是特征提取能力更强的 Transformer,其次直接通过拼接来融合双向抽取特征的方法也不够优美。

随后将 ELMO 中的 LSTM 更换为 Transformer 的 GPT 模型也很快出现了。但是 GPT 又再次追随了 NNLM 的脚步,只通过词语的上文来进行预测,这在很大程度上限制了模型的应用场景。例如阅读理解这种任务,如果预训练时候不把词语的下文嵌入到词向量中,会白白丢掉很多信息。

BERT

2018 年底随着 BERT 的提出,这一阶段神经语言模型的发展终于出现了一位集大成者,它在 11 个 NLP 任务上都达到了最好性能。

BERT 在模型大框架上采用和 GPT 完全相同的两阶段模型,首先是语言模型预训练,然后使用微调模式解决下游任务。BERT 不仅像 GPT 模型一样采用 Transformer 作为编码器,而且在预训练阶段采用了类似 ELMO 的双向语言模型。

BERT
因此 BERT 不仅编码能力强大,而且对各种下游任务,Bert 都可以简单地通过改造输入输出部分来完成。但是 BERT 的优点同样也是它的缺陷,由于 BERT 构建的是双向语言模型,因而无法直接用于文本生成任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值