使用RNN解决句子对匹配问题的常见网络结构
?????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? author:?張俊林 
除了序列標(biāo)注問題外,句子對匹配(Sentence Pair Matching)問題也是NLP中非常常見的一類問題,所謂“句子對匹配”,就是說給定兩個句子S1和S2,任務(wù)目標(biāo)是判斷這兩個句子是否具備某種類型的關(guān)系。如果形式化地對這個問題定義,可以理解如下:
意思是給定兩個句子,需要學(xué)習(xí)一個映射函數(shù),輸入是兩個句子對,經(jīng)過映射函數(shù)變換,輸出是任務(wù)分類標(biāo)簽集合中的某類標(biāo)簽。既然我們要討論深度學(xué)習(xí),那么這個映射函數(shù)F就是通過神經(jīng)網(wǎng)絡(luò)來進行映射的,而標(biāo)簽集合里的分類標(biāo)簽具體代表的含義跟任務(wù)相關(guān)。
典型的例子就是Paraphrase任務(wù),即要判斷兩個句子是否語義等價,所以它的分類標(biāo)簽集合就是個{等價,不等價}的二值集合。除此外,還有很多其它類型的任務(wù)都屬于句子對匹配,比如問答系統(tǒng),就是判斷兩個句子是否一個是問題一個是答案的關(guān)系,此類任務(wù)還有很多,關(guān)鍵是看你怎么理解一個任務(wù)的目標(biāo)。
今天我們主要講講如果利用RNN來構(gòu)造這個映射函數(shù)F,那么神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)應(yīng)該如何設(shè)計?雖然標(biāo)題說是“常見”,但是其實講這方面的文獻非常之少。我把使用RNN解決句子對匹配的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)抽象成三類情況,這三類也是相對容易想到的結(jié)構(gòu)。當(dāng)然,這里要注意,雖然我們這里說的是RNN,但是它代表了LSTM、GRU、多層深度網(wǎng)絡(luò)等各種變體形式,為行文方便,在此統(tǒng)一用RNN來指代。
|RNN網(wǎng)絡(luò)結(jié)構(gòu)一
???????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖1.? RNN網(wǎng)絡(luò)結(jié)構(gòu)一
?圖1展示了一個最容易想到的RNN網(wǎng)絡(luò),對于兩個句子,分別套上一個RNN或者深層LSTM亦或雙向深層LSTM等,每個RNN的目的是抽取出這個句子的特征,然后將兩個句子抽取出的特征拼接成更上層的MLP多層神經(jīng)網(wǎng)絡(luò)的輸入層,經(jīng)過MLP的隱層使得兩個句子發(fā)生非線性映射關(guān)系,最后再通過SoftMax分類層給出最后的分類結(jié)果。
這樣就通過兩個RNN實現(xiàn)了對兩個句子是否具備某種關(guān)系作出分類判斷的決策,使用訓(xùn)練數(shù)據(jù)可以獲得網(wǎng)絡(luò)參數(shù),之后就可以將這個神經(jīng)網(wǎng)絡(luò)用來對現(xiàn)實任務(wù)進行分類的工作。
|RNN網(wǎng)絡(luò)結(jié)構(gòu)二
圖2 ?RNN網(wǎng)絡(luò)結(jié)構(gòu)二
圖2展示了結(jié)構(gòu)二的通用架構(gòu)。就是把兩個句子S和T拼接起來,中間用一個特殊分隔符EOS分割,這里EOS不代表一個句子的結(jié)束,而是代表兩個句子的分隔符號,如此就構(gòu)造出了RNN的輸入層。之后可以套上雙向以及深層網(wǎng)絡(luò)結(jié)構(gòu),在最高一層RNN層的輸出之上,套上一個Mean Pooling層。所謂Mean Pooling,具體做法就是把BLSTM各個節(jié)點的輸出結(jié)果求等權(quán)平均,首先把BLSTM各個輸出內(nèi)容疊加,這是pooling的含義,然后除以輸入節(jié)點個數(shù),這是mean的含義,Mean Pooling就是這個意思。
如何從物理意義上來理解Mean Pooling呢?這其實可以理解為在這一層,兩個句子中每個單詞都對最終分類結(jié)果進行投票,因為每個BLSTM的輸出可以理解為這個輸入單詞看到了所有上文和所有下文(包含兩個句子)后作出的兩者分類結(jié)果的判斷,而通過Mean Pooling層投出自己寶貴的一票。
在Mean Pooling之上,我們還可以套上一層SoftMax層,這樣就可以實現(xiàn)最終的分類目的。
通過以上方式,我們就通過輸入層、多層BLSTM層、Mean Pooling層和輸出層構(gòu)造出一個通用的判斷兩個句子語義是否具備某種語義關(guān)系的RNN深度學(xué)習(xí)系統(tǒng)。
與網(wǎng)絡(luò)結(jié)構(gòu)一相比,最大的不同在于:網(wǎng)絡(luò)結(jié)構(gòu)一的兩個RNN之間沒有建立任何直接的聯(lián)系,無論層級有多深,RNN在此只是起到了提取各自句子特征的目的,而兩個句子發(fā)生關(guān)系是在MLP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)里體現(xiàn)出的,也就是說網(wǎng)絡(luò)結(jié)構(gòu)一是在兩個句子的整體特征之間建立起聯(lián)系的。而網(wǎng)絡(luò)結(jié)構(gòu)二則在RNN層兩個句子之間的單詞之間就已經(jīng)建立起了相互的關(guān)系,所以如果粗略地分析,感覺結(jié)構(gòu)二應(yīng)該能夠捕獲到的信息要多于結(jié)構(gòu)一的那種架構(gòu)所能捕獲到的信息,當(dāng)然,這個只是直觀感覺。
|RNN網(wǎng)絡(luò)結(jié)構(gòu)三
? 圖3 RNN網(wǎng)絡(luò)結(jié)構(gòu)三
圖3展示了第三種RNN網(wǎng)絡(luò)結(jié)構(gòu)。在輸入層和RNN層結(jié)構(gòu)與網(wǎng)絡(luò)結(jié)構(gòu)二是相同的,意思是在RNN層就使得兩個句子之間單詞發(fā)生相關(guān)關(guān)系,與網(wǎng)絡(luò)結(jié)構(gòu)二不同的在于分類層,不像網(wǎng)絡(luò)結(jié)構(gòu)二一樣套上一個Mean Pooling層接收每個單詞的分類判斷,而是在拼接后的最高層處BLSTM最后一個節(jié)點隱層之上(圖3可能有些不準(zhǔn)確,要注意這里是節(jié)點的隱層狀態(tài)而非最終輸出值)套上一個SoftMax分類層,因為這里最后一個節(jié)點的隱層神經(jīng)元狀態(tài)理論上把兩個句子各自的語義表示以及兩者之間的關(guān)系都編碼在其中了,然后直接在這些信息基礎(chǔ)上進行分類。當(dāng)然,如果是采用雙向結(jié)構(gòu)BiRNN或者BLSTM,可以將首節(jié)點和尾節(jié)點的隱層狀態(tài)一起拼接來作為最后分類的基礎(chǔ)中間值,因為對于雙向結(jié)構(gòu)來說,頭節(jié)點也隱含了逆向的兩者關(guān)系編碼,其圖結(jié)構(gòu)如下所示:
圖4 RNN網(wǎng)絡(luò)結(jié)構(gòu)三之雙向結(jié)構(gòu)
上面介紹了抽象出的三種典型RNN解決句子對匹配問題的網(wǎng)絡(luò)結(jié)構(gòu),至于說這三個結(jié)構(gòu)哪個會更好,或者還是三者差不多,其實這里面是有文章可作的,比如你可以用若干個分類任務(wù),分別采取三個架構(gòu),測試并分析對應(yīng)的效果,得出哪個結(jié)構(gòu)更好的結(jié)論,其實是具有很大的發(fā)表價值的,有興趣的同學(xué)可以試試看。
另外,很明顯,你仔細(xì)一想,其實是能夠想出很多新型RNN網(wǎng)絡(luò)結(jié)構(gòu)的,而且非常可能目前還沒有文獻提到過,這里不細(xì)談了,以后有機會我會把我目前能想到的幾個變體分享出來。
掃一掃關(guān)注微信號:“布洛卡區(qū)” ,深度學(xué)習(xí)在自然語言處理等智能應(yīng)用的技術(shù)研討與科普公眾號。
總結(jié)
以上是生活随笔為你收集整理的使用RNN解决句子对匹配问题的常见网络结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 使用RNN解决NLP中序列标注问题的通用
- 下一篇: 多级神经网络结构表达文档语义性能更好吗
