第一批在 SQUAD 2.0 上刷榜的 U-NET 模型,它們有何高明之處?
雷鋒網 AI 科技評論按:今年下半年,SQuAD 2.0 橫空出世。基於 U-net 的一眾模型紛紛獲得了優異的成績(截至到 BERT 屠榜之前)。一篇來自 betterlearningforlife.com 的文章對 SQuAD 2.0 進行簡要的介紹,並以問答的形式介紹了計算語言學與 U-net 模型相關的一些問題。雷鋒網 AI 科技評論全文編譯如下。
「在 SQUAD 上取得好成績的網路架構是什麼樣的呢?」
在我開始撰寫本文的時候,排名前三位的模型在谷歌上沒有任何鏈接。微軟亞洲研究院的團隊(Microsoft Research Asia team)是這三者其中之一,它們甚至還沒有在網站上發布它們最新的成果。我似乎有一個理論來解釋為什麼,但這多少有些推測性。
幸運的是,前四名的表現並沒有太大的不同,所以我們可以看看一些高性能的想法。最佳方案採用了基於 U-net 的架構,相關的論文鏈接如下:https://arxiv.org/abs/1810.06638 。本文也將從這裡展開。
「U-net 背後的思想是什麼?」
在目前的機器學習架構開發過程中,開發者往往都會針對數據集構建特定的演算法架構。U-net 也不例外,採用 U-net 架構是為了針對 Standford 提出 SQuAD 2.0 的目的。Standford 之所以會創建 SQuAD 2.0 是為了修復1.0中的一些缺陷。
「SQuAD 1.0 存在什麼問題呢?」
這就涉及到一些「無法回答的問題」的難題。當人們閱讀一段東西時(如新聞),他們可能會問一些簡單的問題,這些問題的答案可以直接在文本中找到。然而,他們更有可能問一些不能直接回答的相關問題。一個強大的數據集需要很好地同時對這兩者建模。如果數據集中只有已經被回答的問題,那麼模型將學會總是給出一些在文本中能夠找到的答案。當有人提出一個沒有直接出現在文本中的問題時,它自然而然地會給出錯誤的答案。
SQuAD 1.0 中也有一些無法回答的問題,但它們是由機器生成的,而且對神經網路來說,不需要更深層的理解就很容易識別它們。許多參賽模型的性能已經在 SQuAD 1.0 數據集上超越了人類的水平,然而它們在現實世界中的實際應用卻沒有取得有意義的進展。
「Stanford 是如何改進這個數據集的呢?」
他們增加了5萬個由眾包員工撰寫的無法回答的問題。這些問題被設計得與可回答的問題相類似。
下面的例子向大家展示了一段文字以及兩個無法回答的問題,材料來自論文「Know What You Don』t Know: Unanswerable Questions for SQuAD」(https://arxiv.org/abs/1806.03822):
文章:瀕危物種法案
摘選段落:「...其他立法緊隨其後,包括1929年的候鳥保護法案,1937年的禁止捕殺露脊鯨和灰鯨的條約,1940年的禿鷹保護法案。這些隨後制定的法律的社會成本很低,畢竟這些物種相對稀有,很少有人會反對這樣的法案。」
問題 1:「哪項法律被極力反對?」
機器可能給出的回答:隨後制定的法律。
問題 2:「1937 年通過的條約的名字是什麼?」
機器可能給出的回答:禿鷹保護法案
「U-net 模型是如何處理這些改進的數據集的?」
U-net 模型包含一個結合了許多最新研究進展的有趣方法。這是一個很好的例子,告訴我們可以如何用神經架構創造性地進行設計。
他們的模型基本上包含以下四個部分:
嵌入
融合
多層注意力機制
預測
接下來讓我們仔細看看這個模型,在我們的腦海中,讓我們從廣義概念上對模型推斷進行思考,並想想這個系統是如何作為一個不同的整體的一部分與其組合在一起的。
現在,讓我們從頭開始細細研究 U-net 模型。
「什麼是嵌入技術?」
嵌入是降維的一種形式。例如,對使用通用網路爬蟲技術抓取到的「Glove」(Global Vectors for Word Representation,用於詞語表示的全局向量)的嵌入技術可以將大小為 1.9M 的辭彙表縮減為一個 300 維的向量。
然而,我們可以進一步把這個 300 維的向量縮減到2維。我們可以看到,這些詞在大致相同的「方向」上會根據其意義被區分開。
Glove 的降維結果
「在人類的思維存儲一些概念時,會將其存儲為嵌入、圖模型、二者的結合還是其它形式呢?」
嵌入技術缺乏人類大腦所擁有的一種關鍵能力。像所有的神經網路一樣,嵌入式是「分組的」近似。更改任何網路權重都會更改其它輸入的輸出。
我們可以猜測,人類的大腦能夠有選擇地對某些辭彙做出一些改變。相信大家都有過和別人辯論一個詞的意思的經歷。然後在查了字典之後,我們發現我們對這個詞的理解並不是通常被人們所接受的定義。從那時起,我們可以在腦海中更新對這個詞的理解,這樣的過程會一直持續下去。不可否認,「連詞」肯定會對理解有一些影響,但總的來說,我們的準確率並不會下降。(讓我們大膽地想像一下。)
下面這張最近發布的大腦圖像顯示了「不同的單詞被存儲在大腦的各個地方」的設想。這是個有趣的想法。那麼,大腦是如何防止對同一個單詞進行重複多次的表示呢?
進行這項研究的團隊發布了一個在線交互模型,鏈接如下:http://gallantlab.org/huth2016/。
「在未來的通用人工智慧(AGI)系統中,嵌入技術會成為語言翻譯的模型嗎?」
它們確實感覺很相似,因為它們本質上都是降維,或壓縮信息。我們可以想像大腦也在做類似的事情。我們的語言中個存在很多同義詞,我們經常會說「...和...意思相同」。通常情況下,當同義詞之間的細微差別非常小時,我們必須將其弄清楚,探究這些詞在這個語境下究竟代表什麼意思。
「什麼是詞與詞之間結構的理論?」
我們先不談這個!
「嵌入技術是如何實現的?」
它們基本上是降維的一種形式。經過對模型的訓練,隱層會被提取出來,它們的「潛在空間」會被用於另一個架構中。近年來,研究者們提出了許多不同的嵌入方法,所以在這裡我們僅僅以兩個嵌入方法為例。(1)FastText,這是一個簡單而強大的對比基線,(2)ELMO,這是 2018年最先進的方法。
FastText 與 CBOW 演算法類似。
「什麼是 CBOW?」
CBOW 是 skip-gram 方法的「鏡像」。
「那什麼是 skip-gram 呢?」
在 skip-gram 方法中,句子中的每一個單詞都會被用來預測鄰近的單詞。
「Gram」指的是我們要處理的單詞/單詞串/字元串有多長。
我們還可以加大「窗口大小」來預測距離當前單詞更遠的單詞。我們在這裡使用大小為 1 的窗口。
「但是語言並不僅僅是以概率形式存在。它作為人類的意圖和可以改變的事實而存在。一個大的概率模型對我們來說意味著什麼?」
正如我們在上面看到的,它為我們提供了詞語之間的「關係」,或者說將那些在某種程度上相似的詞語以「相近」的形式表徵了出來。
使用 skip-gram 或 cbow 方法的 word2vec(https://code.google.com/archive/p/word2vec/ )模型能夠執行一些有一定規律可循的向量操作。例如(以下均為嵌入向量的計算):「國王」 - 「男人」+ 「女人」得到的向量與代表「女王」的向量非常相近。
我們可以通過以下鏈接看到一個使用 word2vec 的在線演示樣例:http://bionlp-www.utu.fi/wv_demo/ 。
這個單詞類比工具很有趣。你可以給它三個單詞,A, B, C,它會嘗試找到第四個單詞 D。相信你還記得 9 年級英語課上最煩人的練習「A 之於 B,就像 C 之於 D」(A is to B as C is to D)。
當我們向這個模型輸入「女王」、「女人」和「公主」,模型會輸出「女孩」。然而,當我們輸入「國王」、「男人」和「王子」則並沒有得到同樣令人滿意的結果,模型給出的答案是「女人和男孩」。
「這似乎是一個良好的開端。我們是否能繼續進行研究,並且通過更改單詞來得到特定的關係呢?」
就像其他稠密的神經網路一樣,這只是一種近似。我們不能手動改變單詞來得到特定的關係,我們需要一個更好的訓練方法/模型/數據來使用這個概念得到更好的結果
「嵌入技術似乎就是對於通用詞語模式的一種粗略的近似。它們有什麼作用呢?」
FastText 已經能夠在一些情感分析數據集上獲得至少 90% 的準確率。
「上述方法的鏡像是什麼?」
對於詞袋來說,與其讓一個單詞映射到周圍的單詞,不如讓它周圍的單詞映射到那個單詞。更多細節請參閱:https://iksinc.online/tag/continuous-bag-of-words-cbow 。這項工作不是用循環神經網路完成的,所以單詞的順序並不重要。
「FastText 的工作機制有何與眾不同之處?」
FastText 利用上面得到的這些嵌入創建了一個「平均嵌入」的隱層。
FastText 技術還使用了層次 softmax 技術,在哈弗曼編碼的基礎上,對標籤進行編碼,極大地縮小了模型預測目標的數量,從而在數據中存在很多類時提升了計算效率。
「ELMo(Embedding from Language Models,語言模型生成的嵌入)的工作機制有何與眾不同之處?」
ELMo 試圖使用某個單詞的上下文信息。Skip-gram 和 CBOW 使用的是一個大小為 2 的窗口,所以我們很難將它稱之為「上下文」,下面的例子可以很好地說明這一點:
我們在緬因州找到的商店 (store)非常棒。
在緬因州,我們發現了被動物刨過的食物貯藏 (store)。
這個例子看起來很能說明問題,由於 FastText在統計上是基於單詞之間的距離工作的,它無法捕獲單詞在句子中的用法。
「E 代表嵌入,ELMo 中的語言模型部分是什麼呢?」
在這個「上下文」中,語言模型是一個 LSTM 模型,我們用它來預測句子中的下一個單詞是什麼。這不是什麼新鮮事,自從 Karpathy 發表關於 RNN 的博客文章(http://karpathy.github.io/2015/05/21/rnn-effectiveness/ )以來,已經過去三年了,這是第一篇創建了文本生成模型的文章。
研究人員不久前發現,將信息輸入給一個前後向傳播的 LSTM 可以改進各種語音/聲音/文本任務。ELMo 也是這麼做的。
「所以我們在這裡將嵌入用到了 LSTM 中?」
在 ELMo 方法中,嵌入是LSTM隱層的每個輸出的權重。
保存下來的隱層狀態被添加到了一個大的長向量中。我們還可以從單詞本身獲得一個額外的嵌入。這個詞本身可以是一個單詞(token)嵌入,也可以是在字元串上進行卷積運算得到的結果。每個單詞總共有 2L(層數)+ 1 個嵌入。
但是 Elmo 的工作還沒有完成。我們仍然需要對這些嵌入作進一步的研究工作,模型的其餘部分將決定哪些嵌入是有用的。Elmo 實際上在很多任務上都取得了很好的效果。要實現這樣的效果在某種程度上需要針對於特定任務的權重。Elmo很好地封裝了上面的向量
(http://mlexplained.com/2018/06/15/paper-dissected-deep-contextualized-word-representations-explained/ )。
「現在我們對這些嵌入相關的技術已經有了一個初步的模糊概念,Unet 模型使用了那些技術呢?」
它們使用了Glove(用於單詞表示的全局向量)、ELMo(語言模型生成的嵌入)、POS(詞性標註)、NER(命名實體識別)以及特徵嵌入等技術。這裡使用到的嵌入技術很多。
「什麼是特徵嵌入?」
在原論文中,作者們對特徵嵌入的定義是:「精確匹配、小寫匹配、論點匹配和TF-IDF特徵。」TF-IDF(https://en.wikipedia.org/wiki/Tf%E2%80%93idf )是一種測量一個單詞在語料庫中出現多少次的方法。因此,他們創造了對那些人們可能很容易注意到,但是如果不對數據集進行大量的排列,網路就可能無法注意到的語言特徵的嵌入。例如大寫字母和小寫字母。
「這會生成大量的嵌入,這些模型會如何處理這些嵌入呢?」
在這裡,這些模型會得到所有這些巨大的嵌入的堆棧,它們將為文章中的每一個單詞計算一次這樣的嵌入,再為問題中的單詞也計算一次。它們最後會通過另一個隨機向量u的簡單連接將這些嵌入結合在一起。從而得到:V=[Q,u,P]
他們希望這個被稱為「通用節點」的 u 向量將包含文章和問題中的抽象信息。
「向量 u 很重要嗎?」
原文作者展示的第一個模型簡化測試的結果就是「刪除向量 u 之後, F1 值下降了 2.6%」。
「向量 u 是如何同時從問題和文章中抽取出信息的?」
為了模糊化問題、向量 u、文章之間的信息,他們將向量 V 作為一系列雙向 LSTM 的輸入。
當然,他們更喜歡將這個過程稱為「融合相關的信息」。
「為什麼還要在 H 向量中保留 H^L,H^H 呢?H^F 的信息不夠嗎?」
這篇論文的主題,以及最近的一些成功案例的做法都是將前面的層的隱藏狀態傳遞給所有更深的後面的層。
「為什麼將隱藏狀態傳遞給後面更深的層是有效的?」
這個問題還有待探索!
「我們已經做好了充分的準備去做一些事情,U-net 模型的核心是什麼?」
「注意力機制在區分向量中的問題和答案部分的過程會不會很困難?」
確實如此!為了解決這個問題,作者首先將隱層分割成了單獨的的段落/問題塊,分別對應文章或問題中的每一個單詞p1、p2。
「答案指針究竟做了些什麼?」
答案指針是 PointerNet(https://arxiv.org/abs/1506.03134) 的具體應用,它允許根據輸入序列而不是辭彙表預測單詞。它通過注意力機制來做到這一點。
在 U-net 中,答案指針被用於檢測文章中的「答案邊界」。如果這個問題是可以回答的,那要找到答案就很簡單了。
「如果答案在原文中找不到怎麼辦呢?」
對於無法回答的問題,u-net 在原文表示之前將 u 向量設置為真實數據邊界。對於無法回答的問題,「答案邊界」應該位於文章本身之外。由於想要使用一些 SQuAD 2.0 提供的信號信息,他們在這裡使用了一個不同的損失函數。從人類生成的「合理的答案文本」中可以獲得更多信息。模型簡化實驗表明,將這種合理的文本損失考慮在內時可以將 F1 score提高1%。
答案指針本身不會對答案是否存在做出最後的判斷。
「最終如何確定一個問題的可回答性?」
這就需要用到答案「驗證器」模塊。它將前面的項(例如多層注意力機制的輸出)和答案指針轉換為固定維度的向量。然後對它們進行合併,並將合併後的結果傳遞給一個帶交叉熵損失的「線性+sigmoid」層,最終決定這個問題是否可回答。
「我們還需要注意哪些細節呢?」
我們已經了解了這種方法的本質,看到了它的模塊設計思路很棒。它直接保留所有的信息,並在模型的下游重用這些信息以獲得更高的性能,這種能力似乎給我們上了重要的一課。現在讓我們回顧一下這個模型並看看其他的推理方法。
V-net 模型有四個主要的模塊
嵌入
融合
注意力機制
預測邊界
對我來說,這篇論文最有趣的結論是,「我們可以把許多不同的概念組合在一起,得到比使用單個部分更好的結果」。
「還有其他在模型的下游層中使用隱藏狀態的例子嗎?」
DenseNet(https://arxiv.org/abs/1608.06993)就是一個很好地例子。它將前面的卷積層的隱藏狀態傳遞下去。實際上,U-net 論文的作者甚至在參考文獻中也提到了 DenseNet。
「我們還應該研究研究其它性能良好的模型架構嗎?」
與其研究另外的性能良好的模型架構,我們不如看一看其他的創建推理系統的方法。嵌入技術、LSTM 以及注意力機制都是很實用的工具。讓我們來看看一些範式轉換的方法,以獲得更多不同的創建推理系統視角。比如 Sigma, Soar 或 SPAUN。
目前我們還無法回答的問題有:
「什麼是詞語之間的結構理論?」
「為什麼將隱藏狀態傳遞到更下游的層會有幫助?」
viaBetter Learning For Life,雷鋒網 AI 科技評論編譯


※亞馬遜的自研AI晶元威脅到了英特爾?
※平安科技AI生態步入爆發期,合作入口全面開啟
TAG:雷鋒網 |