前两期我们讲到了BERT的原理与应用&其他预训练模型

这一期我们讲一下

自然语言处理四大下游任务

正如8.1.2节所说,BERT等预训练模型的提出,简化了我们对NLP任务精心设计特定体系结构的需求,我们只需在BERT等预训练模型之后下接一些网络结构,即可出色地完成特定任务。

原因也非常简单,BERT等预训练模型通过大量语料的无监督学习,已经将语料中的知识迁移进了预训练模型的Eembedding中,为此我们只需在针对特定任务增加结构来进行微调,即可适应当前任务,这也是迁移学习的魔力所在。

BERT在概念上很简单,在经验上也很强大。它推动了11项自然语言处理任务的最新技术成果,而这11项NLP任务可分类为四大自然语言处理下游任务。为此,笔者将以BERT预训练模型为例子,对自然语言处理的四大下游任务进行介绍。

8.2.1 句子对分类任务

1. MNLI

Williams等人[22]提出的多体自然语言推理(Multi-Genre Natural Language Inference)是一项大规模的分类任务。给定一对句子,目标是预测第二个句子相对于第一个句子是包含,矛盾还是中立的。

2. QQP

Chen等人[23]提出的Quora Question Pairs是一个二分类任务,目标是确定在Quora上询问的两个问题在语义上是否等效。

3. QNLI

Wang等人[24]出的Question Natural Language Inference是Stanford Question Answering数据集[25]的一个版本,该数据集已转换为二分类任务。正例是(问题,句子)对,它们确实包含正确答案,而负例是同一段中的(问题,句子),不包含答案。

4. STS-B

Cer等人[26]提出的语义文本相似性基准(The Semantic Textual Similarity Benchmark)是从新闻头条和其他来源提取的句子对的集合。它们用1到5的分数来标注,表示这两个句子在语义上有多相似。

5. MRPC

Dolan等人[27]提出的Microsoft Research Paraphrase Corpus由自动从在线新闻源中提取的句子对组成,并带有人工标注,以说明句子对中的句子在语义上是否等效。

6. RTE

Bentivogli等人[28]提出的识别文本蕴含(Recognizing Textual Entailment)是类似于MNLI的二进制蕴含任务,但是训练数据少得多。

7. SWAG

Zellers等人[29]提出的对抗生成的情境(Situations With Adversarial Generations)数据集包含113k个句子对完整示例,用于评估扎实的常识推理。给定一个句子,任务是在四个选择中选择最合理的连续性。其中,在SWAG数据集上进行微调时,我们根据如下操作构造训练数据:每个输入序列都包含给定句子(句子A)和可能的延续词(句子B)的串联。

如图 8.11(a)所示,句子对分类任务首先需要将两个句子用“[SEP]”连接起来,并输入模型。然后,我们给预训练模型添加一个简单的分类层,便可以在下游任务上共同对所有参数进行微调了。具体运算逻辑是引入唯一特定于任务的参数是分类层权重矩阵[W]KxH ,并取BERT的第一个输入标记“[CLS]”对应的最后一层向量[C]H 。通过公式(8.4)计算分类损失loss ,我们就可以进行梯度下降的训练了。

其中K为标签种类,H为每个字或者英文单词的隐藏层维度(768)。

8.2.2 单句子分类任务

1. SST-2

Socher等人[30]提出的斯坦福情感树库(Stanford Sentiment Treebank)是一种单句二分类任务,包括从电影评论中提取的句子以及带有其情绪的人类标注。

2. CoLA

Warstadt等人[31]提出的语言可接受性语料库(Corpus of Linguistic Acceptability)也是一个单句二分类任务,目标是预测英语句子在语言上是否“可以接受”。

如图 8.11(b)所示,单句子分类任务可以直接在预训练模型中添加了一个简单的分类层,而后便可在下游任务上共同对所有参数进行微调了。具体运算逻辑如公式(8.4)所示。

8.2.3 问答任务

SQuAD v1.1:Rajpurkar等人[25]提出的斯坦福问答数据集(Stanford Question Answering Dataset)是10万个问题/答案对的集合。给定一个问题以及Wikipedia中包含答案的段落,任务是预测段落中的答案文本范围(start,end)。

到目前为止,所有提出的BERT微调方法都是在预训练模型中添加了一个简单的分类层,并且在下游任务上共同对所有参数进行了微调。然而,并非所有任务都可以轻松地由BERT体系结构表示,因此需要添加特定于任务的模型体系结构。如图 8.11(c)所示,阅读理解任务首先需要将问题和文本用“[SEP]”连接起来,并输入模型。然后,我们再将BERT最后一层向量 [C]LxH 输入到输出层。具体运算逻辑是初始化输出层的权重矩阵[W]KxH ,并通过公式(8.5)计算答案指针概率向量logit。

                                                                                     其中H为隐藏层维度(768),L为序列的长度,K为2,表示logit是个L行2列的矩阵,第1列为答案开头start的指针概率向量,第2列为答案结尾end的指针概率向量。

因为K为2,所以我们能分别抽出答案的开头start_logit和答案end_logit的结尾。并根据两者与真实答案对(start, end)之间的差值计算start_logit和end_logit,最后求出总的loss,如公式(8.6)所示,我们便可以进行梯度下降训练了。

8.2.4 单句子标注任务

单句子标注任务也叫命名实体识别任务(Named Entity Recognition),简称NER,常见的NER数据集有CoNLL-2003 NER[32]等。该任务是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等,以及时间、数量、货币、比例数值等文字。举个例子:“明朝建立于1368年,开国皇帝是朱元璋。介绍完毕!”那么我们可以从这句话中提取出的实体为:

(1) 机构:明朝

(2) 时间:1368年

(3) 人名:朱元璋

同样地,BERT在NER任务上也不能通过添加简单的分类层进行微调,因此我们需要添加特定的体系结构来完成NER任务。不过,在此之前,我们得先了解一下数据集的格式,如图 8.10所示。

它的每一行由一个字及其对应的标注组成,标注采用BIO(B表示实体开头,I表示在实体内部,O表示非实体),句子之间用一个空行隔开。当然了,如果我们处理的是文本含有英文,则标注需采用BIOX,X用于标注英文单词分词之后的非首单词,比如“Playing”在输入BERT模型前会被BERT自带的Tokenization工具分词为“Play”和“# #ing”,此时“Play”会被标注为“O”,则多余出来的“# #ing”会被标注为“X”。

了解完整体的数据格式,我们就开始了解整体的NER任务是如何通过BERT来训练的。如图 8.11(d)所示,将BERT最后一层向量 [C]LxH输入到输出层。具体运算逻辑是初始化输出层的权重矩阵[W]KxH ,此时K为1。我们通过公式8.5得到句子的概率向量logit ,进而知道了每一个字或者英文单词的标注概率。然后,我们可以直接通过计算 logit与真实标签之间的差值得到loss ,从而开始梯度下降训练。

当然了,我们也可以将logit 灌入Bi-LSTM进行学习,因为Bi-LSTM能更好地学习文本的上下文关系,最后再下接一个CRF(Conditional Random Field)层拟合真实标签来进行梯度下降训练。

至于为何要加入CRF层,主要是CRF层可以在训练过程中学习到标签的约束条件。比如,“B-ORG I-ORG” 是正确的,而“B-PER I-ORG”则是错误的;“I-PER I-ORG”是错误的,因为命名实体的开头应该是“B-”而不是“I-”,且两个“I-”在同一个实体应该一致。有了这些有用的约束,模型预测的错误序列将会大大减少。

图 8.10 NER数据格式

图 8.11 NLP四大下游任务微调插图

8.3 迁移学习与自然语言处理竞赛实践

打开链接查看~

2019BDCI互联网金融新实体发现 | 思路与代码框架分享(单模第一,综合第二)

8.4 总结

BERT诞生之后,还有很多基于BERT的改进模型也随之诞生如Zhilin Yang等人[35]的XLNET和Shizhe Diao等人[36]的ZEN等。从笔者在本章介绍的预训练模型可以知道,大多数模型都只是基于BERT当前一些缺点如掩盖策略或者超参数设置进行改进,本质上不算特别大的创新,相信读者碰到新的预训练模型的时候,自己也能看出它们是基于BERT的哪些不足进行的改善。加之当前数据仍然是改进BERT模型最重要的原料,数据的补充比修改模型本身更加迫切。因此,笔者并不打算对所有的预训练模型都一一分析。

另外,笔者在本章所介绍的代码结构是一个比较通用的NLP竞赛框架,涉及的六大模块同样也可以用于科研实践。大家只需要修改model.py,根据我们模型设置的模型数据占位符,在utils.py返回模型所需要的Batch数据即可。因为每一个模块解耦性强,而且我们通过配置文件config.py来控制路径与超参数设置,所以我们修改某一个模块,并不影响其他模块的运行,从而减少了实验调试错误的时间成本。大家可以尝试用这套框架结合我们在8.2节所介绍的NLP四大类任务原理,去做一些简单实验,争取掌握这套代码结构。

最后,当前NLP的发展并没有计算机视觉迅速,究其原因还是因为人类的语言过于复杂,而我们人类训练的NLP模型并不像人的思维一般,可以联想学习。我们喂给他们的数据决定了它们神经元的权重,它们只是一群基于数据的弱人工智能。当然了,计算机视觉模型也是弱人工智能,不过图像相较于语言还是简单一点的,因此计算机视觉的落地应用会多一点。现在越来越多从事自然语言处理的研究人员也在研究计算机视觉,这逐渐成为了一种趋势,其目的是将计算机视觉的思想转化到NLP领域,进而加快NLP技术的发展。笔者相信总有一天,全世界人工智能研究人员的努力,能让人工智能技术突破弱人工智能的天花板,从而实现真正意义上的智能,进而推动整个人工智能的进程,造福人类社会。

参考文献

[22] Williams A, Nangia N, Bowman S R. A broad-coverage challenge corpus for sentence understanding through inference[J]. arXiv preprint arXiv:1704.05426, 2017.

[23] Chen Z, Zhang H, Zhang X, et al. Quora question pairs, 2018.

[24] Wang W, Yan M, Wu C. Multi-granularity hierarchical attention fusion networks for reading comprehension and question answering[J]. arXiv preprint arXiv:1811.11934, 2018.

[25] Rajpurkar P, Zhang J, Lopyrev K, et al. Squad: 100,000+ questions for machine comprehension of text[J]. arXiv preprint arXiv:1606.05250, 2016.

[26] Cer D, Diab M, Agirre E, et al. Semeval-2017 task 1: Semantic textual similarity-multilingual and cross-lingual focused evaluation[J]. arXiv preprint arXiv:1708.00055, 2017.

[27] Dolan W B, Brockett C. Automatically constructing a corpus of sentential paraphrases[C]. Proceedings of the Third International Workshop on Paraphrasing (IWP2005), 2005.

[28] Bentivogli L, Clark P, Dagan I, et al. The Fifth PASCAL Recognizing Textual Entailment Challenge[C]. TAC, 2009.

[29] Zellers R, Bisk Y, Schwartz R, et al. Swag: A large-scale adversarial dataset for grounded commonsense inference[J]. arXiv preprint arXiv:1808.05326, 2018.

[30] Socher R, Perelygin A, Wu J, et al. Recursive deep models for semantic compositionality over a sentiment treebank[C]. Proceedings of the 2013 conference on empirical methods in natural language processing, 2013: 1631-1642.

[31] Warstadt A, Singh A, Bowman S R. Neural network acceptability judgments[J]. arXiv preprint arXiv:1805.12471, 2018.

[32] Sang E F, De Meulder F. Introduction to the CoNLL-2003 shared task: Language-independent named entity recognition[J]. arXiv preprint cs/0306050, 2003.

[35] Yang Z, Dai Z, Yang Y, et al. XLNet: Generalized Autoregressive Pretraining for Language Understanding[J]. arXiv preprint arXiv:1906.08237, 2019.

[36] Diao S, Bai J, Song Y, et al. ZEN: Pre-training Chinese Text Encoder Enhanced by N-gram Representations[J]. arXiv preprint arXiv:1911.00720, 2019.

今天的总结就到这里啦

这两天再把李老师的讲座PPT的内容整理分享出来~

关注我的微信公众号~不定期更新相关专业知识~

内容 |阿力阿哩哩

编辑 | 阿璃

BERT四大下游任务相关推荐

  1. #最全面# 使用 Bert 解决下游 NLP 实际任务

    文章目录 1 四大NLP下游任务 1 句子对分类任务 1.1 MNLI 1.2 QQP 1.3 QNLI 1.4 STS-B 1.5 MRPC 1.6 RTE 1.7 SWAG 2 单句子分类任务 2 ...

  2. 【NLP】如何提升BERT在下游任务中的性能

    作者 | 许明 整理 | NewBeeNLP公众号 随着Transformer 在NLP中的表现,Bert已经成为主流模型,然而大家在下游任务中使用时,是不是也会发现模型的性能时好时坏,甚至相同参数切 ...

  3. 如何提升BERT在下游任务中的性能

    作者 | 许明 转自 | NewBeeNLP公众号 随着Transformer 在NLP中的表现,Bert已经成为主流模型,然而大家在下游任务中使用时,是不是也会发现模型的性能时好时坏,甚至相同参数切 ...

  4. 如何使用transformers的trainer.train()函数如何训练自定义Bert的下游模型,并进行评估

    要使用 Transformers 中的 Trainer 训练自定义的 BERT 下游模型,并进行评估,需要进行以下步骤: 准备数据集:将原始数据集转换为适合 BERT 模型训练的格式,例如使用 tok ...

  5. NLP-了解BERT下游任务

    BERT四大下游任务 1. 句子对分类任务 MNLI:大规模分类任务,目标是预测第二个句子相对于第一个句子是包含,矛盾还是中立. QQP:二分类任务,预测Quora在两个语义问题上是否等效. STS- ...

  6. 从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史

    文章目录 1.BERT 原理及 MLM 简述 1.1 Masked Language Model & Next Sentence Predict** 1.2 Self-Attention 1. ...

  7. 基于Bert论文构建Question-Answering模型

    摘要 本文拜读了提出 Bert 模型的论文,考虑了在 Bert 中算法模型的实现.比较了 Bert 与其他如 Transformer.GPT 等热门 NLP 模型.BERT 在概念上很简单,在经验上也 ...

  8. #深入理解# Bert框架原理

    文章目录 1. Bert 的网络结构 2. Bert 模型的输入 3. Bert 模型预训练任务 3.1 Masked LM(MLM) 3.2 Next Sentence Prediction(NSP ...

  9. [nlp] NLP下游任务

    BERT四大下游任务 - 知乎 BERT等预训练模型的提出,简化了我们对NLP任务精心设计特定体系结构的需求,我们只需在BERT等预训练模型之后下接一些网络结构,即可出色地完成特定任务. 原因也非常简 ...

最新文章

  1. 数据科学家必须要掌握的5种聚类算法
  2. 点击空白 键盘消失 (待续……)
  3. Java项目开发全程实录pdf
  4. PHP无刷新上传面向过程写法iframe
  5. 排序第一天,回忆关键字
  6. WINDOWSXP全面优化下
  7. PostgreSQL 12系统表(8)pg_indexes
  8. Hi3520d 网卡驱动源码分析
  9. C语言实例第9期:提取字符串中全部数字
  10. java在线购物B2C商城源码 单用户商城源码(支持H5+APP+小程序)
  11. 在Mac电脑中配置ios模拟器
  12. Python3中.whl文件介绍
  13. 亚马逊AWSome DAY
  14. 用生活案例讲述:erp系统是什么?有哪些作用?
  15. stm32最小系统原理图
  16. Windows免杀木马+维持权限(shellter)
  17. 我用nodejs给朋友发了一份邮件
  18. Excel自动生成条码工具
  19. 对List中的map的key按中文拼音进行排序。
  20. Android编程随机抽奖,Android 滚动抽奖的实现

热门文章

  1. 安卓虚拟机_VMOS虚拟大师-独立的安卓虚拟机系统(已ROOT)「安卓」
  2. 数据运营分析多年,我只推荐这些书
  3. pads layout查看管脚连接
  4. Kotlin - 改良观察者模式
  5. [SHOI2008]小约翰的游戏John(博弈+SJ定理)
  6. 解决Kubernetes的flannel pod出现Init:RunContainerError问题
  7. JavaScript网页特效-折叠面板
  8. unity3d 动画制作_Unity 3D中的动画和动画制作
  9. 数组、字符串及对象-常用方法
  10. 基于SVM支持向量机的车牌分割识别算法matlab仿真