如何通俗易懂地讓女朋友明白什么是語言模型?

??背景
上周末和女朋友去風云再起夾娃娃,原本不會玩的我們在好哥們的指點下竟然夾到了一堆。其中一只娃娃是語言模型BERT的好兄弟,來自芝麻街的“甜餅怪”。于是飯后回到家,我們有了下面的對話。
??什么是語言模型?
我:親愛的,今天你夾到了一只甜餅怪耶,還記得我之前和你說過的BERT嗎?他們是好兄弟哦,而且甜餅怪也是語言模型Grover的代表。
女友:有點印象,是不是那個小黃人!你們NLPer說的BERT到底是啥呀?
我:BERT是Google發(fā)布的一款預訓練語言模型,中文全稱叫“基于變換器的雙向編碼器....”
女友:可不可以“說人話” - -!

我:哦,對不起!BERT屬于預訓練語言模型的一種,那我先從語言模型開始介紹吧,保證用通俗易懂的語言。
女友:這還差不多。
我:先舉一個最簡單的例子!
假如我剛和你交往沒多久,突然有一天我想對你說三個字,又不好意思直說,于是我把中間的那個字先蓋住,你看到的變成了:“我[mask]你”。
雖然你心中大概率覺得就是那三個字,但也許會猜測有沒有別的可能?
這時BERT出現了,他和你說:“讓我來幫你看看這小子心里在想啥”。
通過統(tǒng)計我和你之前的一些聊天資料,BERT科學分析得出如下結論:中間的字97%的概率是“愛”,2.5%的概率是“想”,0.01%的概率是“恨”。
女友的嘴角微微上揚,“果不出我所料”。
我:當然啦,這只是最簡單的demo。再來一個例子,假如夏天我們去爬山避暑,在半山腰發(fā)現對面山上有一大片竹林。
才華橫溢的女票隨口而出一句五言詩:“一望山多竹”,并含情脈脈地看向了我。
鄙人雖然才疏學淺,好在我的專業(yè)是自然語言處理,又有BERT這一法寶。我悄悄地把這5個字告訴了他,部署在遠程GPU上的BERT瞬間發(fā)回5個字:
“能生夏日寒”。
女友:哎呀,對的不錯呀。BERT咋這么聰明?

我:不僅如此,BERT還可以根據你指定的主題作出完整的古詩或對聯呢!甚至還能編排小說和電影劇情。
當然了,主旨概括、文字翻譯、新聞歸類這些工作對他而言更不在話下。和文字相關的活,BERT幾乎都能干。
女友:天吶,這么厲害。
我:現在我來完整解釋一下。
所謂語言模型,就是通過觀察人類的表達習慣,計算機模型自動統(tǒng)計歸納出一些客觀的文字規(guī)律。經過總結這些規(guī)律,模型一定程度上可以理解人類的語言。
一個優(yōu)秀的語言模型,無法讓你分辨出它到底是人還是機器。
女友:還是沒有很懂,是怎樣的規(guī)律呢?
我:假如我們現在從網絡上收集到了100W個句子,其中有一個句子是:“今晚我想吃香芋西米露”。
語言模型的學習任務就是統(tǒng)計語言序列 “今 / 晚 / 我 / 想 / 吃 / 香 / 芋 / 西 / 米 / 露”的概率,即:
今晚我想吃香芋西米露
簡單的說,語言模型的目的是判斷一個句子是否正常,是不是是人話。例如:
P(今 / 晚 / 我 / 想 / 吃 / 香 / 芋 / 西 / 米 / 露) > P(香 / 芋 / 西 / 米 / 露 / 今 / 晚 / 想 / 吃 / 我)
語言模型認為,后面一句話不是正常的人話,幾乎不會在我們的生活中出現。依此類推,模型會對100W個句子分別計算出現的概率。
女友:哦,好像有點明白了~

我:嗯嗯,這就是最早期的基于統(tǒng)計的語言模型。當然啦,上面的序列計算量有些大,實際中我們往往會對句子先分詞,把“今晚我想吃香芋西米露”切分成“今晚 / 我 / 想 / 吃 / 香芋 / 西米露”。
女友:這不就是我們小學學習的組詞嘛。
我:對!分詞是NLP最基礎的概念之一,看來你已經能初步理解啦。
分詞的好處是我們可以以詞為粒度,統(tǒng)計每個詞彼此先后的順序、分布的規(guī)律,顯著減少計算量。例如“香芋”后跟“西米露”的概率要遠大于“金露”。
女友:明白分詞的含義啦。
我:要計算一個句子中所有詞出現的概率仍然比較困難,所以實際中我們會繼續(xù)優(yōu)化,使用基于n-gram的統(tǒng)計方法,以及隨后出現的神經網絡語言模型。
這些內容涉及了一些專業(yè)知識,下一次我們再來討論。要是感興趣,我可以先給你一些資料哦[1]。
女友:好。
??預訓練語言模型和語言模型又有什么區(qū)別?
女友:為什么你一開始時說BERT是預訓練語言模型呢,他和上面的語言模型難道還不一樣?
我:本質是一樣的,但是實現方法有一些不同。
女友:怎么說?
我:BERT是2018年底開發(fā)出來的語言模型,用到了當時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億文本規(guī)模的書,估計也是半個國學大師了吧
我:哈哈很有可能。

??語言模型有什么用?
女友:你說了這么多,BERT在實際中有什么用?
我:只要和自然語言相關的場景(其實還包括圖片、音頻等),幾乎都有BERT的用武之地。從最常見的新聞分類、相似句判斷到機器閱讀理解、問答系統(tǒng)等等。
女友:你剛說問答系統(tǒng),那是不是可以訓練一個BERT和我聊天?
我:可以,閑聊屬于問答系統(tǒng)的一個重要分支,有很廣泛的應用場景。
女友:我問什么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”
??后記
經過這次交流,女朋友對語言模型有了一定的認知,也開始了解我的專業(yè),并喜歡上了BERT。我決定以后要多以這種輕松的方式和她分享我的知識,并讓她產生興趣。她也經常會有一些很新奇的idea,幫助我拓寬思路。
以上內容并沒有深入講解專業(yè)知識,感興趣的讀者可以搜索相關資料,或參考下文引用。
參 ?考 ?資 ?料
[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》
創(chuàng)作不易,有收獲的話請幫忙點擊分享、點贊、在看??
