上一篇介紹了如何用無監督方法來訓練sentence embedding,本文將介紹如何利用監督學習訓練句子編碼器從而獲取sentence embedding,包括利用釋義數據庫PPDB、天然語言推理數據SNLI、以及綜合利用監督訓練數據和無監督訓練數據。html
2015發表的論文Towards universal paraphrastic sentence embeddings提出使用PPDB(the Paraphrase Database)來學習通用的sentence embeddings。論文模型的基本流程是輸入mini-batch的釋義對\(<x_1, x_2>\)集合\(X_b\),並經過對\(X_b\)中的句子進行採樣獲得\(x_1,x_2\)對應的負樣本\(t_1, t_2\),將這四個句子經過編碼器(編碼函數)\(g\)獲得句子編碼,而後使用一種 margin-based loss進行優化,損失函數的基本思想是但願編碼後的釋義對\(<x_1,x_2>\)可以很是相近而非釋義對\(<x_1,t_1>\)和\(<x_2,t_2>\)可以有不小於\(\delta\)的間距。對於全體訓練數據\(X\),目標函數以下,其中\(\lambda_c,\lambda_w\)爲正則化參數,\(W_w\)爲word embedding參數,\(W_{w_{initial}}\) 爲word embedding初始化矩陣,\(W_c\)是除了\(W_w\)後的其餘參數。
\[ \min _ { W _ { c } , W _ { w } } \frac { 1 } { | X | } \left( \sum _ { \left\langle x _ { 1 } , x _ { 2 } \right\rangle \in X } \max \left( 0 , \delta - \cos \left( g \left( x _ { 1 } \right) , g \left( x _ { 2 } \right) \right) + \cos \left( g \left( x _ { 1 } \right) , g \left( t _ { 1 } \right) \right) \right)\right. \\ + \max \left( 0 , \delta - \cos \left( g \left( x _ { 1 } \right) , g \left( x _ { 2 } \right) \right) + \cos \left( g \left( x _ { 2 } \right) , g \left( t _ { 2 } \right) \right) \right) \bigg) \\ + \lambda _ { c } \left\| W _ { c } \right\| ^ { 2 } + \lambda _ { w } \left\| W _ { w _ { i n i t i a l } } - W _ { w } \right\| ^ { 2 } \]git
論文實現了6種類型的編碼函數\(g\),具體以下:github
論文經過大量實驗來對比上述6種編碼器的優劣,獲得以下結論:web
2017年發表的論文Supervised Learning of Universal Sentence Representations from Natural Language Inference Data提出使用天然語言推理(natural language inference, NLI)數據集來學習通用的句子表示。選擇NLI任務是由於NLI是一個high-level理解任務,涉及推理句子間的語義關係。模型總體架構以下:數據庫
論文對比了7種不一樣的句子編碼器,包括:架構
GRU,取最後一個隱狀態框架
LSTM,取最後一個隱狀態ide
BiGRU,前向GRU與反向GRU最後一個隱狀態的連結函數
BiLSTM+mean pooling學習
BiLSTM+max pooling
Self-attentive network: bi-LSTM+inner Attention with multiple views,Inner Attention機制以下:
\[ \overline { h } _ { i } = \tanh \left( W h _ { i } + b _ { w } \right) \\ \alpha _ { i } = \frac { e ^ { \overline { h } _ { i } ^ { T } u _ { w } } } { \sum _ { i } e ^ { \overline { h } _ { i } ^ { T } u _ { w } } } \\ u = \sum _ { t } \alpha _ { i } h _ { i } \]
其中\(\{h_1,...,h_T\}\)爲BiLSTM的隱狀態輸出,將它們輸入到tanh變換層產生keys集合\(( \overline { h } _ { 1 } , \ldots , \overline { h } _ { T } )\),而後與可學習(可訓練)的query向量(上下文向量)計算獲得\(\{a_i\}\),而後進行加權獲得句子表示\(u\),以下圖所示:
論文具體是採用4個上下文向量\(u _ { w } ^ { 1 } , u _ { w } ^ { 2 } , u _ { w } ^ { 3 } , u _ { w } ^ { 4 }\)(multiple views),對應產生4個表示後進行連結做爲最終的句子表示。
Hierarchical ConvNet,多層卷積(4層),每層卷積的maxpooling輸出進行連結獲得最終句子表示,模型結構以下圖:
論文實驗代表:BiLSTM+maxpooling做爲編碼器,訓練數據爲SNLI,可以訓練出比Skip-Toughts和FastSent等無監督方法更好的sentences embedding,在2017年達到state-of-the-art,代碼見https://github.com/facebookresearch/InferSent
2018年發表的論文Universal Sentence Encoder在前人研究的基礎上,綜合利用無監督訓練數據和有監督訓練數據,進行多任務訓練,從而學習一個通用的句子編碼器。無監督訓練數據包括問答(QA)型網頁和論壇,Wikipedia, web news,有監督訓練數據爲SNLI。多任務模型設計以下圖所示,其中灰色的encoder爲共享參數的句子編碼器。
論文對比了DAN和Transfomer這兩種編碼器。得出以下結論:
更詳細的介紹能夠參考論文做者的博客Google AI Blog (中文版)。
個人github倉庫https://github.com/llhthinker/NLP-Papers包含了近年來深度學習在NLP各領域應用的優秀論文、代碼資源以及論文筆記,歡迎你們star~