目录
BERT模型简介
该模型由google发布于2018年10月11日的一篇论文,链接
该模型在11个NLP(自然语言学习)任务上刷新纪录,包括以下几个:
- GLUE :General Language Understanding Evaluation #一般语言理解评估
- MNLI :Multi-Genre Natural Language Inference #多类型自然语言推理
- SQuAD v1.1 :The Standford Question Answering Dataset #斯坦福问答数据集,支持2.0版数据集,需要使用large版训练
- QQP : Quora Question Pairs #Quora问答
- QNLI : Question Natural Language Inference #问题自然语言推理
- SST-2 :The Stanford Sentiment Treebank #斯坦福观点库
- CoLA :The Corpus of Linguistic Acceptability #语言可接受语料库
- STS-B :The Semantic Textual Similarity Benchmark #语义文本相似度基准
- MRPC :Microsoft Research Paraphrase Corpus #微软研究释义语料库
- RTE :Recognizing Textual Entailment #认识文本?
- WNLI :Winograd NLI #
- SWAG :The Situations With Adversarial Generations #对抗情形
此类任务可以分为四类-参考链接:
- 句子对分类:MNLI、QQP、QNLI、STS-B、MRPC、RTE和SWAG。QNLI判断问答对是不是包括正确的回答,STS-B判断两句话有多少的相似性。
- 单句子分类任务:SST-2、CoLA。SST-2判断语句中的情感趋向,CoLA判断语法是否正确。
- 问答任务:SQuAD v1.1、v2.0。通过问题检索段落中正确回答的位置和长度。
- 单句子标注任务(命名实体识别)CoNLL-2003 NER。预测句子的标注是什么,例如人物或地点等。
BERT可以用于问答系统,情感分析,垃圾邮件过滤,命名实体识别,文档聚类等任务.代码已经开源,点击转到.
我们可以对开源的代码进行微调用在我们的目标任务中.
原理简述
BERT的创新之处在于将双向的Transformer用于语言模型,之前的模型偏向于从左向右关联或者将从左到右和从右到左结合起来,结果表明:双向训练的语言模型对语境的理解回避单向的语言模型更深刻.(Masked LM)
Transformer可以学习文本中单词之间的上下文关系,encoder负责接收文本作为输入,decoder负责预测任务的结果.
BERT使用两个策略:
1.Masked LM(MLM)
用于解决填空题.
将句子输入给BERT之前,有15%的单词被替换,然后模型常事基于序列中其它未被mask的单词的上下文来预测被掩盖的原单词.
这需要:在encoder的输出上增加一个分类层;用嵌入矩阵乘以输出向量并将其转换为词汇的维度;用softmax计算词汇表中每个单词的概率.
2.Next Sentence Prediction(NSP)
在BERT训练过程中,模型接收成对的句子作为输入,并且预测第二个句子是否在原文中也是后续句子.训练期间,50%的后续句子在原始文档中是前后关系,另外50%是从语料库中随机组成的,并且是与第一句断开的.
为了帮助模型区分开训练中的橘子,在进入模型钱需要以下方式处理:第一个句子的开头插入[CLS]标记,末尾插入[SEP]标记;将句子A和B的embedding添加到每个token;给每个token添加一个位置embedding,来表示它在序列中的位置.
为了预测第二个句子是否是后续句子,用以下步骤:
- 整个输入序列输入给Transformer模型
- 用一个简单的分类层将[CLS]标记的输出变换为2*1形状的向量
- 用softmax计算IsNextSequence的概率
在训练BERT模型时,以上两种策略是同时进行的,目标就是要最小化两种策略的组合损失函数.
如何使用?
BERT可以用于很多种NLP任务,只需要在核心模型中添加一个层,例如:
在分类任务中,例如情感分析,需要在Transformer的输出之上加一个分类层;
在问答任务中,需要接收有关文本序列的question,并且需要在序列中标记answer.可以使用bert学习两个标记answer开始和结尾的向量来训练Q&A模型;
在命名实体识别(NER)中,系统需要接受文本序列,标记文本中的各种类型的实体(人员/组织/日期等).
在fine-tuning中,大多数超参数都可以保持不变,论文中给出了需要调整的超参数的指导(第3.5节)