將句子表示為向量(下):基於監督學習的句子表示學習(sentence embedding)
1. 引言
上一篇介紹了如何用無監督方法來訓練sentence embedding,本文將介紹如何利用監督學習訓練句子編碼器從而獲取sentence embedding,包括利用釋義數據庫PPDB、自然語言推理數據SNLI、以及綜合利用監督訓練數據和無監督訓練數據。
2. 基於釋義數據庫PPDB
2015發表的論文Towards universal paraphrastic sentence embeddings提出使用PPDB(the Paraphrase Database)來學習通用的sentence embeddings。論文模型的基本流程是輸入mini-batch的釋義對\(<x_1, x_2>\)
\[ \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 } \]
論文實現了6種類型的編碼函數\(g\),具體如下:
- 詞向量平均;
- 詞向量平均後通過一個線性層;
- DAN模型:詞向量平均後通過多層帶非線性函數的全連接層;
- Simple RNN,取最後一個隱狀態向量;
- identity-RNN (iRNN), 一種特殊的simple RNN,其weight矩陣初始化為單位矩陣,bias初始化為0向量,激活函數為恒等函數,最終的句子編碼向量為最後一個隱狀態向量除以句子中詞的個數。當正則化程度很高時(模型參數幾乎不更新),iRNN將變成模型1(詞向量平均),不同的是iRNN能夠考慮詞序,有希望能夠比模型1效果好;
- LSTM,取最後一個隱狀態向量。
論文通過大量實驗來對比上述6種編碼器的優劣,得到如下結論:
- 對於無監督文本相似度任務,復雜的模型如LSTM在垂直領域數據集上表現更好,而對於開放域數據集,簡單的模型如詞向量平均比LSTM的效果更好;
- 對於句子相似度,句子蘊含以及情感分析這三種有監督任務,詞向量平均模型在句子相似度和句子蘊含兩個任務上表現比LSTM的效果更好,而情感分析任務LSTM表現非常不錯。
3. 基於自然語言推理的InferSent模型
2017年發表的論文Supervised Learning of Universal Sentence Representations from Natural Language Inference Data提出使用自然語言推理(natural language inference, NLI)數據集來學習通用的句子表示。選擇NLI任務是因為NLI是一個high-level理解任務,涉及推理句子間的語義關系。模型整體架構如下:
論文對比了7種不同的句子編碼器,包括:
GRU,取最後一個隱狀態
LSTM,取最後一個隱狀態
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
4. 我全都要:Universal Sentence Encoder
2018年發表的論文Universal Sentence Encoder在前人研究的基礎上,綜合利用無監督訓練數據和有監督訓練數據,進行多任務訓練,從而學習一個通用的句子編碼器。無監督訓練數據包括問答(QA)型網頁和論壇,Wikipedia, web news,有監督訓練數據為SNLI。多任務模型設計如下圖所示,其中灰色的encoder為共享參數的句子編碼器。
論文對比了DAN和Transfomer這兩種編碼器。得出如下結論:
- Transformer 模型在各種任務上的表現都優於簡單的 DAN 模型,且在處理短句子時只稍慢一些。
- DAN模型也能具有很不錯的表現,並且相較於Transformer模型,訓練時間和內存的開銷都更小,尤其是當句子較長時。
更詳細的介紹可以參考論文作者的博客Google AI Blog (中文版)。
5. 總結
- 基於監督學習方法學習sentence embeddings可以歸納為兩個步驟:
- 第一步選擇監督訓練數據,設計相應的包含句子編碼器Encoder的模型框架;
- 第二步選擇(設計)具體的句子編碼器,包括DAN、基於LSTM、基於CNN和Transformer等。
- Sentence Embedding的質量往往由訓練數據和Encoder共同決定。Encoder不一定是越復雜越好,需要依據下遊任務、計算資源、時間開銷等多方面因素綜合考慮。
我的github倉庫https://github.com/llhthinker/NLP-Papers包含了近年來深度學習在NLP各領域應用的優秀論文、代碼資源以及論文筆記,歡迎大家star~
References
- Wieting et al. - 2015 - Towards universal paraphrastic sentence embeddings
- Conneau et al. - 2017 - Supervised Learning of Universal Sentence Representations from Natural Language Inference Data
- Cer et al. - 2018 - Universal Sentence Encoder
- Google AI - 2018 - Advances in Semantic Textual Similarity
將句子表示為向量(下):基於監督學習的句子表示學習(sentence embedding)