aacc式的成语(AABC是词语怎么写?)

橘子网 159

1. 引言

Generative Pre-trained Transformers2.0 (生成式预训练Transformers第2版,GPT-2)可能是2019年以来,NLP领域影响力最大的算法之一。

从名字就能看出来,GPT-2和Transformer以及GPT有非常密切的关系(关于Transformer的介绍,可以参考https://zhuanlan.zhihu.com/p/122977440;关于GPT的信息,可以参考https://zhuanlan.zhihu.com/p/125139937)。实际上,GPT2是OpenAI对GPT进行升级的产物。

2. GPT2的结构

Alec Radford等人在论文中,只是用文字对GPT-2的结构进行了描述。这里为了直观,以图示之。

如图2-1,是GPT的结构;如图2-2,是GPT-2的结构。相比GPT,GPT-2的layer norm位于子层(多头注意力和全连接层)之前;GPT-2在最后一个Transformer的输出那里,增加了一个layer norm。他们应该是试验了很多结构,最后选择了最适合当前任务的那一个。

参数规模是GPT-2能力的重要基础。

图 2-1 GPT的结构

图 2-2 GPT-2的结构

3. GPT-2效果好的关键

结构上,GPT-2没有特别大的创新,但是效果提升幅度很大,为什么呢?主要原因在于训练阶段的改进。

3.1. 数据

GPT-2学习了800万个高质量网页的文本内容。这份语料涵盖的领域非常广泛,可以支持模型在各种场景下较好地理解文本。另外,Alec Radford等人利用社交网络(Redit)里的点赞机制,筛选出了其中质量较高的文本。我们在社交网络里的所有行为,都是数据标注活动,比如点赞就是同意文本所述观点。如果点赞的人比较多,说明该文本所述内容被很多人看明白了——在语法、语义等等方面,这段文本的质量是比较高的。

3.2. 文本表示——Byte Pair encoding

3.2.1. 常见的文本切分粒度

我们在切分文本的时候,使用的粒度是字、词、ngram。而我们说的嵌入,指的是将字符、词语或者网络节点等具有现实意义的元素,用稠密向量表示为语义空间中的一个点。

对中文和英文来说,字符级别的嵌入都有一定的困难:英文中有意义的文本会比较长(输入序列对应的时间步较多),训练会比较慢,遗忘也会比较严重;中文有几万个字(分类标签较多),训练也比较慢。词嵌入的困难就更明显了,当前主要语言的词汇表都是十万级别大小,导致模型训练非常耗时。

为了控制词汇表规模,大家做了很多尝试:去除停用词;对英文文本做tokenization;将不重要的字、词替换为统一的符号;将数字替换为统一的符号;(中文中)将英文字符替换为统一的符号;字嵌入;等等。这些方法,以及它们的组合,效果各有千秋。删掉一些token损失信息;而保留生僻token的话,多多少少又会(因为没有充分学习)对模型的效果产生负面影响。

Sennrich, R等人(2015)搞了一次尝试,使用介于字符和词之间的一种文本粒度对文本进行切分[2],以进一步控制词汇表规模,并缓解数据稀疏问题。这种切分方式有点类似ngram,不是字符,也不是词语,不适合人类阅读,但是对机器非常亲和:词汇量被控制在一个不大不小的规模。他们采用的方法,叫做字节对编码。

3.2.2. 一种奇怪的文本切分粒度——字节对编码

Gage, Philip(1994)提出了一种数据压缩算法,叫做字节对编码(Byte Pair Encoding, BPE)。这个算法的大意是这样的:用一个新代号表示数据中最常见的bigram(可以是字节对、字符对、词语对等等),不断迭代,直到剩余bigram的频率为1(或者可以自定义一个终止条件)。其操作方式很简单,这里以压缩字符串aabcaacc为例,如表3-1。

表3-1 字节对编码计算过程示例

3.2.3. Byte-level字节对编码

前面介绍的BPE,是在字符的基础上进行压缩,应该叫二元字符编码。而GPT-2剑走偏锋,选择了一种对机器更加亲和的粒度,即在字节的基础上、使用BPE算法对文本进行压缩——得到的subword序列,就是文本的新型表示。下游的嵌入,也是在subword的基础上进行嵌入。

字节级BPE的细节,可以参考文献[3]。字节级别的BPE,你懂的,模式非常少(当然比英文字母的个数要多),不仅控制了词汇表规模,还极大的缓解了数据稀疏问题,因此可以支撑更好的分布式表示。

个人以为,字节级别的BPE是GPT-2能力的重要来源。

4. 结语

BERT、GPT-2这些超重型模型,使NLP领域进入了氪金时代——没几块显卡,你都不好意思说自己是做自然语言处理的。如果应用场景对实时性有要求,在没有显卡的情况下,即使是图拉丁的垃圾佬们也无法解决算力问题。一个更有希望的方向,就是使用结构优化、蒸馏、量化等等方式,压缩模型。经过压缩的模型,可以在普通计算机甚至是嵌入式设备里工作,涉及的成本那可是相当的低。

参考文献

[1] https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf

[2] Sennrich, R., Haddow, B., and Birch, A. Neural machine translation of rare words with subword units. arXiv preprintarXiv:1508.07909, 2015.

[3] https://arxiv.org/pdf/1909.03341.pdf

[4] Gage, Philip. (1994). A new algorithm for data compression. The C Users Journal. 12. 23-38.

注意:本文为李鹏宇(知乎个人主页https://www.zhihu.com/people/py-li-34)原创作品,受到著作权相关法规的保护。如需引用、转载,请注明来源信息:(1)作者名,即李鹏宇;(2)原始网页链接,即https://zhuanlan.zhihu.com/p/136138225。如有疑问,可发邮件至我的邮箱:lipengyuer@126.com。

上一篇:

下一篇:

相关阅读

分享