前面的文章主要從理論的角度介紹了自然語(yǔ)言人機(jī)對(duì)話系統(tǒng)所可能涉及到的多個(gè)領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識(shí)。這篇文章,甚至之后的文章本砰,會(huì)從更貼近業(yè)務(wù)的角度來(lái)寫(xiě),側(cè)重于介紹一些與自然語(yǔ)言問(wèn)答業(yè)務(wù)密切相關(guān)钢悲,且已經(jīng)商業(yè)化点额,已被證明可行的技術(shù)。
本篇文章準(zhǔn)備從技術(shù)的角度從頭捋一下百度度秘事業(yè)部 CTO 朱凱華做的題為《AI 賦能的搜索和對(duì)話交互》的報(bào)告莺琳,介紹智能搜索和對(duì)話式 OS 的發(fā)展趨勢(shì)以及一些經(jīng)典問(wèn)題的解決方案还棱。里面提到的技術(shù)會(huì)包含,里面沒(méi)提到但是我有聯(lián)想到的內(nèi)容惭等,也會(huì)補(bǔ)充進(jìn)去珍手。
智能搜索
根據(jù)朱凱華的原話,現(xiàn)代搜索引擎面臨兩個(gè)重要挑戰(zhàn):
- 更好的建模搜索結(jié)果的語(yǔ)義相關(guān)性
- 更直接地給用戶答案
看到這兩個(gè)挑戰(zhàn),第一個(gè)讓我想到的是檢索模型與 LDA 等模型的關(guān)系琳要,傳統(tǒng)檢索模型是在文檔包含查詢?cè)~的前提下進(jìn)行相似度的計(jì)算與排序寡具,而 LDA 以及類(lèi)似的其他模型可以利用詞向量(或者講,語(yǔ)義相關(guān)性)發(fā)現(xiàn)兩篇完全沒(méi)有重合詞的相似文檔稚补。
第二個(gè)讓我想到的是知識(shí)圖譜童叠,知識(shí)圖譜使知識(shí)對(duì)計(jì)算機(jī)而言成為了可計(jì)算的,在知識(shí)圖譜的基礎(chǔ)上课幕,計(jì)算機(jī)可以通過(guò)簡(jiǎn)單的推理直接給出一些問(wèn)題的答案厦坛,而不再是提供與查詢?cè)~相關(guān)的網(wǎng)頁(yè)集合,能夠更直接的解決用戶的問(wèn)題乍惊。
智能搜索這部分就從語(yǔ)義相關(guān)性和知識(shí)推理兩個(gè)方面來(lái)講杜秸。
語(yǔ)義相關(guān)性
我們所希望實(shí)現(xiàn)的,是不論查詢?cè)~是否包含在相應(yīng)文檔中润绎,只要查詢?cè)~與文檔擁有語(yǔ)義相關(guān)性撬碟,就能將其找到。
精確命中
這個(gè)方面也還是從傳統(tǒng)檢索模型開(kāi)始講起莉撇,也即在文檔包含查詢?cè)~的情況下小作,或者講查詢?cè)~精確命中文檔的前提下,如何計(jì)算相似度稼钩,如何對(duì)內(nèi)容進(jìn)行排序顾稀。
在《淺談搜索引擎基礎(chǔ)(上)》中,我提到過(guò)坝撑,BM25 模型是目前最成功的內(nèi)容排序模型静秆,也對(duì)其進(jìn)行了詳細(xì)的介紹,這里結(jié)合朱凱華的PPT再簡(jiǎn)單說(shuō)一下:
這是我文章中的圖:
BM25 模型計(jì)算公式融合了 4 個(gè)考慮因素:IDF 因子巡李、文檔詞頻抚笔、文檔長(zhǎng)度因子和查詢?cè)~頻,并利用 3 個(gè)自由調(diào)節(jié)因子(k1侨拦、k2 和 b)對(duì)各種因子的權(quán)值進(jìn)行調(diào)整組合殊橙。
與他在圖中展示的相對(duì)應(yīng):BM25 模型計(jì)算公式中的求和符號(hào),表示命中的關(guān)鍵詞對(duì)語(yǔ)義相關(guān)性有正向貢獻(xiàn)狱从;二元獨(dú)立模型(當(dāng)前條件下等價(jià)于IDF 因子)和文檔詞頻(TF)決定了命中詞的貢獻(xiàn)值膨蛮;文檔長(zhǎng)度因子使得文檔未命中詞對(duì)語(yǔ)義相關(guān)性有著負(fù)向貢獻(xiàn);他的圖中并沒(méi)有直接的提到查詢?cè)~頻季研,但實(shí)際上他式子中的qtf
就是查詢?cè)~頻敞葛。
精確命中的查詢?cè)~對(duì)整體語(yǔ)義相關(guān)性的正/負(fù)向貢獻(xiàn),是語(yǔ)義表達(dá)能力的基礎(chǔ)与涡。
接下來(lái)我們考慮另一種情況:
也即如果查詢?cè)~并沒(méi)有精確命中惹谐,那該怎樣計(jì)算語(yǔ)義相關(guān)性持偏?圖中指出了四個(gè)方向:歸一化命中、同義詞命中氨肌、主題命中鸿秆、反義主題命中,后兩個(gè)是我造的:)
歸一化命中
先來(lái)說(shuō)歸一化命中怎囚,這個(gè)是最簡(jiǎn)單的:
圖中包含四個(gè)類(lèi)別:詞干提取卿叽、拼寫(xiě)糾錯(cuò)、簡(jiǎn)繁體轉(zhuǎn)換桩了、數(shù)字格式歸一化。
我還能想到的埠戳,比如全角半角歸一化谭确、標(biāo)點(diǎn)符號(hào)處理谓形、大小寫(xiě)歸一化、漢語(yǔ)的錯(cuò)別字糾正等等。
歸一化命中赫模,就是解決同一個(gè)詞多種形態(tài)的問(wèn)題。
其實(shí)如果強(qiáng)行分的話猎莲,歸一化命中也可以分作兩種問(wèn)題:一種是計(jì)算機(jī)背鍋的問(wèn)題匆瓜,比如詞干提取、簡(jiǎn)繁體轉(zhuǎn)換蛮寂、數(shù)字格式歸一化蔽午、全角半角歸一化、標(biāo)點(diǎn)符號(hào)處理酬蹋、大小寫(xiě)歸一化及老;另一種就是人背鍋的問(wèn)題,比如英文拼寫(xiě)糾錯(cuò)以及漢語(yǔ)錯(cuò)別字糾正范抓。
同義詞命中
同義詞命中骄恶,自然就是解決同一含義多個(gè)同義詞的問(wèn)題。
具體的例子圖中也給出了匕垫,對(duì)于漢語(yǔ)而言僧鲁,主要的類(lèi)別包括:上下文無(wú)關(guān)的同義詞、上下文相關(guān)的同義詞象泵、多term的同義詞(實(shí)體消歧和共指消解寞秃?)。
上下文無(wú)關(guān)的同義詞可以利用一些在線的同義詞典來(lái)解決偶惠;對(duì)于上下文相關(guān)的同義詞蜕该,猜想一下,依照自身業(yè)務(wù)洲鸠,通過(guò)人工定義規(guī)則可以解決一部分堂淡,另一部分可以通過(guò)篩選后面的多term同義詞以及主題命中的結(jié)果來(lái)得到馋缅。
多term的同義詞讓我想起了知識(shí)圖譜構(gòu)建三個(gè)層次之一的知識(shí)融合,知識(shí)融合其中有一部分關(guān)鍵內(nèi)容叫做實(shí)體鏈接绢淀,這在《淺談知識(shí)圖譜基礎(chǔ)》中詳細(xì)的講過(guò)萤悴,實(shí)體鏈接的意義恰巧在于通過(guò)實(shí)體消歧和共指消解為不同的實(shí)體名稱(chēng)/別名找到真正對(duì)應(yīng)的實(shí)體。
實(shí)體消歧是在同一個(gè)名稱(chēng)可能對(duì)應(yīng)多個(gè)實(shí)體時(shí)根據(jù)上下文找到正確的實(shí)體皆的,共指消解主要用于解決多個(gè)指稱(chēng)對(duì)應(yīng)同一實(shí)體對(duì)象的問(wèn)題覆履。
利用知識(shí)圖譜中的實(shí)體鏈接技術(shù),就能找到哪些些實(shí)體名稱(chēng)/別名對(duì)應(yīng)的是同一個(gè)實(shí)體费薄。
主題命中
主題命中是相當(dāng)重要的一部分內(nèi)容硝全,這里準(zhǔn)備花大量篇幅去拓展開(kāi)來(lái)講。
圖中講楞抡,建模詞與詞之間『愛(ài)』的關(guān)系伟众,這個(gè)『愛(ài)』我沒(méi)明白,這里我按照擁有相同主題來(lái)理解召廷,比如『蘋(píng)果』和『?jiǎn)滩妓埂缓汀篿Pad』凳厢、比如『星巴克』和『咖啡』等。
在 PPT 中竞慢,百度用 SMT 模型來(lái)計(jì)算詞與詞之間的相關(guān)關(guān)系先紫。SMT 先放一放,我們先說(shuō)詞相關(guān)的問(wèn)題筹煮。既然說(shuō)到了詞相關(guān)的問(wèn)題遮精,就不得不說(shuō)到詞向量了,說(shuō)到詞向量又不得不提 word2vec败潦,這部分就從 word2vec 開(kāi)始講起仑鸥。
word2vec
word2vec 是 Google 于2013年開(kāi)源推出的一個(gè)用于獲取詞向量的工具包。
先提一下什么是 Huffman 樹(shù)和 Huffman 編碼变屁,簡(jiǎn)單一句話眼俊,詞頻越大的詞離根節(jié)點(diǎn)越近,詞頻越大的詞的編碼長(zhǎng)度越短粟关。
然后再說(shuō)一下語(yǔ)言模型疮胖,畢竟詞向量和語(yǔ)言模型有著密切的關(guān)系。
根據(jù)牛津大學(xué)的《Deep Learning for Natural Language Processing》課程闷板,至少存在三種可行的語(yǔ)言模型澎灸,分別是:Count based N-Gram Language Models(N-Gram 語(yǔ)言模型)、Neural N-Gram Language Models(神經(jīng)概率語(yǔ)言模型)遮晚、Recurrent Neural Network Language Models(RNN 語(yǔ)言模型)性昭。
這里先說(shuō)前兩種,其實(shí)第一種在我的《淺談自然語(yǔ)言處理基礎(chǔ)(上)》中县遣,已經(jīng)詳細(xì)講過(guò)了糜颠,是一種利用 n-1 階馬爾科夫假設(shè)的簡(jiǎn)單語(yǔ)言模型汹族。
然后這里著重介紹一下神經(jīng)概率語(yǔ)言模型,神經(jīng)概率語(yǔ)言模型由 Bengio 等人在文《A neural probabilistic language model. Journal of Machine Learning Research》提出其兴,該模型中用到了詞向量顶瞒。
那什么是詞向量呢,一種最簡(jiǎn)單的詞向量是 one-hot representation(稀疏向量)元旬,就是用一個(gè)很長(zhǎng)的向量來(lái)表示一個(gè)詞榴徐,向量的長(zhǎng)度為詞典的大小,向量的分量只有一個(gè) 1匀归,其它全為0坑资,1 的位置對(duì)應(yīng)該詞在詞典中的索引。
在《淺談機(jī)器學(xué)習(xí)基礎(chǔ)(上)》中講樸素貝葉斯算法時(shí)就提到了詞集模型(Set Of Words穆端,SOW)和詞袋模型(Bag Of Words袱贮,BOW),其實(shí)詞袋模型就是文檔中不同詞的 one-hot representation 之和徙赢;詞袋模型與詞集模型的區(qū)別在于字柠,詞集模型對(duì)一個(gè)詞的 one-hot representation 只加一次探越,而詞袋模型全部累加起來(lái)狡赐,記錄詞在文檔中的出現(xiàn)次數(shù)。
在《淺談數(shù)據(jù)挖掘基礎(chǔ)》中钦幔,我提到過(guò)維數(shù)災(zāi)難枕屉,維數(shù)災(zāi)難的一個(gè)表現(xiàn)是,在高維空間下鲤氢,幾乎所有的點(diǎn)對(duì)之間的距離都差不多相等搀擂;另一個(gè)表現(xiàn)是,集合任意的兩個(gè)向量之間都是近似正交的卷玉。這會(huì)讓我們的歐氏距離和余弦距離計(jì)算方式失效哨颂。在詞典大小過(guò)大的情況下,使用 one-hot representation 表示文檔相种,并通過(guò)《淺談搜索引擎基礎(chǔ)(上)》中提到的空間向量法等計(jì)算相似度威恼,就會(huì)觸發(fā)維數(shù)災(zāi)難。并且如果利用 one-hot representation 寝并,那兩個(gè)詞的詞向量之間就永遠(yuǎn)是正交關(guān)系箫措,我們無(wú)法利用它來(lái)刻畫(huà)詞與詞之間的相似性。
然后還有另一種詞向量衬潦,叫做 Distributed Representation(密集向量/稠密向量)斤蔓,它最早由 Hinton 于 1986 年提出的,其基本想法是:通過(guò)訓(xùn)練將某種語(yǔ)言中的每一個(gè)詞映射成一個(gè)固定長(zhǎng)度的短向量(這里的短是相對(duì)于 one-hot representation 來(lái)說(shuō)的)镀岛,所有這些向量構(gòu)成一個(gè)詞向量空間弦牡,而每一向量可視為該空間中的一個(gè)點(diǎn)友驮,在這個(gè)空間上引入『距離』,就可以根據(jù)詞之間的距離來(lái)判斷它們之間的(詞法喇伯、語(yǔ)義上的)相似性了喊儡。神經(jīng)概率語(yǔ)言模型和 word2vec 采用的都是這種 Distributed Representation 的詞向量。得到詞語(yǔ)的 Distributed Representation 的詞向量的過(guò)程稻据,可以看做是 Word Embedding艾猜。
然后回到神經(jīng)概率語(yǔ)言模型,既然是神經(jīng)概率語(yǔ)言模型捻悯,自然要用到神經(jīng)網(wǎng)絡(luò)匆赃,這里給出這個(gè)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)示意圖,出自《word2vec 的數(shù)學(xué)原理詳解》:
它包括四個(gè)層:輸入層今缚、投影層(Projection Layer)算柳、隱藏層和輸出層。有人也將輸入層與投影層結(jié)合姓言,統(tǒng)一看做輸入層瞬项,這樣就變成了三層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
然后來(lái)詳細(xì)講一下這個(gè)圖何荚,對(duì)于語(yǔ)料 C 中的任意一個(gè)詞 w囱淋,將 Context(w) 取為其前面的 n-1 個(gè)詞(類(lèi)似于 N-Gram),如果其前面的詞不足 n-1 個(gè)餐塘,則可以人為的添加一個(gè)或幾個(gè)填充向量妥衣,它們也參與訓(xùn)練過(guò)程。這樣二元對(duì)(Context(w)戒傻,w)就是一個(gè)訓(xùn)練樣本了税手。
先來(lái)說(shuō)輸入層和投影層,如果詞向量長(zhǎng)度為 m需纳,則投影層的規(guī)模是 (n-1)m芦倒。因?yàn)檩斎雽影?Context(w) 中 n-1 個(gè)詞的詞向量,而投影層的向量由輸入層的 n-1 個(gè)詞的詞向量按順序首尾相接地拼起來(lái)形成一個(gè)長(zhǎng)向量不翩。
然后是輸出層兵扬,輸出層的規(guī)模與詞典大小的規(guī)模相同,而隱藏層的規(guī)模是可調(diào)參數(shù)慌盯,由用戶指定周霉。
通過(guò)語(yǔ)料訓(xùn)練,我們得到了詞典中不同單詞 w 的詞向量以及填充向量亚皂,和這個(gè)神經(jīng)網(wǎng)絡(luò)的參數(shù)俱箱。對(duì)于神經(jīng)概率語(yǔ)言模型,訓(xùn)練時(shí)灭必,詞向量是用來(lái)幫助構(gòu)造目標(biāo)函數(shù)的輔助參數(shù)狞谱,訓(xùn)練完成后乃摹,它也只是語(yǔ)言模型的一個(gè)副產(chǎn)品,不過(guò)是很重要的副產(chǎn)品跟衅。
根據(jù)詞向量就可以度量詞之間的相似性孵睬,包括同一種語(yǔ)言內(nèi)的詞的相似性,甚至還可以度量不同語(yǔ)言之間詞的相似性伶跷,如下圖所示:
詞向量只是針對(duì)『詞』來(lái)提的掰读,事實(shí)上,我們可以針對(duì)更細(xì)粒度和更粗粒度進(jìn)行推廣叭莫,比如字向量蹈集、句子向量和文檔向量,它們能為字雇初、句子拢肆、文檔等單元提供更好的表示。
正因?yàn)橛辛嗽~向量靖诗,神經(jīng)概率語(yǔ)言模型與傳統(tǒng)的 N-Gram 語(yǔ)言模型相比郭怪,可以更好的建模一些原訓(xùn)練語(yǔ)料中沒(méi)有出現(xiàn)過(guò)的搭配。比如語(yǔ)料中存在『A cute cat』刊橘,但卻不存在『A cute dog』鄙才。如果在 N-Gram 語(yǔ)言模型下,『A cute cat』的生成概率會(huì)很高伤为,而『A cute dog』的生成概率就近乎為零咒循,但神經(jīng)概率語(yǔ)言模型卻可以發(fā)現(xiàn)『cat』與『dog』的相似性据途,進(jìn)而為『A cute dog』提供一個(gè)更恰當(dāng)?shù)纳筛怕省?/p>
接下來(lái)正式開(kāi)始介紹 word2vec绞愚,word2vec 并不是直接基于前面說(shuō)的神經(jīng)概率語(yǔ)言模型,而是用到了兩個(gè)特殊的模型:CBOW模型(Continuous Bag-of-Words Model)和 Skip-gram 模型(Continuous Skip-gram Model)颖医。
兩個(gè)模型都包含三層:輸入層位衩、投影層和輸出層。前者是在已知當(dāng)前詞 w 上下文的前提下預(yù)測(cè)當(dāng)前詞熔萧;而后者恰恰相反糖驴,是在已知當(dāng)前詞 w 的前提下,預(yù)測(cè)其上下文:
對(duì)于 CBOW 和 Skip-gram 兩個(gè)模型佛致,word2vec 給出了兩套框架贮缕,它們分別基于 Hierarchical Softmax 和 Negative Sampling(簡(jiǎn)稱(chēng)為 NEG),NEG 是 NCE(Noise Contrastive Estimation)的一個(gè)簡(jiǎn)化版本俺榆,目的是用來(lái)提高訓(xùn)練速度并改善所得詞向量的質(zhì)量感昼。與 Hierarchical Softmax 相比,NEG不再使用復(fù)雜的 Huffman 樹(shù)罐脊,而是利用相對(duì)簡(jiǎn)單的隨機(jī)負(fù)采樣定嗓,能大幅提高性能蜕琴。
先來(lái)說(shuō)基于 Hierarchical Softmax 的 CBOW 模型:
與前面講過(guò)的神經(jīng)概率語(yǔ)言模型相比,主要存在三處不同:
- (從輸出層到投影層的操作)神經(jīng)概率語(yǔ)言模型是通過(guò)拼接宵溅,而 CBOW 是通過(guò)累加求和
- (隱藏層)神經(jīng)概率語(yǔ)言模型有隱藏層凌简,而 CBOW 沒(méi)有隱藏層
- (輸出層)神經(jīng)概率語(yǔ)言模型是線性結(jié)構(gòu),而 CBOW 采用 Huffman 樹(shù)恃逻,當(dāng)然基于 Hierarchical Softmax 采用的都是 Huffman 樹(shù)雏搂。
那如何利用 Huffman 樹(shù)來(lái)得到我們所需的 p(w|Context(w)) 呢?對(duì)于詞典 D 中的任意詞 w寇损,Huffman 樹(shù)中必存在一條從根節(jié)點(diǎn)到詞 w 對(duì)應(yīng)節(jié)點(diǎn)的路徑 pw(且這條路徑是唯一的)畔派。路徑 pw 上存在 lw-1 個(gè)分支,將每個(gè)分支看做一次二分類(lèi)润绵,每一次分類(lèi)就產(chǎn)生一個(gè)概率线椰,將這些概率乘起來(lái),就是所需的 p(w|Context(w))尘盼。
然后是基于 Hierarchical Softmax 的 Skip-gram 模型:
前面說(shuō)過(guò)憨愉,Skip-gram 是在已知當(dāng)前詞 w 的前提下,預(yù)測(cè)其上下文卿捎,所以其輸入就只包含當(dāng)前樣本的中心詞 w配紫;圖中的投影層其實(shí)是多余的,只是為了方便比較午阵,因?yàn)橹惠斎朐~ w圈匆,所以投影層和輸入層恒等;與 CBOW 模型一樣筋量,輸出也是一棵 Huffman 樹(shù)筋遭。
在 Skip-gram 模型中,我們需要的是 p(Context(w)|w)籽懦,p(Context(w)|w) 需要通過(guò)計(jì)算 p(u|w) 的累乘積來(lái)得到(u 是所有包含在 Context(w) 中的詞)于个。而每個(gè) p(u|w) 的的計(jì)算方式,與 CBOW 中的思想類(lèi)似暮顺。
前面說(shuō)厅篓,NEG 以隨機(jī)負(fù)采樣代替 Huffman 樹(shù),其實(shí)嚴(yán)格來(lái)說(shuō)捶码,這么講不對(duì)羽氮,一種方法怎么代替一種結(jié)構(gòu)呢,只是不再使用 Huffman 樹(shù)惫恼,轉(zhuǎn)而利用負(fù)采樣近似取得相同的結(jié)果档押,同時(shí)大幅提高了性能。
其實(shí) NEG 本質(zhì)采用的方法還是最大似然估計(jì),類(lèi)似邏輯回歸(Logistic Regression)汇荐,增大正樣本的概率同時(shí)降低負(fù)樣本的概率洞就。
比如對(duì)于基于 NEG 的 CBOW 模型,已知 w 的上下文 Context(w)掀淘,需要預(yù)測(cè) w旬蟋,因此,對(duì)于給定的 Context(w)革娄,w 就是一個(gè)正樣本倾贰,其他詞就是負(fù)樣本了,那負(fù)樣本那么多拦惋,該如何挑選呢匆浙?
接下來(lái)介紹負(fù)采樣算法,這本質(zhì)上是一個(gè)帶權(quán)采樣問(wèn)題厕妖,詞典 D 中的詞在語(yǔ)料 C 中出現(xiàn)的次數(shù)有高有低首尼,對(duì)于那些高頻詞,被選為負(fù)樣本的概率就應(yīng)該比較大言秸,反之软能,對(duì)于那些低頻詞,其被選中的概率就應(yīng)該比較小举畸。
接下來(lái)再談?wù)?word2vec 中的具體做法查排,其實(shí)與我在《淺談深度學(xué)習(xí)基礎(chǔ)(上)》中提到的吉布斯采樣類(lèi)似,如下圖所示:
假設(shè)詞典 D 中共有 N 個(gè)詞抄沮,每個(gè)詞對(duì)應(yīng)一段長(zhǎng)度跋核,這個(gè)長(zhǎng)度與其在語(yǔ)料 C 中的出現(xiàn)頻率正相關(guān),也即圖中的上半部分叛买,一個(gè)有 N 個(gè)剖分區(qū)間的非等距剖分砂代。假設(shè)存在 M>>N,圖的下半部分是對(duì)同樣總長(zhǎng)度的等距剖分聪全,擁有 M 個(gè)剖分區(qū)間泊藕。
這樣辅辩,對(duì)于正樣本 w难礼,每當(dāng)我們需要抽取一個(gè)負(fù)樣本,就從 M 個(gè)剖分區(qū)間隨機(jī)抽取一個(gè)玫锋,找到其對(duì)應(yīng)的非等距剖分區(qū)間所對(duì)應(yīng)的單詞蛾茉,作為負(fù)樣本。這樣撩鹿,在語(yǔ)料中詞頻越高的單詞就越容易被選中谦炬。另外,如果負(fù)樣本采樣時(shí)正好抽到了我們的正樣本 w,那就跳過(guò)去繼續(xù)抽取键思。
LSA础爬、pLSA、LDA
除了 word2vec 所采用的 CBOW 和 Skip-gram 以及神經(jīng)概率語(yǔ)言模型之外吼鳞,還有很多不同模型可以用來(lái)估計(jì)詞向量看蚜,其中就包括在《淺談推薦系統(tǒng)基礎(chǔ)》詳細(xì)講過(guò)的LDA(Latent Dirichlet Allocation),以及與其類(lèi)似的主題模型 LSA(Latent Semantic Analysis)和 pLSA(probabilistic Latent Semantic Analysis)赔桌。
通常 LDA 的效果要好于 LSA 和 pLSA供炎。
先簡(jiǎn)單回顧一下 LDA,LDA 模型是這樣引入的:
假設(shè)我們需要生成 M 篇文章疾党,每篇文章包含 N 個(gè)單詞音诫。LDA 模型包含了 α β θ z w 五個(gè)參數(shù),一個(gè)生成任務(wù)對(duì)應(yīng)一對(duì) α β雪位,α 決定主題向量 θ 的分布竭钝,每篇文章對(duì)應(yīng)一個(gè)主題向量 θ,主題向量 θ 決定主題 z 的分布雹洗,文章中的每個(gè)單詞對(duì)應(yīng)一個(gè)主題 z蜓氨,主題 z 與 β 一起決定每個(gè)單詞的分布。
LDA 的聯(lián)合概率分布如下:
LDA 可以合理的將單詞歸類(lèi)到不同的隱含主題之中队伟;并且通過(guò)計(jì)算兩篇文章主題向量 θ 的 KL 散度(相對(duì)熵)穴吹,可以得到兩篇文章的相似性。
LSA 與 pLSA 這里也簡(jiǎn)單介紹一下原理嗜侮。
LSA 的基本思想其實(shí)就是將文章從稀疏的高維空間(基于 one-hot representation 的詞向量)映射到一個(gè)低維的向量空間(基于Distributed Representation 的詞向量)港令,我們稱(chēng)之為隱含語(yǔ)義空間(Latent Semantic Space),那如何做到的呢锈颗。
在《淺談機(jī)器學(xué)習(xí)基礎(chǔ)(下)》中顷霹,我介紹過(guò) SVD 的這樣一個(gè)用法:SVD 可以應(yīng)用在自然語(yǔ)言處理中,利用矩陣分解的思想估計(jì)出同義詞類(lèi)击吱、文章主題以及同義詞類(lèi)與文章主題之間的關(guān)系淋淀。
和 PCA 采用特征值分解的思想類(lèi)似,LSA 就采用了 SVD 的方式來(lái)求解 Latent Semantic Space覆醇。
pLSA 是對(duì) LSA 的優(yōu)化朵纷,引入了概率模型,但并不夠完善永脓。LDA 在 pLSA 的基礎(chǔ)上進(jìn)一步優(yōu)化了概率模型袍辞,自從誕生之后便蓬勃的發(fā)展,廣泛應(yīng)用于個(gè)性化推薦常摧、社交網(wǎng)絡(luò)搅吁、廣告預(yù)測(cè)等各個(gè)領(lǐng)域威创。
SMT、DSSM谎懦、Sent2Vec
然后回到朱凱華 PPT 中提到的 SMT 模型:
我找到了 PPT 中圖的出處肚豺,出自 Jianfeng Gao 的這篇論文 Clickthrough-Based Translation Models for Web Search: from Word Models to Phrase Models
這篇論文的主要意思是,查詢語(yǔ)句與文檔中所使用的詞匯以及語(yǔ)言風(fēng)格的差異界拦,會(huì)給搜索引擎帶來(lái)挑戰(zhàn)详炬。所以 Jianfeng Gao 等提出了將翻譯模型引入傳統(tǒng)檢索模型的想法。文章中嘗試訓(xùn)練了兩個(gè)不同的翻譯模型寞奸,一個(gè)基于詞的翻譯模型用于學(xué)習(xí)單個(gè)詞之間的翻譯概率呛谜,而另一個(gè)基于短語(yǔ)的翻譯模型用于學(xué)習(xí)多詞短語(yǔ)之間的翻譯概率,這兩個(gè)模型被集成到了傳統(tǒng)檢索模型中枪萄,發(fā)現(xiàn)可以得到更優(yōu)的搜索質(zhì)量隐岛。并且一些標(biāo)準(zhǔn)的統(tǒng)計(jì)機(jī)器翻譯技術(shù),如字對(duì)齊瓷翻,雙語(yǔ)短語(yǔ)提取等聚凹,也可以被用來(lái)構(gòu)建更好的網(wǎng)頁(yè)文獻(xiàn)檢索系統(tǒng)。模型的訓(xùn)練集來(lái)源于用戶的點(diǎn)擊日志齐帚,文章認(rèn)為用戶的查詢語(yǔ)句與用戶最終點(diǎn)擊的文檔標(biāo)題具有一定的語(yǔ)義相關(guān)性妒牙,這就是題目中 Clickthrough-Based 的來(lái)源。
朱凱華的 PPT 中所提到的統(tǒng)計(jì)機(jī)器翻譯模型对妄,指的就是這個(gè)湘今。既然 SMT 模型就是為了解決詞匯以及語(yǔ)言風(fēng)格之間的差異問(wèn)題,那它能夠通過(guò)計(jì)算詞之間的相似性以提高搜索質(zhì)量就是理所應(yīng)當(dāng)?shù)牧恕?/p>
在查詢 SMT 模型相關(guān)文獻(xiàn)的同時(shí)剪菱,我發(fā)現(xiàn)了同樣出自微軟之手的 DSSM(Deep Structured Semantic Model)摩瞎,出自論文 Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
DSSM 的提出背景與 SMT 模型基本相同,同樣是致力于利用語(yǔ)義匹配理解文檔與查詢語(yǔ)句間詞匯使用以及語(yǔ)言風(fēng)格的差異孝常,以進(jìn)一步提高搜索質(zhì)量旗们。DSSM 同樣基于用戶點(diǎn)擊數(shù)據(jù)來(lái)訓(xùn)練模型。
DSSM 具有三個(gè)特點(diǎn):
- 采用基于三字母(tri-letter)的詞哈希方式來(lái)表示長(zhǎng)短不同的單詞
- 采用深度神經(jīng)網(wǎng)絡(luò)來(lái)抽象高層次的語(yǔ)義表示
- 采用用戶點(diǎn)擊數(shù)據(jù)來(lái)有監(jiān)督的訓(xùn)練模型
舉個(gè)例子构灸,什么叫做基于三字母(tri-letter)的詞哈希方式上渴。比如詞『#cat#』,它的三字母表示方式就是『#-c-a』喜颁、『 c-a-t』稠氮、『a-t-#』。這與在《淺談?wù)Z音識(shí)別基礎(chǔ)》 中所提到的三音素異曲同工洛巢。
關(guān)于 DSSM 模型的效果括袒,文中有這樣一張圖:
其中,NDCG(Normalized Discounted Cumulative Gain)是用來(lái)衡量搜索質(zhì)量的指標(biāo)稿茉。其計(jì)算公式如下:
Gain 定義了每條結(jié)果的質(zhì)量,Position discount 使得排名越靠前的結(jié)果權(quán)重越大,NDCG 通過(guò)累積計(jì)算前 k 條結(jié)果的質(zhì)量來(lái)定義搜索質(zhì)量漓库。
然后重新回到圖中恃慧,圖中講基于點(diǎn)擊日志的 DSSM 模型,要優(yōu)于同樣基于點(diǎn)擊日志的 Word Translation Model(即百度 PPT 中提到的 SMT 模型)等渺蒿,也優(yōu)于基于文檔集的 LSA痢士、pLSA 和 Deep Auto-Encoder(在《淺談深度學(xué)習(xí)基礎(chǔ)(上)》中有詳細(xì)講解),也優(yōu)于傳統(tǒng)的 BM25 模型茂装。只是不知道為什么沒(méi)有與 LDA 比較怠蹂。
基于 DSSM,微軟開(kāi)放下載了 Sent2Vec少态。Sent2Vec 將一對(duì)短字符串(比如查詢語(yǔ)句與用戶點(diǎn)擊的文檔標(biāo)題)映射到一個(gè)連續(xù)低維空間城侧,這樣就可以利用余弦相似度來(lái)計(jì)算短字符串對(duì)之間的語(yǔ)義相似性。
簡(jiǎn)單總結(jié)一下彼妻,word2vec 可以通過(guò)詞向量估計(jì)詞之間的相似性嫌佑,Sent2Vec 可以通過(guò)字符串向量估計(jì)短字符串對(duì)之間的相似性,LDA 在估計(jì)長(zhǎng)篇文檔之間的相似性時(shí)侨歉,效果較好屋摇。
反義主題命中
然后我們重新回到 PPT 中來(lái):
其實(shí)歸一化命中、同義詞命中幽邓、主題命中都是對(duì)任何一個(gè)查詢語(yǔ)句中的詞炮温,建立一個(gè)相關(guān)詞表,每個(gè)相關(guān)詞配上一個(gè)權(quán)重牵舵,如果文檔中出現(xiàn)了任意一個(gè)相關(guān)詞茅特,都會(huì)得到大小不等的正向貢獻(xiàn)。比如歸一化命中貢獻(xiàn)為1棋枕,同義詞命中貢獻(xiàn)為 0.8白修,主題命中的權(quán)重更小。
這樣的建模方式有一個(gè)根本性的限制重斑,就是相關(guān)詞列表不能太大兵睛,否則模型大小會(huì)爆炸,無(wú)法實(shí)用窥浪。
在這種方式的基礎(chǔ)上我們還可以更進(jìn)一步祖很,就是建模詞與詞之間的反義關(guān)系,比如『愛(ài)/恨』漾脂,這樣當(dāng)某個(gè)詞在查詢中出現(xiàn)假颇,那包含其反義詞的文檔,理論上應(yīng)該進(jìn)行適當(dāng)降權(quán)骨稿。
建模詞反義關(guān)系的做法與主題命中中的方法類(lèi)似笨鸡,任意兩個(gè)向量都可以計(jì)算距離姜钳,而距離有正有負(fù)。
百度 DNN 模型
之后在 PPT 中形耗,朱凱華更進(jìn)一步講了百度的做法哥桥,下圖為百度 DNN 模型初版結(jié)構(gòu):
通過(guò)一個(gè) DNN 模型來(lái)計(jì)算查詢 Query 與用戶最終點(diǎn)擊的文檔 title 之間的語(yǔ)義相關(guān)性。中間綠色的 Looking up Table 是 Word Embedding 層激涤。
然后是進(jìn)行 Pairwise loss 訓(xùn)練的 DNN 模型結(jié)構(gòu):
前面說(shuō) SMT 模型(Word Translation Model)和 DSSM 都是基于用戶點(diǎn)擊數(shù)據(jù)進(jìn)行訓(xùn)練的拟糕,這里 PPT 中給出了一種可行的利用用戶點(diǎn)擊數(shù)據(jù)的訓(xùn)練方式,其目的是建模同一個(gè) Query 下有點(diǎn)擊和無(wú)點(diǎn)擊的文檔標(biāo)題之間的語(yǔ)義差異倦踢。
其實(shí)在《淺談搜索引擎基礎(chǔ)(上)》中送滞,已經(jīng)介紹過(guò)了機(jī)器學(xué)習(xí)排序算法下三種可行的訓(xùn)練方式,分別為:單文檔方法辱挥、文檔對(duì)方法犁嗅、文檔列表方法。而這三種方法的英文名稱(chēng)般贼,就分別為 Pointwise愧哟、Pairwise、Listwise哼蛆。
Pointwis 方法的主要思想是將排序問(wèn)題轉(zhuǎn)化為多類(lèi)分類(lèi)問(wèn)題或者回歸問(wèn)題蕊梧。也即預(yù)測(cè)查詢語(yǔ)句與文檔標(biāo)題之間的相似度(回歸問(wèn)題),或預(yù)測(cè)查詢語(yǔ)句與文檔標(biāo)題之間的相似級(jí)別(多類(lèi)分類(lèi)問(wèn)題)腮介,然后根據(jù)相似度/相似級(jí)別進(jìn)行排序肥矢。
Pairwise 方法是目前比較流行的方法,效果也非常不錯(cuò)叠洗。它的主要思想是將 Ranking 問(wèn)題形式化為二元分類(lèi)問(wèn)題甘改。也即處理的對(duì)象為文檔對(duì) <Doc1,Doc2> 灭抑,我們利用訓(xùn)練好的模型為 <Doc1十艾,Doc2> 做二分類(lèi),一類(lèi)是 Doc1 排序前于 Doc2腾节,另一類(lèi)則相反忘嫉,依次來(lái)得到不同文檔之間的排序。在訓(xùn)練時(shí)案腺,就如 PPT 中所說(shuō)的庆冕,以同一個(gè) Query 下用戶點(diǎn)擊與否作為訓(xùn)練數(shù)據(jù)的來(lái)源。舉個(gè)例子劈榨,比如在同一個(gè) Query 下访递,用戶點(diǎn)擊了 Doc1,那 <Doc1同辣,Doc2> 的二分類(lèi)結(jié)果就應(yīng)當(dāng)為 Doc1 排序前于 Doc2拷姿,由此我們就得到了帶標(biāo)注(labeled)的訓(xùn)練數(shù)據(jù)惭载,也可以依此來(lái)做監(jiān)督學(xué)習(xí)訓(xùn)練我們的 DNN 模型。
Listwise 方法相對(duì)于前兩種(Pointwise跌前,Pairwise)而言棕兼,不再將 Ranking 問(wèn)題直接形式化為一個(gè)分類(lèi)或者回歸問(wèn)題陡舅,而是直接對(duì)文檔的排序結(jié)果(List)進(jìn)行優(yōu)化抵乓。至于優(yōu)化方法,我們比較自然想到的是直接利用排序評(píng)價(jià)指標(biāo)靶衍,比如《淺談搜索引擎基礎(chǔ)(上)》中講過(guò)的 P@10 和 MAP,或者是前面提到的 NDCG,但是問(wèn)題在于 NDCG 這樣的評(píng)價(jià)指標(biāo)通常是非平滑(連續(xù))的把沼,而通用的目標(biāo)函數(shù)優(yōu)化方法針對(duì)的都是連續(xù)函數(shù)详民。針對(duì)排序問(wèn)題的優(yōu)化函數(shù)有:
- RankCosine:使用正確排序與預(yù)測(cè)排序的分值向量之間的 Cosine 相似度(夾角)來(lái)表示損失函數(shù)
- ListNet:使用正確排序與預(yù)測(cè)排序的排列概率分布之間的 KL 距離(相對(duì)熵)作為損失函數(shù)
接下來(lái) PPT 中以『ghibli車(chē)頭如何放置車(chē)牌』為例講解的 DNN 模型對(duì)搜索結(jié)果的影響:
在上線 DNN 模型之前,搜索上述 Query涛酗,搜索引擎完全不能理解 Query 的含義铡原,畢竟 BM25 模型只考慮了 IDF 因子、文檔詞頻商叹、文檔長(zhǎng)度因子和查詢?cè)~頻燕刻,如果文檔與 Query 中的詞不重合,那 BM25 模型也沒(méi)有辦法剖笙。
而在上線了 DNN 模型之后卵洗,DNN模型成功捕獲了 Query 中『車(chē)頭』和 Document 中『前』、『前面』的語(yǔ)義關(guān)系弥咪;捕獲了 Query 中『如何放置』和 Document 中『放哪里』过蹂、『怎么裝』、『咋掛』的語(yǔ)義關(guān)系聚至。
朱凱華講酷勺,其實(shí)這是在訓(xùn)練的100億樣本中,有一些樣本體現(xiàn)了這樣的語(yǔ)義關(guān)系扳躬,被 DNN 模型學(xué)習(xí)到了脆诉。兩個(gè)例子如上圖,那是兩個(gè)用戶點(diǎn)擊過(guò)的 Query/Document 對(duì)坦报。
然后是進(jìn)一步分析的例子:
如果 Query 和 Document1 都完全相同是『三歲小孩感冒怎么辦』的時(shí)候库说,DNN 的預(yù)測(cè)分?jǐn)?shù)是-15;如果我們?cè)?Document1 后面加『寶寶樹(shù)』片择,預(yù)測(cè)得分立刻大幅提高了(升到-13)潜的,雖然『寶寶樹(shù)』這個(gè)詞沒(méi)有出現(xiàn)在 Query 中,但是DNN模型認(rèn)為這個(gè)詞和 Query其他部分是有語(yǔ)義相關(guān)關(guān)系的字管,所以給出了正向的貢獻(xiàn)啰挪。如果我們?cè)?Document1 后面加了『搜房網(wǎng)』信不,預(yù)測(cè)得分立刻下降了(降到-15.8),因?yàn)?DNN 模型認(rèn)為這個(gè)『搜房網(wǎng)』的出現(xiàn)和 Query 其他部分語(yǔ)義更不相關(guān)亡呵,所以給出了負(fù)向的貢獻(xiàn)抽活。這個(gè)例子中,其實(shí)D2锰什、D3 和 D1 的區(qū)別都是增加了一個(gè)和 Query 沒(méi)關(guān)系的 Term 下硕,在傳統(tǒng)的 Information Retrieval(信息檢索)中是一定會(huì)給 D2、D3 一樣的相關(guān)性得分汁胆,而區(qū)別不出兩者的差異梭姓。
后面兩個(gè)例子類(lèi)似,DNN 能夠區(qū)分『寶寶』和『小寶寶』類(lèi)似嫩码,而和『狗寶寶』語(yǔ)義不相關(guān)誉尖。『勵(lì)志格言』與『格言』類(lèi)似铸题,而『幼兒教師』和『幼兒』語(yǔ)義不相關(guān)铡恕。
然后朱凱華提到了 DNN 模型的發(fā)展方向:
至于圖中提到的 SNE,是一種高維數(shù)據(jù)可視化工具:
百度 CNN 模型
將 CNN 模型應(yīng)用在 NLP 中能夠更好的建模短距離依賴關(guān)系丢间,PPT 中給出了 CNN 模型與 BOW-DNN 模型的比較:
BOW-DNN 模型無(wú)法考慮詞序探熔,所以不能區(qū)分 Query 中的『葫蘆島北到北京西』和『北京西到葫蘆島北』,給出了一樣的得分千劈;而 CNN 能夠知道哪個(gè)才是語(yǔ)義相關(guān)的祭刚。
第二個(gè)例子也是同理,CNN 能夠區(qū)分『我被好友刪除』和『好友被我刪除』之間的語(yǔ)義差別墙牌。
CNN for NLP
在《淺談深度學(xué)習(xí)基礎(chǔ)(下)》中涡驮,其實(shí)已經(jīng)詳細(xì)的介紹了 CNN 的結(jié)構(gòu),但文中只是將 CNN 看做計(jì)算機(jī)視覺(jué)系統(tǒng)的核心結(jié)構(gòu)喜滨,并沒(méi)有提到 CNN 在 NLP 領(lǐng)域的應(yīng)用捉捅。
這里我閱讀了《UNDERSTANDING CONVOLUTIONAL NEURAL NETWORKS FOR NLP》以及李航老師等的 Convolutional Neural Network Architectures for Matching Natural Language Sentences,對(duì) CNN 在 NLP 領(lǐng)域的應(yīng)用有了一個(gè)基本的了解虽风。
在 NLP 中應(yīng)用 CNN棒口,CNN 的輸入不再是圖像像素,而是由句子或文檔表示而成的矩陣辜膝。通常情況下无牵,表示方法如上圖所示,每一行代表一個(gè)詞的詞向量厂抖,這個(gè)詞向量可以是通過(guò) word2vec 等得到的 Distributed Representation 的詞向量茎毁,甚至也可以是利用 one-hot representation 的詞向量。這個(gè)矩陣,或者說(shuō)『圖像』的行數(shù)是單詞的個(gè)數(shù)七蜘,而列數(shù)等于詞向量的維數(shù)谭溉。
接下來(lái)是卷積過(guò)程,圖中所用的六個(gè)卷積核寬度均與矩陣的寬度相同橡卤,否則會(huì)將同一個(gè)詞的詞向量割裂扮念,這是與圖像識(shí)別中的卷積核不同的地方;另外碧库,它們的高度分別為 4 個(gè)詞柜与、3 個(gè)詞和 2 個(gè)詞,它們的卷積步長(zhǎng)為 1 個(gè)詞谈为。由此得到 6 張不同的 feature maps旅挤。
之后對(duì) feature maps 進(jìn)行最大池化踢关,記錄下每張 feature map 中的最大值伞鲫;隨后將其連接起來(lái),組成一個(gè)特征向量签舞;最后對(duì)這個(gè)特征向量進(jìn)行處理秕脓,得到我們所需的分類(lèi)結(jié)果。
在 CV(Computer Vision儒搭,計(jì)算機(jī)視覺(jué))中使用 CNN吠架,低層抽象與高層抽象的物理意義是較為明顯的,一般低層抽象發(fā)現(xiàn)圖像的邊緣等特征搂鲫,高層抽象是低層抽象的組合傍药,抽象程度更高,所記錄的特征也更復(fù)雜魂仍。而在 NLP 中拐辽,這樣的物理意義似乎并不太明顯,因?yàn)榫哂邢嚓P(guān)關(guān)系的詞并不一定緊鄰著出現(xiàn)在句子中擦酌,而圖像中同一個(gè)物體一般會(huì)由相鄰的像素來(lái)表示俱诸。
CNN 在 NLP 領(lǐng)域有一些常見(jiàn)應(yīng)用,比如情感分析赊舶、垃圾信息監(jiān)測(cè)睁搭、主題分類(lèi)、關(guān)系抽取和關(guān)系分類(lèi)等笼平。
李航博士的論文之中提到了 CNN 在語(yǔ)義匹配中的應(yīng)用园骆,提出了卷積語(yǔ)句模型(Convolutional Sentence Model)和兩個(gè)卷積匹配模型(Convolutional Matching Models):ARC-1 和 ARC-2。
其中寓调,卷積語(yǔ)句模型的示例如上圖锌唾,其實(shí)與前文提到的 CNN 在 NLP 中的基本用法相類(lèi)似,將句子表示成以詞數(shù)為行數(shù)捶牢、詞向量維數(shù)為列數(shù)的矩陣鸠珠,對(duì)其進(jìn)行多次卷積和池化巍耗,最終得到固定長(zhǎng)度的特征向量。
需要特別注意的是渐排,圖中第一次卷積的結(jié)果炬太,一豎列為一張 feature map,豎列的個(gè)數(shù)為不同卷積核的個(gè)數(shù)驯耻。De 為詞向量的維數(shù)亲族,F(xiàn)1 為不同卷積核的個(gè)數(shù)。
卷積匹配模型 ARC-1 其實(shí)原理很簡(jiǎn)單可缚,就是拿兩個(gè)句子分別過(guò)一下上面的卷積語(yǔ)句模型霎迫,得到特征向量,再將這兩個(gè)特征向量輸入到一個(gè) MLP(multi-layer perceptron帘靡,多層感知機(jī))中知给,去計(jì)算匹配度,其示意圖如下:
不過(guò)有人實(shí)驗(yàn)后提出描姚,如果直接像圖中一樣連接兩個(gè)向量作為輸入送給 MLP涩赢, 效果并不好,因?yàn)闀?huì)丟失邊界信息轩勘,MLP 不知道 a 與 b 兩個(gè)特征向量的分界在哪筒扒,更優(yōu)的方式是將 [a, b, aTWb] 整體作為輸入給到 MLP,一定要有 aTWb 這項(xiàng)绊寻。
相比較而言花墩,ARC-2 的結(jié)構(gòu)反而與 CNN 在 CV 中的應(yīng)用更相似一些,其示意圖如下:
ARC-2 嘗試讓兩個(gè)句子在得到像 ARC-1 結(jié)果那樣的高層抽象表示之前就進(jìn)行相互作用澄步,不再先分別通過(guò) CNN 結(jié)構(gòu)得到各自高層抽象表示冰蘑。
可以這樣理解,ARC-2 將兩個(gè)句子看做了二維圖像的兩個(gè)維度驮俗,兩個(gè)一維的句子結(jié)合成了一張二維的『圖片』懂缕,然后將這張?zhí)貏e的『圖片』作為 CNN 結(jié)構(gòu)的輸入。
這導(dǎo)致在 ARC-1 模型中王凑,一張 feature map 僅僅是一個(gè)列向量搪柑,或者說(shuō)是一個(gè)一維矩陣,若干個(gè)列向量并在一起形成了 ARC-1 示意圖中的模樣(二維)索烹,而在 ARC-2 中工碾,一張 feature map 成為了一個(gè)二維矩陣,若干個(gè)二維矩陣疊在一起形成了 ARC-2 示意圖中的模樣(三維)百姓。
再之后的卷積渊额、池化過(guò)程就與 CV 中 CNN 的卷積、池化過(guò)程類(lèi)似了。
需要注意的地方旬迹,第一個(gè)仍然是火惊,在 1D 卷積層中,涉及到將兩個(gè)詞向量連接奔垦,直接連接仍然會(huì)存在丟失邊界信息的問(wèn)題屹耐,采用前文提到的方案可以得到更優(yōu)結(jié)果。另外椿猎,直接用傳統(tǒng) Word Embedding 方法得到的詞向量來(lái)表示句子作為 CNN 的輸入可能不是最佳方案惶岭,利用已經(jīng)過(guò)了 LSTM 的 hidden state 效果可能會(huì)更好。
百度 RNN 模型
通過(guò) RNN 可以建模長(zhǎng)距離的依賴關(guān)系:
RNN Language Model
在《淺談深度學(xué)習(xí)基礎(chǔ)(下)》中犯眠,簡(jiǎn)單提及了 RNN 并對(duì) LSTM 的結(jié)構(gòu)進(jìn)行了較為詳細(xì)的介紹按灶,但是對(duì) RNN 的應(yīng)用提及不多,這里主要參考這篇《The Unreasonable Effectiveness of Recurrent Neural Networks》筐咧,以一個(gè)基于 RNN 的簡(jiǎn)單的字符級(jí)語(yǔ)言模型(Character-Level Language Models)為例來(lái)介紹 RNN 語(yǔ)言模型鸯旁。
對(duì)于 RNN,我們需要知道嗜浮,RNN 的當(dāng)前輸出并不只取決于當(dāng)前輸入羡亩,前一個(gè)隱層狀態(tài)與當(dāng)前輸入共同決定了當(dāng)前隱層狀態(tài),而當(dāng)前隱層狀態(tài)決定了當(dāng)前輸出危融。而且 RNN 的輸入輸出均為序列:
我們希望能利用 RNN 搭建一個(gè)簡(jiǎn)單的語(yǔ)言模型,這個(gè)語(yǔ)言模型擁有一個(gè)只包含四個(gè)字符『h雷袋、e吉殃、l、o』的單詞表楷怒。我們希望能通過(guò)訓(xùn)練使得該模型擁有輸出『hello』的能力蛋勺,具體來(lái)講,也即當(dāng)上文為『h』時(shí)輸出『e』鸠删,上文為『he』時(shí)輸出『l』抱完,上文為『hel』時(shí)輸出『l』,上文為『hell』時(shí)輸出『o』刃泡。
下圖為這個(gè) RNN 語(yǔ)言模型的示意:
RNN 的輸入輸出采用的是 one-hot representation 的詞向量巧娱,最開(kāi)始的隱層狀態(tài)被初始化為零向量,上一隱層狀態(tài)與 W_hh 相乘后與當(dāng)前輸入向量與 W_xh 相乘后的結(jié)果相加后過(guò)一個(gè) tanh 激活函數(shù)烘贴,再與 W_hy 相乘得到輸出向量禁添。輸出向量中擁有最大權(quán)值的分量所對(duì)應(yīng)的字符被視為輸出字符。
我們希望通過(guò)訓(xùn)練使得輸出向量中綠色加粗的權(quán)值能夠盡可能大桨踪,而紅色權(quán)值能夠盡可能小老翘。
另外,從圖中可以發(fā)現(xiàn),當(dāng)輸出為『e』時(shí)铺峭,hidden layer 向量中第三分量最大墓怀,而輸出為『l』時(shí),第一分量最大卫键,輸出『o』時(shí)捺疼,第二分量最大。所以 RNN 語(yǔ)言模型同樣可以產(chǎn)生類(lèi)似于神經(jīng)概率語(yǔ)言模型詞向量的 Distributed Representation 的詞向量永罚,并且啤呼,前文中也確實(shí)提到過(guò),如果將 CNN 的輸入替換為 LSTM 的 hidden state 可能會(huì)得到更好的結(jié)果呢袱。
還有官扣,我考慮這樣一個(gè)問(wèn)題,如果 RNN 語(yǔ)言模型的輸入輸出用的不是 one-hot representation 而是 Distributed Representation羞福,然后輸出就是一個(gè) Word Embedding 的結(jié)果惕蹄,我們找到詞向量空間中與輸出向量最接近的 k 個(gè)詞,然后為其分配一定的概率來(lái)決定輸出字符治专,這樣會(huì)不會(huì)有更好的結(jié)果卖陵?(我并沒(méi)有找到對(duì)應(yīng)的論文,也不知道這個(gè)想法是否已經(jīng)被實(shí)踐了张峰,只是順著思考下去)
《The Unreasonable Effectiveness of Recurrent Neural Networks》原文中另外采用莎士比亞的文集訓(xùn)練了 RNN 語(yǔ)言模型泪蔫,也得到了不錯(cuò)的結(jié)果。
知識(shí)推理
知識(shí)圖譜
我們希望通過(guò)引入『知識(shí)』喘批,利用推理能力撩荣,能夠更直接的給出用戶答案,而不是給出用戶相關(guān)網(wǎng)頁(yè)的集合饶深。
為了實(shí)現(xiàn)這樣的目的餐曹,第一個(gè)方向就是采用知識(shí)圖譜推理:
《淺談知識(shí)圖譜基礎(chǔ)》對(duì)知識(shí)圖譜的結(jié)構(gòu)以及相關(guān)技術(shù)架構(gòu)做了一個(gè)粗略的介紹,這里再簡(jiǎn)單回顧一下:
知識(shí)圖譜的邏輯結(jié)構(gòu)分為兩個(gè)層次:數(shù)據(jù)層敌厘、模式層
數(shù)據(jù)層通常以『實(shí)體-關(guān)系-實(shí)體』或者『實(shí)體-屬性-值』三元組作為事實(shí)的基本表達(dá)方式台猴。
模式層通常采用本體庫(kù)來(lái)管理,存儲(chǔ)的是經(jīng)過(guò)提煉的知識(shí)俱两。
知識(shí)圖譜的構(gòu)建技術(shù)分為三個(gè)步驟:信息抽取饱狂、知識(shí)融合、知識(shí)加工
信息抽取是一種自動(dòng)化地從半結(jié)構(gòu)化和無(wú)結(jié)構(gòu)數(shù)據(jù)中抽取實(shí)體锋华、關(guān)系以及實(shí)體屬性等結(jié)構(gòu)化信息的技術(shù)嗡官。涉及的關(guān)鍵技術(shù)包括:命名實(shí)體識(shí)別、關(guān)系抽取和屬性抽取毯焕。
知識(shí)融合對(duì)數(shù)據(jù)進(jìn)行清理和整合衍腥,包含 2 部分內(nèi)容:實(shí)體鏈接和知識(shí)合并磺樱。實(shí)體鏈接的主要技術(shù)為實(shí)體消歧和共指消解。知識(shí)合并指從第三方知識(shí)庫(kù)產(chǎn)品或已有結(jié)構(gòu)化數(shù)據(jù)獲取知識(shí)輸入婆咸,常見(jiàn)的知識(shí)合并需求有兩個(gè)竹捉,一個(gè)是合并外部知識(shí)庫(kù),另一個(gè)是合并關(guān)系數(shù)據(jù)庫(kù)尚骄。
知識(shí)加工用于獲得結(jié)構(gòu)化块差,網(wǎng)絡(luò)化的知識(shí)體系,主要包括3方面內(nèi)容:本體構(gòu)建倔丈、知識(shí)推理和質(zhì)量評(píng)估憨闰。
本體構(gòu)建包含 3 個(gè)階段:實(shí)體并列關(guān)系相似度計(jì)算、實(shí)體上下位關(guān)系抽取以及本體的生成需五。
知識(shí)的推理方法可以分為2大類(lèi):基于邏輯的推理和基于圖的推理鹉动。基于邏輯的推理主要包括一階邏輯謂詞宏邮、描述邏輯以及基于規(guī)則的推理殉了】甑牵基于圖的推理主要基于神經(jīng)網(wǎng)絡(luò)模型或 Path Ranking 算法。
質(zhì)量評(píng)估可以對(duì)知識(shí)的可信度進(jìn)行量化错洁,通過(guò)舍棄置信度較低的知識(shí)滨达,可以保障知識(shí)庫(kù)的質(zhì)量哟绊。
PPT 中顯示百度支持不同種類(lèi)的基于知識(shí)圖譜的推理册赛,比如『主語(yǔ)+謂詞』臀叙,比如『劉德華的老婆』:
支持『謂詞+取值范圍』方式的推理,比如『180cm以上的男明星』:
支持『謂詞+排名』方式的推理厌丑,比如『世界第五/第八/第十高峰』:
還有多步推理定欧,比如『謝霆鋒的爸爸的兒子的前妻的年齡』:
另外,需要注意的是怒竿,有些問(wèn)句需要先對(duì)其進(jìn)行句法分析,才能確定如何查詢知識(shí)圖譜扩氢,比如:
百度采用了依存語(yǔ)法對(duì)用戶問(wèn)句進(jìn)行句法分析耕驰。
依存句法分析與語(yǔ)義依存分析
《淺談自然語(yǔ)言處理基礎(chǔ)(下)》對(duì)依存句法分析進(jìn)行過(guò)較為詳細(xì)的介紹,這里結(jié)合哈工大語(yǔ)言云再回顧一下录豺。
**依存句法分析 (Dependency Parsing, DP) **通過(guò)分析語(yǔ)言單位內(nèi)成分之間的依存關(guān)系揭示其句法結(jié)構(gòu)朦肘。 直觀來(lái)講,依存句法分析識(shí)別句子中的『主謂賓』双饥、『定狀補(bǔ)』這些語(yǔ)法成分媒抠,并分析各成分之間的關(guān)系。示意圖如下:
在查找文獻(xiàn)的過(guò)程中咏花,我發(fā)現(xiàn)了比依存語(yǔ)法分析更進(jìn)一步的語(yǔ)義依存分析趴生,語(yǔ)義依存分析是在我之前的文章中沒(méi)有提到過(guò)的阀趴。
語(yǔ)義依存分析 (Semantic Dependency Parsing, SDP),分析句子各個(gè)語(yǔ)言單位之間的語(yǔ)義關(guān)聯(lián)苍匆,并將語(yǔ)義關(guān)聯(lián)以依存結(jié)構(gòu)呈現(xiàn)刘急。 使用語(yǔ)義依存刻畫(huà)句子語(yǔ)義,好處在于不需要去抽象詞匯本身浸踩,而是通過(guò)詞匯所承受的語(yǔ)義框架來(lái)描述該詞匯叔汁,而論元的數(shù)目相對(duì)詞匯來(lái)說(shuō)數(shù)量總是少了很多的。語(yǔ)義依存分析目標(biāo)是跨越句子表層句法結(jié)構(gòu)的束縛检碗,直接獲取深層的語(yǔ)義信息据块。其示意圖如下:
與依存句法分析相對(duì)比,語(yǔ)義依存分析所得到的結(jié)果更能反映句子的語(yǔ)義折剃。依存語(yǔ)法分析識(shí)別句子中的『主謂賓』另假、『定狀補(bǔ)』這些語(yǔ)法成分,而語(yǔ)義依存分析著重尋找的是:主要語(yǔ)義角色微驶、事件關(guān)系浪谴、語(yǔ)義依附標(biāo)記。
常見(jiàn)的語(yǔ)義依存關(guān)系如下:
知識(shí)圖譜推理的兩大限制及三種解決方案
基于知識(shí)圖譜推理有一些關(guān)鍵的限制因苹,限制之一是知識(shí)圖譜有盲區(qū)(Blindness)苟耻,圖中是一個(gè) bush wives 的例子:
一旦某概念不在知識(shí)圖譜中,知識(shí)圖譜會(huì)做一個(gè)它自己盡可能好的解釋?zhuān)赡芎驼嬲慕忉屜嗖詈芏喾鲩堋1热纭簭陌俨輬@到三味書(shū)屋』凶杖,確實(shí)有地方叫百草園,也有地方叫三味書(shū)屋款筑,一個(gè)只關(guān)注地理位置 POI 的知識(shí)圖譜就會(huì)覺(jué)得他是一個(gè)完美匹配導(dǎo)航需求的 Query智蝠。但放大來(lái)看,大家都知道他是魯迅的一篇散文奈梳。
基于知識(shí)圖譜推理的第二個(gè)限制是靜態(tài)的圖譜很難描述用戶意圖的分布以及變化:
舉例來(lái)說(shuō)杈湾,『天龍八部』這四個(gè)字,可以是小說(shuō)攘须,游戲漆撞,電視劇,電影于宙。并且如果當(dāng)前有一部電影叫做『天龍八部』上映了浮驳,那搜索結(jié)果也應(yīng)該做適當(dāng)?shù)恼{(diào)整。
只用知識(shí)圖譜向用戶提高答案是不夠的捞魁,通常只能覆蓋 1%~2% 的 Query至会。
而搜索能夠幫助知識(shí)圖譜解決盲區(qū)和意圖分布的問(wèn)題:
搜索通過(guò)為知識(shí)圖譜提供上下文,幫助其解決盲區(qū)所帶來(lái)的問(wèn)題谱俭,并可以更好的理解用戶的真實(shí)意圖奉件。而知識(shí)圖譜能夠幫助搜索引擎理解搜索的 Query 和結(jié)果宵蛀,能夠更直接的給予用戶答案。
知識(shí)圖譜與搜索結(jié)合的常見(jiàn)方式有三種:知識(shí)圖譜+搜索+長(zhǎng)答案瓶蚂、知識(shí)圖譜+搜索+結(jié)果聚合糖埋、知識(shí)圖譜+搜索+知識(shí)實(shí)體。
知識(shí)圖譜+搜索+長(zhǎng)答案
朱凱華講這是自動(dòng)識(shí)別最佳答案段落(Paragraph Ranking)的問(wèn)題窃这,其實(shí)與自動(dòng)摘要(automatic summarization/abstracting)技術(shù)的原理類(lèi)似瞳别。
這里要區(qū)分一下自動(dòng)摘要與前面提到過(guò)的信息抽取,自動(dòng)摘要是利用計(jì)算機(jī)自動(dòng)實(shí)現(xiàn)文本分析杭攻、內(nèi)容歸納和摘要自動(dòng)生成技術(shù)祟敛,而信息抽取則是從自然語(yǔ)言文本中自動(dòng)抽取指定類(lèi)型的實(shí)體、關(guān)系事件等事實(shí)信息的應(yīng)用技術(shù)兆解。
自動(dòng)摘要常見(jiàn)的方法有兩種馆铁,一種是基于圖的方法,另一種是基于特征的方法锅睛。
基于圖的方法將文檔的每句話作為節(jié)點(diǎn)埠巨,句子之間的相似度作為邊權(quán)值構(gòu)建圖模型,用 Page Rank 算法進(jìn)行求解现拒,得到每個(gè)句子的得分辣垒。邊的權(quán)重隱式定義了不同句子間的游走概率。這些方法把做摘要的問(wèn)題看成隨機(jī)游走來(lái)找出穩(wěn)態(tài)分布(Stable Distribution)下的高概率(重要)的句子集印蔬⊙埃基于圖的自動(dòng)摘要算法的代表有 TextRank 和 LexRank。
基于特征的方法通過(guò)考慮句子長(zhǎng)度侥猬、句子位置例驹、句子是否包含標(biāo)題詞等特征來(lái)發(fā)現(xiàn)文檔中的關(guān)鍵句,代表算法是 TextTeaser退唠。
但前面的方法往往都只考慮了相關(guān)性而沒(méi)考慮多樣性鹃锈,排序后得到結(jié)果的缺點(diǎn)之一便是無(wú)法避免選出來(lái)的句子之間相似度極高的現(xiàn)象,可能排名靠前的幾句話表達(dá)的都是相似的意思瞧预。
針對(duì)句子過(guò)于相似的現(xiàn)象仪召,有人提出引入懲罰因子,這就是 MMR (Maximal Marginal Relevance松蒜,最大邊緣相關(guān)模型) 算法∫丫桑基于 MMR 的變種秸苗,有人提出了玻森新聞自動(dòng)摘要算法,可以方便的平衡句子的相關(guān)性和多樣性运褪,并提供了可供調(diào)用的 新聞自動(dòng)摘要 API惊楼。
知識(shí)圖譜+搜索+結(jié)果聚合
結(jié)果聚合這里用到了情感分析(Sentiment Analysis)的技術(shù)玖瘸。因?yàn)橛行﹩?wèn)題可能目前并沒(méi)有一個(gè)權(quán)威的答案,眾說(shuō)紛紜檀咙。我們就可以通過(guò)情感分析了解雅倒,有多大比例的人持贊同意見(jiàn),以提供給用戶參考弧可。
情感分析由易到難分為三個(gè)層次:
- 分辨積極/消極情緒(PPT 中的做法)
- 為情緒評(píng)級(jí)蔑匣,由消極到積極
- 檢測(cè)出情緒的主體、客體以及復(fù)雜的情緒類(lèi)型
情感文本分類(lèi)可以大致分為有監(jiān)督學(xué)習(xí)方法棕诵、半監(jiān)督學(xué)習(xí)方法和無(wú)監(jiān)督學(xué)習(xí)方法三類(lèi)裁良。
有監(jiān)督學(xué)習(xí)方法利用大量標(biāo)注樣本,并結(jié)合各種特征和特征權(quán)值選擇策略校套,使用機(jī)器學(xué)習(xí)方法進(jìn)行情感分類(lèi)价脾。半監(jiān)督學(xué)習(xí)方法通過(guò)少量標(biāo)注樣本進(jìn)行初步訓(xùn)練,之后利用大量未標(biāo)注樣本進(jìn)行學(xué)習(xí)笛匙,以此構(gòu)建分類(lèi)模型侨把。無(wú)監(jiān)督學(xué)習(xí)方法僅使用非標(biāo)注樣本,比如可以利用一些情感分類(lèi)標(biāo)注中的種子詞集來(lái)實(shí)現(xiàn)無(wú)監(jiān)督分類(lèi)妹孙。
知識(shí)圖譜+搜索+知識(shí)實(shí)體
將搜索與知識(shí)圖譜結(jié)合可以處理一些對(duì)于知識(shí)圖譜而言難度很高的問(wèn)題秋柄。比如『王剛第二任妻子是誰(shuí)』這個(gè) Query 其實(shí)對(duì)知識(shí)圖譜理解的要求很高:要理解這個(gè)第二,不是年齡第二涕蜂,不是身高第二华匾,而是結(jié)婚時(shí)間排序第二。
利用語(yǔ)義分析可以得出『是誰(shuí)』詢問(wèn)的是一個(gè)人机隙;利用搜索可以找到與該 Query 相關(guān)的上下文內(nèi)容蜘拉;利用知識(shí)圖譜可以找到上下文中哪些實(shí)體是人。
朱凱華講有鹿,百度可以直接回答用戶 7% 的 Query:
對(duì)話式OS
概述
我一直持有一個(gè)觀點(diǎn):對(duì)話交互是人機(jī)交互的未來(lái)旭旭,因?yàn)閷?duì)話交互就是當(dāng)前人與人溝通最重要的方式。
我們創(chuàng)造了計(jì)算器葱跋,可以類(lèi)比于發(fā)現(xiàn)了一個(gè)語(yǔ)言不通的原始部落持寄,我們需要先去學(xué)習(xí)他們的語(yǔ)言,這是溝通的基礎(chǔ)娱俺。而當(dāng)我們學(xué)會(huì)了他們的語(yǔ)言之后稍味,就要開(kāi)始逐步教會(huì)他們我們的語(yǔ)言,因?yàn)樽鳛橐粋€(gè)高級(jí)文明荠卷,我們語(yǔ)言的溝通效率要更高模庐,并且對(duì)于人類(lèi)來(lái)講,溝通門(mén)檻更低油宜,也更自然掂碱。
而且實(shí)在難以想象怜姿,我們未來(lái)對(duì)家里的臺(tái)燈、洗衣機(jī)疼燥、掃地機(jī)器人等智能設(shè)備下命令時(shí)沧卢,還要走到它身邊按按鈕。
阿里小蜜的分析文章將對(duì)話系統(tǒng)分成了兩層醉者,分別是:意圖識(shí)別層但狭、問(wèn)答匹配層。
意圖識(shí)別層識(shí)別語(yǔ)言的真實(shí)意圖湃交,將意圖進(jìn)行分類(lèi)并進(jìn)行意圖屬性抽取熟空。意圖識(shí)別層是一個(gè)結(jié)合上下文數(shù)據(jù)模型與領(lǐng)域數(shù)據(jù)模型不斷對(duì)意圖進(jìn)行明確和推理的過(guò)程,決定了后續(xù)的領(lǐng)域識(shí)別流程搞莺。
問(wèn)答匹配層對(duì)問(wèn)題進(jìn)行匹配識(shí)別及生成答案息罗,經(jīng)典的問(wèn)題類(lèi)型有三種:
- 問(wèn)答型:例如『密碼忘記怎么辦?』
- 任務(wù)型:例如『我想訂一張明天從杭州到北京的機(jī)票』
- 閑聊型:例如『我心情不好』
特別的才沧,我個(gè)人把這類(lèi)虛擬個(gè)人助理(Virtual Personal Assistant迈喉,VPA)執(zhí)行任務(wù)的過(guò)程分為三個(gè)階段:
- 理解階段:即理解人類(lèi)的需求,常用技術(shù)有語(yǔ)音識(shí)別温圆、圖像識(shí)別挨摸、自然語(yǔ)言理解等。
- 思考階段:即尋找需求的解決方案岁歉,常用技術(shù)有搜索引擎得运、推薦系統(tǒng)、知識(shí)圖譜等锅移。
- 執(zhí)行階段:即完成人類(lèi)的需求熔掺,常用的技術(shù)有自然語(yǔ)言生成、智能家居/物聯(lián)網(wǎng)以及目前被用來(lái)滿足需求的其它技術(shù)非剃。
并且置逻,不同種類(lèi)的任務(wù)對(duì)于不同階段的側(cè)重程度也不同,比如『明天下午三點(diǎn)提醒我去開(kāi)會(huì)』备绽、『后天杭州冷嗎券坞,會(huì)不會(huì)下雨』側(cè)重于理解;『什么樣的襯衫比較適合我』肺素、『第 30 任美國(guó)總統(tǒng)是誰(shuí)』側(cè)重于思考恨锚;『開(kāi)始掃地/洗衣服/燒水』、『開(kāi)燈/關(guān)燈』側(cè)重于執(zhí)行倍靡。
對(duì)于『對(duì)話式OS』這部分眠冈,下文準(zhǔn)備先講解一些問(wèn)答領(lǐng)域的關(guān)鍵技術(shù),再針對(duì)上文提到的經(jīng)典問(wèn)題類(lèi)型分場(chǎng)景來(lái)討論解決方案。
DuerOS 與 POMDP 框架
PPT 中提到了 POMDP 框架蜗顽,POMDP(Partially Observable Markov Decision Processes,部分可觀測(cè)馬爾科夫決策過(guò)程)是 **MDP(Markov Decision Processes雨让,馬爾科夫決策過(guò)程) **的擴(kuò)展雇盖,而 POMDP、MDP 與淺談自然語(yǔ)言處理基礎(chǔ)(上)中講過(guò)的 MC(馬爾可夫鏈)和 HMM(隱馬爾科夫模型)又有一定相關(guān)性栖忠,示意圖如下:
我們?nèi)菀桌斫?MC 到 HMM 是狀態(tài)由可見(jiàn)變?yōu)榱瞬豢梢?jiàn)崔挖;由 MC 到 MDP 多考慮了動(dòng)作,我們可以以下棋為例庵寞,每個(gè)狀態(tài)到下個(gè)狀態(tài)的轉(zhuǎn)移不僅和當(dāng)前狀態(tài)有關(guān)狸相,還和當(dāng)前狀態(tài)我們采取的動(dòng)作有關(guān);由 MDP 到 POMDP 的過(guò)程同樣是狀態(tài)由可見(jiàn)變?yōu)椴豢梢?jiàn)的過(guò)程捐川,也同樣舉個(gè)例子脓鹃,MDP 中,在明確當(dāng)前狀態(tài)的前提下古沥,與動(dòng)作結(jié)合后瘸右,確定下一個(gè)狀態(tài),而 POMDP 中岩齿,我們并不明確知道當(dāng)前狀態(tài)太颤,只知道當(dāng)前狀態(tài)不同可能性的概率,這樣我們的決策過(guò)程就要考慮到當(dāng)前狀態(tài)的不同可能性盹沈。
下文將會(huì)講到的強(qiáng)化學(xué)習(xí)還會(huì)重新提到 MDP 這部分內(nèi)容龄章。
朱凱華提到,從整個(gè)對(duì)話系統(tǒng)來(lái)說(shuō)乞封,DuerOS的整體是符合POMDP的框架的做裙。采用POMDP的框架有很大的好處:
- 整個(gè)系統(tǒng)可以整體建模每個(gè)環(huán)節(jié)的出錯(cuò)可能性
- 整個(gè)系統(tǒng)可以整體建模幾輪對(duì)話后用戶最終給予的反饋
PPT 中還提到了整個(gè)『對(duì)話式OS』系統(tǒng)的基本組成部分,從 ASR(自動(dòng)語(yǔ)言識(shí)別)到 NLU (自然語(yǔ)言理解)到 DST(對(duì)話狀態(tài)跟蹤)到 DM(對(duì)話管理)歌亲,之后選擇直接執(zhí)行動(dòng)作或者進(jìn)行 NLG(自然語(yǔ)言生成)和 TTS(語(yǔ)音合成)菇用。
按照我之前的任務(wù)過(guò)程的三個(gè)階段來(lái)劃分,圖中的 ASR陷揪、NLU惋鸥、DST 是理解階段,DM 是思考階段悍缠,Action卦绣、NLG、TTS 是執(zhí)行階段飞蚓,也是完全符合我的構(gòu)想的 :)
ASR 與語(yǔ)音糾錯(cuò)
PPT 中還介紹了百度的語(yǔ)音糾錯(cuò)技術(shù)滤港,利用了RNN的序列標(biāo)注能力,來(lái)找到語(yǔ)義上可能的替換點(diǎn),然后通過(guò)上文提到過(guò)的 Skip-gram 檢索最終產(chǎn)生正確的替換溅漾。
但是作為 PM山叮,我個(gè)人對(duì)這個(gè)功能持保留意見(jiàn),這個(gè)功能用起來(lái)很蛋疼:
- 一是整個(gè)用戶群體對(duì)這種功能的認(rèn)知程度不高添履,不了解這個(gè)功能
- 即便了解這個(gè)功能屁倔,還需要會(huì)拆字,對(duì)用戶來(lái)說(shuō)太麻煩暮胧,學(xué)習(xí)成本高
- 即便會(huì)拆字锐借,怎么讓用戶相信他拆字說(shuō)的那一大段話你都能識(shí)別正確,心理成本太大
- 而且用戶更正的方式確實(shí)是千奇百怪多種多樣的往衷,理論上是個(gè)無(wú)限集钞翔,怎么保證識(shí)別率
所以這樣的情況理論上式存在的:用戶說(shuō)了一句話,出現(xiàn)了識(shí)別錯(cuò)誤席舍,用戶語(yǔ)音糾錯(cuò)布轿,結(jié)果糾錯(cuò)語(yǔ)句被識(shí)別錯(cuò)誤,用戶繼續(xù)語(yǔ)音糾錯(cuò)俺亮,結(jié)果越來(lái)越錯(cuò)驮捍,從今往后用戶再也不會(huì)用這個(gè)功能了。
對(duì)于這類(lèi) VPA脚曾,你能做到什么功能并不是最重要的事情东且,最重要的事情是讓用戶相信,通過(guò)你來(lái)滿足這個(gè)需求的預(yù)期心理成本要低于他之前的做法本讥,這樣他才會(huì)來(lái)用你珊泳。而這種預(yù)期心理成本又包括了解成本、學(xué)習(xí)成本拷沸、信任成本以及你產(chǎn)品功能未達(dá)預(yù)期的損失成本等等色查。
綜上,這部分技術(shù)我不再做詳細(xì)介紹撞芍。
NLU 與 Slot Filling
Slot Filling 是完成之前提到的任務(wù)型問(wèn)題的重要技術(shù)秧了,百度采用一個(gè)字符級(jí)的雙向 LSTM 和
CRF 層來(lái)做序列標(biāo)注,再利用序列標(biāo)注的結(jié)果做填槽序无。
這里先來(lái)說(shuō)一下雙向 LSTM验毡,LSTM 結(jié)構(gòu)在淺談深度學(xué)習(xí)基礎(chǔ)(下) 中有過(guò)詳細(xì)的講解,這里就不重復(fù)了帝嗡,這里的重點(diǎn)主要放在雙向上晶通。
我們知道 RNN 的一個(gè)突出優(yōu)點(diǎn)是能夠解決長(zhǎng)距離的依賴關(guān)系,這對(duì)于自然語(yǔ)言處理是非常重要的哟玷,因?yàn)檎Z(yǔ)言中一詞多義的情況很多狮辽,很多時(shí)候沒(méi)有上下文就無(wú)法對(duì)詞的真實(shí)含義進(jìn)行準(zhǔn)確的判斷。但是普通的 LSTM 存在一個(gè)問(wèn)題,就是只能利用上文中的信息喉脖,而如果能像訪問(wèn)過(guò)去的上下文信息一樣椰苟,訪問(wèn)未來(lái)的上下文,這樣對(duì)于許多序列標(biāo)注任務(wù)是非常有益动看,這就是雙向 LSTM 的基本思想尊剔。
上圖為雙向 RNN(BRNN) 的結(jié)構(gòu)示意圖,與前文中的單向 RNN 的示意圖比較菱皆,可以發(fā)現(xiàn)襟企,雙向 RNN 中的輸出不再只取決于 Forward Layer 中的隱層狀態(tài)议慰,而是同時(shí)取決于 Foward Layer 與 Backward Layer 中的兩個(gè)隱層狀態(tài);當(dāng)前輸入也同時(shí)影響 Forward Layer 與 Backward Layer 對(duì)應(yīng)位置的隱層狀態(tài)焦人。
而雙向 LSTM奶甘,就是將 BRNN 中的普通 RNN 單元更換為 LSTM 單元篷店。
百度的做法如下圖所示:
這里舉了一個(gè)例子『王樂(lè)君偽裝者觀看』,先經(jīng)過(guò)自動(dòng)分詞(淺談自然語(yǔ)言處理基礎(chǔ)(中)中有詳細(xì)介紹)拿到劃詞邊界臭家,并以 0/1 的方式存儲(chǔ)疲陕。
隨后將每個(gè)字進(jìn)行 Word Embedding,拿到字向量钉赁,作為雙向 LSTM 的輸入蹄殃,而從圖中來(lái)看,雙向 LSTM 的輸出是一個(gè)具有兩個(gè)分量的向量你踩。
仔細(xì)觀察的話可以發(fā)現(xiàn)诅岩,CRF layer 中,對(duì)『劇名』和『演員』的標(biāo)注是以 IOB 方式進(jìn)行的:I 為詞中带膜、B 為詞首吩谦、O 為詞外。實(shí)際上在淺談自然語(yǔ)言處理基礎(chǔ)(下)中膝藕,就提到式廷,基于語(yǔ)塊的語(yǔ)義角色標(biāo)注方法利用 IOB 等方式將語(yǔ)義角色標(biāo)注作為一個(gè)序列標(biāo)注問(wèn)題來(lái)解決。而且基于語(yǔ)塊的語(yǔ)義角色標(biāo)注方法一般沒(méi)有論元剪除這個(gè)過(guò)程芭挽,因?yàn)?O 相當(dāng)于已經(jīng)剪除了大量非 base NP滑废,也即不可能為論元的內(nèi)容。論元辨識(shí)通常也不需要了览绿,base NP就可以認(rèn)為是論元策严。
看起來(lái),在 CRF Layer 中饿敲,序列標(biāo)注是這樣進(jìn)行的妻导。首先有多少個(gè)/種類(lèi)的槽需要填寫(xiě),LSTM 的輸出向量中就存在多少個(gè)分量,然后在 CRF Layer 中倔韭,將向量進(jìn)行拆解术浪,不同輸出向量中相同位置的分量被放在一起處理,作為該特定槽位所需的序列標(biāo)注素材寿酌。
至于 CRF(條件隨機(jī)場(chǎng))胰苏,在淺談自然語(yǔ)言處理基礎(chǔ)(中)中有過(guò)詳細(xì)介紹,這里就不重復(fù)了醇疼。
DST(對(duì)話狀態(tài)跟蹤)硕并、上下文替換、主體補(bǔ)全
對(duì)話狀態(tài)跟蹤就是根據(jù)多輪的對(duì)話來(lái)確定用戶當(dāng)前的目標(biāo)(user goal)到底是什么的過(guò)程秧荆。
在封閉域的任務(wù)型問(wèn)題中倔毙,對(duì)話狀態(tài)跟蹤以槽位的填寫(xiě)為核心,下文中會(huì)有講解乙濒。這里主要說(shuō)一下開(kāi)放域中的狀態(tài)跟蹤:
開(kāi)放域中狀態(tài)追蹤的核心是上下文替換陕赃、主體補(bǔ)全。從圖中來(lái)看颁股,上下文替換將上文中的動(dòng)作加給當(dāng)前句子中的主體么库,而主體補(bǔ)全為上文中的主體執(zhí)行當(dāng)前句子中的動(dòng)作;上下文替換是去上文中找動(dòng)作甘有,主體補(bǔ)全是去上文中找主體诉儒。
這兩個(gè)經(jīng)典問(wèn)題很適合用來(lái)測(cè)試開(kāi)放域 chatbot 的多輪對(duì)話能力,我測(cè)試了一下圖靈機(jī)器人:
發(fā)現(xiàn)它在上下文替換方面做過(guò)優(yōu)化梧疲,而主體補(bǔ)全做的就不好了:
回答完全不知所云允睹。
這里還要與知識(shí)圖譜中的實(shí)體消歧和共指消解做一下區(qū)分,實(shí)體消歧是區(qū)分同名實(shí)體幌氮,共指消解是為實(shí)體的代稱(chēng)找到對(duì)應(yīng)的實(shí)體缭受,比如『他/它/她/這』是什么;而這里的上下文替換和主體補(bǔ)全的場(chǎng)景是對(duì)話该互,而不是文檔米者,很多事情代詞也會(huì)被省略,僅通過(guò)共指消解無(wú)法起到這里主體補(bǔ)全的作用宇智。當(dāng)然也并不是一點(diǎn)作用都起不到蔓搞,只是上下文替換和主體補(bǔ)全更適合對(duì)話的場(chǎng)景。
這里重新放一下百度的 PPT:
這里采用了 BIE 的標(biāo)注方式随橘,與前文中的 IOB 相比喂分,多了對(duì)詞尾的標(biāo)注 E。
百度通過(guò) RNN + CRF 來(lái)做到的狀態(tài)更新:用戶順序說(shuō)Q1机蔗,Q2蒲祈,百度看到Q2會(huì)直接更新理解為Q3甘萧。從圖中來(lái)看,上下文替換/主體補(bǔ)全的基礎(chǔ)和填槽一樣梆掸,仍然是序列標(biāo)注扬卷,BIE 標(biāo)注識(shí)別主體,如果句子中沒(méi)有主體就從上文找酸钦;如果句子中只有主體怪得,就代入到上一句,替換掉上一句中的主體卑硫。
seq2seq徒恋、Encoder-Decoder、Attention Model
既然談到了開(kāi)放域的對(duì)話問(wèn)題欢伏,就不得不說(shuō)到 seq2seq 了因谎。seq2seq 是 Google 開(kāi)源推出的一個(gè)具體實(shí)現(xiàn)了 Encoder-Decoder 框架,并結(jié)合了 Attention Model 的一個(gè)序列轉(zhuǎn)換模型颜懊,可以被用于機(jī)器翻譯、文本總結(jié)风皿,會(huì)話建模河爹、圖像字幕等場(chǎng)景,其示意圖如下:
先說(shuō)什么是 Encoder-Decoder 框架桐款,Encoder-Decoder 框架可以看作是一種文本處理領(lǐng)域的研究模式咸这,其最抽象的一種表示如下圖所示:
如果采用 RNN 來(lái)實(shí)現(xiàn) Encoder-Decoder 框架,一種常見(jiàn)的模型配置如下圖所示:
上圖所示的模型客觀上存在兩個(gè)問(wèn)題:
- 第一個(gè)是魔眨,輸入序列的所有信息都需要靠圖中 C 的記憶模塊來(lái)存儲(chǔ)媳维,C 的記憶模塊實(shí)際上成為了整個(gè)網(wǎng)絡(luò)性能的瓶頸
- 第二個(gè)是,以翻譯場(chǎng)景為例遏暴,將『Tom chase Jerry』翻譯為『湯姆追逐杰瑞』侄刽,在翻譯『湯姆』時(shí),『Tom』和『chase』朋凉、『Jerry』的權(quán)重相同州丹,這顯然是不應(yīng)該的
依照這樣的思路,Attention Model 被提出了杂彭,其示意圖如下:
以 RNN 為例墓毒,將其細(xì)化,如下圖:
輸出序列中的每一個(gè)字符產(chǎn)生時(shí)亲怠,不僅考慮了當(dāng)前輸入(實(shí)際上通常為輸出序列的上一個(gè)輸出字符)和上個(gè)隱層狀態(tài)所计,還為輸入序列的輸出(下圖中的 h1 到 h5)分配了不同權(quán)重,一并考慮進(jìn)來(lái):
一般文獻(xiàn)中會(huì)把 Attention Model 看做單詞對(duì)齊模型团秽,這在機(jī)器翻譯的場(chǎng)景下表現(xiàn)的尤為突出:
輸入序列中的不同字符對(duì)輸出序列產(chǎn)生某一特定字符所起到的作用顯然應(yīng)該是有區(qū)別的主胧,就像讀英文篇章做閱讀理解叭首,一道題目的答案通常也出自篇章中特定的幾句話,將注意力平均分配給所有內(nèi)容是不應(yīng)該的讥裤。
在 Google 提供的 seq2seq 的示意圖中放棒,紫色的粗細(xì)代表了輸入序列中的不同字符對(duì)當(dāng)前輸出序列產(chǎn)生字符的影響大小。
DM(對(duì)話狀態(tài)管理)與 Reinforcement Learning(強(qiáng)化學(xué)習(xí))
在對(duì)話狀態(tài)管理階段己英,主要是系統(tǒng)需要選擇合適的 Action 來(lái)動(dòng)作间螟。
PPT 中舉了一個(gè)度秘高考的例子,通過(guò)與考生對(duì)話损肛,引導(dǎo)考生進(jìn)一步了解他關(guān)心學(xué)校的信息厢破,來(lái)最終做出決定。
百度把這個(gè) Dialogue management 的問(wèn)題構(gòu)建成一個(gè) MDP 問(wèn)題(由于在實(shí)際產(chǎn)品中并不知道考生最終填報(bào)了哪個(gè)志愿治拿, Reward 被設(shè)計(jì)成每次交互都會(huì)給出顯示的獎(jiǎng)懲)摩泪,放在經(jīng)典的 Reinforcement Learning 的框架中來(lái)求解。
接下來(lái)介紹 Reinforcement Learning劫谅,針對(duì)強(qiáng)化學(xué)習(xí)见坑,南京大學(xué)的俞揚(yáng)博士有過(guò)兩篇文章:強(qiáng)化學(xué)習(xí)前沿(上)、強(qiáng)化學(xué)習(xí)前沿(下)捏检,非常詳盡荞驴,我這里只是概要的介紹一下。
其實(shí)我在第一篇文章淺談機(jī)器學(xué)習(xí)基礎(chǔ)(上)中就提到過(guò)強(qiáng)化學(xué)習(xí)贯城⌒苈ィ可以這樣理解,強(qiáng)化學(xué)習(xí)與訓(xùn)練動(dòng)物的過(guò)程類(lèi)似能犯,動(dòng)物面對(duì)一個(gè)未知環(huán)境鲫骗,馴獸師發(fā)出指令后,如果動(dòng)物做出了正確的行為踩晶,就會(huì)得到獎(jiǎng)勵(lì)执泰。強(qiáng)化學(xué)習(xí)也是同理,是一個(gè)讓機(jī)器學(xué)習(xí)正確動(dòng)作并最大化總獎(jiǎng)勵(lì)的過(guò)程合瓢。
強(qiáng)化學(xué)習(xí)與監(jiān)督學(xué)習(xí)不同坦胶,如下圖所示:
監(jiān)督學(xué)習(xí)是一個(gè)開(kāi)環(huán)的學(xué)習(xí)過(guò)程:
- 通常,監(jiān)督學(xué)習(xí)任務(wù)會(huì)從環(huán)境中收集一批數(shù)據(jù)
- 接著我們用監(jiān)督學(xué)習(xí)算法從數(shù)據(jù)中產(chǎn)生模型
- 最后就可以用這個(gè)模型來(lái)做預(yù)測(cè)了
而強(qiáng)化學(xué)習(xí)晴楔,是一個(gè)閉環(huán)學(xué)習(xí)過(guò)程:
- 首先顿苇,也是從環(huán)境中產(chǎn)生數(shù)據(jù);
- 用強(qiáng)化學(xué)習(xí)的算法從數(shù)據(jù)中產(chǎn)生模型税弃;
- 還要把模型放回到環(huán)境中運(yùn)行纪岁,接著又會(huì)產(chǎn)生新的數(shù)據(jù)出來(lái),再重復(fù)以上步驟则果。
總結(jié)起來(lái)幔翰,兩者最核心的區(qū)別漩氨,在于強(qiáng)化學(xué)習(xí)需考慮自身對(duì)環(huán)境的影響。
強(qiáng)化學(xué)習(xí)的歷史非常悠久遗增,其中叫惊,早期的強(qiáng)化學(xué)習(xí)和它的一個(gè)數(shù)學(xué)模型 MDP 有很大關(guān)系,也就是前文中提到過(guò)的馬爾科夫決策過(guò)程做修,其示意圖如下:
馬爾科夫決策過(guò)程里有一個(gè)四元組霍狰,即狀態(tài)、動(dòng)作饰及、獎(jiǎng)賞蔗坯、轉(zhuǎn)移;每個(gè)狀態(tài)可能做不同的動(dòng)作燎含,所以轉(zhuǎn)移概率也不同宾濒。
早期的強(qiáng)化學(xué)習(xí)是完全以 MDP 為數(shù)學(xué)基礎(chǔ)的,對(duì)它來(lái)說(shuō)也是要找一個(gè)策略屏箍,這個(gè)策略就是選擇不同動(dòng)作會(huì)有不同的概率绘梦,或者是確定性策略,在一個(gè)狀態(tài)就輸出一個(gè)動(dòng)作赴魁。
求解馬爾科夫決策過(guò)程上的最優(yōu)策略谚咬,就是找到馬爾科夫決策過(guò)程中總回報(bào)最大的策略。
在計(jì)算回報(bào)時(shí)尚粘,會(huì)涉及到 V 值函數(shù)和 Q 值函數(shù)。
V 值的含義是從當(dāng)前狀態(tài)出發(fā)敲长,經(jīng)過(guò)足夠長(zhǎng)時(shí)間之后郎嫁,所估算出的該步的回報(bào)是多少。但是如果只計(jì)算 V 值祈噪,從中導(dǎo)出策略并不方便泽铛,它表示的是總的回報(bào),而我們需要選擇動(dòng)作辑鲤,也即知道哪個(gè)動(dòng)作所導(dǎo)致的下個(gè)狀態(tài)的 V 值更好盔腔。
為了避免麻煩,我們引入 Q 值函數(shù)月褥,Q 值函數(shù)比 V 值函數(shù)多了一個(gè)動(dòng)作輸入弛随,它要估計(jì)的是在當(dāng)前做了動(dòng)作 a 以后,再跟著這個(gè)策略 π 一直做下去宁赤,它的回報(bào)是多少舀透。有了 Q 值函數(shù),看到狀態(tài) s 后决左,把每個(gè) a 帶進(jìn)去愕够,看哪個(gè) a 出來(lái)的 Q 值大走贪,就用哪個(gè) a。所以這樣就可以在當(dāng)前狀態(tài)直接決定用哪個(gè)動(dòng)作了惑芭。
Q 值和 V 值是有直接的對(duì)應(yīng)關(guān)系的坠狡,如果按照策略來(lái)選擇動(dòng)作,平均的 Q 值就是 V 值遂跟。
尋找最優(yōu)策略通常有兩種方法:
- 第一種方法:首先評(píng)估給定一個(gè)策略的 V 值逃沿,然后找一個(gè)方向來(lái)提高這個(gè)策略,重新計(jì)算 V 值來(lái)做策略迭代
- 第二種方法:直接通過(guò)V值來(lái)更新V值漩勤,這一方法稱(chēng)為值迭代
上面講了 MDP感挥,但是 MDP 并不是強(qiáng)化學(xué)習(xí),因?yàn)樗乃脑M都已給出越败,特別是獎(jiǎng)賞和轉(zhuǎn)移触幼。你任給它一個(gè)狀態(tài)和動(dòng)作,都可以算出獎(jiǎng)賞值究飞;轉(zhuǎn)移也是置谦,輸入一個(gè)狀態(tài)、動(dòng)作以后亿傅,它會(huì)告訴你轉(zhuǎn)移出來(lái)的狀態(tài)是什么媒峡。
而在強(qiáng)化學(xué)習(xí)任務(wù)中,獎(jiǎng)賞和轉(zhuǎn)移都是未知的葵擎,需要通過(guò)學(xué)習(xí)得出谅阿。具體解決辦法有兩個(gè),一個(gè)是基于模型(Model-Based)的方法酬滤,另一個(gè)是免模型學(xué)習(xí)签餐。
基于模型方法就是構(gòu)建出強(qiáng)化學(xué)習(xí)所對(duì)應(yīng)的 MDP 模型,再在 MDP 模型的基礎(chǔ)上去求解策略盯串。從隨機(jī)策略開(kāi)始氯檐,把策略放到環(huán)境中運(yùn)行,從運(yùn)行的序列數(shù)據(jù)中把 MDP 抽象出來(lái)体捏。因?yàn)樾蛄袛?shù)據(jù)可以提供環(huán)境轉(zhuǎn)移和獎(jiǎng)賞的監(jiān)督信息冠摄,簡(jiǎn)單的做一個(gè)回歸,就能知道一個(gè)狀態(tài)做了一個(gè)動(dòng)作下面會(huì)轉(zhuǎn)移到哪兒几缭,以及能得到的獎(jiǎng)賞是多少河泳。但是基于模型的方法計(jì)算起來(lái)往往比較復(fù)雜,現(xiàn)在的研究工作大多專(zhuān)注在免模型學(xué)習(xí)上年栓。
免模型學(xué)習(xí)和之前講到的策略迭代的思路很像乔询,首先,評(píng)估當(dāng)前策略怎么樣韵洋;第二竿刁,提高當(dāng)前策略黄锤。主要方法有兩種:一種叫做蒙特卡羅采樣方法(Monte-Carlo method),一種是時(shí)序差分法(Temporal Difference method)食拜。
蒙特卡羅采樣方法的本質(zhì)是利用采樣來(lái)計(jì)算 Q 的期望值鸵熟,比如簡(jiǎn)單的,我們可以直接采樣環(huán)境中的數(shù)據(jù)负甸,來(lái)估計(jì) Q 的值流强。但是這種簡(jiǎn)單的方法存在一個(gè)問(wèn)題,就是由于缺乏對(duì)環(huán)境的探索呻待,沒(méi)有足夠多種類(lèi)的數(shù)據(jù)打月,無(wú)法評(píng)估策略在所有情況下的可能性,導(dǎo)致 Q 值的更新可能會(huì)存在問(wèn)題蚕捉。
所以我們需要對(duì)環(huán)境進(jìn)行探索奏篙,得到不同動(dòng)作的 Q 值。我們可以探索盡可能多的次數(shù)迫淹,來(lái)確保 Q 值估算的準(zhǔn)確性秘通,但花費(fèi)了太多機(jī)會(huì)在 Q 值低的動(dòng)作上;也可以不同動(dòng)作都只探索一次敛熬,然后根據(jù)這一次的 Q 值估算結(jié)果肺稀,將剩余的機(jī)會(huì)都給予這次估計(jì)中 Q 值大的動(dòng)作,這就是一個(gè)尋找平衡點(diǎn)的問(wèn)題了应民。
有一種理論上相當(dāng)漂亮的 UCB(Upper Confidence Bound)方法被用來(lái)處理這個(gè)問(wèn)題话原,簡(jiǎn)單的講,兩個(gè)動(dòng)作的平均 Q 值差距越大诲锹,探索次數(shù)就越少稿静。
而且對(duì)于策略而言,存在 On/Off Policy 策略的區(qū)別辕狰,簡(jiǎn)單的說(shuō) On Policy 就是策略中包含探索,而 Off Policy 的話控漠,探索是探索蔓倍,策略是策略,通過(guò)帶探索的策略采樣盐捷,但更新的只是策略本身偶翅。
另外,蒙特卡洛采樣算法有一個(gè)很突出的缺陷:一定要拿到整個(gè)軌跡以后碉渡,才能更新模型聚谁。而時(shí)序差分法每走一步都可以更新模型。
在時(shí)序差分法中滞诺,On Policy 策略對(duì)應(yīng)** SARSA 算法**形导,Off Policy 策略對(duì)應(yīng) Q-Learning 算法环疼。
前面所講的這兩種方法,處理的都是離散的情景朵耕,但真實(shí)環(huán)境中有很多問(wèn)題無(wú)法離散的來(lái)表示炫隶,為了能讓強(qiáng)化學(xué)習(xí)方法能夠處理連續(xù)場(chǎng)景下的問(wèn)題,又有兩種方法被提出了阎曹,分別是:值函數(shù)估計(jì)(Value function approximation)伪阶、策略搜索(Policy Search)。
策略搜索可以學(xué)出隨機(jī)性策略处嫌,不同于值函數(shù)的確定性策略栅贴;并且策略搜索和監(jiān)督學(xué)習(xí)的兼容性比較好;在高維數(shù)據(jù)下的表現(xiàn)也好一些熏迹。
阿里小蜜技術(shù)實(shí)踐分析
上文已經(jīng)對(duì)自然語(yǔ)言問(wèn)答所涉及到的技術(shù)進(jìn)行了概要的講解檐薯,這里準(zhǔn)備以阿里小蜜為例,具體的探討不同問(wèn)題場(chǎng)景下的技術(shù)選型癣缅,以《顛覆傳統(tǒng)的電商智能助理-阿里小蜜技術(shù)揭秘》為參考厨剪。
首先,為了匹配問(wèn)題場(chǎng)景友存,需要進(jìn)行意圖識(shí)別:
將用戶相關(guān)特征祷膳、用戶行為序列、Query+Context 等屡立,表示為前文講過(guò)的 one-hot representation 或者 Distributed Representation 的詞向量直晨,作為輸入送入 DNN 模型,可以直接進(jìn)行多分類(lèi)膨俐,也可以進(jìn)行多次二分類(lèi)勇皇。多分類(lèi)的性能要優(yōu)于二分類(lèi),而二分類(lèi)的復(fù)用性較好焚刺。
之后進(jìn)入到具體問(wèn)題場(chǎng)景的處理階段敛摘,前文提到,經(jīng)典的問(wèn)題類(lèi)型有三種:問(wèn)答型乳愉、任務(wù)型兄淫、閑聊型。
而目前主流的智能匹配技術(shù)分為如下 4 種方法:
- 基于模板匹配(Rule-Based)
- 基于檢索模型(Retrieval Model)
- 基于統(tǒng)計(jì)機(jī)器翻譯模型(SMT)
- 基于深度學(xué)習(xí)模型(Deep Learning)
模板匹配就是基于規(guī)則的自然語(yǔ)言處理了蔓姚,通常是基于上下文無(wú)關(guān)文法搭建一個(gè)解析系統(tǒng)捕虽,由人工編寫(xiě)或機(jī)器生成一些匹配句式,配合同義詞典來(lái)處理用戶問(wèn)句坡脐。
檢索模型上文提到過(guò)泄私,BM25 就是一個(gè)典型的例子拉庶。
SMT 上文也提到過(guò)拄丰,通過(guò)將翻譯模型引入搜索虚茶,來(lái)建模詞與詞之間的語(yǔ)義相近關(guān)系婉陷。
基于深度學(xué)習(xí)模型的上文也提到過(guò)很多,比如神經(jīng)概率語(yǔ)言模型斩松、word2vec伶唯、DSSM、基于 CNN的惧盹、基于 RNN 的乳幸。
對(duì)于問(wèn)答型問(wèn)題,其特點(diǎn)是:有領(lǐng)域知識(shí)的概念钧椰,且知識(shí)之間的關(guān)聯(lián)性高粹断,并且對(duì)精準(zhǔn)度要求比較高。
基于問(wèn)答型場(chǎng)景的特點(diǎn)嫡霞,阿里小蜜在技術(shù)選型上采用了知識(shí)圖譜構(gòu)建+檢索模型相結(jié)合的方式來(lái)進(jìn)行核心匹配模型的設(shè)計(jì)瓶埋。所謂『知識(shí)圖譜構(gòu)建+檢索模型』,與前文百度的『知識(shí)圖譜+搜索』是異曲同工的诊沪。
知識(shí)圖譜的構(gòu)建方法在《淺談知識(shí)圖譜基礎(chǔ)》中有詳細(xì)的講解养筒。
知識(shí)圖譜在模型構(gòu)建初期可能會(huì)存在數(shù)據(jù)的松散和覆蓋率問(wèn)題,導(dǎo)致匹配的覆蓋率不足端姚,也就是前文提到的『盲區(qū)』問(wèn)題晕粪;原文中還提到了知識(shí)圖譜的維護(hù)成本較高;原文中沒(méi)有提到渐裸,但必定存在的是巫湘,僅憑知識(shí)圖譜無(wú)法分辨用戶具體意圖,也就是前文提到的『用戶意圖』問(wèn)題昏鹃。所以除了知識(shí)圖譜尚氛,還要配合傳統(tǒng)的檢索模型,阿里小蜜檢索模型的基本流程如下圖:
其實(shí)主要也就是搜索引擎里面的那些東西洞渤,可以參考《淺談搜索引擎基礎(chǔ)(上)》和《淺談搜索引擎基礎(chǔ)(下)》兩篇文章阅嘶。
計(jì)算模塊阿里小蜜用的是空間向量模型,利用余弦相似度等計(jì)算文本之間的相似度载迄。不過(guò)改成概率檢索模型 BM25讯柔,再配合前文提到的歸一化命中、同義詞命中宪巨、主題命中和反義主題命中,可能會(huì)得到更好的結(jié)果溜畅。
然后是任務(wù)型問(wèn)題捏卓,特點(diǎn)是有領(lǐng)域知識(shí)的概念,每個(gè)任務(wù)負(fù)責(zé)獨(dú)立的業(yè)務(wù)流程,任務(wù)之間相對(duì)互斥性強(qiáng)怠晴,精準(zhǔn)度要求高遥金。
基于任務(wù)型的特點(diǎn),在技術(shù)選型上蒜田,阿里小蜜采用了意圖決策+Slot Filling 的方式進(jìn)行會(huì)話匹配設(shè)計(jì)稿械。
所謂意圖決策,就是找到對(duì)應(yīng)的領(lǐng)域本體知識(shí)場(chǎng)景冲粤,比如機(jī)票的場(chǎng)景:
而意圖決策其實(shí)就是分類(lèi)美莫,和詞性標(biāo)注、詞義消歧梯捕、實(shí)體消歧厢呵、意圖識(shí)別這些方法類(lèi)似,比如可以用上下文特征向量和余弦相似度來(lái)聚類(lèi)(無(wú)監(jiān)督)傀顾、用樸素貝葉斯算法(有監(jiān)督生成模型)襟铭、用最大熵模型(有監(jiān)督判別模型)、或者把上下文 Embedding 了送進(jìn)一個(gè) DNN 里也是可以的(深度學(xué)習(xí))短曾。
找到對(duì)應(yīng)的領(lǐng)域本體知識(shí)場(chǎng)景之后寒砖,就要開(kāi)始填槽了,做 Slot Filling 的方法前文也有涉及嫉拐,百度用的是雙向 LSTM+CRF哩都。
阿里的基本流程是,在問(wèn)答匹配過(guò)程中結(jié)合上下文模型和領(lǐng)域數(shù)據(jù)模型不斷在 Query 中進(jìn)行 Slot Filling椭岩,并循環(huán)進(jìn)行本體意圖樹(shù)的不斷填充和修改茅逮,直到必選意圖樹(shù)填充完整后進(jìn)行輸出,如下圖:
核心就是把所有必填的槽位都填好判哥,沒(méi)填好就追問(wèn)献雅,這也是封閉域中的一種可行的多輪對(duì)話方式。
但是其實(shí)任務(wù)型問(wèn)題遠(yuǎn)不止這么簡(jiǎn)單塌计,就比如上文中提到的幫助用戶填報(bào)高考志愿這樣的一個(gè)任務(wù)型問(wèn)題挺身,不是通過(guò)追問(wèn)填好槽位 A B C 就能輸出結(jié)果的。這種任務(wù)型問(wèn)題涉及到狀態(tài)的轉(zhuǎn)移锌仅,用戶在詢問(wèn)的過(guò)程中不斷了解章钾,不斷澄清,系統(tǒng)要不斷選擇合適的 Action 來(lái)引導(dǎo)用戶逐步明確自己的意向热芹,最終填好最重要的那個(gè)槽贱傀。比如『我該怎么填寫(xiě)高考志愿』,難道直接問(wèn)用戶『你想去哪所學(xué)幸僚В』府寒、『你想報(bào)哪個(gè)專(zhuān)業(yè)』來(lái)填槽?。這樣的問(wèn)題通過(guò) Reinforcement Learning 來(lái)處理可能會(huì)是不錯(cuò)的方法株搔。
然后就是閑聊型了剖淀,特點(diǎn)是非面向目標(biāo),語(yǔ)義意圖不明確纤房,通常期待的是語(yǔ)義相關(guān)性和漸進(jìn)性纵隔,對(duì)準(zhǔn)確率要求相對(duì)較低。
不過(guò)我個(gè)人有個(gè)觀點(diǎn)炮姨,就是『不能通過(guò)圖靈測(cè)試的chatbot捌刮,其價(jià)值不如個(gè)人助理』。
阿里小蜜的閑聊型問(wèn)題的解決方案是檢索模型與 Deep Learning 相結(jié)合剑令。
檢索模型就不說(shuō)了糊啡,所謂 Deep Learning 的方法,就是指前文中的 seq2seq吁津、Encoder-Decoder棚蓄、Attention Model那些了。
阿里小蜜的聊天引擎碍脏,結(jié)合了兩者各自的優(yōu)勢(shì)梭依,將兩個(gè)模型進(jìn)行了融合。先通過(guò)傳統(tǒng)的檢索模型檢索出候選集數(shù)據(jù)典尾,然后通過(guò) seq2seq 對(duì)候選集進(jìn)行 Rerank役拴,重排序后超過(guò)指定的閾值就進(jìn)行輸出,不到閾值就通過(guò) seq2seq 進(jìn)行答案生成钾埂,整體流程如下圖:
后記
花了半年河闰,看了幾百萬(wàn)字的材料,寫(xiě)了將近 20 萬(wàn)字的文章褥紫,從機(jī)器學(xué)習(xí)姜性、深度學(xué)習(xí)、自然語(yǔ)言處理髓考、語(yǔ)音識(shí)別部念、推薦系統(tǒng)、搜索引擎氨菇、數(shù)據(jù)挖掘儡炼、知識(shí)圖譜的經(jīng)典模型和基礎(chǔ)知識(shí),到綜合前面的所有內(nèi)容來(lái)構(gòu)建自然語(yǔ)言問(wèn)答這塊的技術(shù)基礎(chǔ)查蓉,到今天乌询,終于算是圓滿完成給自己定下的畢業(yè)前的任務(wù)了。也希望我能在 3-5 年后豌研,成為能夠獨(dú)當(dāng)一面的人工智能產(chǎn)品經(jīng)理 :)