文章首發(fā)于zhkun的小窩
Title: Semantic Sentence Matching with Densely-connected Recurrent and Co-attentive Information
Authors: Seonhoon Kim, Jin-Hyuk Hong, Inho Kang, Nojun Kwak
Link: https://arxiv.org/abs/1805.11360
句子匹配(Sentence Matching)是自然語言理解任務(wù)中一個非常重要的任務(wù)挽放,例如Natural Language Inference畔柔,Paraphrase Identification驶沼,Question Answering等都可以歸屬于這個任務(wù)。這個任務(wù)主要就是理解句子語義贯被,理解句子之間的語義關(guān)系。因此如何去表示這些內(nèi)容就變得十分重要了。為了更好的利用原始特征信息儒旬,作者參考DenseNet温兼,提出了一種densely-connected co-attentive recurrent neural network模型秸滴,該模型最突出的地方就是可以從最底層到最頂層一直保留原始信息以及利用co-attention得到的交互信息。接下來募判,就對文章進行詳細了解
模型結(jié)構(gòu)
首先是模型圖:
不得不說荡含,這個圖還是很粗糙的咒唆,一點都不夠精致,但模型的基本單元以及整體框架已經(jīng)完全包含進去了释液,我們姑且用這個圖對模型進行分析吧
輸入層
自然語言的任務(wù)首先就是輸入層全释,對每個詞的one-hot表示進行embedding,
e_{pi}^{tr} = E^{tr}(p_i),
e_{pi}^{fix} = E^{fix}(p_i),
c_{p_i} = Char-Conv(p_i),
p_i^w = [e_{pi}^{tr}; e_{pi}^{fix}; c_{p_i}; f_{p_i}],
這幾個公式很好理解误债,首先作者將詞的embedding分為兩部分恨溜,一部分參與訓(xùn)練,即E^{tr}找前,另一部分是固定不動的糟袁,即E^{fix},然后就是詞級別的表示char-Conv躺盛,以及一些exact match的匹配特征项戴,主要是a中的每個詞是否在b中有對應(yīng)的詞,然后將這些表示拼接起來槽惫,就得到了每個詞的最后表示p^w_i周叮。
密集連接層
在這一層,作者收DenseNet啟發(fā)界斜,使用了密集連接和RNN結(jié)合的方法來實現(xiàn)對對句子的處理仿耽。首先h_t^l表示的是第l層的RNN的第t的隱層狀態(tài),
h_t^l = H_l(x_t^l, h_{t-1}^l), \quad x_t^l = h_t^{l-1},
h_t^l = H_l(x_t^l, h_{t-1}^l), \quad x_t^l = h_t^{l-1} + x_t^{l-1},
h_t^l = H_l(x_t^l, h_{t-1}^l), \quad x_t^l = [h_t^{l-1}, x_t^{l-1}],
式2.1是傳統(tǒng)的多層RNN的結(jié)構(gòu)各薇,前一層的RNN的 隱層狀態(tài)作為當(dāng)前層的輸入项贺,然后就是RNN的計算方式,式2.2借鑒了殘差網(wǎng)絡(luò)峭判,當(dāng)前層的輸入不僅包含了前一層的隱層狀態(tài)开缎,同時包含了前一層的輸入,但他們是相加的方式林螃,作者認為這種相加的形式很可能會阻礙信息的流動奕删,因此借鑒DenseNet,作者使用了拼接了方式疗认,這樣不僅保留了兩部分信息完残,同時拼接方法也最大程度的保留了各自的獨有信息。但這就有一個問題了横漏,多層的RNN的參數(shù)就不一樣了谨设,因為拼接的方式導(dǎo)致了每一層輸入對應(yīng)的參數(shù)規(guī)模是在不斷變大的,這樣就不能做的很深了绊茧。
密集連接注意力
因為句子匹配考慮的兩個句子之間關(guān)系铝宵,因此需要建模兩個句子之間的交互,目前來說,注意力機制是一種非常好的方法鹏秋,因此作者在這樣也使用了注意力機制尊蚁,
a_{p_i} = \sum_{j=1}^{J}\alpha_{i,j}h_{q_j},
\alpha_{i,j} = \frac{exp(e_{i,j})}{\sum_{k=1}^Jexp(e_{i,k})}, \quad e_{i,j} = cos(h_{p_i}, h_{q_j}),
這個就是傳統(tǒng)的co-attention計算方法,計算兩個序列之間的在每個詞上的對應(yīng)關(guān)系侣夷,不過作者這里比較粗暴横朋,直接使用了余弦相似度來計算每兩個詞之間的相似,這里也可以使用一個簡單的MLP來計算百拓。有意思的地方在下邊
h_t^l = H_l(x_t^l, h_{t-1^l}), \quad x_t^l = [h_t^{l-1}, \alpha_t^{l-1}, x_t^{l-1}],
這個就很有意思了琴锭,我們傳統(tǒng)的做法是得到每個詞在對方句子上的概率分布之后,使用對方句子中每個詞向量的加權(quán)和作為當(dāng)前詞的向量表示衙传,而這里作者直接使用了計算出來的權(quán)值分布决帖,將其作為一個特征引入到當(dāng)前層的輸入當(dāng)中,這個感覺還是很有意思的蓖捶。
瓶頸處理層
正如前邊提到的地回,這種dense連接方式直接導(dǎo)致的一個問題就是隨著模型的加深,參數(shù)量會變的越來越多俊鱼,這樣最后全連接層的壓力就會特別大刻像。因此作者在這里使用了一個AutoEncoder來解決這個問題。AutoEncoder可以幫助壓縮得到的巨大向量表示并闲,同時可以保持原始的信息细睡。這個操作還是很不錯的。
分類層
這是處理兩個句子關(guān)系常用的一種匹配方法帝火,作拼接溜徙,相減,點乘购公,不過作者在這里也是用了相減的絕對值萌京,然后將最終拼接的向量通過一個全連接層,然后根據(jù)任務(wù)進行softmax分類宏浩,我個人做過實驗,相減的效果要好于相減的絕對值靠瞎,因為相減不僅可以表示差異比庄,同時可以表明信息流方向,而相減的絕對值就更專注于差異了乏盐,兩個都用應(yīng)該是效果比只用一個好的佳窑。
實驗結(jié)果
照例,上圖父能,作者在NLI任務(wù)和Question Pair兩個任務(wù)上進行了模型驗證神凑,效果當(dāng)然是十分不錯的。
感想
這篇文章主要集中在句子匹配任務(wù)上,將DenseNet的一些想法引入到了stack RNN中溉委,還是可以給人一些靈感的鹃唯,比如說從殘差連接到DenseNet,比如說注意力權(quán)值的使用方法瓣喊,比如說利用AutoEncoder來壓縮向量坡慌,這些還是十分值得學(xué)習(xí)的。?(^?^●)?