BERT理解
1、预训练模型
BERT是一个预训练的模型,那么什么是预训练呢?
假设已有A训练集,先用A对网络进行预训练,在A任务上学会网络参数,然后保存以备后用。(预训练过程)
当来一个新的任务B,采取相同的网络结构,网络参数初始化的时候可以加载A训练集学习好的参数,其他的高层参数随机初始化,之后用B任务的训练数据来训练网络,当加载的参数保持不变时,称为"frozen",当加载的参数随着B任务的训练进行不断的改变,称为“fine-tuning(微调)”,即更好地把参数进行调整使得更适合当前的B任务。(迁移transformer)
2、基础任务实现
(1)序列标注:分词、实体识别、语义标注等; (2)分类任务:文本分类、情感计算、立场分类、方面级情感分析; (3)句子关系判断:entailment(文本蕴含)、QA、自然语言推理; (4)生成式任务:机器翻译、文本摘要;
3、Bert预训练模型的两个子任务
为什么bert对文本处理能力强:
(1)Marked Language Model(MLM):语言模型
输入一个文本,bert随机mark句子中的词,让模型根据mark后的句子,去预测被mark的词是什么?
即:输入 I like apple because apple is nice
模型转换成:I like [mark] because apple is nice.
模型预测: [mark]=>”apple”
具体的训练数据构造方法是,对每个数据句子中 15% 的概率随机抽取 token,以 80% 的概率替换为 [MASK],10% 的概率替换为其他 token,10% 的概率保持不变。之所以不全替换为 [MASK],是为了减少 pre-training 和 fine-tuning 阶段输入分布的不一致,因为 fine-tuning 阶段的输入是没有 [MASK] 的。
(2)Next Sentence Prediction(NSP):学习上下文关系
任务除了理解单个句子以外,还需要理解两个句子的关系,比如问答和推理任务。为了让模型能够理解学习句对之间的关系,所以提出了第二个预训练任务NSP。NSP取[CLS]的最终输出进行二分类,判断当前输入的两句话是否连贯,类似句子粒度的语言模型,让模型学习输入句子对之间的关系。
具体的训练数据构造方法是,对于 sentence A,sentence B 以 50% 的概率为 sentence A 的下一句,以 50% 的概率进行随机负采样,即从语料库中随机抽取一个句子。
4、预训练数据集
-
BookCorpus数据集(800M words)
-
English Wikipedia数据集(2,500M words)
后续有很多Bert模型,并加入诸如新闻,推特的新数据集,比较有名的如下:
Robert (中/英文预训练模型):改进Bert子任务
XLnet(中/英文预训练模型):改进Bert子任务
Albert(中/英文预训练模型):压缩bert参数,使其性能与bert接近
5、实验数据以及对应的NLP任务
MNLI:蕴含关系推断
QQP:问题对是否等价
QNLI:句子是都回答问句
SST-2:情感分析
CoLA:句子语言性判断
STS-B:语义相似
MRPC:句子对是都语义等价
RTE:蕴含关系推断
WNLI:蕴含关系推断

参考文献:
1、https://www.jianshu.com/p/3999a7cef222
2、https://blog.csdn.net/laobai1015/article/details/87937528
3、Bert论文解读https://zhuanlan.zhihu.com/p/46833276
网友评论