使用RNN解決句子對匹配問題的常見網路結構

2021-07-10 11:26:03 字數 3387 閱讀 2010

/*

.*/author: 張俊林

除了序列標註問題外,句子對匹配(

sentence pair matching

)問題也是

nlp中非常常見的一類問題,所謂「句子對匹配」,就是說給定兩個句子s1和

s2,任務目標是判斷這兩個句子是否具備某種型別的關係。如果形式化地對這個問題定義,可以理解如下:

意思是給定兩個句子,需要學習乙個對映函式,輸入是兩個句子對,經過對映函式變換,輸出是任務分類標籤集合中的某類標籤。既然我們要討論深度學習,那麼這個對映函式f就是通過神經網路來進行對映的,而標籤集合裡的分類標籤具體代表的含義跟任務相關。

典型的例子就是

paraphrase

任務,即要判斷兩個句子是否語義等價,所以它的分類標籤集合就是個

的二值集合。除此外,還有很多其它型別的任務都屬於句子對匹配,比如問答系統,就是判斷兩個句子是否乙個是問題乙個是答案的關係,此類任務還有很多,關鍵是看你怎麼理解乙個任務的目標。

今天我們主要講講如果利用

rnn來構造這個對映函式

f,那麼神經網路的結構應該如何設計?雖然標題說是「常見」,但是其實講這方面的文獻非常之少。我把使用

rnn解決句子對匹配的神經網路結構抽象成三類情況,這三類也是相對容易想到的結構。當然,這裡要注意,雖然我們這裡說的是

rnn,但是它代表了

lstm

、gru

、多層深度網路等各種變體形式,為行文方便,在此統一用

rnn來指代。

|rnn網路結構一

圖1.  rnn

網路結構一圖1

展示了乙個最容易想到的

rnn網路,對於兩個句子,分別套上乙個

rnn或者深層

lstm

亦或雙向深層

lstm

等,每個

rnn的目的是抽取出這個句子的特徵,然後將兩個句子抽取出的特徵拼接成更上層的

mlp多層神經網路的輸入層,經過

mlp的隱層使得兩個句子發生非線性對映關係,最後再通過

softmax

分類層給出最後的分類結果。

這樣就通過兩個

rnn實現了對兩個句子是否具備某種關係作出分類判斷的決策,使用訓練資料可以獲得網路引數,之後就可以將這個神經網路用來對現實任務進行分類的工作。

|rnn網路結構二

圖2  rnn

網路結構二圖2

展示了結構二的通用架構。就是把兩個句子s和

t拼接起來,中間用乙個特殊分隔符

eos分割,這裡

eos不代表乙個句子的結束,而是代表兩個句子的分隔符號,如此就構造出了

rnn的輸入層。之後可以套上雙向以及深層網路結構,在最高一層

rnn層的輸出之上,套上乙個

mean pooling

層。所謂

mean pooling

,具體做法就是把

blstm

各個節點的輸出結果求等權平均,首先把

blstm

各個輸出內容疊加,這是

pooling

的含義,然後除以輸入節點個數,這是

mean

的含義,

mean pooling

就是這個意思。

如何從物理意義上來理解

mean pooling

呢?這其實可以理解為在這一層,兩個句子中每個單詞都對最終分類結果進行投票,因為每個

blstm

的輸出可以理解為這個輸入單詞看到了所有上文和所有下文(包含兩個句子)後作出的兩者分類結果的判斷,而通過

mean pooling

層投出自己寶貴的一票。

在mean pooling

之上,我們還可以套上一層

softmax

層,這樣就可以實現最終的分類目的。

通過以上方式,我們就通過輸入層、多層

blstm

層、mean pooling

層和輸出層構造出乙個通用的判斷兩個句子語義是否具備某種語義關係的

rnn深度學習系統。

與網路結構一相比,最大的不同在於:網路結構一的兩個

rnn之間沒有建立任何直接的聯絡,無論層級有多深,

rnn在此只是起到了提取各自句子特徵的目的,而兩個句子發生關係是在

mlp神經網路結構裡體現出的,也就是說網路結構一是在兩個句子的整體特徵之間建立起聯絡的。而網路結構二則在

rnn層兩個句子之間的單詞之間就已經建立起了相互的關係,所以如果粗略地分析,感覺結構二應該能夠捕獲到的資訊要多於結構一的那種架構所能捕獲到的資訊,當然,這個只是直觀感覺。

|rnn網路結構三

圖3 rnn

網路結構三圖3

展示了第三種

rnn網路結構。在輸入層和

rnn層結構與網路結構二是相同的,意思是在

rnn層就使得兩個句子之間單詞發生相關關係,與網路結構二不同的在於分類層,不像網路結構二一樣套上乙個

mean pooling

層接收每個單詞的分類判斷,而是在拼接後的最高層處

blstm

最後乙個節點隱層之上(圖

3可能有些不準確,要注意這裡是節點的隱層狀態而非最終輸出值)套上乙個

softmax

分類層,因為這裡最後乙個節點的隱層神經元狀態理論上把兩個句子各自的語義表示以及兩者之間的關係都編碼在其中了,然後直接在這些資訊基礎上進行分類。當然,如果是採用雙向結構

birnn

或者blstm

,可以將首節點和尾節點的隱層狀態一起拼接來作為最後分類的基礎中間值,因為對於雙向結構來說,頭節點也隱含了逆向的兩者關係編碼,其圖結構如下所示:

圖4 rnn

網路結構三之雙向結構

上面介紹了抽象出的三種典型

rnn解決句子對匹配問題的網路結構,至於說這三個結構哪個會更好,或者還是三者差不多,其實這裡面是有文章可作的,比如你可以用若干個分類任務,分別採取三個架構,測試並分析對應的效果,得出哪個結構更好的結論,其實是具有很大的發表價值的,有興趣的同學可以試試看。

另外,很明顯,你仔細一想,其實是能夠想出很多新型

rnn網路結構的,而且非常可能目前還沒有文獻提到過,這裡不細談了,以後有機會我會把我目前能想到的幾個變體分享出來。

使用RNN解決句子對匹配問題的常見網路結構

author 張俊林 除了序列標註問題外,句子對匹配 sentence pair matching 問題也是 nlp中非經常見的一類問題。所謂 句子對匹配 就是說給定兩個句子s1和 s2。任務目標是推斷這兩個句子是否具備某種型別的關係。假設形式化地對這個問題定義,能夠理解例如以下 意思是給定兩個句子...

如何使用棧更好的解決括號匹配問題???

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 1.左括號必須用相同型別的右括號閉合。2.左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例2.輸入 輸出 false 示例3 輸入 輸出 false 示例4 輸入 輸出 true 1.呼叫map介...

goto對資源的釋放問題的解決

q 一塊 中有大於1的資源的分配時,很容易造成跳過資源的釋放 從而導致資源的洩露。a 利用goto語句的跳轉特點可以一定程度上解決這個問題 example file f1 open if null f1 goto error1 file f2 open if null f2 goto error2 ...