点击下面卡片关注我呀,每天给你送来AI技术干货!

来自:NLP情报局

????背景

上周末和女朋友去风云再起夹娃娃,原本不会玩的我们在好哥们的指点下竟然夹到了一堆。其中一只娃娃是语言模型BERT的好兄弟,来自芝麻街的“甜饼怪”。于是饭后回到家,我们有了下面的对话。

????什么是语言模型?

我:亲爱的,今天你夹到了一只甜饼怪耶,还记得我之前和你说过的BERT吗?他们是好兄弟哦,而且甜饼怪也是语言模型Grover的代表。

女友:有点印象,是不是那个小黄人!你们NLPer说的BERT到底是啥呀?

我:BERT是Google发布的一款预训练语言模型,中文全称叫“基于变换器的双向编码器....”

女友:可不可以“说人话” - -!

我:哦,对不起!BERT属于预训练语言模型的一种,那我先从语言模型开始介绍吧,保证用通俗易懂的语言。

女友:这还差不多。

我:先举一个最简单的例子!

假如我刚和你交往没多久,突然有一天我想对你说三个字,又不好意思直说,于是我把中间的那个字先盖住,你看到的变成了:“我[mask]你”

虽然你心中大概率觉得就是那三个字,但也许会猜测有没有别的可能?

这时BERT出现了,他和你说:“让我来帮你看看这小子心里在想啥”。

通过统计我和你之前的一些聊天资料,BERT科学分析得出如下结论:中间的字97%的概率是“爱”,2.5%的概率是“想”,0.01%的概率是“恨”

女友的嘴角微微上扬,“果不出我所料”。

我:当然啦,这只是最简单的demo。再来一个例子,假如夏天我们去爬山避暑,在半山腰发现对面山上有一大片竹林。

才华横溢的女票随口而出一句五言诗:“一望山多竹”,并含情脉脉地看向了我。

鄙人虽然才疏学浅,好在我的专业是自然语言处理,又有BERT这一法宝。我悄悄地把这5个字告诉了他,部署在远程GPU上的BERT瞬间发回5个字:

“能生夏日寒”。

女友:哎呀,对的不错呀。BERT咋这么聪明?

我:不仅如此,BERT还可以根据你指定的主题作出完整的古诗或对联呢!甚至还能编排小说和电影剧情。

当然了,主旨概括、文字翻译、新闻归类这些工作对他而言更不在话下。和文字相关的活,BERT几乎都能干

女友:天呐,这么厉害。

我:现在我来完整解释一下。

所谓语言模型,就是通过观察人类的表达习惯,计算机模型自动统计归纳出一些客观的文字规律。经过总结这些规律,模型一定程度上可以理解人类的语言。

一个优秀的语言模型,无法让你分辨出它到底是人还是机器。

女友:还是没有很懂,是怎样的规律呢?

我:假如我们现在从网络上收集到了100W个句子,其中有一个句子是:“今晚我想吃香芋西米露”。

语言模型的学习任务就是统计语言序列 “今 / 晚 / 我 / 想 / 吃 / 香 / 芋 / 西 / 米 / 露”的概率,即:

今晚我想吃香芋西米露

简单的说,语言模型的目的是判断一个句子是否正常,是不是是人话。例如:

P(今 / 晚 / 我 / 想 / 吃 / 香 / 芋 / 西 / 米 / 露) > P(香 / 芋 / 西 / 米 / 露 / 今 / 晚 / 想 / 吃 / 我)

语言模型认为,后面一句话不是正常的人话,几乎不会在我们的生活中出现。依此类推,模型会对100W个句子分别计算出现的概率。

女友:哦,好像有点明白了~

我:嗯嗯,这就是最早期的基于统计的语言模型。当然啦,上面的序列计算量有些大,实际中我们往往会对句子先分词,把“今晚我想吃香芋西米露”切分成“今晚 / 我 / 想 / 吃 / 香芋 / 西米露”。

女友:这不就是我们小学学习的组词嘛。

我:对!分词是NLP最基础的概念之一,看来你已经能初步理解啦。

分词的好处是我们可以以词为粒度,统计每个词彼此先后的顺序、分布的规律,显著减少计算量。例如“香芋”后跟“西米露”的概率要远大于“金露”。

女友:明白分词的含义啦。

我:要计算一个句子中所有词出现的概率仍然比较困难,所以实际中我们会继续优化,使用基于n-gram的统计方法,以及随后出现的神经网络语言模型。

这些内容涉及了一些专业知识,下一次我们再来讨论。要是感兴趣,我可以先给你一些资料哦[1]。

女友:好。

????预训练语言模型和语言模型又有什么区别?

女友:为什么你一开始时说BERT是预训练语言模型呢,他和上面的语言模型难道还不一样?

我:本质是一样的,但是实现方法有一些不同。

女友:怎么说?

我:BERT是2018年底开发出来的语言模型,用到了当时NLP最前沿的技术。BERT模型有3个核心特点:

(1)基于self-Attention的Transformer架构;(2)采用的MLM预训练任务符合语言模型本质;(3)训练语料庞大,多达33亿文本,见多识广。

女友:不行,又开始懵了。

我:不急哈,我来一个个说明。

关于注意力机制,你只要先了解这是一种非常高效的神经网络。假如现在有一个很长的句子,从头读到尾,很可能句子一开始说的内容我们已经忘了。

但是Attention没有这个烦恼,在它看来句子中任意两个位置的词都是相邻关系。所以我们说Attention有很强的“记忆能力”!

女友:哦,原来是记性好。那MLM呢?

我:MLM(Mask Language Model)其实很好理解。正常的一句话,针对其中的每个字以15%的概率掩盖,再让BERT预测被盖住的字原本是什么。

以苏东坡的诗“欲把西湖比西子,淡妆浓抹总相宜”为例。

经过随机掩盖,原诗可能变成了“欲把西[mask]比西子,淡[mask]浓抹总相宜”。

BERT的主要训练任务就是将文本经过层层Transformer编码后,根据没有被掩盖的上下文还原[mask]位置的字。

女友:那不会出现有很多种可能的表达吗?

我:中文版BERT的词表一共有20,000多个字符,常见的中文字符只有2000-3000个。假如让模型随机猜,猜中的概率最多只有1/2000。

女友:这也太低了吧~

我:模型不会瞎猜啦!他会根据上下文缩小范围。

通过对海量文本的学习,BERT知道和“西”组成的词只有“西瓜、西湖、西红柿、西溪、西北...”等十几种,再结合上下文语境,能快速锁定第一个[mask]对应的字符是“湖”。

即便有多种可能组合,BERT也只会选择概率最大的字符(“湖”在这个语境中的概率可能大于90%)。

女友:所以BERT最终会输出“欲把西[湖]比西子,淡[妆]浓抹总相宜”?

我:就是这样。假如刚开始训练时BERT预测错了,MLM对应的损失函数(CrossEntropy)就会产生一个比较大的值,对模型进行惩罚;下一次预测对了,损失值就变成0。

BERT会往损失值最小的方向学习,也就越学越聪明啦!

女友:好聪明呀。为什么会选择MLM这样一个训练任务呢?

我:MLM任务的灵感来自于人类做完形填空。挖去文章中的某些片段,需要理解上下文来猜测这些被掩盖位置的内容。这样的任务符合咱们前面介绍过的语言模型的本质。

女友:猴。

我:第3点训练语料庞大更好理解。相比前面提及的100W文本,明显33亿语料包含的信息更丰富,BERT几乎能学到每一个词在各种上下文语境中的用法。

正所谓是大力出奇迹。

女友:一个人读了33亿文本规模的书,估计也是半个国学大师了吧

我:哈哈很有可能。

????语言模型有什么用?

女友:你说了这么多,BERT在实际中有什么用?

我:只要和自然语言相关的场景(其实还包括图片、音频等),几乎都有BERT的用武之地。从最常见的新闻分类、相似句判断到机器阅读理解、问答系统等等。

女友:你刚说问答系统,那是不是可以训练一个BERT和我聊天?

我:可以,闲聊属于问答系统的一个重要分支,有很广泛的应用场景。

女友:我问什么BERT都能回答吗?

我:这需要关注2个问题:训练语料和训练任务

BERT本质是一个庞大的语言模型,所以给一段文本让他分类,或者判断是真/假新闻,很符合他的预训练目标。但如果想和他聊天,我们需要提供新的目标让BERT学习。

女友:啥目标?

我:比如我们提供上句S1,让BERT预测下句S2;通过这样的训练方式,他就具备了一定的问答能力。

如果你提供给他的是百度百科语料以及相应的“问题-答案“句子对,他就是一个百科问答型BERT,能帮助你解决一些常见的FAQ。

如果提供的是聊天相关的文本,他就是一个闲聊类型的BERT,能帮你解闷甚至讲笑话逗你开心。

女友:这么神奇!

什么地方可以安装BERT啊?

我:BERT模型可以部署到公众号、小程序、手机应用app、网页甚至嵌入到已有的硬件产品中哦,不限载体。

也许未来BERT会在问答机器人、智能家居中大显身手。

????可以自己训练一个BERT吗?

女友:BERT好好玩,我可以自己训练一个吗?

我:可以的,不过需要先学习一些工具哦,比如Python、基础的NLP知识,看一看BERT的论文...

女友:啊,这么麻烦= =!有没有办法快速上手

我:有。我可以用tf/torch帮你搭好训练框架,告诉我你想和他聊天的主题,任务型 or 闲聊 or FAQ问答?

再帮你爬取一些语料,部署成一键训练!点击“开始训练”,过几小时就会有一个专属你的BERT诞生啦!

女友:好,今晚帮我训练一个!

我:这么积极呀,遵命...

女友:下一次我还要去夹娃娃,争取夹回一个“BERT”

????后记

经过这次交流,女朋友对语言模型有了一定的认知,也开始了解我的专业,并喜欢上了BERT。我决定以后要多以这种轻松的方式和她分享我的知识,并让她产生兴趣。她也经常会有一些很新奇的idea,帮助我拓宽思路。

以上内容并没有深入讲解专业知识,感兴趣的读者可以搜索相关资料,或参考下文引用。

参  考  资  料

[1] 深入理解语言模型:https://zhuanlan.zhihu.com/p/52061158

[2] BERT论文:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

[3] UNILM,BERT做生成式任务:《Unified Language Model Pre-training for Natural Language Understanding and Generation》

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

点击上面卡片,关注我呀,每天推送AI技术干货~

整理不易,还望给个在看!

如何通俗易懂地让女朋友明白什么是语言模型?相关推荐

  1. 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

    今天,用通俗易懂的大白话来彻底搞明白Java里的函数式编程和Lambda表达式 为什么引入函数式编程,lambda表达式? 大家都知道,JDK1.8引入了函数式编程,lambda表达式. 那有没有想过 ...

  2. 史上最通俗易懂! 一文明白Git是干嘛的

    git的最基本作用是版本控制,比如你写一个文档,老板一直让你改,这时笨的人会在原文档上直接改,聪明一点的会复制一下原文档,在副本上修改,这时老板说你的第三版比较好,笨的人煞笔了..,聪明一点的就直接拷 ...

  3. 当BERT遇上搜索引擎

    前两天刷到一篇有意思的paper,文中将信息检索工具Anserini和BERT结合,实现了一个开放域的问答系统. 如图所示,**论文的主要创新点是将BERT和Anserini整合,利用外部知识库(维基 ...

  4. 还弄不明白【委托和事件】么?看这一篇就足够了!!!

    这两个概念长时间不用了,今天看到CAD二次开发中用到了自定义事件,有点迷糊了,索性再整理一下加深印象! 一说到委托和事件,他们总是绑定在一起的不可分割!可能你会说啊!这有什么用啊?尽管你没有在意,但是 ...

  5. php原生好还是tp好_webapp/H5封装,混开APP,没有原生APP好?事实是这样的吗?

    混开APP没有原生APP好?事实是这样的吗?很多人要混淆概念,伊凡今天用通俗易懂的话让大家明白其中奥妙. 一.H5app(也叫H5封装)H5APP你可以理解成我是一个手机网页,以前的手机版网页叫做wa ...

  6. 快速转 TypeScript 指南

    From:https://segmentfault.com/a/1190000040582994 TypeScript 教程:https://www.runoob.com/typescript/ts- ...

  7. 交叉编译docker_端侧推理引擎Tengine初识:安卓平台交叉编译并跑通MobileNetV1

    前阵子看到Tengine为OpenCV4.3版本贡献了ARM CPU底层汇编代码,加速深度学习计算.最近也看到Tengine的不少同学在做相关PR.可能有小伙伴不了解Tengine.根据ARM官网也有 ...

  8. C++ 面向对象与面向过程的区别与联系

    转自:https://blog.csdn.net/jerry11112/article/details/79027834 前言: 如果你很想搞明白面向对象是什么,面向过程是什么,或者说二者之间的区别是 ...

  9. JavaScript最新面试题

    1.解释一下什么是闭包 ? 闭包:就是能够读取外层函数内部变量的函数. 闭包需要满足三个条件: 访问所在作用域: 函数嵌套: 在所在作用域外被调用 . 优点: 可以重复使用变量,并且不会造成变量污染 ...

  10. 电子电路中电容的作用

    目录 1.思维导图 2.电容特性 3.电容用途 参考文献 1.思维导图 2.电容特性 通交流,隔直流,忘记的话,就想想电流的阻抗公式,直流电的频率 f = 0 f=0 f=0 电 容 阻 抗 = − ...

最新文章

  1. 区块链用AI和大数据改变行业现状
  2. 微软sql服务器关闭了会怎样,sql server 服务启动后 自动关闭 求
  3. error C2668
  4. python对excel操作简书_Python实现EXCEL常用操作——pandas简介
  5. 计算机专业人大学排名,计算机专业学校排名哪些大学计算机专业比较好
  6. VNC介绍(第一篇)
  7. jzoj4229-学习神技【逆元,费马小定理】
  8. 支付宝移动端 Hybrid 解决方案探索与实践
  9. 哪种消息队列更好_如何编写更好的错误消息
  10. 控制台怎么查看错误的详细信息_js错误处理,quot;try..catchquot;
  11. js删除服务器上文件,js删除服务器文件
  12. python中的变量的学习
  13. paip.ASP 开发调试大总结
  14. kuangbin RMQ
  15. oracle使用sql循环语句,常用SQL/oracle循环语句
  16. 黑马程序员——一些常用类的代码实践
  17. Android虚拟机多开检测
  18. 一阶锁相环的FPGA实现(基于quartus+matlab)
  19. C++ Qt 05:Qt布局管理器 - 荒 木 - 博客园
  20. 电压的符号代表的是什么意思

热门文章

  1. Maven 梳理 - Maven中的dependencyManagement 意义
  2. ideal使用eclipse快捷键
  3. WDCP控制面板的常用liunx命令集
  4. css3制作旋转动画
  5. iOS Nib文件一览
  6. C# windows身份验证的连接字符串!
  7. 解决 Invalid character found in method name. HTTP method names must be tokens 异常信息
  8. kafka----kafka connect的使用(一)
  9. 关于JavaScript中this的指向,你知晓几分?请速来围观!
  10. input和raw_input的区别