如何匹配两段文本的语义?
喵喵喵,好久不見啦。首先很抱歉大家期待的調參手冊(下)遲遲沒有出稿,最近兩個月連著趕了4個DDL,整個人都不好了。最近幾天終于有時間趕一下未完成的稿子了。在趕DDL的時候夾著寫了這篇文章,就先發(fā)布這一篇吧~調參手冊(下)不出意外的話最近也可以發(fā)布啦。
本文由來
一年前在知乎上關注過這么一個問題:
如何判斷兩段文本說的是「同一件事情」? - 知乎 https://www.zhihu.com/question/56751077
如果是document level的判斷,那么信息檢索中的shingling算法是一個簡單有效的解決方案。不過看了一下問題描述,應該是特指sentence level,所以這個問題應該是屬于sentence level paraphrase任務。
近期小夕的研究中也順帶研究了一下相關任務,發(fā)現(xiàn)這個問題并不是如最高票所言的將QA匹配模型直接搬到這個問題里就萬事大吉了。其實在理論層面上這種做法已經很不合適了,里面有很多坑要填,所以本文就試圖糾正一下這個問題的導向吧(雖然這屬于挖墳行為\(//?//)\)。
paraphrase與QA匹配
在目前主流的研究方向來看,匹配兩段文本的語義主要有兩個任務,一個是paraphrase,即判斷一段文本是不是另一段文本的釋義(即換一種說法,但是意思不變);一個是問答對匹配,或者說檢索式QA,即給定一個問題,判斷一段文本是不是符合這個問題的回答。最多可以再加上entailment任務,即判斷給定一段文本后能不能推理出另一段給定的文本(判斷文本2是否可以根據文本1推理得到)。近幾年檢索式QA的問題非?;?#xff0c;很多文本匹配相關的研究都是將一些QA數據集如insuranceQA、wikiQA作為benchmark。
但是!難道真的如那個知乎問題的最高票回答所言,在QA任務上很有效的文本匹配模型真的能直接拿到paraphrase任務上去?
共通之處
我們先來簡單討論一下這兩個任務的共通之處,也就是最最最基本的模型結構。顯然,對兩段文本進行相似度比較之前,首先要把這兩段文本各自encoding成一個壓縮上下文信息的矩陣或者直接embedding成一個向量,然后通過矩陣相似度或向量相似度的計算方法得到相似程度就可以啦。顯然embedding成向量后的比較更為簡單,因為可以直接使用歐式距離或者余弦距離啦,但是顯然這樣對embedding的質量要求非常高,而且難以進行兩段文本之間的細粒度的比較。直接比較encoding后的矩陣的方法聽起來雖然好,但是兩個矩陣之間的相似度該如何比較?細粒度的詞、短語的匹配信息又該如何聚合呢?顯然后一種更麻煩一些。
當然,不管是embedding還是encoding,其實都要先encoding╮( ̄▽ ̄””)╭,畢竟同一個詞的語義在不同的上下文語境中很可能相差甚遠。encoding的模型基本分為CNN系、RNN系、RecNN系以及self-attention系這幾種。當然,這幾種方法可以疊加使用。我們以CNN為例,討論一下如何在文本匹配模型中對兩段文本進行有效的encoding。
這就不得不提到參考文獻[1]啦。這篇文章針對這個問題做了詳細的實驗。
這篇論文實驗了6種模型結構,但是我們這里僅關心其中最有意義的一對比較。有興趣了解全部6種結構的比較的同學可以去看原文哈。
對比圖1和圖2,圖1使用兩個CNN網絡分別對文本1(Q)和文本2(A)進行encoding,而圖2僅僅使用一個CNN,或者說使用兩個共享參數的CNN來對兩段文本分別進行encoding。然后通過max-over-time-pooling來embedding成向量進而計算余弦距離后發(fā)現(xiàn)圖2明顯的比圖1有效(圖2比圖1高20個百分點,詳見參考文獻[1])。其實很好理解啦,對兩個向量進行余弦距離計算的前提是這兩個向量必須要位于同一個embedding空間呀,比如你要是拿三次元的小夕跟二次元的小白狐??相比,【那當然是小夕更可愛啦】(劃掉),那當然沒有可比性啦,只能說都很可愛。
所以說,圖2將兩個文本的embedding結果約束在同一個embedding空間內進行比較,當然會比圖1這種在兩個不同的embedding空間之間進行比較靠譜的多。像圖2這種底層共享權重的架構俗稱雙塔模型(倆基座,但是是同一個塔)。
出問題了╮( ̄▽ ̄””)╭
然而,這種簡單做法顯然在QA匹配問題上會有明顯問題的。哪怕一個回答是標準回答,問題的embedding結果與回答的embedding結果都很難完全一致,而且真的完全一致了也不合理。甚至如果你把問題本身當成回答的話,會發(fā)現(xiàn)兩段文本的embedding結果一樣,導致余弦距離超級近,然而問題本身并不能當作問題的回答呀。但是這對于paraphrase任務來說就沒毛病(句子A和句子B完全一致的話,對paraphrase任務里A與B當然應該有最近的距離)。所以其實這時paraphrase與QA匹配的模型應該開始有所區(qū)別了。
一方面,由于paraphrase看起來沒有大毛病,因此理論上在相似度計算的層面上再取得重大突破應該比較困難,而QA匹配顯然在相似度計算的層面上有非常非常大的改進需求。如參考文獻[2]的實驗結果支撐,文獻[2]僅僅使用了簡單的attentive pooling就使得模型在多個QA匹配數據集上取得了顯著提升(如圖3,CNN上提高接近10個百分點),這個實驗現(xiàn)象恰好驗證了上述小夕的理論猜想。
圖3
而在Quora數據集(也是一個paraphrase detection任務)里Quora給出的baseline來看(如圖4,見參考文獻[3]),果然使用attention的模型并沒有明顯的優(yōu)越性(甚至性能還不如不用attention)。
圖4
抱著好奇,小夕在某不方便透露的數據集上也做了實驗,實驗了在QA匹配上辣么有效的attentive pooling,除了文章中提到的attention方法(機器翻譯領域中貌似叫general attention[4]),小夕還額外實驗了無參數的dot attention[4]以及經典的additive attention[5],結果發(fā)現(xiàn)在該paraphrase數據集上效果最好的是additive attention,但是在char-level上比不用attention低了整整3個點的f1,在word-level上也僅僅有0.幾的提升,還不排除隨機初始化的影響。而原文里的attentive pooling直接慘出天際,這還都是調參后的結果。
為什么呢?其實依然非常好理解,以attentive pooling為例,其核心就是這么一個對齊矩陣的計算公式:
其中U是可訓練的參數矩陣,Q是文本1,A是文本2,G是對齊矩陣,存儲著Q中每個詞跟A中每個詞的相關度(attention degree)。Q和A都可以看作是一個[embed_dim, seq_len]的矩陣,顯然U就是[embed_dim, embed_dim]的矩陣。當然,去掉U之后就是最簡單的dot attention,即直接計算兩個詞向量的內積。
想一下,這里的U起到什么作用呢?雖然Q和A被embedding進了同一個向量空間,但是顯然問題中的詞分布與正確回答中的詞分布是有顯著差異的。比如回答中很少出現(xiàn)”多高“這個詞,但是問題中出現(xiàn)就不稀奇了。因此Q的空間與A的空間其實是不一樣的,直接進行距離計算會有問題。顯然,在Q的空間和A的空間之間缺一個橋梁!而在小夕的《線性代數這樣講(一)》里提過,矩陣代表著線性映射,因此U的出現(xiàn)恰好可以完成兩個分布之間的映射。
啰嗦一下,舉個栗子。一方面,無attention的模型中,答案中的“1米”的詞向量可能跟問題中的“多高”并沒有很近的距離,但是U完全可以把“1米”相關的表示具體長度的語義映射到“多高”附近。另一方面,無attention的模型中,答案中的”多高“和問題中的”多高“肯定有非常近的距離(歐式距離為0),但是U完全可以將問題中的”多高“映射到其他詞附近,導致其跟回答中的”多高“有很遠的距離(即”多高“并不是”多高“的回答!)。所以說,U為答案空間和問題空間搭建了一座橋梁,使得兩者的之間的距離計算變得有意義。看,attention一下子把QA匹配里的兩個大問題都解決了。
然而,這種標準的詞對齊的attention放在paraphrase任務里有什么意義呢?起碼我很難想到它是無可取代的。文本1中的詞與文本2中的詞本身就是同一個空間里的,文本1與文本2里的同義詞、近義詞已經通過訓練詞向量獲得了很近的距離,為什么要多此一舉的加個attention呢?哪怕是為了針對OOV(未登陸詞),那么在表示層多疊幾層CNN或RNN就可以了哇(用OOV的上下文去描述它),也沒有必要為此上一個attention吧,何況OOV在大部分情況下并不會有太大影響。
所以
那么對于paraphrase任務來說,怎樣才看起來比較靠譜呢。我覺得那個知乎問答下最高票回答的第一大段還有斤木的回答其實是真正在點子上的。一方面要提高word-level embedding的質量和領域相關的詞匯召回率,另一方面要將關注點放在捕捉syntactic level和semantic level的知識上,可以直接做POS、SRL等相關特性,要么就在大數據集上引導模型學習相關知識。
而在花式attention方面,推薦大家去關注機器閱讀理解領域的前沿模型,在相似度計算方面,推薦大家關注檢索式QA相關的前沿。當然,小夕也可能未來放出相關文章哦,限于篇幅,這里就不展開講啦。
總結一下:
1、再次驗證no-free-lunch定理,哪怕是兩個看起來非常相似的任務,都有可能導致非常不同的解決方案。
2、對于檢索式QA來說好好做attention是值得的。
3、對于paraphrase來說,別對別人家的attention抱那么大的期望,除非你能自己造一種task-specific的attention方式,并且你認為它捕獲的信息無可替代。
4、在沒有相應的理論分析和實驗驗證之前,不要盲目相信一個東西的性能。引用美妝屆的一句經典:甲之蜜糖,乙之砒霜╮(╯▽╰)╭。
參考文獻
[1] Feng M, Xiang B, Glass M R, et al. Applying deep learning to answer selection: A study and an open task[C]//Automatic Speech Recognition and Understanding (ASRU), 2015 IEEE Workshop on. IEEE, 2015: 813-820.
[2] dos Santos C N, Tan M, Xiang B, et al. Attentive pooling networks[J]. CoRR, abs/1602.03609, 2016, 2(3): 4
[3] https://engineering.quora.com/Semantic-Question-Matching-with-Deep-Learning
[4] Luong M T, Pham H, Manning C D. Effective approaches to attention-based neural machine translation[J]. arXiv preprint arXiv:1508.04025, 2015.
[5] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.
哦對啦,「小公式」與「小算法」開通,歡迎順路逛逛哦( ̄? ̄)
總結
以上是生活随笔為你收集整理的如何匹配两段文本的语义?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜索引擎核心技术与算法 —— 倒排索引初
- 下一篇: BERT重计算:用22.5%的训练时间节