深度學習下一個大的突破會是機器閱讀嗎?
機器閱讀將是深度學習的下一個重大進展
回顧2016年,深度學習在應用領(lǐng)域取得了三個重大進展。
1. Google DeepMind 的 AlphaGo,戰(zhàn)勝了人類頂級圍棋高手。
2. Google Translate 上線,達到了與人類媲美的精度。
3. Tesla 的 AutoPilot 投入使用,讓自動導航成為大眾使用的日常工具。
展望2017年,深度學習在應用領(lǐng)域?qū)行碌耐黄疲渲幸淮罂袋c,就是機器閱讀。
書籍是人類文明的主要傳承工具。讓機器掌握自動閱讀的能力,將會顛覆性地降低知識傳承和使用的難度。
機器閱讀之所以可能在2017年取得突破性進展,原因是機器翻譯的工作原理,可以拓展到機器閱讀領(lǐng)域。
文本摘要的研究,在2016年取得的進展,已經(jīng)昭示了機器閱讀的前進方向。
所謂文本摘要,就是把整篇文章,輸入給電腦,電腦自動輸出文章的中心思想。
文本摘要的工作原理,與機器翻譯的工作原理,一脈相承。
機器翻譯的原理,編碼及解碼
機器翻譯的工作原理,說來簡單,先編碼,后解碼 [1]。
編碼的任務,是把輸入的文章,轉(zhuǎn)換成一連串數(shù)字向量,數(shù)字向量包含文章每一詞的語義和語法信息,如同基因DNA。
解碼的任務,是把數(shù)字向量,逐個轉(zhuǎn)換成其它語言的詞語,完成翻譯。
任務明確后,接下去談如何實現(xiàn)。
如何提煉文章中每一個詞的語義信息?機器翻譯用了兩個辦法,
1. 詞向量,詞向量包含這一個詞的語義信息。詞向量的實現(xiàn)方式,用的是神經(jīng)網(wǎng)絡與語言模型的組合,稍后介紹。
2. 語義向量,語義向量包含了從文章開頭到當前詞的主要語義,也包含了從當前詞到文章末尾的主要語義,所以語義向量又稱為前后文向量。語義向量的實現(xiàn)方式,用的是 LSTM 的隱狀態(tài),稍后介紹。
除了語義信息,編碼是否需要容納語法和統(tǒng)計信息?
文本摘要的研究者們,提議在編碼中也容納語法詞性標注(POS tagging)、實體標注(NER)、信息挖掘統(tǒng)計值(TF-IDF)等等信息 [2]。
懸念是,還有哪些其它有用的信息,也應該被容納進編碼中?
更大的懸念是,如何提高編碼的正確性,精準地全面地表達原文的語義和語法信息?
編碼的實現(xiàn)原理
編碼的實現(xiàn),依賴于詞向量和語義向量。
詞向量的實現(xiàn)方式,用的是神經(jīng)網(wǎng)絡與語言模型的組合 [3]。
先說語言模型(Language Model),語言模型的任務,是根據(jù)前文,預測下一個詞,最可能是什么?
有時候聽眾會打斷對方的發(fā)言,說,“你不用再說了,你下面想說什么,我已經(jīng)猜到了”。這樣的聽眾,腦子里擁有出色的語言模型。
人類語言有缺陷,“版圖” 與 “疆界”,無一字相同,但是語義相同。
語言模型把每一個人類詞匯,對應到一個詞向量。詞向量是數(shù)字向量,數(shù)字向量的好處在于,容易計算數(shù)字向量之間的距離。同義詞的詞向量之間的距離為零,近義詞的詞向量之間的距離較短。
人類詞匯,有一詞多義的情況。詞向量的技術(shù)難題,在于如何給多義詞配置多個詞向量。
[3] 用神經(jīng)網(wǎng)絡,來根據(jù)前文,預測下一個出現(xiàn)的詞。
所謂預測,其實是估算詞庫中所有詞匯,哪一個詞匯在下一個出現(xiàn)的概率最大。神經(jīng)網(wǎng)絡發(fā)揮的作用,是概率模擬器。
預測很準的時候,神經(jīng)網(wǎng)絡中的諸多參數(shù)就不需要調(diào)整。預測不準的時候,就調(diào)整這些參數(shù),提高后續(xù)預測的精準度。這就是語言模型訓練的過程。
因為要估算詞庫中所有詞出現(xiàn)的概率,所以訓練語言模型的計算量,往往大得驚人。
解決的辦法,是盡可能縮小候選詞匯的數(shù)量。辦法很多,譬如 beam search。
語義向量的實現(xiàn),依賴 LSTM(Long Short Term Memory)。LSTM 也是一種神經(jīng)網(wǎng)絡,特色有二 [4]。
1. 循環(huán):神經(jīng)網(wǎng)絡前一次的輸出,將作為同一個神經(jīng)網(wǎng)絡下一次的輸入。所以,LSTM 是處理序列的利器,語句就是序列的一種,序列的例子還包括,股票價格波動,心電圖腦電圖,音頻視頻等等。
2. 遺忘:語句中每個詞匯的重要性不同,記住重要的詞匯,忘記冗詞。人類記憶有限,聽演講往往要做筆記,記住要點。電腦的記憶無限,但是也要取舍,避免噪音淹沒了要點。
人類聽演講時,把要點寫在筆記本里。LSTM 處理序列時,把要點存儲在隱狀態(tài)里。
隱狀態(tài)(Hidden State)也是數(shù)字向量,隱狀態(tài)數(shù)字向量的維度,往往比詞向量的維度高。就像筆記本里能夠?qū)懴潞芏嘣~匯。
但是隱狀態(tài)向量并非詞向量的簡單積累。隱狀態(tài)向量是前后文詞向量的剪接,如同基因剪接一樣。
LSTM 的隱狀態(tài)向量,勝任前后文語義向量的職能。但是隱狀態(tài)向量的軟肋,在于含義晦澀,如同基因不易讀解。
好的隱狀態(tài)向量,容易識別。如果用 Autoencoder [5] 把隱狀態(tài)向量復原成原文,復原后的原文,與真正的原文越相近,說明隱狀態(tài)向量的質(zhì)量越好。
但是壞的隱狀態(tài)向量,壞在哪里,很難甄別。因為,隱狀態(tài)向量的含義晦澀難懂。這是需要研究解決的難題。
除了提煉前后文語義,LSTM 還可以做很多事情,譬如給文章中每個詞匯標注詞性,識別文章中地址名稱等等詞組。
作為神經(jīng)網(wǎng)絡的一種,LSTM 也需要訓練,訓練就需要語料。不同的任務,譬如詞性標注,詞組識別,需要不同的訓練語料。
獲得大量語料,也是難題。譬如有人提議,收集文章及其標題,作為文本摘要的訓練語料。但是遇到標題黨,這個辦法就失效。
解碼的實現(xiàn)原理
解碼的理想境界,與翻譯的理想境界相似,
1. “信”:語義要正確,不要曲解。
2. “達”:措辭要恰當,即便語義相同,如果措辭不同,那么語氣迥異。
3. “雅”:行文要流暢。
解碼器的實現(xiàn)原理,與詞向量的實現(xiàn)原理相似,依賴語言模型,根據(jù)前文,預測下一個詞,最可能是詞庫中的哪一個詞匯?
不要忘記,估算詞庫中所有詞出現(xiàn)的概率,計算量往往大得驚人。
要達到“信”的境界,對于機器翻譯而言,難度較低,因為翻譯基本上是逐個詞匯一對一翻譯。
對于文本摘要而言,“信”的難度較高。如何摘錄重點?人類做摘要,往往摘錄論點,不摘錄論據(jù),往往摘錄故事結(jié)局,不摘錄故事過程。
如何讓電腦辨別論點與論據(jù),結(jié)局與過程?這是需要研究的難題。
所以,對于機器翻譯而言,解碼器的輸入,只需要原文中的詞向量和語義向量,就可以翻譯得相當精準。
但是,對于文本摘要而已,除了詞向量和語義向量,還需要詞性標注、詞組識別、TF-IDF,信息越豐富,摘要越簡潔。
簡單暴力的辦法,是摘錄原文中每個段落的起首一兩句,遇到兩個段落的起首句的語義相同,就忽略其中一個。
要達到“達”的境界,對于機器翻譯而言,難度較高,每種語言都有同義詞,但是同義詞之間的語氣差別,往往難以界定。
對于文本摘要而言,“達”的難度較低,簡單粗暴但是行之有效的辦法,是直接引用原文中的詞匯。
引用原文詞匯,還有一個好處,是大大降低了計算量。說得學術(shù)點,這叫 LVT,Large Vocabulary Tricks [6]。
麻煩在于,原文中出現(xiàn)的詞匯很多,下一個詞應該引用原文中的哪一個詞匯?
解決辦法是先用語言模型,根據(jù)當前的詞向量、語義向量,預測下一個詞的詞向量。然后再去原文中,尋找最貼切的詞匯。
尋找的辦法,說得學術(shù)點,叫 Attention [1]。
大意是根據(jù)原文中每一個詞匯本身的語義、語法詞性、詞組標注、TF-IDF 統(tǒng)計信息,以及前后文的語義等等盡可能多的信息,評估原文中的每一個詞匯,與下一個詞的詞向量的相關(guān)性。
但是 Attention 的辦法,也會導致巨大的計算量。[2] 提議了一個減少計算量的辦法,先評估每個語句的相關(guān)性,找到相關(guān)語句后,再評估這個語句中每個詞匯的相關(guān)性。
要達到“雅”的境界,無論機器翻譯還是文本摘要,都必須做到下一個詞的選擇,必須與前文詞匯保持流暢。
對于文本摘要而言,下一個詞的選擇,不能全部選用原文中詞匯。實現(xiàn)方式有兩個要素。
1. 預先從訓練語料中,構(gòu)建摘要的詞庫。
2. 實現(xiàn)一個開關(guān)函數(shù),決定從詞庫中選詞,還是從原文詞匯中摘錄。
開關(guān)函數(shù)可以用 sigmoid 函數(shù),輸入有三項,前文的詞匯、預測出的下一個詞的詞向量、Attention 找到的原文中最貼切的詞匯。
未來有待解決的問題
除了進一步降低語言模型的計算量,除了識別原文中各個語句及詞匯的重要性,未來最大的挑戰(zhàn),可能是如何引用外援知識。
人類閱讀的時候,經(jīng)常需要查字典,查參考文獻。
引用外援知識的目的,是擴大讀者現(xiàn)有的知識結(jié)構(gòu),消除現(xiàn)有知識結(jié)構(gòu)與文章內(nèi)容之間的落差。
閱讀結(jié)束后,進一步擴大現(xiàn)有知識結(jié)構(gòu)。這就是人類通過閱讀,不斷學習知識的過程。
知識結(jié)構(gòu)的表達方式有多種,“一圖勝千言”,自然語言似乎不是最高效的表達方式。
知識圖譜由點和邊組成,點表達概念,邊表達一個概念與另一個概念之間的關(guān)系。
譬如 “發(fā)燒” 和 “炎癥” 是兩個概念,在知識圖譜中用兩個點來表達。“炎癥”導致“發(fā)燒”,在知識圖譜中用有向邊來表達。
當閱讀一篇文章時,如果文章中出現(xiàn)的概念,沒有出現(xiàn)在現(xiàn)有知識圖譜中,那么閱讀就會出現(xiàn)困難,這就是知識的落差。
消除知識落差的辦法,是查字典,查參考文獻,擴大閱讀,直到文章中出現(xiàn)的新概念,與現(xiàn)有知識圖譜相連接。
如何把文章轉(zhuǎn)換為知識圖譜?不妨沿用機器翻譯和文本摘要的工作原理,把文章從自然語言,轉(zhuǎn)換成知識圖譜。
換而言之,機器閱讀其實就是自然文本的結(jié)構(gòu)化。
參考文獻
[1] Neural Machine Translation by Jointly Learning to Align and Translate
https://arxiv.org/abs/1409.0473
[2] Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond
https://arxiv.org/abs/1602.06023
[3] Distributed Representations of Words and Phrases and their Compositionality
https://arxiv.org/abs/1310.4546
[4] Understanding LSTM Networks
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
[5] Autoencoders tutorial
http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders/
[6] On using very large target vocabulary for neural machine translation
https://arxiv.org/abs/1412.2007