如何通俗易懂地让女朋友明白什么是语言模型?
💘背景
上周末和女朋友去风云再起夹娃娃,原本不会玩的我们在好哥们的指点下竟然夹到了一堆。其中一只娃娃是语言模型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》
创作不易,有收获的话请帮忙点击分享、点赞、在看🙏