何時淺探,何時深究—機器學習不是一張紙就能說完的
譯文機器學習、深度學習與人工智能的崛起已經成為一項不爭的事實,且開始對計算機科學領域產生極為深遠的影響。正如大家所知,截至目前,在從圖像識別到圍棋競技的眾多領域內,深度學習的實際表現已經將人類遠遠甩在身后。
深度學習社區目前正在將自然語言處理(簡稱NLP)視為技術研究與應用的下一個前沿。
深度學習的一大優勢在于,其水平提升往往能夠在各類場景下實現通用。舉例來說,在某一領域中適用于深度學習的具體技術通常可以直接轉移至其它領域,而無需經過任何修改。更具體地講,構建大量計算密集型圖像與語音識別類深度學習模型的方法已經全面滲透至自然語言處理當中。在最新、最先進的翻譯系統的幫助下,這套系統足以帶來遠勝以往的實際表現——當然,仍需要大量計算設備作為配合。盡管我們必須利用性能極強的系統從現實世界數據當中偶然發現高度復雜的分析模型,但在另一方面,這些模型將能夠以規模化方式應用于其它多種任務。而這就提出了新的問題:
是否一切任務都有必要使用如此復雜的模型?
下面我們一起來看一套雙層式MLP模型,其已經接受相關訓練并可實現情感分析。
這是一套簡單的深度學習系統,我們將其稱為“詞袋”模型,它會把句子分為正或負兩類。最終可視化效果由詞袋模型中雙層MLP架構中處于上層的T-SNE隱藏層實現。每個數據點對應一個句子,并根據深度學習系統的預測結論與真實目標標以不同顏色。圖中的邊界框體根據句子的內容進行繪制。感興趣的朋友可以通過鼠標懸停與圖表進行交互!
上圖中的邊界框體提供了一些重要的見解。現實世界當中的數據處理任務在難度上往往有所區別——某些句子很容易分類,但其它一些句子則可能包含復雜的語義結構。對于那些易于分類的句子,我們可能并不需要高容量系統即可完成處理——換言之,利用較為簡單的模型足以得出相同的結論。在今天的博文中,我們將探討這種猜測是否屬實。另外,文中還將展示我們通常如何運用此類簡單模型。
文本內容與深度學習
大多數深度學習方法要求利用浮點數字作為輸入內容——除非您之前嘗試過處理文本信息,否則大家肯定會抱有以下疑問:
我該如何將文本片段與深度學習對接起來?
在處理文本內容時,其核心問題在于如何表達任意數量的信息。目前比較流行的解決方案之一在于將文本標記為單詞、子詞匯甚至是字符。我們可以利用word2vec或者GloVe等方案進一步將各個單詞轉換為浮點矢量。如此一來,大家即可通過不同單詞之間的隱含關系表達單詞意義。
選擇一個單詞,將其轉化為一個高維度嵌入體(例如三百維),而后利用PCAaftT-SNE(二者皆為高人氣降維工具,在本示例中可將其降至二維),如此一來大家即可發現單詞之間的有趣關聯。正如大家所見,上圖提示uncle與aunt之間具備類似詞義,只是分別指向男性與女性。
利用標記化以及word2vec方法,我們可以將文本片段轉化為一條用以表達每個單詞的浮點序列。
現在,我們該如何使用這條浮點序列?
詞袋模型
現在我們來討論詞袋模型(bag-ofwords,簡稱BoW),這可能是大家接觸過的最為簡單的機器學習算法之一。
選取多個詞匯表達(即底部灰色框),而后通過相加或者取平均值的方式將其歸納為另一通用表達式(藍色框),其中應該會包含每個單詞中的部分信息。在本文當中,這一通用表達式負責預測句子表達的情感為正抑或為負(紅色框)。
直接對特征維度取平均值。事實證明,在簡單的詞匯平均嵌入場景下,即使完全忽略句子內的表達順序,這套模型仍能夠在多數簡單實例中運行良好。而與深度神經網絡(稍后將進一步說明)相結合后,詞袋模型往往能夠給出理想的理解基準線。另外,平均值是一項低資源占用量操作,且可幫助我們將句子的維度降低為一項固定大小的向量。
遞歸神經網絡
某些句子中可能包含更為復雜的結構或者需要以更高精度加以處理。單靠詞袋模型往往不足以解決這些難題,因此是時候祭出另一款神器——遞歸神經網絡了!
在每個timestep(由左至右)上為RNN(灰色框)提供一條輸入內容(例如一個單詞),并將此作為原有內部記憶(藍色框)之外的新增內容。RNN隨后會在新的內部記憶(藍色框)中進行計算,這部分結果代表的是全部此前見到過的單元(例如全部原有單詞)。RNN現在應該已經獲得了句子層級上的全新信息,意味著其能夠更好地預測句子所表達的情感為正抑或為負(紅色框)。
每個嵌入單詞都會按順序被饋送至一套遞歸神經網絡當中,后者負責管理以往見到過的存儲信息,并將這部分信息與新詞匯加以結合。在使用長-短期記憶單元(簡稱LSTM)或者門控遞歸單元(簡稱GRU)等知名記憶單元支持下的RNN時,RNN將能夠記住包含大量單詞的句子的具體含義!(由于LSTM獲得了成功,采用LSTM記憶單元的RNN通常也被直接稱為LSTM。)這些模型當中最大的八個彼此相互堆疊。
歡迎來到最為先進(大概是)的深度學習模型當中,其利用配備LSTM記憶單元的RNN實現語言翻譯。粉色、橙色與綠色框即為擁有LSTM單元的遞歸神經網絡。其亦可實現在不同lstm層之間實現skip連接等處理技巧的交換,同時具備一項名為attention的方法。如大家所見,綠色的LSTM指向相反的方向。當將其與正常LSTM相結合后,即可生成所謂雙向LSTM,其能夠以兩個方向從數據序列中獲取信息。欲了解更多相關信息,請點擊此處參閱Stephen Merity發表的博文。
然而,LSTM的運行資源需求要遠遠高于低成本詞袋模型,也通常需要由經驗豐富的深度學習工程師負責實現并高效支持與之配套的高性能計算硬件。
示例:情感分析
情感分析屬于一種文檔分類機制,其可對文檔內容的主觀傾向進行判斷。在向其提交一個句子后,這套模型能夠評估其表達的情感為正面、負面抑或中性。
希望在客戶行動之前通過其推文將其找到?情感分析能夠有效滿足您的需求!
在這方面,最為知名的公共數據集(也正是我們將在后文中使用的選項)正是斯坦福情感樹圖庫(簡稱SST)。SST不僅能夠對句子進行分類(正面或者負面),同時亦可對句子中的各單獨語法進行判斷。但在我們的系統中,我們并未使用任何樹狀信息。初始SST將情感分為五種類別:非常正面、正面、中立、負面、非常負面。出于示例的考慮,我們認為二分法應該更為簡單且易于理解,因此我們將非常正面與正面加以合并,非常負面與負面亦進行合并,同時將所有中性判斷結果加以去除。
我們已經對示例中所要使用的模型架構進行了概括與技術性介紹。其中最重要的并非具體架構設計方式,而在于低成本模型能夠在64項批量處理流程中以10毫秒延遲提供82%的驗證準確率,而高成本LSTM則在64項批量處理流程中以87毫秒的延遲提供僅略有改善的88%驗證準確率(頂級模型的準確性一般在88%到90%之間)。
底部綠色框代表嵌入詞匯,由GloVe進行初始化,而后提取詞意(詞袋模型)并由一套雙層MLP模型進行分析及中性要素去除。
底部青綠色框代表嵌入詞匯,由GloVe進行初始化。此后我們不再對嵌入詞匯進行追蹤。這里我們使用與LSTM單元相似的具備LSTM單元的雙向RNN。我們利用RNN隱藏狀態以獲取平均值與最大值,而后是雙層MLP模型進行分析及中性要素去除。
低成本淺探閱讀方案
在某些任務中,各類算法能夠提供與人類水平相近的準確度,但其提出的服務器性能要求往往也令人難以承受。另外正如前文中所提出,我們并不需要始終利用LSTM這類高性能需求量方案處理實際數據——大多數情況下詞袋模型已經足以完成任務。但有時候,我們可能面對著以下這類難題:
“演員表現非常糟糕,完全缺少真實感……但我仍然愿意給出9分好評”
作為一類忽略順序的算法,詞袋模型肯定會將這句話理解成負面表達。然而很明顯,這樣簡單且明確的表達居然成為拉低分析準確率的罪魁禍首——這樣的情況明顯無法接受。因此問題就變成:
我們能否學會如何區分“簡單”與“困難”兩類句子?
另外,我們能否利用低成本模型完成這項任務?
深入探索
探索深度學習模型的一種主流方式,在于立足隱藏層對每個句子的表示方式進行繪制。然而,由于隱藏層通常位于高維,因此我們可以使用T-SNE等算法首先將其降維至二維,從而以人類可以理解的方式實施繪制。
大家可以移動、縮放、保存并將鼠標懸停在數據點上以查看其信息。請注意,在向右側渲染的情況下(即將數據點移動至左側)提示工具可能表現更好。
在以上圖表中,大家會看到詞袋模型(BoW)中繪制的最新隱藏層。在將鼠標懸停至任何數據點時,您將看到表示該數據點的對應句子。句子本身的顏色由其標簽決定。
預測標簽(Predictios tab):系統預測結果與實際模型標準間的比較。數據點的中央表殼其預測結論(藍色為正面,紅色為負面),而周邊的線條代表實際標簽。如此一來,我們就能輕松判斷系統結論是否正確。
概率標簽(Probabilities tab): 代表我們在輸出層中分配給預測結論的具體概率。其負責告訴我們該模型對其預測結論的確信度。另外,在將鼠標懸停至數據點上時,圖表將提供給定數據點的概率,并根據模型預測結論進行著色。需要注意的是,概率的起始值為0.5,代表任務本身為二分類型,且值為0.5時意味著確信度最低——為五五開。
T-SNE制圖極易受到過度解讀的影響,但其中部分因素的影響效果往往更為明顯。
T-SNE解讀
- 將句子拆分為多個聚類(clusters)。這些聚類包含有不同的語義類型。
- 部分聚類擁有的多重性相對簡單,意味著模型對于準確度擁有較高的確信度。
- 另一些聚類則準確度較低,且對結論的確信度亦不高。
- 同時包含正面與負面表達的句子往往更難進行判斷。
下面來看根據LSTM模型生成的繪制圖表。
大家可以移動、縮放、保存并將鼠標懸停在數據點上以查看其信息。請注意,在向右側渲染的情況下(即將數據點移動至左側)提示工具可能表現更好。
采用與詞袋模型相同的設置,旨在對LSTM進行深入探索!
我們可以發現,LSTM的大多數結果與詞袋模型并無區別。然而,LSTM對于大多數結論都擁有更高的確信度,且其在判斷同時包含正面與負面表達的句子時表現得也要比詞袋模型更好。
如此看來,詞袋模型完全有能力對句子進行聚類拆分,并利用概率機制據此對所作出預測的準確性進行量化判斷。以此為基礎,我們基本可以得出以下推斷:
高確信度答案一般準確性更高。
為了調查這一假設,我們可以對概率閾值進行觀察。
概率閾值
詞袋模型與LSTM已經經過訓練,旨在為每個類提供對應概率,而我們可以將此作為確信度的衡量指標。具體來講,如果詞袋模型返回值為1,則代表其對于預測結論極具信心。
一般來講,在預測當中我們會選取模型所提供的可能性最高的類。在二元分類當中(即非正即負),可能性必然高于0.5(否則我們將會給出相反的結論)。然而,較低的概率值代表著模型本身對于當前論斷并不能確定。舉例來說,如果模型預測的負面值為0.49,而正面值為0.51,則代表著結論準確的可能性極低。
在提到閾值時,我們的實際表意是將預測概率與某個給定值進行比較,從而評估該概率對應的結論是否可信。舉例來說,我們可以決定直接使用概率值高于0.7的全部結論。或者,我們也可以選擇查看概率值在0.5到0.55之間的句子,從而了解模型在這一確信度區間作出了怎樣的預測——這部分內容我們將在后方進行詳盡說明。
在閾值(threshold)繪圖中,條狀圖形的高度對應兩個閾值內數據點的準確度,而線條則代表其以全部數據點(而非給定閾值)為參照時的近似準確度。
在數據量(data amount)繪圖中,條的高度對應兩個閾值之間全部數據量的累加,而線條則代表來自各閾值限定區間內的累加數據。
通過詞袋模型繪圖,大家可能會發現提升概率閾值會改善預測準確度。然而這一點在LSTM圖中則表現得并不明顯,這主要是由于LSTM已經不再依賴于訓練集,而只提供高確信度答案。
使用詞袋模型處理簡單示例,LSTM則負責復雜示例。
因此,通過輸出的概率值,我們即可基本判斷句子內容是否簡單以及何時才有必要動用更為強大的LSTM等分析系統。
利用概率閾值,我們創建出一項新的策略,這里將其稱為“概率策略”。其能夠幫助我們獲取詞袋系統中的概率閾值,并利用LSTM進一步處理那些確信度達不到閾值要求的預測結論。如此一來,我們就能夠將一部分數據交由詞袋模型處理(概率高于閾值的句子),而另一部分數據則可選擇詞袋模型或者LSTM(特別是概率低于閾值的句子)加以處理。在此之后,我們將獲得一項BoW與LSTM之間的使用率比值,由0.0(即只使用LSTM)到1.0(只使用BoW),從而得出分析計算所需要的時間與預期準確率。
確立基準
為了確立基準,我們需要選定兩套模型的具體使用比例,例如將0.1的數據交由BoW而將0.9的數據交給LSTM,則意味著最終準確率將九成由LSTM決定,一成由BoW決定。我們的目標在于建立起一項無需策略指導的基準,其能夠根據隨機分配的句子內容決定使用BoW抑或是LSTM。然而,這項策略的執行本身也需要成本。我們需要首先通過詞袋模型對全部句子進行處理,旨在確定哪些句子適用于詞袋、而哪些適用于LSTM。如果任何一個句子的預測確信度都沒有達成基準概率要求,則意味著我們必須將其全部交給LSTM——而這同時意味著我們的閾值設定可能存在問題。為了避免這種狀況,我們決定通過以下方式計算策略的成本與模型使用比例。
其中C代表成本,而p代表詞袋模型中所使用數據的比例。
驗證集中的結果比較了BoW與LSTM(紅線)與概率閾值策略(藍線)不同搭配比例的對應準確度與處理速度。左側的數據點代表僅使用LSTM的情況,而右側則代表僅使用詞袋模型的情況,二者之間則為雙方皆有使用。藍線代表在無指導策略影響下的BoW與LSTM組合,而紅色曲線描繪了利用詞袋概率作為策略以指導應對哪部分數據使用哪種系統的情況。您可將鼠標懸停在線上以查看不同比例/概率閾值所帶來的處理時間節約效果。需要注意的是,在僅使用詞袋模型的情況下,其達到時間節約能力上限——最高約90%。
這里我們得出一項有趣的發現,即使用詞袋閾值的效果要明顯優于未使用任何指導策略的情況。
我們將此曲線視為曲線速度(簡稱SUC),并對其取平均值。結果如下表所示。
利用驗證集判斷應使用BoW或者LSTM的離散選擇結果。每種模型使用不同素材計算十次。表中的結果為SUC平均值。將概率策略與使用比例進行比較。
了解何時淺探而何時深究
光是了解何時在兩種不同模型間切換顯然還不夠。我們希望建立一套更具通用性的系統,用以學習何時在每種模型間切換。這樣一套系統能夠幫助我們處理更為復雜的行為:
我們能否通過固定的管理方式了解何時深究比淺探效果更好?
其中的“深究”代表利用LSTM由左至右進行處理,并將每個timestep的結果保存在內存中; “淺探”則代表使用BoW模型。在利用詞袋模型計算概率時,我們可以據此作出判斷,即當某一單詞的含義存在不確定性時,更為強大的LSTM應該能夠提供更準確的結果——但事實是否真是如此?
詞袋模型與LSTM對同一句子存在判斷正確或不正確的混淆矩陣。其類似于此前在詞袋模型與LSTM之間進行混淆T-SNE繪圖。
事實上,可以看到LSTM只有12%的機率提供比BoW更好的判斷結果,而在6%的情況下詞袋模型或LSTM都無法給出正確結果。考慮到這一點,我們似乎沒有理由使用LSTM——單純依靠詞袋模型已經能夠帶來較為準確的結果,且處理速度要快得多。
了解“淺探”——設置
也就是說,即使BoW對結果不夠確定,我們也并未總應使用LSTM加以進一步處理。那么我們能否讓自己的詞袋模型了解LSTM在哪些情況下會出現錯誤,而哪些情況下高資源占比的LSTM能給出正確結果?讓我們再次審視T-SNE繪圖,但現在我們要關注的是BoW與LSTM之間的混淆矩陣。我們希望找到該混淆矩陣中各元素間的關系,特別是BoW出現錯誤的情況。
大家可以移動、縮放、保存并將鼠標懸停在數據點上以查看其信息。請注意,在向右側渲染的情況下(即將數據點移動至左側)提示工具可能表現更好。我們對BoW與LSTM的預測結果進行比較,旨在了解二者的準確率差異。這能幫助我們評估哪種模型的效果更好。另外,在將鼠標懸停至某一數據點時,其將提供正確性與概率。概率信息根據預測結果進行著色。
通過比較情況來看,我們發現能夠更輕松地判斷BoW何時正確而何時對結果不太確定。然而,LSTM的正確及錯誤之間則沒有明確的關聯。
我們能否把握這一關聯?
此外,概率策略本身也存在明顯的局限性,因為其依賴于繼承式二分決策且要求配合概率值。因此,我們提出了一套基于神經網絡的可訓練決策網絡。如果單純著眼于混淆矩陣,我們可以利用這部分信息為監控下的決策網絡生成標簽。如此一來,我們即可保證僅在BoW為錯誤而LSTM為正確的情況下使用LSTM。
為了生成該數據集,我們需要一組句子,其中包含詞袋模型與LSTM給出的正確、底層預測。然而在訓練當中,LSTM通常能夠實現99%甚至更高的準確度,這意味著訓練集的規模已經不足以為其提供更多經驗。為了避免這種狀況,我們將訓練集拆分為模型訓練集(包含80%的訓練數據)與決策訓練集(包含其余20%訓練數據),后者在訓練過程中始終不會被交付至模型當中。在此之后,我們利用決策訓練集對模型進行細節調整,希望決策網絡能夠在這部分從未出現過的數據中提供同樣出色的預測表現。
詞袋模型與LSTM初始皆利用“模型訓練”集(即80%訓練數據)進行訓練,接下來由這兩套模型為決策網絡生成標簽,最后再利用完整數據集對模型進行再次訓練。在這一過程中,我們始終使用同樣的驗證集。
為了構建我們的決策網絡,我們挖掘了低成本詞袋系統中最后一個隱藏層(我們亦利用該層生成了T-SNE繪圖)。在此之后,我們將一套雙層MLP堆疊在模型訓練集的詞袋訓練之上。我們發現如果不采取這樣的作法,則決策網絡將無法掌握BoW模型的變化趨勢,意味著結果不能得到有效推廣。
底部青綠色框體代表來自詞袋系統的各層(未經篩選)。此后,我們將一套雙層MLP堆疊在其上,并生成一個類以判斷應使用詞袋模型抑或LSTM。
決策網絡根據模型訓練集訓練出的模型所選擇的各個類隨后會在整體訓練集中進行全面應用——但繼續保持高度關聯性。我們之所以將該訓練完成的模型應用于完整訓練集,是因為該模型訓練集上的模型往往水平較差并將導致準確度較低。在對驗證集上的SUC進行最大化后,決策網絡能夠提前停止訓練。
我們的決策網絡執行效果如何?
我們首先來看看這套決策網絡的預測結果。
數據點與之前我們使用詞袋模型時繪制的T-SNE曲線圖相同。綠色點代表由詞袋模型進行預測的句子,而黃色點則代表由LSTM進行預測的句子。
這里我們需要注意結果與詞袋模型中概率閾值的相似度。現在讓我們看看決策網絡最后一個隱藏層的T-SNE,借此了解其是否能夠準確判斷LSTM預測結果的正確與錯誤情況。
各數據點基于決策網絡最后一個隱藏層的句子表達,且源自驗證句子。其顏色所代表的含義與之前的比較繪圖一致。
看起來決策網絡確實能夠從詞袋模型的隱藏狀態中提取聚類。不過,其似乎無法發現哪些情況下LSTM也會作出錯誤判斷(從紅色中提取黃色聚類)。
紫色曲線表示驗證集上新引入的決策網絡。請注意決策網絡所使用的,與概率閾值相近但略有不同的解決方案。
從時間節約曲線上的數據準確度來看,我們很難判斷這套決策網絡是否表現更好。
利用驗證集與測試集判斷應使用BoW或者LSTM的離散選擇結果。SUC基于準確度與速度繪圖曲線的平均值。每套模型利用不同素材計算十次。表中的結果為SUC的平均值。標準偏差基于與該比例間的差異。
從預測繪圖來看,我們可以根據數據量、準確度以及SUC得分判斷決策網絡是否能夠準確判斷BoW給出的預測結果是否正確。另外,我們也能夠借此構建起一套更具通用性的系統,確保其能夠觸及深度學習模型當中的隱藏狀態。然而,結果同時表明決策網絡很難理解其無法訪問之系統的行為,例如更為復雜的LSTM。
相關討論
現在我們可以肯定的是,強大的LSTM在文本分析方面可以提供與人類相近的表現,然而并非全部真實數據皆需要這種精度極高的分析效果,因此我們可以訓練一套詞袋模型以判斷當前句子是否簡單。對簡單句子施以“淺探”處理能夠幫助我們節約大量計算資源與時間。
這種方法主要通過取均值實現,且一般更適用于具有高確信度的分析模型。然而通過在詞袋模型中調整確信度標準,我們同樣能夠選取適合實際情況的計算時間與準確度平衡點。為了有效節約計算資源,我們認為這種方法能夠為深度學習工程師們帶來一些有益的啟發。
關于引用
如果您在公開發表的文章中引用此博文,請保留以下內容:
作者:Alexander Rosenberg Johansen、Bryan McCann、James Bradbury以及 Richard Socher。2017年。
《Learning when to skim and when to read 》(相關論文即將發布)
通過更為深入地了解深度學習系統在哪些情況下可能出錯,我們將能夠更為明智地判斷在哪種條件下使用哪種深度學習模型。如此一來,我們將可以利用最低限度計算時間獲得與預期相符的任務完成效果。
原文鏈接:https://metamind.io/research/learning-when-to-skim-and-when-to-read