選擇題是各種考試最常見的題目(僅限台灣)。我看到選擇題就很開心,因為就算完全沒有複習,隨便選也可以拿到一定的分數,不至於太難看。但隨著升學到國中、高中,人送外號「裸考殺手」的簡答題漸漸多了起來。題目可以包含一個文章以及多個問題。沒有選項可以選,唯有寫出正確答案才能得分。許多學生都曾經因為刁鑽的解題思路或是改卷老師的食古不化而痛失分數。可是就在最近,使用深度學習訓練出來的機器模型也懂的做簡答題了,而且做得比人類好。
SQuAD : 一套衡量機器模型的簡答題集
SQuAD是一套簡答題,由史丹佛電腦科學系的Pranav Rajpurkar 等人開發。他們根據維基百科的內容擬定了一系列問簡答題。答題者要先閱讀一短篇文章,然後回答問題。他們同時也人工的虛構了許多無法回答的問題。這些問題與可以回答的問題極為相似,人類或機器在面對這些問題時必須要回答無法回答,否則失去分數。頂尖的自然語言模型已經能夠在SQuAD獲得比人類還要好的分數。人類可以在大約86.8%的題目答出正確答案,而完稿當下(Aug. 22)最厲害的模型可以答出90.9%的答案。讓我們瞧瞧是什麼技巧讓電腦勝過人類的。
自然語言處理 Natural Language Processing
目前自然語言處理 (Natural Language Processing) 建模的方式有很多,但總歸都是要根據已有的上下文講出下一個字。甚至句子的最小單位可以不是文字,有的學者使用音素 (phoneme)[2];也有的會使用字素(grapheme)[3]。本文篇幅有限,所以如果我沒有特別標注的話,都是用「單詞」作為句子的最小單位。為了避免重複使用同一個字,有時我也會用「文字」指稱「單詞」。
[2] 音素:自然語言中,有意義的最小聲音單位
[3] 字素:自然語言中,有意義的最小文字單位
機器學的是如何「選擇」適當的單詞作為輸出,換句話說,機器想表達的事情是單詞機率分佈,意思是在茫茫辭海中每一個單詞作為輸出的機率。這個機率分佈會隨著前後文改變,隨後用該機率對單詞取樣並作為輸出。我們可以把機器模型的思考過程寫成轉換如下式(1):
$T: c \rightarrow y$ (1)
其中$T$是機器所代表的轉換、$c$ 指的是前後文(context)、$y$ 是指輸出的文字。一個句子是由多個單詞所組成的,但模型一次只會說一個「單詞」。我們希望模型把剛才輸出的文字輸回模型,用於預測下下一個字,如圖二所示。這類說話方式叫做自回歸(Autoregression),也就是自己預測自己的意思。
自回歸模型 Autoregressive Model
圖二的模型輸入從「定」開始,接著輸出「海」、「神」、「針」。然後模型覺得這句話已經講完了,於是輸出End Of Sequence (EOS)。在深度學習中,會自己預測自己的機器模型稱為 Recurrent Neural Network (RNN) 。最早的RNN模型是由誰提出的已經不可考,但Tomas Mikolov的團隊是第一個用RNN成功處理自然語言的人。他們利用 clipping[4] 克服了 RNN 因長期記憶,導致損失函數在參數空間上不連續的問題(如圖三)。接著,有人提出懂得適時的忘記長期記憶中不重要的資訊的GRU以及LSTM。這類的模型的效果比初始版本的RNN穩定多了,並稱霸了自然語言處理一段時間。
[4] Mikolov的作法很簡單,他為梯度訂定最大與最小值,如果超過這個範圍就用最大或最小值替代掉。這個作法稱為clipping。
雙向自回歸模型 Bidirectional Autoregressive Model
由於單層RNN的記憶流動方向只能是單向的,所以RNN模型每一次預測單詞時只能知道上文或下文。於是有人發揮想像力,把正向(從第一個字處理到最後一個字)與反向(從最後一個字處理到第一個字)的RNN同時用於處理同一個句子,衍生出雙向語言模型(BiLM),讓自然語言的效率再度上升。
自編碼模型 Autoencoding Model
自編碼模型的意思是把輸入壓縮成一組密碼,然後再根據這組密碼重建原本的輸入。訓練好的自編碼模型包含兩個部分:編碼器(Encoder)與解碼器(Decoder)。自編碼模型的工作流如下圖四:
儘管自編碼模型在圖片處理上非常流行,但起初是無法用在自然語言處理的,因為自編碼模型用的DNN無法處理字與字之間的關係。DNN每一層都具有許多的神經元,每一層任意兩個神經元的距離都是相等的[5],導致模型天生無法理解什麼是「順序」。CNN在「順序」的理解比DNN稍好,因為CNN總是把一群神經元組成遮罩,並一次作用在相鄰的輸入上。爾後有學者使用CNN做「句義判斷」[6],可以得到當時最頂尖的效果,但在「簡答題」或是「翻譯」等等其他命題上都不如RNN類的模型傑出。直到有人提出了Transformer。
[5] 同一層的任意兩個神經元交換位置,則那兩個神經元的輸出位置對調但數值不變,其餘的輸出也不會有所改變。
[6] Convolutional Neural Networks for Sentence Classification, Yoon Kim, arXiv, 2014
Transformer
這個作法的概念是讓句子自己跟自己做外積,並以此為權重重新調整分配資訊到不同的時間點上。外積的做法如下圖五:
每一個文字都有相對應的矢量(vector),把兩個字的矢量做「內積」就可以得到那個位置的權重。根據兩句子的外積(從句子的角度看是外積,但從文字的角度看是內積,這兩者並不衝突),我們就可以知道資訊應該如何重分配。根據圖四,有30%「定」、50%「海」、10%「神」及10%「針」的輸入資訊應該要分配到「定」的輸出位置上。每一個單詞的資訊重分配的作法都是類似的,所以我略過剩下的三個字的詳細做法。這一套權重的算法如果使用的橫豎都來自同樣的句子的話稱為 Self Attention,如果是來自兩個不同的句子則稱為Attention。
Transformer內部由Attention 與Self Attention組成,是目前最強的語言架構。Transformer厲害的地方在於解決了資訊的雙向流通問題的同時,也提升了運算效率。使用RNN時,必須等前一個時間點的輸出產生後,才能對下一輪的輸入做處理,因為RNN一次只能處理一個時間點的輸入。這導致了RNN處理長篇文章時效率極低。Transformer就不受這樣的限制,因為同一層的每一個權重是可以同時計算的。
Transformer也解決了DNN與CNN無法理解文字順序的問題。作者們利用會遞減的Sine函數生成與輸入句子長度相同的序列(Sequence),並且直接加在句子上。如此一來,雖然任意兩個輸入單詞的距離在權重計算上仍然相等,但是機器能夠從句子身上的遞減SIne函數找出字與字之間的距離。這樣的作法已經被證實是有效的。
BERT
BERT是一種基於Transformer的訓練方法,包含「猜字謎」以及「因果分析」。但BERT的目的並不是專注於「猜字謎」或是「因果分析」,而是想要製造一個更通用的模型。使用BERT訓練過的Transformer,可以在問答題、翻譯、以及其他許多不同的命題上得到更好的效果。BERT的作法屬於「預訓練 」(pretrain)的一種,意思是指在真正投入訓練之前,先用其他的訓練得到更好的模型初始化參數。BERT使用這兩種作法是為了強化模型的理解字義與句義的能力。
猜字謎的作法如下圖六。輸入一個字串,希望模型能夠輸出一樣的字串。由於模型的參數自由度大於輸入,所以在不做特殊調整的情況下模型會直接拷貝輸入作為輸出,但這不是我們要的。為了避免無意義的複製貼上,BERT的「猜字謎」會把一部分的輸入遮住,請模型猜背著住的字是什麼。模型因此被迫學會從上下文的含義猜出被遮住的字是什麼,有助於模型理解字與字之間的關係。
因果分析想做的事是輸入兩句話,希望模型知道他們是不是上下句的關係。其作法如下圖七,輸入兩個句子,中間用特殊token [SEP]隔開,並且在最前面放置另一個特殊token [CLS]。我們要求模型輸出他的判斷在有[CLS]位置。這個作法可以幫助模型了解句子與句子之間的關係。因果分析有個缺點,那就是太容易學了。任意找兩個句子,兩者為上下句的機會幾乎是零。所以只要是看起來有關聯的句子就有高機率是上下句,導致從中學到的知識沒什麼用。近年來有其他的延伸型出現,效果比因果分析更好,我姑且稱之為「順序分析」。這一次我們總是選連續的句子做訓練,但順序是隨機的,而模型要負責判斷順序。
BERT以及其延伸的家族是目前數一數二的語言學模型(總是有越來越強的新模型,所以我不敢說死),包括XLNet、ALBERT、RoBERTa、ELECTRA、GPT等等。在SQuAD上都是榜上有名,
小結
高效率的神經網路結構與持續成長的每秒算力支撐著人工智慧的成長。儘管現在自然語言模型仍然有些限制,例如需要大量訓練強化效果,不像人類在看過例題之後就可以回答個七七八八。換言之,機器模型還不夠泛用。一個模型可能在某些領域表現得很傑出,但同時又在某些領域天真的像嬰兒。機器模型也還不懂得提出問題,只懂得回答問題。人類仍然能夠輕易地知道這模型不是人類。期待有一天人類能夠像朋友一樣跟電腦聊天。
參考
[DLHLP 2020] Speech Recognition (1/7) – Overview, Hung-yi-Lee
ML Lecture 21-2: Recurrent Neural Network (Part II), Hung-yi-Lee
[DLHLP 2020] BERT and its family – ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more, Hung-yi Lee
Know What You Don’t Know: Unanswerable Questions for SQuAD, Pranav Rajpurkar, Robin Jia, Percy Liang, 2020
Attention Is All You Need, Vaswani et al., NIPS 2017
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, Devlin et al., arXiv 2018
所有文章類別