/*
.*/author: 張俊林
除了序列標註問題外,句子對匹配(
sentence pair matching
)問題也是
nlp中非經常見的一類問題。所謂「句子對匹配」,就是說給定兩個句子s1和
s2。任務目標是推斷這兩個句子是否具備某種型別的關係。
假設形式化地對這個問題定義,能夠理解例如以下:
意思是給定兩個句子,須要學習乙個對映函式。輸入是兩個句子對,經過對映函式變換,輸出是任務分類標籤集合中的某類標籤。既然我們要討論深度學習,那麼這個對映函式f就是通過神經網路來進行對映的,而標籤集合裡的分類標籤詳細代表的含義跟任務相關。
典型的樣例就是
paraphrase
任務。即要推斷兩個句子是否語義等價。所以它的分類標籤集合就是個
的二值集合。除此外。還有非常多其他型別的任務都屬於句子對匹配。比方問答系統。就是推斷兩個句子是否乙個是問題乙個是答案的關係。此類任務還有非常多,關鍵是看你怎麼理解乙個任務的目標。
今天我們主要講講假設利用
rnn來構造這個對映函式
f,那麼神經網路的結構應該怎樣設計?儘管標題說是「常見」,可是事實上講這方面的文獻非常之少。我把使用
rnn解決句子對匹配的神經網路結構抽象成三類情況。這三類也是相對easy想到的結構。
當然,這裡要注意,儘管我們這裡說的是rnn
。可是它代表了
lstm
、gru
、多層深度網路等各種變體形式,為行文方便,在此統一用
rnn來指代。
|rnn網路結構一
圖1. rnn
網路結構一
圖1展示了乙個最easy想到的
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網路結構。
在輸入層和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 ...