近年來,深度學(xué)習(xí)方法極大的推動(dòng)了自然語言處理領(lǐng)域的發(fā)展,。幾乎在所有的 NLP 任務(wù)上我們都能看到深度學(xué)習(xí)技術(shù)的應(yīng)用,,并且在很多的任務(wù)上,深度學(xué)習(xí)方法的表現(xiàn)大大超過了傳統(tǒng)方法,??梢哉f,深度學(xué)習(xí)方法給 NLP 帶來了一場(chǎng)重要的變革,。 我們近期邀請(qǐng)到了微信模式識(shí)別中心的高級(jí)研究員張金超博士,,他畢業(yè)于中國(guó)科學(xué)院計(jì)算技術(shù)研究所,研究方向是自然語言處理,、深度學(xué)習(xí),,以及對(duì)話系統(tǒng)。在本次公開課上,,他全面而具體地講述了深度學(xué)習(xí)在 NLP 中的發(fā)展和應(yīng)用,,內(nèi)容主要分為以下四大篇章: 自然語言處理的基本概念和任務(wù); 深度學(xué)習(xí)方法如何解決 NLP,; 對(duì)話和機(jī)器翻譯當(dāng)中的深度學(xué)習(xí)模型和一些云端應(yīng)用,,以及使用實(shí)例; 對(duì) NLP 感興趣的開發(fā)者提供一些技能進(jìn)階的建議,。 以下為公開課內(nèi)容實(shí)錄,,人工智能頭條整理(有刪改): 一、自然語言處理的基本概念和任務(wù) 1.基本概念 首先講一下自然語言處理的基本概念和任務(wù),,這一塊講解的目的是讓大家對(duì)自然語言處理這個(gè)領(lǐng)域有一個(gè)框圖的認(rèn)識(shí),,要知道自然語言處理的目標(biāo)是什么,任務(wù)是什么,,主要的方法大概有哪些,。
Natural Language Processing,縮寫是 NLP,主要是指我們借助于計(jì)算技術(shù),,來對(duì)人類的自然語言進(jìn)行分析,、理解,還有生成的一個(gè)過程?,F(xiàn)在大家比較常見的兩個(gè)具體應(yīng)用的場(chǎng)景,,一個(gè)就是對(duì)話機(jī)器人(Chatbot),比如 AI 音箱,,大家可以跟它做一些對(duì)話交流,。還有機(jī)器翻譯,大家可能平時(shí)會(huì)用一些提供翻譯功能的網(wǎng)站,,這兩個(gè)是自然語言處理比較經(jīng)典的任務(wù),。 自然語言處理是語言學(xué)和計(jì)算機(jī)科學(xué)的交叉學(xué)科,語言學(xué)方面主要涉及到詞法,、句法、語用,、語義等等,,語言學(xué)家他們會(huì)語言學(xué)理論去研究。計(jì)算機(jī)科學(xué)方面會(huì)涉及到統(tǒng)計(jì)理論,、機(jī)器學(xué)習(xí),、優(yōu)化方法以及數(shù)據(jù)可視化、深度學(xué)習(xí)等,,它們兩個(gè)交叉起來叫做計(jì)算語言學(xué),,即以計(jì)算的方法來處理語言。 關(guān)于自然語言處理任務(wù)的重要性大家可以想一下,,一方面語言是人類長(zhǎng)期進(jìn)化來的能力,,是人類自然的一種交互方式,所以假如機(jī)器能夠非常準(zhǔn)確,、全面地理解我們的語義,,那么人機(jī)交互的方式會(huì)發(fā)生一個(gè)非常革命性的變化。但現(xiàn)在自然語言處理能力還沒有到那種程度,,我們還需要各種輸入,、輸出設(shè)備。另一方面,,人類的知識(shí)大規(guī)模的存儲(chǔ)形式是文本,,包括大量的書籍,可以把它電子化成數(shù)字化的文本,,針對(duì)這些海量的文本做分析處理,,從而得到有價(jià)值的信息,這也需要強(qiáng)大的自然語言處理能力的支撐。 2.自然語言處理任務(wù) 自然語言處理任務(wù)大概有哪些,?我個(gè)人做了一個(gè)總結(jié),,基本可以劃分為五層:詞法分析、句子分析,、語義層面的分析,、信息抽取,頂層任務(wù),。頂層任務(wù)直接面向用戶,,提供如機(jī)器翻譯、對(duì)話機(jī)器人這樣的產(chǎn)品化服務(wù),。 首先是詞法分析層,。第一個(gè)是分詞任務(wù),英文的文本是由空格分隔開的單詞序列,,但中文詞和詞之間沒有清楚的分隔符,。對(duì)于“長(zhǎng)江是中華民族的母親河”這個(gè)句子,我們來做自然語言處理分析,,最小的語義單元就是字,,字的歧義性非常高。如果我們對(duì)它做切分的話,,那么“長(zhǎng)江”,、“中華民族”,還有“母親”,、“河”這種完全可以切出來,,句子的基本語義單元就變成了詞,這就是分詞任務(wù)的目的,。 第二個(gè)任務(wù)是新詞發(fā)現(xiàn),,該任務(wù)希望發(fā)掘文本中的一些新詞,比如說“活久見“,、”十動(dòng)然拒“,、”十動(dòng)然揍”這種網(wǎng)絡(luò)熱詞。第三個(gè)任務(wù)是形態(tài)分析,,形態(tài)分析主要針對(duì)形態(tài)豐富的語言,。給定一個(gè)詞,把里面的詞干,、詞綴,、詞根等拆分出來,然后做一些形態(tài)還原,、形態(tài)切分任務(wù),,給上面的任務(wù)提供一個(gè)更好的輸入,。 第四個(gè)任務(wù)是詞性標(biāo)注。詞有動(dòng)詞,、名詞之類詞性,,詞性標(biāo)注任務(wù)就是把每一個(gè)詞的詞性給標(biāo)出來。另外還有拼寫校正任務(wù),應(yīng)用場(chǎng)景就是我們?cè)谟梦谋揪庉嬈鞯臅r(shí)候,打錯(cuò)了字會(huì)被標(biāo)紅,,編輯器還能提供自動(dòng)糾錯(cuò)的功能,。 第二個(gè)層面的任務(wù)是句子分析(Sentence Analysis),。包括句法分析任務(wù)。句法分析包括淺層的句法分析和深層的句法分析,比如像組塊分析就是給定一個(gè)句子,然后來標(biāo)出里面一些名詞短語或者動(dòng)詞短語的塊,。我們直接來看下面的句法樹,我們?cè)趺磥砜唇M塊呢,?比如前面這個(gè) “My dog” 是 NP,,NP 是指一個(gè)名詞短語,S1,,VP1 是一個(gè)動(dòng)詞短語,,組塊分析的目的不是想把這棵樹分析出來,而是想把這個(gè) NP 和 VP 作為一個(gè) Chunk(組塊) 給標(biāo)注出來,。 第二個(gè)任務(wù)是超級(jí)標(biāo)簽標(biāo)注(Super Tagging),這個(gè)任務(wù)并不想得到最后句法樹的結(jié)構(gòu),,只想得到跟我這個(gè)詞當(dāng)前相關(guān)的樹的結(jié)構(gòu),。比如說我想得到 My 的這個(gè) Super Tagg,從 ROOT 到 My 的這一條樹的路徑是必須保存的,,其他上面的一些終結(jié)符的結(jié)點(diǎn)會(huì)被去掉,。 成分句法分析任務(wù)的目標(biāo)是畫這棵樹,把句子的結(jié)構(gòu)分析出來,。從一個(gè)根的結(jié)點(diǎn)出發(fā),,下面會(huì)有 NP、VP,,最后到一個(gè)終結(jié)符上去,。 依存句法分析任務(wù)是來分析句子里詞和詞之間的依存(修飾)關(guān)系,由這些修飾關(guān)系來構(gòu)成一棵依存的句法樹,。 語言模型任務(wù),,是訓(xùn)練一個(gè)模型來對(duì)語句合理的程度(流暢度)進(jìn)行一個(gè)打分。 語種識(shí)別任務(wù),,是給定一段文本,,識(shí)別出這段文本是用哪一個(gè)語言書寫的,,這可以被用到機(jī)器翻譯任務(wù)中。 第三個(gè)任務(wù)是句子邊界檢測(cè),,我們知道中文句子邊界是非常明顯的,,會(huì)由句號(hào)、嘆號(hào)或者問號(hào)等做分隔,,但是對(duì)一些語言來說,,句子之間是沒有明顯邊界的,所以做句子層面的分析之前,,首先要對(duì)它進(jìn)行句子邊界的檢測(cè),,比如泰語。 再往上就是語義分析(Semantic Analysis)層,。語言學(xué)家想用一些結(jié)構(gòu)化的符號(hào)來表達(dá)語義,,但是現(xiàn)在的深度學(xué)習(xí),大量的語義其實(shí)是分布式的表示,,也就是一系列數(shù)值,,具體哪一種形式會(huì)真正地表達(dá)語義還沒有定論。 語義分析層中,,第一個(gè)任務(wù)是詞義消歧,,一個(gè)詞它可能會(huì)有歧義,該任務(wù)是來確定它準(zhǔn)確的詞義,。 第二個(gè)任務(wù)是語義角色標(biāo)注,,是一種淺層的語義分析。該任務(wù)要標(biāo)出句子里面語義決策動(dòng)作的發(fā)起者,,受到動(dòng)作影響的人等等,。比如 “A 打了 B”,那么 A 就是一個(gè)施事,, B 就是一個(gè)受事,,中間就是一個(gè)打的動(dòng)作。 第三個(gè)任務(wù)是抽象語義表示(Abstract Semantic Parsing),,它是近幾年提出的一種抽象語義的表示形式,,縮寫是 AMR。下面這個(gè)一階謂詞邏輯演算和框架語義分析基本上是語言學(xué)家一直想把語義做一個(gè)符號(hào)化推理系統(tǒng)的表達(dá),。 近期在應(yīng)用里面用的比較多的語義表現(xiàn)形式就是詞匯,、句子、段落的向量化表示,,即Word/Sentence/Paragraph Vector,,包括研究向量化的方法和向量性質(zhì)以及應(yīng)用。 這是 AMR 的一個(gè)例子,,這里面有三個(gè)句子,,三個(gè)句子表達(dá)的語義是一樣的,。“貓想吃魚”這個(gè)語義,,有三個(gè)不同的句子,,但是在 AMR 這個(gè)概念里,對(duì)應(yīng)的是一個(gè)相同的 AMR 圖,。 AMR 分析的時(shí)候,,會(huì)把一些無關(guān)緊要的詞去掉,比如 the 或 to,。 再高一個(gè)層面的任務(wù)就是信息抽?。↖nformation Extraction)。比如我們給定最下面的這一段新聞,,想從里面抽一些關(guān)鍵的信息出來,,即從無結(jié)構(gòu)的文本當(dāng)中抽取出結(jié)構(gòu)化的信息,這是廣義的信息抽取概念,,可以先做命名實(shí)體識(shí)別,,從這一段文字里識(shí)別出人名、地名,、機(jī)構(gòu)名,,因?yàn)檫@些東西相比于其他的連詞等標(biāo)點(diǎn)符號(hào)具有更多的意義。 第二個(gè)任務(wù)是實(shí)體消歧,,該任務(wù)是把句子中出現(xiàn)的名詞準(zhǔn)確關(guān)聯(lián)到現(xiàn)實(shí)當(dāng)中的一個(gè)對(duì)象,。 第三個(gè)任務(wù)是術(shù)語抽取,是從文本當(dāng)中抽取特定的術(shù)語,。 第四個(gè)任務(wù)是共指消解,。句子里面會(huì)出現(xiàn)代詞或者多種名詞表達(dá)同一個(gè)對(duì)象的現(xiàn)象。比如代詞的消解是找出“他,、她、它”中的某一個(gè)到底指代的是哪個(gè)事物,。名詞消解也是同樣的道理,。 關(guān)系抽取任務(wù)是確定文本當(dāng)中兩個(gè)實(shí)體之間的關(guān)系,比如說誰生了誰,,兩個(gè)實(shí)體一個(gè)是生一個(gè)是被生,。 事件抽取任務(wù)是一個(gè)更復(fù)雜的過程,要抽取出時(shí)間,、地點(diǎn),、人物、發(fā)生的事件等等,,這是更結(jié)構(gòu)化的信息抽取,。 這里,,我把情感分析和對(duì)話系統(tǒng)用到的意圖識(shí)別和槽位填充也歸結(jié)到這個(gè)部分里了。舉個(gè)情感分析這個(gè)應(yīng)用場(chǎng)景的例子,,比如我們?nèi)ベ?gòu)物網(wǎng)站買東西,,買完了以后會(huì)給它做評(píng)價(jià),那么用戶的這個(gè)評(píng)價(jià)到底是正面的還是負(fù)面的情緒,?我們需要對(duì)這個(gè)評(píng)價(jià)分析出情感傾向,。 意圖識(shí)別是對(duì)話系統(tǒng)當(dāng)中一個(gè)比較重要的模塊,是要分析用戶跟對(duì)話機(jī)器人說話的時(shí)候這句話的目的是什么,,比如說播放音樂,,那么意圖就是音樂。 槽位填充是和意圖識(shí)別搭配起來使用的,,意圖識(shí)別出來了,,但是意圖要有具體的信息,比如你的意圖是讓機(jī)器人幫你去定明天早上從北京到上海飛的一張機(jī)票,,意圖識(shí)別出來是定機(jī)票,,那么要抽取一些信息的槽位,比如時(shí)間是“明天早上”,,出發(fā)點(diǎn)是“北京”,,目的地是“上海”,,這樣才能配合起來做后面的一些程序性的工作,。 再往上就是頂層任務(wù)了,這些任務(wù)面向用戶提供自然語言處理產(chǎn)品,。一般這些任務(wù)會(huì)用到之前我們說的很多自然語言處理技術(shù),,目的是搭建一個(gè)綜合性的系統(tǒng)。 第一個(gè)就是機(jī)器翻譯任務(wù),,是要實(shí)現(xiàn)文本的自動(dòng)翻譯,。 文本摘要是給定大段的文字,把里面的梗概提取出來,,把它縮短,,使得更方便閱讀或者更方便提取關(guān)鍵的信息。 問答任務(wù)是問系統(tǒng)一個(gè)問題,,它能給你一個(gè)準(zhǔn)確的答案,。比如,你問“周杰倫的母親叫什么名字”,,這個(gè)系統(tǒng)需要反饋給你一個(gè)非常準(zhǔn)確的答案,。 對(duì)話系統(tǒng)就是你和機(jī)器進(jìn)行交互,它給你相應(yīng)的反饋,,執(zhí)行相應(yīng)的指令,。閱讀理解是給定機(jī)器一整篇文章,,然后對(duì)它提一些與文章相關(guān)的問題,它能夠給你答案,,很像我們考英語閱讀理解,。 還有一個(gè)任務(wù)就是自動(dòng)文章分級(jí),給定一篇文章,,對(duì)文章的質(zhì)量進(jìn)行打分或者做一個(gè)分級(jí)的操作,。 3.自然語言處理任務(wù)的難點(diǎn) 自然語言處理任務(wù)為什么難?我個(gè)人認(rèn)為主要在于:歧義問題,、知識(shí)問題,、離散符號(hào)計(jì)算問題,還有語義本質(zhì)的問題,。 先說歧義問題,,有些話的表達(dá)可能會(huì)有歧義或者模棱兩可。我們上面舉了幾個(gè)詞匯層面歧義的例子,,比如上面這三個(gè)句子是詞或者字層面的歧義,,“我們研究所/有東西”,這里的研究所是一個(gè)名詞,,“我們研究/所有東西”,,這里的“研究”就變成一個(gè)動(dòng)詞。再往下就是一詞多義的問題,,第一個(gè)句子是“山上的杜鵑開了”,,第二個(gè)是“樹上有一只杜鵑在叫”,同樣是杜鵑,,前面說的是一種花,,后面是一種鳥,這也會(huì)造成歧義,。 還有詞性兼類問題,,一個(gè)詞在不同的上下文環(huán)境當(dāng)中體現(xiàn)的詞性也會(huì)不同,比如說第一個(gè)句子“向雷鋒同志學(xué)習(xí)”,,這個(gè)學(xué)習(xí)是一個(gè)動(dòng)詞,。第二個(gè)是“他非常勤奮,學(xué)習(xí)很好”,,這個(gè)學(xué)習(xí)是一個(gè)名詞,所以也會(huì)出現(xiàn)這種詞性兼類的歧義,。 再一個(gè)就是結(jié)構(gòu)性的歧義,,分很多種,看一個(gè)比較簡(jiǎn)單的應(yīng)用的例子,,I shot an elephant in my pajamas,,如果我們把后面這個(gè) elephant in my pajamas 看成一個(gè) NP 的話,,這個(gè)是說“我擊中了睡衣里面的一頭大象”,這在語義上是不對(duì)的,。如果 in 后面的這個(gè)介詞短語來修飾這個(gè) an 的話,,它翻譯出來就是“我穿著我的睡衣?lián)糁辛艘活^大象”,,這才是合理的。 第二個(gè)是知識(shí)問題,是指知識(shí)稀疏或者詞匯稀疏,,詞匯稀疏導(dǎo)致了搭配稀疏,然后導(dǎo)致了語義稀疏,,它有一個(gè)遞進(jìn)關(guān)系,。一個(gè)比較出名的定律叫齊夫定律(Zipf Law),,這個(gè)定律是說在自然語言語料當(dāng)中,,一個(gè)單詞出現(xiàn)的頻率和它在頻率表當(dāng)中的排名基本成一個(gè)反比關(guān)系,。例如,,對(duì)英語的 Brown 數(shù)據(jù)集里的語料進(jìn)行統(tǒng)計(jì),,“the,、of,、and”是前三高的詞頻,。 以 Zipf 的角度來看,它認(rèn)為排位和詞頻實(shí)際上是可以用一個(gè)反比關(guān)系來對(duì)它進(jìn)行建模,。那么這個(gè)語料也很好地反應(yīng)了基本上這個(gè)“the”大概在 7 萬左右,,“of”大概在 36000 左右,,那就變成了 c 和 c/2 這么一個(gè)倍數(shù)的關(guān)系,?!癮nd”和“the”構(gòu)成了 c/3,,這是一個(gè) 1/3 的關(guān)系,,這是一個(gè) Zipf 的現(xiàn)象,,這個(gè)現(xiàn)象會(huì)引起詞頻下降非常快,,會(huì)導(dǎo)致一個(gè)長(zhǎng)尾現(xiàn)象,。即有很多詞出現(xiàn)的次數(shù)很少,但是數(shù)量又很大,,當(dāng)它們?nèi)考悠饋淼脑?,又不能把它們忽略掉?/p> 再一個(gè)問題是知識(shí)依賴,這是說對(duì)語言精確的理解和生成,,有很多時(shí)候是需要背景知識(shí)支持的,,比如“蘋果”到底是一個(gè)水果還是一個(gè)手機(jī),就需要有一些知識(shí)來支持,,不能根據(jù)一句話就完全能把它理解掉,。 知識(shí)稀疏的問題,從機(jī)器學(xué)習(xí)的角度來看的話,,相當(dāng)于給了一個(gè)模型非常不均勻的數(shù)據(jù)分布,,那對(duì)模型來說它的學(xué)習(xí)難度就會(huì)變大,。 第三個(gè)是離散符號(hào)計(jì)算的問題。我們看到的文本其實(shí)都是一些符號(hào),,對(duì)計(jì)算機(jī)來說,,它看的其實(shí)也是一些離散的符號(hào),但我們知道計(jì)算機(jī)其實(shí)最擅長(zhǎng)的是數(shù)值型的運(yùn)算,,而不是符號(hào)的推理,,并且符號(hào)之間的邏輯推理會(huì)非常復(fù)雜。現(xiàn)在在統(tǒng)計(jì)機(jī)器學(xué)習(xí)模型里面做的是用 one-hot,,就是用一個(gè)非常稀疏的向量來表示這個(gè)詞的形式,,把它作為特征輸?shù)胶竺娴哪P屠锶ィ@面臨一個(gè)高維的問題,。另一個(gè)是符號(hào)和符號(hào)之間都是正交的,,那么就很難建立起符號(hào)之間的相關(guān)關(guān)系,這是深度學(xué)習(xí)方法能夠部分解決一下這個(gè)問題,。 第四個(gè)就是語義問題,,到底什么是語義?什么是語義,?語言里面到底是什么東西,?符號(hào)背后真正的語義怎么來表示?語言學(xué)家他走的路子就是我構(gòu)建好多形式化的,、結(jié)構(gòu)化的圖之類的,,這種結(jié)構(gòu)去做語義或者是一些符號(hào)推導(dǎo)系統(tǒng),認(rèn)為它可以接近語義本質(zhì),。但是,,這些其實(shí)走得越遠(yuǎn)離計(jì)算機(jī)就越遠(yuǎn),因?yàn)樗椒?hào),,語義的可解釋性就會(huì)很差,。拿數(shù)字來表示語義,我們也不知道這個(gè)數(shù)字到底是什么東西,。所以目前為止現(xiàn)在研究領(lǐng)域?qū)@個(gè)問題解決得比較差,。 假如語義問題真的解決了,那所有的自然語言處理任務(wù)都不是問題,,但目前來說,,我們現(xiàn)階段做的事情實(shí)際上僅僅是需要在做每一個(gè)子問題的時(shí)候,把這個(gè)子問題用各種各樣的方法把它做好就行了,,語義真的是比較難解決的問題,。 目前來說幾乎所有的自然語言處理方法都是基于數(shù)據(jù)驅(qū)動(dòng),也就是統(tǒng)計(jì)機(jī)器學(xué)習(xí)的模型,,那么數(shù)據(jù)質(zhì)量加上模型的能力就決定了最后的任務(wù)表現(xiàn),,而并非機(jī)器真的能全面理解人類語言當(dāng)中的語義,,比如市面上的對(duì)話機(jī)器人很大的程度上要?dú)w于數(shù)據(jù)或者一些規(guī)則,而不是機(jī)器真的能像人類一樣地去思考,、推理,,然后給你一個(gè)非常人格化的回復(fù),現(xiàn)階段人工智能還沒有達(dá)到那種要求,。 4.小結(jié) 我們大概講了自然語言處理任務(wù)的基本概念,,還有一些目前自然語言處理主要在解決的任務(wù)。一般來說一個(gè)做 NLP 的人,,他可能以他的能力做到里面的一個(gè)或者幾個(gè)任務(wù),。自然語言處理是一個(gè)交叉學(xué)科,它會(huì)使用語言學(xué)的理論,,但是不會(huì)說去研究語言學(xué),,也會(huì)去用一些統(tǒng)計(jì)機(jī)器學(xué)習(xí)或者算法模型方面的東西,但目的又不是去徹底研究透算法層面的東西,,而是說只是追求可用。當(dāng)然現(xiàn)在的趨勢(shì)是很多做自然語言處理的人都在深入地研究算法模型,,但歸根到底我們想解決自然語言處理的問題其實(shí)是怎么對(duì)這個(gè)問題進(jìn)行建模然后解決好,。 二、深度學(xué)習(xí)方法解決NLP任務(wù) 1.自然語言處理方法的演化 下面講一下深度學(xué)習(xí)方法和之前的方法,,還有一些深度學(xué)習(xí)方法解決基本任務(wù)的介紹,。 自然語言處理方法的演化大概可以這么來劃分,一個(gè)是叫理性主義,,一個(gè)叫經(jīng)驗(yàn)主義,。 ? 理性主義很好理解,就是寫規(guī)則,,來處理這個(gè)問題,。經(jīng)驗(yàn)主義就是加數(shù)據(jù),加算法模型的方式來解決問題,。理性主義基本上是語言學(xué)家來主導(dǎo),,就是研究語言,寫語言學(xué)的知識(shí),,然后用這些語言學(xué)知識(shí)的規(guī)則來處理自然語言處理的任務(wù),。 這個(gè)方法的好處就是可解釋性特別好,它明確知道這個(gè)輸出的結(jié)果是由哪條規(guī)則產(chǎn)生的作用,,但問題是規(guī)則越寫越多的時(shí)候,,很容易前后起沖突,寫規(guī)則的成本也非常高,,其實(shí)對(duì)自然語言處理的理解,,處理方法的演化方面會(huì)比較慢,。 經(jīng)驗(yàn)主義方法就是所有的知識(shí)都在數(shù)據(jù)里面,從數(shù)據(jù)里面學(xué)東西,,不關(guān)心里面的語法規(guī)則是什么,,這個(gè)研究階段就由計(jì)算機(jī)科學(xué)家主導(dǎo),主要的方法就是基于數(shù)據(jù)驅(qū)動(dòng)的機(jī)器學(xué)習(xí)模型加少量的語言學(xué)知識(shí),。 經(jīng)驗(yàn)主義里我們給它又劃分成了兩個(gè)階段,,一個(gè)是統(tǒng)計(jì)機(jī)器學(xué)習(xí)方法的階段,它的一個(gè)特點(diǎn)是基于符號(hào)特征的計(jì)算,,就是抽一些符號(hào)化的特征,,然后交給機(jī)器學(xué)習(xí)模型來做。第二個(gè)特點(diǎn)是它一般是用傳統(tǒng)的針對(duì)非 DL 的一些方法,,比如 LR,、SVM 之類。 到了近幾年,,NLP 主要是用深度學(xué)習(xí)方法,,它的第一個(gè)特點(diǎn)就是分布式表示特征,也就是拿一串?dāng)?shù)字來表示一些語義作為特征,,交到后面的分類器來做,。第二個(gè)特點(diǎn)是以各種神經(jīng)網(wǎng)絡(luò)為核心模型,而不再是以前的這種 SVM 等其他的分類器之類的東西,,這是深度學(xué)習(xí)方法兩大比較突出的特征,。 我們來看理性主義模型下自然語言處理的一個(gè)視角,這是研究機(jī)器翻譯的一位德國(guó)教授提出的機(jī)器翻譯金字塔模型,,當(dāng)然后面到統(tǒng)計(jì)的時(shí)代大家也借用這個(gè)模型來表達(dá)機(jī)器翻譯的過程,。 從這個(gè)視角看語言,要先做形態(tài)分析,,然后再做句法分析,、語義分析,再往上是中間語言最高的形式,,然后往右邊去轉(zhuǎn)換,,這是一個(gè)機(jī)器翻譯的過程。給一個(gè)源語言的句子,,轉(zhuǎn)換成目標(biāo)語言的句子,,那么它認(rèn)為從上到下是一個(gè)遞進(jìn)的,從左到右是一個(gè)層層轉(zhuǎn)化的過程,,所以它在處理某一任務(wù)的時(shí)候也是基于語言學(xué)結(jié)構(gòu)來處理,,這是理性主義模型下一個(gè)非常經(jīng)典的看法。 到經(jīng)驗(yàn)主義模型基本上是這樣的,,其實(shí)就是一個(gè)機(jī)器學(xué)習(xí)的過程,,就是先構(gòu)建語料,,做標(biāo)注,再設(shè)計(jì)特征,,做特征提取,,然后交給機(jī)器學(xué)習(xí)算法,訓(xùn)練好模型做輸出,。我們說前面的階段一個(gè)核心問題是語言學(xué)知識(shí)表達(dá)的問題,,后面經(jīng)驗(yàn)主義模型下一個(gè)核心的問題實(shí)際上是對(duì)這個(gè)任務(wù)的建模和機(jī)器學(xué)習(xí)算法的求解。 2.自然語言處理常用的問題模型 首先我們?cè)谶@里區(qū)分兩個(gè)古董概念,,一個(gè)叫問題模型,,一個(gè)叫算法模型。問題模型就是把這個(gè)任務(wù)怎么把它形式化出來,,是一個(gè)建模的過程,。算法模型是說怎么來拿某個(gè)算法去解決這個(gè)問題建模的形式,就是給你一個(gè)事情,,你把它分解開來,,然后看看它到底能套哪個(gè)模型,后面就是對(duì)這個(gè)模型的求解問題,。 NLP 當(dāng)中常用的問題模型包括分類模型,、序列標(biāo)注模型和序列生成模型。 分類模型是一個(gè)比較狹義的分類概念,。實(shí)際上序列標(biāo)注模型和序列生成模型也可以理解成一個(gè)廣義分類的問題,。分類是指像文本分類或者給句子做情感分析之類的狹義模型,。 第一個(gè)分類問題就是給你一段文本做類別的標(biāo)注,,比如你對(duì)它進(jìn)行文本分類,給你一個(gè)新聞,,它到底是一個(gè)政治,、體育、財(cái)經(jīng)或者其他類別的新聞,。意圖識(shí)別,,就是前面說到的和一個(gè)對(duì)話機(jī)器人聊天的時(shí)候你給它一句話,然后這個(gè)機(jī)器人它能識(shí)別出來你的意圖是要干嘛,。情感分類的話就是前面說的你買的東西,,你對(duì)它做一個(gè)評(píng)價(jià),這是正向的還是負(fù)向的,,實(shí)際上都可以抽象成問題模型里面的一個(gè)分類模型,。 分類模型傳統(tǒng)的一個(gè)解決方法就是標(biāo)帶標(biāo)注的語料,再特征提取,,然后訓(xùn)分類器進(jìn)行分類,。這個(gè)分類器就會(huì)用邏輯回歸,、貝葉斯、支持向量機(jī),、決策樹等等,。 第二個(gè)是序列標(biāo)注模型。序列標(biāo)注我們拿分詞這個(gè)事情來做一個(gè)比較好的舉例,,實(shí)際上數(shù)學(xué)建模是這樣,,你有 N 個(gè) X,它構(gòu)成一個(gè)序列,,你可以認(rèn)為它是 N 個(gè)字,,這個(gè)句子里面有 N 個(gè)字,給每個(gè)字加上一個(gè)標(biāo)簽,,它生成 N 個(gè)序列的標(biāo)簽,,那么分詞這個(gè)問題就抽象成字的序列標(biāo)注的模型。 ? 比如說“長(zhǎng)江”它應(yīng)該是構(gòu)成一個(gè)詞的,,那么就給它分成分類的侯選標(biāo)簽,,就是 begin、middle,、end 或者 single,。“長(zhǎng)江”應(yīng)該在 begin 的位置,,“江”應(yīng)該在 end 的位置,,如果它標(biāo)成 b 了,它標(biāo)成 e 了,,很明顯是它們兩個(gè)字要構(gòu)成一個(gè)詞了,。假如這個(gè)模型是標(biāo)注成了 s,那就是 single,,它就是自己一個(gè)詞,。“中華民族”這個(gè)就是 begin,,middle,,middle,end,,那這四個(gè)合起來就是“中華民族”這一個(gè)詞,。 那么整個(gè)分詞的過程,就是從上面這一行藍(lán)色到下面這個(gè)詞的藍(lán)色,,那就是一個(gè)序列標(biāo)注,,你只要對(duì)每個(gè)字分類分正確了,那分詞的結(jié)果就是對(duì)的。 這是一個(gè)序列標(biāo)注的模型,,分詞是一個(gè)非常經(jīng)典的任務(wù),。詞性標(biāo)注、命名實(shí)體識(shí)別,,甚至現(xiàn)在大家做句法分析或者語義角色標(biāo)注,,也開始使用序列標(biāo)注模型來做了。傳統(tǒng)做序列標(biāo)注模型的一些方法,,包括隱馬爾科夫,、最大熵、條件隨機(jī)場(chǎng),、平均感知機(jī)等等,,是用來求解序列標(biāo)注的問題的。這兩個(gè)層面上的模型我們要分開,。 第三個(gè)是序列生成模型,。所謂的序列生成模型就是如何生成一段文本,逐詞地來生成,,使得生成的這個(gè)文本是合理的,。怎么來評(píng)價(jià)它的合理性?如果是單語生成的話,,那么可以使用語言模型,,保證流暢度、合理性越高越好,。 ? 如果是一個(gè)雙語生成的任務(wù),,像機(jī)器翻譯任務(wù),你就要約束它跟原來的語義接近的情況下,,生成的序列更合理,。在深度學(xué)習(xí)方法出來之前,其實(shí)沒有太好的方法來建模序列生成問題,,一個(gè)就是這個(gè)語言模型來做單語生成,,再一個(gè)就是用統(tǒng)計(jì)機(jī)器翻譯模型來做雙語生成,。生成的過程當(dāng)中要用一個(gè)束解碼的方式來約束搜索空間,。 3.統(tǒng)計(jì)機(jī)器學(xué)習(xí)算法模型的不足 我們前面講的是一些統(tǒng)計(jì)的學(xué)習(xí)算法,比如 SVM,、LR 之類,,這些算法有什么不足呢?一個(gè)就是前面需要設(shè)計(jì)一些復(fù)雜的特征,,這些特征是要人工地去設(shè)一個(gè)特征模板,,用這些特征模板去匹配句子里面的一些特征,把它抽出來,作為一個(gè)離散化的特征來輸入到模型里面去,,這一塊是非常復(fù)雜的,。 第二個(gè)是這個(gè)算法模型對(duì)序列建模的能力很差,這個(gè)特征在詞方面都是非常稀疏的,,在對(duì)句子抽特征的時(shí)候就更稀疏了,。比如整個(gè)語料當(dāng)中有 1 萬個(gè)不同的詞,那么這個(gè)句子里非常有可能出現(xiàn)了一個(gè)詞會(huì)只在幾個(gè)句子里出現(xiàn)過,,所以它的特征會(huì)非常稀疏,。第三個(gè)就是前面抽特征是一步,訓(xùn)練模型是一步,,這個(gè)其實(shí)中間會(huì)有錯(cuò)誤的誤差,,甚至有一些復(fù)雜的任務(wù),它要去進(jìn)行多步的操作,,這會(huì)產(chǎn)生一個(gè)非常嚴(yán)重的錯(cuò)誤傳播問題,。后面我們也會(huì)用具體的模型來解釋這個(gè)錯(cuò)誤傳播的問題。 我們看一下深度學(xué)習(xí),,它可以來解決前面說的分類問題,、序列標(biāo)注問題,、序列生成問題用到的一些基本組件,,現(xiàn)在主要應(yīng)用到的比如前向神經(jīng)網(wǎng)絡(luò),就是一個(gè)最簡(jiǎn)單的全鏈接網(wǎng)絡(luò),。循環(huán)神經(jīng)網(wǎng)絡(luò),,包括純的 RNN,加門控的 RNN,,還有 LSTM,。還有就是卷積神經(jīng)網(wǎng)絡(luò),這個(gè)在圖象方面用的比較多,,NLP 里面也會(huì)用,。再一個(gè)就是注意力機(jī)制,這些是一些深度學(xué)習(xí)的基本組件,,大家有興趣的可以自己去看公式,,了解一些基本的模型。 為什么說深度學(xué)習(xí)方法比前面我們說的統(tǒng)計(jì)機(jī)器學(xué)習(xí)的模型要強(qiáng)大,?我們現(xiàn)在來逐條分析,。 4.強(qiáng)大的深度學(xué)習(xí)方法—分布式表示 一個(gè)是分布式表示(Distributed Representation),或者更具體一點(diǎn)叫 Word Embedding/Word Representation 之類的,。是拿這個(gè)數(shù)值來表示這個(gè)特征,,而不再是之前的離散特征,,這是一個(gè)比較經(jīng)典的任務(wù),也就是 Bengio 提出的神經(jīng)網(wǎng)絡(luò)語言模型,,他把這個(gè)詞通過一個(gè)矩陣,,通過查表的方式式得到一個(gè) Word Embedding,然后交到后面去訓(xùn)練這個(gè)神經(jīng)網(wǎng)絡(luò)的語言模型?,F(xiàn)在 NLP 所有的任務(wù)基本都基于 Word Embedding,。 Word Embedding 這一步怎么來做?假如有 V 個(gè)詞,,一個(gè)詞就是 W1,、W2 一直到 Wv,構(gòu)建一個(gè)矩陣,,每一個(gè)詞可向量的維度是 M 維,,那么這個(gè) W1 過來了以后,查表會(huì)查到 W1 對(duì)應(yīng)這一類的詞向量作為它的一個(gè)表示,,這個(gè)表叫 Lookup Table,,這就把詞的符號(hào)轉(zhuǎn)換成一個(gè)向量形式的過程。 最右邊這個(gè)就是它的詞向量,,這個(gè)詞向量是在整個(gè)模型的訓(xùn)練中,,可以通過 SGD 下降的方式給它回傳做調(diào)整,也就是說我們最終得到的詞向量是非常適合于這個(gè)任務(wù)的詞向量,,也是得到了這個(gè)任務(wù)的目標(biāo)函數(shù)下這個(gè)詞非常好的一個(gè)表達(dá)形式,。符號(hào)向量化的第一個(gè)好處就是克服維度爆炸的問題,One-hot 會(huì)到一個(gè)非常高的維度,,但是詞向量最小可以把它設(shè)成 20,、50 之類的就解決掉了。再一個(gè)就是說它可以直接進(jìn)行數(shù)值運(yùn)算,,因?yàn)樗褪窍蛄?,向量就是?shù)值,然后就交到后面做很大的矩陣運(yùn)算,,這完全沒有問題,。再一個(gè)就是 SGD 自動(dòng)特征學(xué)習(xí),這個(gè)前面我們說到了,,就是 SGD 怎么去調(diào) Word Embedding,。 5.強(qiáng)大的深度學(xué)習(xí)方法—序列建模方法 深度學(xué)習(xí)方法強(qiáng)大的第二個(gè)優(yōu)點(diǎn),就是序列建模,。前面說序列建模很難,,在前面的一些特征設(shè)計(jì)方法里面,,在深度學(xué)習(xí)里面,,序列建模的方法就變得非常簡(jiǎn)單了,就是以詞匯層面的分布式表示為基礎(chǔ),然后對(duì)詞之間的交互進(jìn)行計(jì)算,,生成整個(gè)句子的一個(gè)分布式表示,。整個(gè)過程都是在做計(jì)算,而不是在做特征模板的設(shè)計(jì),。 這個(gè)圖是一個(gè)比較具體的基于雙向 RNN 的一個(gè)序列建模模型,,我們看到會(huì)有兩層 RNN 層,第一層是從左向右地對(duì)詞向量進(jìn)行壓縮表示,,第二層是從右向左做壓縮表示,,然后兩層的表示連接起來,作為最終整個(gè)句子的表示,,用 N 個(gè)詞,,后面生成的分布式表示就可以是 N 個(gè)向量,每個(gè)向量可以認(rèn)為是它對(duì)應(yīng)的下面這個(gè)詞的一個(gè)上下文環(huán)境的語義表示,,作為整個(gè)句子的特征,。也可以用最后面一個(gè),就用 Hn 可以表示一個(gè)句子的特征,,也可以把這些東西作為一個(gè)句子特征的表示,。也就是說這個(gè)地方用神經(jīng)網(wǎng)絡(luò)的方式直接基于詞做計(jì)算得到句子的特征表示,就繞過了特征模板,,非常方便,。 這是基于 CNN 的序列建模的一個(gè)方法,CNN 就是一個(gè)窗口,,把一個(gè)詞通過不同的權(quán)重做加和,,然后形成一個(gè)表示。第二層也是一個(gè)窗口,,這樣一層層上去以后,,越上面的一些 CNN 的結(jié)點(diǎn)它覆蓋的詞的范圍就越大。實(shí)際上到最上面這一層綠色的表示,,也可以認(rèn)為跟前面那個(gè)模型一樣,,就是作為整個(gè)句子的一個(gè)特征表示,然后結(jié)合后面的任務(wù)就好了,。 最近的工作有基于 Self-Attention 的這種序列建模方式,,在 W1 生成 H1 的過程中它需要參考所有句子里面的詞,然后計(jì)算和所有詞的一個(gè)相關(guān)程度,,決定其他所有詞在最終形成它的表示的過程中所占的權(quán)重比例,。這個(gè)話有點(diǎn)繞,像前面的這些模型,,W1 生成 H1 的時(shí)候,,它可能只是一個(gè)局部窗口,,只考慮一個(gè)局部范圍跟它交互的一些詞的范圍,在 Self-Attention 里面,,它要考慮跟它所有詞的關(guān)系,,然后來構(gòu)成最終的一個(gè)表示。 6.強(qiáng)大的深度學(xué)習(xí)方法—參數(shù)統(tǒng)一優(yōu)化 第三個(gè)深度學(xué)習(xí)方法強(qiáng)大的一個(gè)優(yōu)點(diǎn)就是參數(shù)統(tǒng)一優(yōu)化的問題,。之前我們說前面設(shè)計(jì)特征模板,,后面交一個(gè)分類器,更嚴(yán)重的就是搭一個(gè)系統(tǒng)的時(shí)候需要做很多步的模型搭建,,比如傳統(tǒng)的統(tǒng)計(jì)機(jī)器翻譯里面有一個(gè)短語模型的搭建流程,,我有語料,先要做詞對(duì)齊,,然后在詞對(duì)齊的結(jié)果上抽短語,,抽完短語以后做短語特征方面的抽取。 在短語這個(gè)層面還要學(xué)一個(gè)調(diào)序模型,,在語料這個(gè)層面上其實(shí)還需要學(xué)一個(gè)語言模型,,這些模型最后加一塊來融合,達(dá)到最后的模型,,但實(shí)際上中間這些模型訓(xùn)練的時(shí)候都是非常獨(dú)立的,,有一些遞進(jìn)的關(guān)系,然后就會(huì)出現(xiàn)一個(gè)錯(cuò)誤傳播的問題,,這些所有的參數(shù)并不是統(tǒng)計(jì)到一個(gè)優(yōu)化目標(biāo)函數(shù)下去訓(xùn)練的,。但深度學(xué)習(xí)方法里,尤其 End-to-End 這個(gè)模型,,就是能把所有的參數(shù)統(tǒng)一到一個(gè)優(yōu)化目標(biāo)函數(shù)下去緩解這種傳統(tǒng)的系統(tǒng)搭建方法的一個(gè)錯(cuò)誤傳播的問題,。這是一個(gè)基于統(tǒng)計(jì)的短語機(jī)器翻譯系統(tǒng)的一個(gè)搭建流程。 我們看一下基于神經(jīng)網(wǎng)絡(luò)的機(jī)器翻譯模型搭建的過程,。下面有平行語料,,就交到這個(gè)模型里面去訓(xùn)練,模型會(huì)有一個(gè)優(yōu)化函數(shù),,最后能得到這個(gè)模型,,整個(gè)模型來建模平行語料里的翻譯知識(shí)。具體怎么來做,,后面我們會(huì)有更加詳細(xì)的介紹,。這里想表達(dá)的是深度學(xué)習(xí)方法,可以把所有的參數(shù)做統(tǒng)一優(yōu)化,。 我們來看一下前面提到自然語言處理中提到了三個(gè)問題模型,,一個(gè)叫分類,一個(gè)叫序列標(biāo)注,,另一個(gè)叫序列生成,。在傳統(tǒng)的方法下我們看過了它們是怎么來做的,。比如,前面做特征模板設(shè)計(jì),,后面接分類器,,像決策樹,、SVM,、LR 之類的分類器來做。那到了神經(jīng)網(wǎng)絡(luò)或者說深度學(xué)習(xí)時(shí)代,,這個(gè)事情怎么解決,?其實(shí)底層還是基于特征抽取的一個(gè)過程。 看這個(gè)圖,,大家應(yīng)該看到除了上面橙黃色的這個(gè)點(diǎn),,就是前面我們說的一個(gè)特征抽取的過程,一個(gè)雙向 RNN 來抽取一定特征的過程,。對(duì)這個(gè)句子特征抽取完了以后,,接一個(gè)橙黃色的分類器,后面輸一個(gè) Softmax,,然后輸出哪個(gè)類別的概率,,那就是用這種方法來建模一個(gè)分類的問題。 比如情感分析問題,,或者說一個(gè)文本分類問題,,你就把句子交到這個(gè)神經(jīng)網(wǎng)絡(luò)去,然后神經(jīng)網(wǎng)絡(luò)把特征抽完了,,后面接一個(gè)分類的過程,,整個(gè)的優(yōu)化都是基于上面這個(gè)分類的準(zhǔn)確程度來做梯度回傳,回傳到每一條連接權(quán)重,,還有詞向量上面去,,所以整個(gè)系統(tǒng)它是一個(gè)模型,所有的參數(shù)同時(shí)在做優(yōu)化,,不存在特征模板的問題,,所以能夠很好地解決分類問題。 這是一個(gè)序列標(biāo)注的問題,,就是前面說到分詞的問題,,給每一個(gè)字加一個(gè)合適的類標(biāo)。其實(shí)下面還是一樣,,抽特征,,抽出 N 個(gè)字的表示出來,就是這些字的特征,,后面每個(gè)接 Softmax 的分類器,,然后做一個(gè)路徑最優(yōu)的尋優(yōu)操作做一個(gè)推理,,找到一條最優(yōu)的序列路徑出來。這是一個(gè)深度學(xué)習(xí)方法解決序列標(biāo)注問題,。 那怎么來做序列生成的問題,?就是 Encoder、Decoder,,這是一個(gè)非常經(jīng)典的模型,。Encoder 就是把原先的句子做表示, Decoder 是根據(jù)這個(gè)表示來做生成,。Encoder 也可以用 CNN,、RNN、Self-Attention,,Decoder 也可以分別用這三種,。這個(gè)模型反映的是一個(gè)翻譯的過程,翻譯的過程是計(jì)算機(jī)可以處理自然語言,,我們希望計(jì)算機(jī)能生成這個(gè)結(jié)果,,也就是一個(gè)序列到另一個(gè)序列的映射,但是這兩個(gè)序列之間可能會(huì)存在著不同的長(zhǎng)度,。這是目前大家來做機(jī)器翻譯問題或者對(duì)話聊天里的閑聊通用的一個(gè)模型,。 7.深度學(xué)習(xí)方法的缺點(diǎn) 我們說說深度學(xué)習(xí)方法的缺點(diǎn)。一個(gè)缺點(diǎn)是模型的可解釋性低,,首先它是一個(gè)數(shù)值的運(yùn)算,,你很難解釋它每一步的數(shù)值代表了什么。整個(gè)過程在算,,你很難去展現(xiàn)它中間語言學(xué)的一些推理過程,,效果會(huì)很好,但是不好解釋,,有人把它叫做黑盒,。 再一個(gè)就是因?yàn)樗际腔跀?shù)值的,所以就比較難去融入一些鮮艷符號(hào)的規(guī)則進(jìn)來,,這個(gè)語言學(xué)的知識(shí)或者人類的一些運(yùn)行約束,,很難去融入進(jìn)來。再一個(gè)就是這個(gè)模型需要的計(jì)算量比較大,,有很大權(quán)重矩陣的運(yùn)算,,矩陣乘法,或者做 Softmax 之類的這種計(jì)算,,所以需要計(jì)算的還是比較重的,,尤其是訓(xùn)練大模型的時(shí)候,一般現(xiàn)在是用多顯卡,最起碼是多卡,,或者是多機(jī)來訓(xùn)一個(gè)比較大的模型,。 這個(gè)模型的表現(xiàn)除了依賴于本身的結(jié)構(gòu),它還依賴于比較多的訓(xùn)練技巧,,所謂的訓(xùn)練技巧就是指中間某些參數(shù)的初始化方法,,網(wǎng)絡(luò)的超參設(shè)計(jì),還要加一些其他東西,,比如本身就給你一個(gè) RNN,,它其實(shí)可能表現(xiàn)不好,但加上很多訓(xùn)練的方法進(jìn)去,,這個(gè)模型表現(xiàn)才會(huì)好起來,。 所以有很多人說這是一個(gè)煉丹的過程,,但是這個(gè)煉丹的過程到目前大家研究的也越來越透徹了,,有很多分析的論文已經(jīng)出來了,所以我們也希望這個(gè)模型可解釋性更好一點(diǎn),,這些訓(xùn)練的技巧方法能夠在數(shù)學(xué)上找到更好的理論,,然后拿實(shí)驗(yàn)去驗(yàn)證它,而不是說我們就真的是像煉丹師一樣去煉一個(gè)模型出來,,這不是科學(xué),。 這章主要的內(nèi)容就是介紹了自然語言處理里面常用的一些問題模型和算法模型,對(duì)比了統(tǒng)計(jì)機(jī)器學(xué)習(xí)方法和深度學(xué)習(xí)方法,,然后分析了它們的優(yōu)劣之處,。 三、對(duì)話和機(jī)器翻譯中的深度學(xué)習(xí)模型和云端應(yīng)用 1.機(jī)器翻譯和對(duì)話系統(tǒng)中的序列到序列模型 前面我們說到了對(duì)話機(jī)器人和機(jī)器翻譯,,這兩個(gè)問題其實(shí)差不多,,對(duì)話機(jī)器人是一個(gè)單語的聊天,你說中文它給你回復(fù)一個(gè)中文,。機(jī)器翻譯的過程其實(shí)是從一個(gè)語言到另外一個(gè)語言,,它說“很高興認(rèn)識(shí)你”,翻譯出來“Nice to meet you”,,但兩個(gè)問題實(shí)際上都是序列到序列的問題,。那么機(jī)器翻譯模型和對(duì)話系統(tǒng)里面的閑聊,它可以用一個(gè)通用模型,,就是前面說的 Encoder 和 Decoder 來解決,。 數(shù)學(xué)形式的話就是這樣,X 和 X1 到 Xm,,Y 是 Y1 到 Yn,,前面可以認(rèn)為是 M 個(gè)詞或者 M 個(gè)字,這邊是 N 個(gè)詞或者 N 個(gè)字,,建模就兩個(gè)序列之間的映射關(guān)系,,就是第三個(gè)公式,。只要把這個(gè)映射關(guān)系學(xué)到了,那么就知道給定了 X1 到 Xm 的時(shí)候,,我怎么給出一個(gè)更好的 Y1 到 Yn,,是一個(gè)更好的回復(fù)或者更好的翻譯,這是一個(gè)序列到序列的問題模型,。 前面我們已經(jīng)看過這個(gè)模型了,,它怎么來生成這個(gè) Y2?首先它要考慮源端的信息,,比如 X1 到Xm,,它是一個(gè)語義。再一個(gè)就是它還要考慮到已經(jīng)生成了什么出來,,因?yàn)樗鼜?Y1 到 Yn,,Yn 是逐個(gè)生成的。所以已經(jīng)生成的序列加上源端的信息或者主題的信息,,我們可以認(rèn)為 X 是一個(gè)源端信息或者主題信息,,然后經(jīng)過一個(gè)分類器來預(yù)測(cè)下一個(gè)詞,下一個(gè)詞預(yù)測(cè)出來又到這兒來了,,加到已經(jīng)生成的序列后面,,這個(gè)序列變長(zhǎng)了,然后再預(yù)測(cè)下一個(gè)詞,,直到預(yù)測(cè)出一個(gè)句子的終結(jié)符出來,,這個(gè)序列的預(yù)測(cè)就算生成完成了,大概流程就是這樣,,抽象的數(shù)學(xué)表示就是上面三個(gè)公式,。 這個(gè)圖是一個(gè)比較經(jīng)典的 Encoder-Decoder 結(jié)構(gòu),左邊是一個(gè) Encoder,,右邊是一個(gè) Decoder,,中間是一個(gè) Attention 注意力機(jī)制。當(dāng) Decoder 其中一個(gè)詞的時(shí)候,,比如說 Yt 這個(gè)詞的時(shí)候,,去源端尋找跟它相關(guān)語義的時(shí)候,用一個(gè) Attention 的形式,,到底是 H1 扮演的權(quán)重大一些,,還是 H2 扮演的權(quán)重大一些,還是 Hm 扮演的權(quán)重大一些,,這是一個(gè) Soft Attention 的過程,。 這么講其實(shí)有點(diǎn)泛,可以看公式,第三個(gè)公式,,就是說我們來預(yù)測(cè) Yt,,Y 小于 t 了,我們知道了前面已經(jīng)生成的 t-1 個(gè)詞,, x 是整個(gè)源端的信息,,它需要參考一個(gè) ct,ct 就是這個(gè) Attention 完的一個(gè)結(jié)果,。 前面剛生成完的一個(gè) Decoder 頂層的一個(gè)狀態(tài),,它在算源端的一個(gè)相關(guān)程度的時(shí)候,用的就是中間這一項(xiàng)公式,。這個(gè)地方歸比較繞,,大家可以看一下公式。后面一個(gè)關(guān)于 Attention 機(jī)制的另外一個(gè)視角的看法,,可能會(huì)更好理解一些,。 還有一個(gè)是從檢索的視角來看 Attention 機(jī)制,實(shí)際上就是一個(gè) query 的過程,,有一個(gè) query key,,然后來檢索一個(gè) Memory 的區(qū)域,,實(shí)際上在上面的這個(gè)過程當(dāng)中,,拿前面這個(gè) Decoder 的狀態(tài),它作為 query 的 key 去查 Encoder 的 Memory,,這個(gè) Memory 長(zhǎng)度是 m,,寬度是源端的表示維度,大概是查每一塊對(duì)它的權(quán)重,。我們做一個(gè)類比的話,,知道計(jì)算機(jī)內(nèi)存里面去保存,一般是有一個(gè)定位的過程,,再一個(gè)就是保存的一個(gè)過程,。 不同的是這個(gè)定位是 soft 的定位,假如你有 10 個(gè)格子去訪問,,不是說定位到第 3 個(gè)格子就讀第 3 個(gè)格子的信息,,而是要計(jì)算這 10 個(gè)格子里面的內(nèi)容,構(gòu)成最后那個(gè)內(nèi)容的一個(gè)權(quán)重,。比如給第一個(gè)格子分了 0.1,,第二個(gè)格子分了 0.2,第三個(gè)格子分 了0.3,,依此類推,,那到最后整個(gè)表示的時(shí)候,就是每個(gè)格子內(nèi)容乘上它的權(quán)重,然后加起來,。這可以認(rèn)為是一個(gè) query 的過程,,檢索一個(gè) Memory 的過程,不再是計(jì)算機(jī)硬件里面這種硬性的 query,,而是一個(gè) soft 的 query,。 這個(gè) query 里主要是存在著兩個(gè) key 的運(yùn)算,一個(gè)就是 query 可以和 Memory 里面 key 的一個(gè)運(yùn)算來計(jì)算相關(guān)程度,。相關(guān)程度計(jì)算完以后,,通過 softmax 做概率的規(guī)劃,然后把它轉(zhuǎn)到概率空間上面,,再根據(jù)這個(gè)概率對(duì)每一個(gè)值做權(quán)重的加和,,得到最后的 result,大家可以看這一塊的公式,。relation 函數(shù)就是一個(gè)怎么來衡量?jī)蓚€(gè)東西關(guān)系的一個(gè) relation 函數(shù),,一般可以用一個(gè) BP 神經(jīng)網(wǎng)絡(luò),就是一個(gè)前向網(wǎng)絡(luò)來做,。relation 函數(shù)有很多種選擇方式,,但它的目的就是算 relation。 廣義的 Encoder-Decoder 框架現(xiàn)在用來做泛文本生成的一個(gè)問題,,對(duì)話機(jī)器人,、機(jī)器翻譯或者寫文章、寫詩,、寫歌詞這種都可以用 Encoder-Decoder 來做,。 對(duì)它做一個(gè)大概總結(jié)的話,Encoder-Decoder 就可以把里面的構(gòu)件隨便地替換掉,,比如 Encoder 用 RNN,,Decoder 用 CNN ,所以我們前面提到一個(gè)神經(jīng)網(wǎng)絡(luò)里面構(gòu)建的這些你完全可以在這個(gè)框架里任意去替換,,把它當(dāng)做模塊化的東西來使用,。 Attention 的計(jì)算過程是基于加法或者基于乘法的,全局的或者局部的,,再一個(gè)就是它其實(shí)可以融入更多的特征進(jìn)來,。在這個(gè)框架里融入更多的模塊。不變的是 Encoder 就是對(duì)文本做表示的,,Decoder 就是用來做生成的,。前面說了泛文本生成的任務(wù)都可以基于該框架來做,所以它是一個(gè)非常經(jīng)典的框架,。 2.機(jī)器翻譯系統(tǒng)VS對(duì)話系統(tǒng) 現(xiàn)在來說機(jī)器翻譯系統(tǒng)和對(duì)話系統(tǒng)之間的區(qū)別,,前面說都可以用序列到序列的模型來進(jìn)行建模,,但是區(qū)別在哪?首先是機(jī)器翻譯系統(tǒng)的訓(xùn)練語料是一個(gè)句對(duì),,一個(gè)是源語言,,一個(gè)是目標(biāo)語言,它們?cè)谡Z義上具有一個(gè)非常強(qiáng)的一致性關(guān)系,,是一個(gè)非常標(biāo)準(zhǔn)的序列到序列的任務(wù),。再一個(gè)就是可以通過大量的平行語料來覆蓋近乎全量的翻譯現(xiàn)象。 對(duì)話系統(tǒng)其實(shí)場(chǎng)景非常復(fù)雜,,那就是源端句子和目標(biāo)端句子并不是語義上的一致性,,不是表達(dá)語義,而只是一個(gè)相關(guān)性或者一個(gè)回復(fù)的關(guān)系,,你說一句話,,可能有上百種、上千種回復(fù)關(guān)系,,所以很難去拿語料去覆蓋對(duì)話場(chǎng)景,,并且語料變大的時(shí)候,可能會(huì)因?yàn)榛貜?fù)的多樣性導(dǎo)致知識(shí)沖突,。再一個(gè)就是使用序列到序列的建模模型可以很方便地去搭建一個(gè)聊天機(jī)器人,,就是你說一句話,它返回來給你一句話,,看上去像在聊天,,但是很難去搭一個(gè)實(shí)用的面向任務(wù)的對(duì)話系統(tǒng),比如訂機(jī)票,,更多的是說前面做意圖分析,,后面再去具體地執(zhí)行。 對(duì)話前面也說了,,機(jī)器翻譯也需要知識(shí)庫(kù),但是對(duì)話這個(gè)系統(tǒng)更需要知識(shí)庫(kù),,還有多媒體內(nèi)容平臺(tái),,比如你要看電影,它需要有一個(gè)電影庫(kù)在后面支持,,那就是對(duì)話系統(tǒng)和機(jī)器翻譯系統(tǒng)區(qū)別非常大的一個(gè)地方,。 3.小微對(duì)話系統(tǒng) 介紹一下我們微信研發(fā)的一套小微對(duì)話系統(tǒng),目前是搭載到了很多硬件上,。里面主要的 NLP 任務(wù),,大家看這個(gè)圖,會(huì)有分詞,、詞性標(biāo)注,、Parsing,,還有意圖識(shí)別、命名實(shí)體識(shí)別,、槽位填充等 NLP 的任務(wù)都可以設(shè)計(jì)到這個(gè)系統(tǒng)里,,也就是我們前面說的構(gòu)建一個(gè)產(chǎn)品級(jí)的自然語言處理系統(tǒng),一定會(huì)涉及到多個(gè)層面,,多種技術(shù)的使用,,才最后拼起來這么一個(gè)大的系統(tǒng)。 這個(gè)對(duì)話系統(tǒng)實(shí)際上在周邊還需要很多支持的系統(tǒng),,現(xiàn)在就是語音交付,,前面就是一個(gè)語音識(shí)別,語音識(shí)別可以糾錯(cuò),,然后放到這個(gè)對(duì)話系統(tǒng)里面,,對(duì)話系統(tǒng)可以返回一個(gè)語音合成的結(jié)果或者說一個(gè)屏幕展示的結(jié)果。所謂語音合成的結(jié)果是這樣,,比如說你問對(duì)話系統(tǒng)明天的天氣怎么樣,,那么它就直接給你一段語音就好了。 再一個(gè)就是屏幕展現(xiàn),,比如要看一個(gè)什么電影,,語音合成肯定不滿足你的需求了,那么就是到屏幕展現(xiàn)了,,電影就被調(diào)出來播放,。微信里面語音識(shí)別這個(gè)系統(tǒng)叫“智聆”,給它一個(gè)輸入,,交到小微里面去,,小微做對(duì)話方面的計(jì)算,然后呈現(xiàn)用戶結(jié)果,。 一些標(biāo)桿的案例,,一個(gè)是客服,對(duì)話系統(tǒng)可以來做客服,,你問它一個(gè)問題,,它返回相應(yīng)的答案。再一個(gè)就是閑聊對(duì)話機(jī)器人,,賢二機(jī)器僧是一個(gè)公眾號(hào),,你可以跟它去聊一些事情。還有就是車上的對(duì)話系統(tǒng),,比如讓它去導(dǎo)航,、播放音樂、新聞之類的,。還有就是外交部自動(dòng)回復(fù)的助手,。再一個(gè)就是現(xiàn)在大家能接觸到的智能音箱或者智能機(jī)器人,,基本上都要搭載這樣一套對(duì)話系統(tǒng)。一個(gè)對(duì)話系統(tǒng)可以搭載到不同的硬件上去,,構(gòu)成不同的一些應(yīng)用場(chǎng)景,。 四、開發(fā)者的技能進(jìn)階建議 基礎(chǔ)篇,,其實(shí)還是要基于很大量的數(shù)學(xué)知識(shí),,比如說線性代數(shù)、矩陣運(yùn)算這一塊,,整個(gè)神經(jīng)網(wǎng)絡(luò)所有的這個(gè)模型都是基于矩陣運(yùn)算來做的,,所以這一塊要熟悉。再一個(gè)就是概率論,,統(tǒng)計(jì)模型是以概率為基礎(chǔ)的,。還有就是高等數(shù)學(xué),在神經(jīng)網(wǎng)絡(luò)或者深度學(xué)習(xí)技術(shù)里面用到的就是函數(shù),、導(dǎo)數(shù),、級(jí)數(shù)、公式推導(dǎo)這些,,在數(shù)學(xué)模型統(tǒng)計(jì)方法里面,,這些都是基礎(chǔ)的基礎(chǔ),非常重要,。 第二個(gè)建議是熟練使用一種深度學(xué)習(xí)的平臺(tái),,現(xiàn)在 Python 基本上成了人工智能的一種流程型的語言,大家可以去熟練地掌握,,還有其他的深度學(xué)習(xí)平臺(tái),,像 TensorFlow 這種,能夠讓你非常方便地來搭建神經(jīng)網(wǎng)絡(luò)模型,,不用再去關(guān)注非常底層的一些運(yùn)算,。 推薦一些公開課,像 Chris Manning,,自然語言處理或者 Standford 里面的 Deep Learning 課程,,還有 Coursera 里面的一些自然語言處理課程,大家都可以看一下,。還有一些非常好的資源,大家可以去聽別人講,,然后接觸基礎(chǔ)資料,,去入門。 進(jìn)階篇,,進(jìn)階篇去研讀一下現(xiàn)在優(yōu)秀的一些深度學(xué)習(xí)的活動(dòng),,像 Word2Vec 這種大家用得都非常多的,。再?gòu)?fù)雜一點(diǎn)的,像 GNMT,,就是谷歌開源出來的一套神經(jīng)網(wǎng)絡(luò)的代碼,。然后 Tensor2Tensor,大家在看的時(shí)候,,一方面可以去學(xué)習(xí)模型,,另一方面可以學(xué)習(xí)深度學(xué)習(xí)平臺(tái)的使用方法。也就是讀別人的代碼,,可以學(xué)到很多東西,。再一個(gè)就是培養(yǎng)問題建模的能力,就是說要對(duì)問題和模型比較熟悉,,給你一個(gè)問題大概能判斷出它大概用哪個(gè)模型去解決會(huì)好一點(diǎn),。再一個(gè)模型實(shí)現(xiàn),就是你能把它實(shí)現(xiàn)出來,,跑出實(shí)驗(yàn)結(jié)果出來,,就要性能分析、調(diào)優(yōu),,然后加一些訓(xùn)練方法進(jìn)去,,能夠很好地實(shí)現(xiàn)任務(wù)。 創(chuàng)新篇,,這是更高階段的一個(gè)目標(biāo),。要去研究最新的方法,要讀論文,,對(duì)這個(gè)領(lǐng)域的研究現(xiàn)狀和方法都有一個(gè)比較清晰的認(rèn)識(shí),,看透問題的本質(zhì)大概是怎樣的,然后嘗試提出自己的觀點(diǎn)和創(chuàng)新性的解決方法,,能拿合理的實(shí)驗(yàn)方法去驗(yàn)證,。 |
|