5 分钟入门 Google 最强NLP模型:BERT

摘要:
例如,在净入学率问题上,BERT语言模型已经过100多种语言的预训练。这是前100种语言的列表:https://github.com/google-research/bert/blob/master/multilingual.md只要有这100种语言的净入学率数据,就可以快速训练净入学率。BERT使用Transformer的编码器部分。BERT的目标是生成语言模型,因此只需要编码器机制。在BERT的训练过程中,模型接收成对的句子作为输入,并预测第二个句子是否也是原始文档中的后续句子。BERT可用于将每个令牌的输出向量发送到预测NER标签的分类层。

BERT (Bidirectional Encoder Representations from Transformers)

10月11日,Google AI Language 发布了论文

BERT: Pre-training of Deep Bidirectional Transformers for
Language Understanding

提出的 BERT 模型在 11 个 NLP 任务上的表现刷新了记录,包括问答 Question Answering (SQuAD v1.1),推理 Natural Language Inference (MNLI) 等:

GLUE :General Language Understanding Evaluation
MNLI :Multi-Genre Natural Language Inference
SQuAD v1.1 :The Standford Question Answering Dataset
QQP : Quora Question Pairs 
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

让我们先来看一下 BERT 在 Stanford Question Answering Dataset (SQuAD) 上面的排行榜吧:
https://rajpurkar.github.io/SQuAD-explorer/

 
5 分钟入门 Google 最强NLP模型:BERT第1张
 

BERT 可以用来干什么?

BERT 可以用于问答系统,情感分析,垃圾邮件过滤,命名实体识别,文档聚类等任务中,作为这些任务的基础设施即语言模型,

BERT 的代码也已经开源:
https://github.com/google-research/bert
我们可以对其进行微调,将它应用于我们的目标任务中,BERT 的微调训练也是快而且简单的。

例如在 NER 问题上,BERT 语言模型已经经过 100 多种语言的预训练,这个是 top 100 语言的列表:
https://github.com/google-research/bert/blob/master/multilingual.md

只要在这 100 种语言中,如果有 NER 数据,就可以很快地训练 NER。


BERT 原理简述

BERT 的创新点在于它将双向 Transformer 用于语言模型,
之前的模型是从左向右输入一个文本序列,或者将 left-to-right 和 right-to-left 的训练结合起来。
实验的结果表明,双向训练的语言模型对语境的理解会比单向的语言模型更深刻,
论文中介绍了一种新技术叫做 Masked LM(MLM),在这个技术出现之前是无法进行双向语言模型训练的。

BERT 利用了 Transformer 的 encoder 部分。
Transformer 是一种注意力机制,可以学习文本中单词之间的上下文关系的。
Transformer 的原型包括两个独立的机制,一个 encoder 负责接收文本作为输入,一个 decoder 负责预测任务的结果。
BERT 的目标是生成语言模型,所以只需要 encoder 机制。

Transformer 的 encoder 是一次性读取整个文本序列,而不是从左到右或从右到左地按顺序读取,
这个特征使得模型能够基于单词的两侧学习,相当于是一个双向的功能。

下图是 Transformer 的 encoder 部分,输入是一个 token 序列,先对其进行 embedding 称为向量,然后输入给神经网络,输出是大小为 H 的向量序列,每个向量对应着具有相同索引的 token。

 
5 分钟入门 Google 最强NLP模型:BERT第2张
 

图片 by Rani Horev

当我们在训练语言模型时,有一个挑战就是要定义一个预测目标,很多模型在一个序列中预测下一个单词,
“The child came home from ___”
双向的方法在这样的任务中是有限制的,为了克服这个问题,BERT 使用两个策略:

1. Masked LM (MLM)

在将单词序列输入给 BERT 之前,每个序列中有 15% 的单词被 [MASK] token 替换。 然后模型尝试基于序列中其他未被 mask 的单词的上下文来预测被掩盖的原单词。

这样就需要:

  1. 在 encoder 的输出上添加一个分类层
  2. 用嵌入矩阵乘以输出向量,将其转换为词汇的维度
  3. 用 softmax 计算词汇表中每个单词的概率

BERT 的损失函数只考虑了 mask 的预测值,忽略了没有掩蔽的字的预测。这样的话,模型要比单向模型收敛得慢,不过结果的情境意识增加了。

 
5 分钟入门 Google 最强NLP模型:BERT第3张
 

图片 by Rani Horev

2. Next Sentence Prediction (NSP)

在 BERT 的训练过程中,模型接收成对的句子作为输入,并且预测其中第二个句子是否在原始文档中也是后续句子。
在训练期间,50% 的输入对在原始文档中是前后关系,另外 50% 中是从语料库中随机组成的,并且是与第一句断开的。

为了帮助模型区分开训练中的两个句子,输入在进入模型之前要按以下方式进行处理:

  1. 在第一个句子的开头插入 [CLS] 标记,在每个句子的末尾插入 [SEP] 标记。
  2. 将表示句子 A 或句子 B 的一个句子 embedding 添加到每个 token 上。
  3. 给每个 token 添加一个位置 embedding,来表示它在序列中的位置。

为了预测第二个句子是否是第一个句子的后续句子,用下面几个步骤来预测:

  1. 整个输入序列输入给 Transformer 模型
  2. 用一个简单的分类层将 [CLS] 标记的输出变换为 2×1 形状的向量
  3. 用 softmax 计算 IsNextSequence 的概率

在训练 BERT 模型时,Masked LM 和 Next Sentence Prediction 是一起训练的,目标就是要最小化两种策略的组合损失函数。

 
5 分钟入门 Google 最强NLP模型:BERT第4张
 

如何使用 BERT?

BERT 可以用于各种NLP任务,只需在核心模型中添加一个层,例如:

  1. 在分类任务中,例如情感分析等,只需要在 Transformer 的输出之上加一个分类层
  2. 在问答任务(例如SQUAD v1.1)中,问答系统需要接收有关文本序列的 question,并且需要在序列中标记 answer。 可以使用 BERT 学习两个标记 answer 开始和结尾的向量来训练Q&A模型。
  3. 在命名实体识别(NER)中,系统需要接收文本序列,标记文本中的各种类型的实体(人员,组织,日期等)。 可以用 BERT 将每个 token 的输出向量送到预测 NER 标签的分类层。

在 fine-tuning 中,大多数超参数可以保持与 BERT 相同,在论文中还给出了需要调整的超参数的具体指导(第3.5节)。

 
5 分钟入门 Google 最强NLP模型:BERT第5张
 

学习资料:
https://arxiv.org/pdf/1810.04805.pdf
https://www.lyrn.ai/2018/11/07/explained-bert-state-of-the-art-language-model-for-nlp/
https://medium.com/syncedreview/best-nlp-model-ever-google-bert-sets-new-standards-in-11-language-tasks-4a2a189bc155


推荐阅读 历史技术博文链接汇总
http://www.jianshu.com/p/28f02bb59fe5
也许可以找到你想要的:
[入门问题][TensorFlow][深度学习][强化学习][神经网络][机器学习][自然语言处理][聊天机器人]



作者:不会停的蜗牛
链接:https://www.jianshu.com/p/d110d0c13063
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

免责声明:文章转载自《5 分钟入门 Google 最强NLP模型:BERT》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 主窗按鈕的權限控制去耦电容与旁路电容下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数字识别,神经网络

来源:https://www.numpy.org.cn/deep/basics/fit_a_line.html 数字识别 本教程源代码目录在book/recognize_digits,初次使用请您参考Book文档使用说明。 #说明: 硬件环境要求: 本文可支持在CPU、GPU下运行 Docker镜像支持的CUDA/cuDNN版本: 如果使用了Docke...

机器学习速成笔记一

定义:机器学习系统通过如何组合输入信息来对从未见过的数据做出有用的预测。 基本术语 标签:标签是我们要预测的事物,即简单线性回归中的(y)变量。 特征:特征是输入变量,即简单线性回归中的(x)变量,特征可以有多个,是一种可量化的指标。 样本:样本是指数据的特定实例(X),样本分为有标签样本和无标签样本。 模型:模型定义了特征与标签之间的关系。 训练:是指...

目标函数、损失函数、代价函数

http://www.cnblogs.com/Belter/p/6653773.html 注:代价函数(有的地方也叫损失函数,Loss Function)在机器学习中的每一种算法中都很重要,因为训练模型的过程就是优化代价函数的过程,代价函数对每个参数的偏导数就是梯度下降中提到的梯度,防止过拟合时添加的正则化项也是加在代价函数后面的。在学习相关算法的过程中,...

建模股票价格数据并进行预测(统计信号模型):随机信号AR模型+YuleWalker方程_Python

1.背景:   针对股票市场中AR 模型的识别、建立和估计问题,利用AR 模型算法对股票价格进行预测。 2.模型选取:   股票的价格可视为随机信号,将此随机信号建模为:一个白噪声通过LTI系统的输出,通过原始数据求解 所建模型参数,得到模型,即可预测近期未来的未知股票价格。   随机信号建模为:白噪声通过滤波器,滤波器的系统函数为:   其中,bq,a...

2019-8-24 中国语言智能会议总结

一句话:   DNN-NLP已经形成了一整套相关技术,包括WordEmbedding、SentenceEmbedding、带注意力机制的编解码器模型、Transformer和各种预训练模型。  预训练模型+针对具体任务的精细调节已成为NLP处理的新范式,使用大规模文本语料库进行预训练,然后使用特定任务的小数据集进行微调。ELMo、BERT、GPT 等模型已...

从时序异常检测(Time series anomaly detection algorithm)算法原理讨论到时序异常检测应用的思考

1. 主要观点总结 0x1:什么场景下应用时序算法有效 历史数据可以被用来预测未来数据,对于一些周期性或者趋势性较强的时间序列领域问题,时序分解和时序预测算法可以发挥较好的作用,例如: 四季与天气的关系模式 以交通量计算的交通高峰期的模式 心跳的模式 股票市场和某些产品的销售周期 数据需要有较强的稳定性,例如”预测商店营业额“和"预测打车订单"的稳定...