nlp模型-bert从入门到精通(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/HHTNAN/article/details/100732077

在说内容之前先把,bert基本资料准备一下

基础资料准备

tensorflow版:点击传送门 pytorch版(注意这是一个第三方团队实现的):点击传送门 论文:点击传送

从0到1了解模型的优缺点

从现在的大趋势来看,使用某种模型预训练一个语言模型看起来是一种比较靠谱的方法。从之前AI2的 ELMo,到 OpenAI的fine-tune transformer,再到Google的这个BERT,全都是对预训练的语言模型的应用。

BERT这个模型与其它两个不同的是:

  • 1、它在训练双向语言模型时以减小的概率把少量的词替成了Mask或者另一个随机的词。这个目的在于使模型被迫增加对上下文的记忆。至于概率值那就是平感觉来。 **解读:**任务1: Masked LM

从直觉上看,研究团队有理由相信,深度双向模型比left-to-right 模型或left-to-right and right-to-left模型的浅层连接更强大。遗憾的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用将允许每个单词在多层上下文中间接地“see itself”。

为了训练一个深度双向表示(deep bidirectional representation),研究团队采用了一种简单的方法,即随机屏蔽(masking)部分输入token,然后只预测那些被屏蔽的token。论文将这个过程称为“masked LM”(MLM),尽管在文献中它经常被称为Cloze任务(Taylor, 1953)。

在这个例子中,与masked token对应的最终隐藏向量被输入到词汇表上的输出softmax中,就像在标准LM中一样。在团队所有实验中,随机地屏蔽了每个序列中15%的WordPiece token。与去噪的自动编码器(Vincent et al., 2008)相反,只预测masked words而不是重建整个输入。

虽然这确实能让团队获得双向预训练模型,但这种方法有两个缺点。首先,预训练和finetuning之间不匹配,因为在finetuning期间从未看到[MASK]token。为了解决这个问题,团队并不总是用实际的[MASK]token替换被“masked”的词汇。相反,训练数据生成器随机选择15%的token。例如在这个句子“my dog is hairy”中,它选择的token是“hairy”。然后,执行以下过程:

数据生成器将执行以下操作,而不是始终用[MASK]替换所选单词:

80%的时间:用[MASK]标记替换单词,例如,my dog is hairy → my dog is [MASK] 10%的时间:用一个随机的单词替换该单词,例如,my dog is hairy → my dog is apple 10%的时间:保持单词不变,例如,my dog is hairy → my dog is hairy. 这样做的目的是将表示偏向于实际观察到的单词。

Transformer encoder不知道它将被要求预测哪些单词或哪些单词已被随机单词替换,因此它被迫保持每个输入token的分布式上下文表示。此外,因为随机替换只发生在所有token的1.5%(即15%的10%),这似乎不会损害模型的语言理解能力。

使用MLM的第二个缺点是每个batch只预测了15%的token,这表明模型可能需要更多的预训练步骤才能收敛。团队证明MLM的收敛速度略慢于 left-to-right的模型(预测每个token),但MLM模型在实验上获得的提升远远超过增加的训练成本。

  • 2、增加了一个预测下一句的loss。从这一点来看做的比较新颖。 解读: 任务2:下一句预测

许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系,这并没有通过语言建模直接获得。

在为了训练一个理解句子的模型关系,预先训练一个二进制化的下一句测任务,这一任务可以从任何单语语料库中生成。具体地说,当选择句子A和B作为预训练样本时,B有50%的可能是A的下一个句子,也有50%的可能是来自语料库的随机句子。例如:

Input = [CLS] the man went to [MASK] store [SEP]

he bought a gallon [MASK] milk [SEP]

Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP]

penguin [MASK] are flight ##less birds [SEP]

Label = NotNext

团队完全随机地选择了NotNext语句,最终的预训练模型在此任务上实现了97%-98%的准确率。

BERT模型具有以下两个特点:

第一,是这个模型非常的深,12层,并不宽(wide),中间层只有1024,而之前的Transformer模型中间层有2048。这似乎又印证了计算机图像处理的一个观点——深而窄 比 浅而宽 的模型更好。

第二,MLM(Masked Language Model),同时利用左侧和右侧的词语,这个在ELMo上已经出现了,绝对不是原创。其次,对于Mask(遮挡)在语言模型上的应用,已经被Ziang Xie提出了(我很有幸的也参与到了这篇论文中):[1703.02573] Data Noising as Smoothing in Neural Network Language Models。这也是篇巨星云集的论文:Sida Wang,Jiwei Li(香侬科技的创始人兼CEO兼史上发文最多的NLP学者),Andrew Ng,Dan Jurafsky都是Coauthor。但很可惜的是他们没有关注到这篇论文。用这篇论文的方法去做Masking,相信BRET的能力说不定还会有提升。

模型的输入

BERT输入表示。输入嵌入是token embeddings, segmentation embeddings 和position embeddings 的总和

具体如下:

(1)使用WordPiece嵌入(Wu et al., 2016)和30,000个token的词汇表。用##表示分词。 (2)使用学习的positional embeddings,支持的序列长度最多为512个token。 每个序列的第一个token始终是特殊分类嵌入([CLS])。对应于该token的最终隐藏状态(即,Transformer的输出)被用作分类任务的聚合序列表示。对于非分类任务,将忽略此向量。 (3)句子对被打包成一个序列。以两种方式区分句子。首先,用特殊标记([SEP])将它们分开。其次,添加一个learned sentence A嵌入到第一个句子的每个token中,一个sentence B嵌入到第二个句子的每个token中。 (4)对于单个句子输入,只使用 sentence A嵌入。

参考资料:

1.论文解读方面: NLP必读:十分钟读懂谷歌BERT模型 https://zhuanlan.zhihu.com/p/51413773 论文解读:BERT模型及fine-tuning https://zhuanlan.zhihu.com/p/46833276

2.原理方面解读 https://zhuanlan.zhihu.com/p/68295881 https://zhuanlan.zhihu.com/p/49271699 http://www.52nlp.cn/tag/tensorflow-bert

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏vivo互联网技术

如何编写高质量的 JS 函数(3) --函数式编程[理论篇]

《如何编写高质量的 JS 函数(1) -- 敲山震虎篇》介绍了函数的执行机制,此篇将会从函数的命名、注释和鲁棒性方面,阐述如何通过 JavaScript 编写高...

11100
来自专栏相约机器人

GitHub万星NLP资源大升级:实现Pytorch和TF深度互操作,集成32个最新预训练模型

刚刚, 抱抱脸(Hugging Face)团队,放出了transformers 2.0版本。

14240
来自专栏互联网数据官iCDO

2019十大数字化转型趋势 - 上

过去的几年里,我一直致力于展望未来一年以预测一些最重要的数字化转型趋势。我明白数字化转型不仅是技术转变,而是技术、商业和人员交叉的组织变革,像这样的变革必须考虑...

7320
来自专栏算法channel

从概率统计到深度学习,四大技术路线图谱,都在这里!

自然语言处理很多时候都是一门综合性的学问,它远远不止机器学习算法。相比图像或语音,文本的变化更加复杂,例如从预处理来看,NLP 就要求我们根据对数据的理解定制一...

11140
来自专栏AI小白入门

【NLP-NER】使用BERT来做命名实体识别

命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务。NER是信息提取、问答系统、句法分析、机器翻译等众多NLP...

14920
来自专栏AI小白入门

【综述】NLP领域迁移学习现状

在过去一年多的时间里,以预训练模型形式进行的迁移学习已经成为NLP领域的主流,许多任务的基准都因而得到极大地提升。然而事实上迁移学习在NLP中并不是最近才出现的...

9020
来自专栏京程一灯

编码与编程的区别是什么?[每日前端夜话0xCA]

每个工作领域都有它们的术语表——特定的词与日常生活中的含义截然不同。对于不断发展的软件业的专业词汇尤其如此。在软件开发领域,“engagement”与婚礼无关,...

14620
来自专栏数据派THU

知识图谱的关键技术及其智能应用(附PPT)

[ 导读 ]随着自然语言处理等相关技术的发展,知识图谱已经成为工业界开展下一代人工智能应用的重要基础。几周前,北京大学的赵东岩老师,在计算所做了名为《知识图谱的...

16820
来自专栏AI小白入门

初学者|手把手带你学TextBlob

本文介绍了TextBlob的使用方法,这是一个用Python编写的开源的文本处理库。它可以用来执行很多自然语言处理的任务,比如,词性标注,名词性成分提取,情感分...

9930
来自专栏AI小白入门

【综述】近年来NLP在法律领域的相关研究工作

今天总结了下近年来NLP在法律领域的相关研究工作,包括论文、竞赛和一些优秀项目、在线系统。该项目放到了github上了:

9020

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励