1. 程式人生 > >轉載:

轉載:

組合 百萬 python 抽象 哪些 sta gic 有用 語義網

之前研究的CRF算法,在中文分詞,詞性標註,語義分析中應用非常廣泛。但是分詞技術只是NLP的一個基礎部分,在人機對話,機器翻譯中,深度學習將大顯身手。這篇文章,將展示深度學習的強大之處,區別於之前用符號來表示語義,深度學習用向量表達語義。這篇文章的最大價值在於,為初學者指明了研究方向。下面為轉載的原文: 在深度學習出現之前,文字所包含的意思是通過人為設計的符號和結構傳達給計算機的。本文討論了深度學習如何用向量來表示語義,如何更靈活地表示向量,如何用向量編碼的語義去完成翻譯,以及有待改進的地方。 【編者按】Jonathan Mugan寫了兩篇博文來解釋計算機如何理解我們在社交媒體平臺上使用的語言,以及能理解到何種程度。本文是其中的第二篇。
在深度學習出現之前,我們書寫的文字所包含的意思是通過人為設計的符號和結構傳達給計算機的。我在上一篇博文裏詳細闡述了這個實現過程。這裏先回顧一下幾種符號方法:WordNet、ConceptNet和FrameNet,通過對比來更好地理解深度學習的能力。然後我會討論深度學習如何用向量來表示語義,以及如何更靈活地表示向量。接著我將探討如何用向量編碼的語義去完成翻譯,甚至為圖片添加描述和用文字回答問題。最後,我總結了用深度學習技術真正地理解人類語言還需要哪些改進。 WordNet可能是最著名的象征意義的語料庫,由普林斯頓大學研發。它將意思相近的單詞歸為一組,並且表示組與組之間的層次聯系。舉個例子,它認為“轎車”和“汽車”指的是同一個物體,都是屬於一類交通工具。
ConceptNet是來自麻省理工學院的語義網絡。它表示的關系比WordNet更廣。例如,ConceptNet認為“面包”一詞往往出現在“烤面包機”附近。然而,詞語間的這種關系實在是不勝枚舉。理想情況下,我們會說“面包機”不能被“叉子”插入。 FrameNet是伯克利大學的一個項目,它試圖用框架對語義歸檔。框架表示各種概念及其相關的角色。正如我在上一篇博文裏寫到的,孩子生日聚會框架的不同部分有著不同的角色,比如場地、娛樂活動和糖源。另一個框架是“購買”這個行為,包括賣方、買方和交易商品。計算機能夠通過搜索觸發框架的關鍵詞來“理解”文字。這些框架需要手動創建,它們的觸發詞也需要手動關聯。我們可以用這種方式來表示大量知識,但是很難一五一十地明確寫出來。因為內容實在太多,完完全全寫出來也太費神了。
符號也可以用來創建語言模型,計算某個單詞將會出現在句子中的概率。舉個例子,假設我剛剛寫下“我吃了”,那麽下一個詞語是“慶豐包子”的概率,可以用語料庫中“我吃了慶豐包子”出現的次數除以“我吃了”出現的次數來計算。此類模型相當有用,但我們知道“慶豐包子”與“狗不理包子”非常相似,至少比“電飯鍋”相似,但是模型並沒有利用這種相似性的優勢。使用的詞語有千千萬萬,若是存儲所有三詞短語需消耗(詞語數量 x 詞語數量 x 詞語數量)存儲空間,這也是使用符號所帶來的問題,因為詞語以及詞語的組合實在太多。所以,我們需要一種更好的方式。 使用向量表示語義 深度學習使用向量來表示語義,因此概念不再是由一個龐大的符號來表示,而是由特征值表示的一個向量來表示。向量的每個索引代表神經網絡訓練得到的一個特征,向量的長度一般在300左右。這是一種更加有效的概念表示方法,因為這裏的概念是由特征組成的[Bengio and LeCun, 2007]。兩個符號只有相同或者不同兩種情況,而兩個向量可以用相似性來衡量。“慶豐包子”對應的向量與“狗不理包子”對應的向量很接近,但是它們和“轎車”對應的向量差別很大。如同WordNet處理方式一樣,相似的向量被歸為同一類。 向量還存在內部結構。如果你用意大利向量減去羅馬向量,得到的結果應該與法國向量減去巴黎向量的結果非常接近[Mikolov et al., 2013]。我們可以用一個等式來表示: 意大利 - 羅馬 = 法國 - 巴黎 另一個例子是: 國王 - 皇後 = 男人 - 女人 我們通過訓練神經網絡來預測每個詞語附近的詞語,得到帶有這些屬性的向量[Mikolov et al., 2013]。你可以從谷歌或者是斯坦福直接下載已經訓練好的向量,或是用Gensim軟件庫自己訓練。令人驚訝的是這種方法竟然有效,而且詞向量有如此直觀的相似性和聯系,但事實上確實是有效。 由詞向量構成語義 我們已經有了原來表示單個詞語的向量,該如何用這些詞表示語義,甚至形成完整的句子呢?我們使用一種稱為遞歸神經網絡(recurrent neural network, RNN)的技術,如下圖所示。用RNN把句子“The woman ate tacos.”編碼為向量,記作h4。單詞“the”的詞向量記作h0,然後RNN把h0與表示“woman”的詞向量結合,生成新的向量h1。然後向量h1繼續與下一個單詞“ate”的詞向量結合,生成新的向量h2,以此類推,直到向量h4。向量h4則表示了完整的句子。 技術分享 一旦信息被編碼為一個向量,我們就能將其解碼為另一種形式[2],如下圖所示。比如,RNN隨後可以將向量h4表示的句子翻譯(解碼)成西班牙語。它先根據已有向量h4生成一個最有可能的單詞。向量h4與新生成的單詞“La”一起又產生了向量h5。在向量h5的基礎上,RNN推出下一個最有可能出現的單詞,“mujer”。重復進行這個過程直到產生句號,網絡結構也到此為止。 技術分享 使用這種編碼器—解碼器模型來做語言轉換,需要用一個包含大量源語言與目標語言的語料庫,基於這個語料庫訓練RNN網絡。這些RNN通常含有非常復雜的內部節點[3>,整個模型往往有幾百萬個參數需要學習。 我們可以將解碼的結果以任何形式輸出,例如解析樹(parse tree)[6],或是圖像的描述,假設有足夠多包含描述的圖像素材。當給圖片添加描述時,你可以用圖片訓練一個神經網絡來識別圖像中的物體。然後,把神經網絡輸出層的權重值作為這幅圖像的向量表示,再將這個向量用解碼器解析出圖像的描述[4,7]。(點擊這裏這裏查看示例) 從合成語義到關註、記憶和問答 剛才的編碼器—解碼器方法似乎像是小把戲,我們接著就慢慢的來看看其在實際場景的應用。我們可以把解碼的過程想象成回答問題,“這句話該怎麽翻譯?”或者,已經有了待翻譯的句子,並且一部分內容已經翻譯了,那麽“接下去該怎麽寫?” 為了回答這些問題,算法首先需要記住一些狀態。在之前提到的例子中,系統只記住當前向量狀態h以及最後寫下的單詞。若是我們想讓它能運用之前全部所見所學該怎麽辦?在機器翻譯的例子裏,這就意味著在選擇下一個單詞時,要能夠回溯之前的狀態向量h0、h1、h2和h3。Bahdanau et al. [1]創造了能滿足這種需求的網絡結構。神經網絡學習如何在每個決策點確定之前哪個記憶狀態是最相關的。我們可以認為這是一個關註記憶的焦點。 它的意義在於,由於我們可以將概念和語句編碼為向量,並且我們可以使用大量的向量作為記憶元素,通過搜索能找到問題的最佳答案,那麽深度學習技術就能用文字來回答問題了。舉一個最簡單的例子[8],用表示問題的向量與表示記憶的向量做內積運算,把最吻合的結果作為問題的最佳回答。另一種方法是把問題和事實用多層神經網絡進行編碼,並把最後一層輸出傳給一個函數,函數的輸出即為答案。這些方法都是基於模擬問答的數據來訓練,然後用下文Weston[8]所示的方法回答問題。 技術分享 下一個前沿方向是準確理解語義 剛剛討論的方法是關於如何以讀故事的方式回答問題,但是故事的一些重要情節一目了然,我們不必都寫下來。設想桌上放著一本書。計算機如何才能知道你挪動桌子的同時也挪動了書本?同樣的,計算機怎麽知道屋外只是下雨了呢?就如Marvin Minsky所問,計算機如何知道你能用一根繩索拉箱子而不是推箱子呢?因為這些事實我們不會都寫下來,故事將只限於能被我們算法所表示的知識。為了獲取這部分知識,我們的機器人(robot)將通過實景體驗或者模擬體驗來學習。 機器人必須經歷這種實景體驗,並用深度神經網絡編碼,基於此可以構建通用語義。如果機器人總是看到箱子從桌上掉下來,它則會根據這一事件創建一條神經回路。當媽媽說“天啊,箱子跌落下來了”,這條回路將會和單詞“跌落”結合。然後,作為一個成熟的機器人,當它再遇到句子“股票跌落了10個點”,根據這條神經回路,它就該理解其中的意思了。 機器人還需要把一般的實景體驗與抽象推理相結合。試著來理解這句話的含義“他去了垃圾場。”(He went to the junkyard.)WordNet只能提供一組與“went”相關的單詞。ConceptNet能把“went”和“go”聯系在一起,但是永遠也不明白“go”的真正意思是什麽。FrameNet有一個self-motion的框架,已經非常接近了,但還是不夠。深度學習能把句子編碼成向量,然後回答各種問題,諸如用“垃圾場”回答“他在哪兒”的問題。然而,沒有一種方法能夠傳遞出一個人在不同位置這層意思,也就是說他既不在這裏,也不在其它地方。我們需要有一個連接自然語言和語言邏輯的接口,或者是用神經網絡對抽象的邏輯進行編碼。 實踐:深度學習的入門資源 入門的方法有很多種。斯坦福有一門用深度學習做NLP的公開課。也可以去看Hinton教授在Coursera Course的課程。另外,Bengio教授和他的朋友們也編寫了一本簡明易懂的在線教材來講解深度學習。在開始編程之前,如果你使用Python語言,可以用Theano,如果你擅長Java語言,就用Deeplearning4j 總結 計算機性能的提升和我們生活的日益數字化,推動了深度學習的革命。深度學習模型的成功是因為它們足夠大,往往帶有上百萬的參數。訓練這些模型需要足夠多的訓練數據和大量的計算。若要實現真正的智能,我們還需要走得更深。深度學習算法必須從實景體驗中習得,並概念化這種經驗,然後將這些經驗與抽象推理相結合 關於作者 技術分享 Jonathan是21CT的首席科學家。他主要研究機器學習和人工智能如何使用在文本和知識中讓計算機變得更智能。他在德克薩斯農工大學獲得心理學學士學位和工商管理碩士,在德克薩斯大學獲得計算機博士學位。他也是《 Curiosity Cycle: Preparing Your Child for the Ongoing Technological Explosion》一書的作者。

轉載: