在深度學習出現(xiàn)之前,文字所包含的意思是通過人為設計的符號和結(jié)構(gòu)傳達給計算機的。本文討論了深度學習如何用向量來表示語義,如何更靈活地表示向量,如何用向量編碼的語義去完成翻譯,以及有待改進的地方。
在深度學習出現(xiàn)之前,我們書寫的文字所包含的意思是通過人為設計的符號和結(jié)構(gòu)傳達給計算機的。其符號方法包括WordNet、ConceptNet和FrameNet,通過對比來更好地理解深度學習的能力。然后我會討論深度學習如何用向量來表示語義,以及如何更靈活地表示向量。接著我將探討如何用向量編碼的語義去完成翻譯,甚至為圖片添加描述和用文字回答問題。最后,庫卡機器人,總結(jié)了用深度學習技術(shù)真正地理解人類語言還需要哪些改進。
WordNet可能是最著名的象征意義的語料庫,由普林斯頓大學研發(fā)。它將意思相近的單詞歸為一組,并且表示組與組之間的層次聯(lián)系。舉個例子,它認為轎車和汽車指的是同一個物體,都是屬于一類交通工具。
ConceptNet是來自麻省理工學院的語義網(wǎng)絡。它表示的關系比WordNet更廣。例如,ConceptNet認為面包一詞往往出現(xiàn)在烤面包機附近。然而,詞語間的這種關系實在是不勝枚舉。理想情況下,我們會說面包機不能被叉子插入。
FrameNet是伯克利大學的一個項目,它試圖用框架對語義歸檔。框架表示各種概念及其相關的角色。例如,孩子生日聚會框架的不同部分有著不同的角色,比如場地、娛樂活動和糖源。另一個框架是購買這個行為,包括賣方、買方和交易商品。計算機能夠通過搜索觸發(fā)框架的關鍵詞來理解文字。這些框架需要手動創(chuàng)建,它們的觸發(fā)詞也需要手動關聯(lián)。我們可以用這種方式來表示大量知識,但是很難一五一十地明確寫出來。因為內(nèi)容實在太多,完完全全寫出來也太費神了。
符號也可以用來創(chuàng)建語言模型,計算某個單詞將會出現(xiàn)在句子中的概率。舉個例子,假設我剛剛寫下我吃了,那么下一個詞語是慶豐包子的概率,可以用語料庫中我吃了慶豐包子出現(xiàn)的次數(shù)除以我吃了出現(xiàn)的次數(shù)來計算。此類模型相當有用,但我們知道慶豐包子與狗不理包子非常相似,至少比電飯鍋相似,但是模型并沒有利用這種相似性的優(yōu)勢。使用的詞語有千千萬萬,若是存儲所有三詞短語需消耗(詞語數(shù)量x詞語數(shù)量x詞語數(shù)量)存儲空間,這也是使用符號所帶來的問題,因為詞語以及詞語的組合實在太多。所以,我們需要一種更好的方式。
使用向量表示語義
深度學習使用向量來表示語義,因此概念不再是由一個龐大的符號來表示,而是由特征值表示的一個向量來表示。向量的每個索引代表神經(jīng)網(wǎng)絡訓練得到的一個特征,向量的長度一般在300左右。這是一種更加有效的概念表示方法,因為這里的概念是由特征組成的。兩個符號只有相同或者不同兩種情況,而兩個向量可以用相似性來衡量。慶豐包子對應的向量與狗不理包子對應的向量很接近,但是它們和轎車對應的向量差別很大。如同WordNet處理方式一樣,相似的向量被歸為同一類。
向量還存在內(nèi)部結(jié)構(gòu)。如果你用意大利向量減去羅馬向量,得到的結(jié)果應該與法國向量減去巴黎向量的結(jié)果非常接近。我們可以用一個等式來表示:
意大利-羅馬=法國-巴黎
另一個例子是:
國王-皇后=男人-女人
我們通過訓練神經(jīng)網(wǎng)絡來預測每個詞語附近的詞語,得到帶有這些屬性的向量。你可以從谷歌或者是斯坦福直接下載已經(jīng)訓練好的向量,或是用Gensim軟件庫自己訓練。令人驚訝的是這種方法竟然有效,而且詞向量有如此直觀的相似性和聯(lián)系,但事實上確實是有效。
由詞向量構(gòu)成語義
我們已經(jīng)有了原來表示單個詞語的向量,該如何用這些詞表示語義,甚至形成完整的句子呢?我們使用一種稱為遞歸神經(jīng)網(wǎng)絡(recurrentneuralnetwork,RNN)的技術(shù),如下圖所示。用RNN把句子Thewomanatetacos.編碼為向量,記作h4。單詞the的詞向量記作h0,然后RNN把h0與表示woman的詞向量結(jié)合,生成新的向量h1。然后向量h1繼續(xù)與下一個單詞ate的詞向量結(jié)合,生成新的向量h2,以此類推,直到向量h4。向量h4則表示了完整的句子。
一旦信息被編碼為一個向量,我們就能將其解碼為另一種形式,如下圖所示。比如,RNN隨后可以將向量h4表示的句子翻譯(解碼)成西班牙語。它先根據(jù)已有向量h4生成一個最有可能的單詞。向量h4與新生成的單詞La一起又產(chǎn)生了向量h5。在向量h5的基礎上,RNN推出下一個最有可能出現(xiàn)的單詞,mujer。重復進行這個過程直到產(chǎn)生句號,網(wǎng)絡結(jié)構(gòu)也到此為止。
使用這種編碼器解碼器模型來做語言轉(zhuǎn)換,需要用一個包含大量源語言與目標語言的語料庫,基于這個語料庫訓練RNN網(wǎng)絡。這些RNN通常含有非常復雜的內(nèi)部節(jié)點,整個模型往往有幾百萬個參數(shù)需要學習。
我們可以將解碼的結(jié)果以任何形式輸出,例如解析樹(parsetree),或是圖像的描述,假設有足夠多包含描述的圖像素材。當給圖片添加描述時,你可以用圖片訓練一個神經(jīng)網(wǎng)絡來識別圖像中的物體。然后,把神經(jīng)網(wǎng)絡輸出層的權(quán)重值作為這幅圖像的向量表示,再將這個向量用解碼器解析出圖像的描述。
從合成語義到關注、記憶和問答
剛才的編碼器解碼器方法似乎像是小把戲,我們接著就慢慢的來看看其在實際場景的應用。我們可以把解碼的過程想象成回答問題,這句話該怎么翻譯?或者,已經(jīng)有了待翻譯的句子,并且一部分內(nèi)容已經(jīng)翻譯了,那么接下去該怎么寫?
為了回答這些問題,算法首先需要記住一些狀態(tài)。在之前提到的例子中,系統(tǒng)只記住當前向量狀態(tài)h以及最后寫下的單詞。若是我們想讓它能運用之前全部所見所學該怎么辦?在機器翻譯的例子里,這就意味著在選擇下一個單詞時,要能夠回溯之前的狀態(tài)向量h0、h1、h2和h3。創(chuàng)造了能滿足這種需求的網(wǎng)絡結(jié)構(gòu)。神經(jīng)網(wǎng)絡學習如何在每個決策點確定之前哪個記憶狀態(tài)是最相關的。我們可以認為這是一個關注記憶的焦點。
它的意義在于,由于我們可以將概念和語句編碼為向量,并且我們可以使用大量的向量作為記憶元素,通過搜索能找到問題的最佳答案,那么深度學習技術(shù)就能用文字來回答問題了。舉一個最簡單的例子,用表示問題的向量與表示記憶的向量做內(nèi)積運算,把最吻合的結(jié)果作為問題的最佳回答。另一種方法是把問題和事實用多層神經(jīng)網(wǎng)絡進行編碼,并把最后一層輸出傳給一個函數(shù),函數(shù)的輸出即為答案。這些方法都是基于模擬問答的數(shù)據(jù)來訓練,然后用下文Weston所示的方法回答問題。
下一個前沿方向是準確理解語義
剛剛討論的方法是關于如何以讀故事的方式回答問題,但是故事的一些重要情節(jié)一目了然,我們不必都寫下來。設想桌上放著一本書。計算機如何才能知道你挪動桌子的同時也挪動了書本?同樣的,計算機怎么知道屋外只是下雨了呢?就如MarvinMinsky所問,計算機如何知道你能用一根繩索拉箱子而不是推箱子呢?因為這些事實我們不會都寫下來,故事將只限于能被我們算法所表示的知識。為了獲取這部分知識,我們的機器人(robot)將通過實景體驗或者模擬體驗來學習。