文本匹配
語義解析:有用嗎?
一. 定義&背景
- 一些定義
1.1研究兩段文本之間關系的問題都可以看做是文本匹配;
1.2當使用文本語義監督訓練時,就是 語義相似性匹配問題。 如果使用 行為標簽去監督訓練,就成了行為相關性匹配問題。
1.3 語義相關性,比如搜索,查詢詞和文檔如果關鍵字不一樣,但兩者是多詞一義,則模型不理解語義,做語義上的匹配解決不了問題。 在推薦中,商品可以由一個向量來刻畫,用戶也可以由一系列交互過的商品來表達,兩者之間做一些語義上的匹配,能推薦出一些有新意的商品,增加推薦多樣性。而傳統的方法比如CF,CB等,無法學習得到這種用戶和商品的相對間接的聯系。
適用場景:閱讀理解,QA,搜索,語義蘊含,推薦,廣告等。
信息檢索: 查詢和文檔的匹配
問答系統:問題和候選答案的匹配
對話系統:對話和回復的匹配
一、相似度計算&復述識別(textual similarity¶phrase identification)
這個可以說是文本匹配最典型最經典的場景了,也就是判斷兩段文本是不是表達了同樣的語義,即是否構成復述(paraphrase)關系。有的數據集是給出相似度等級,等級越高越相似(這種更合理一些),有的是直接給出0/1匹配標簽。這一類場景一般建模成分類問題。
代表性數據集:
• SemEval STS Task:從2012年開始每年都舉辦的經典NLP比賽。這個評測將兩段文本的相似度程度表示為0.0~5.0,越靠近0.0表示這兩段文本越不相關,越靠近5.0表示越相似。使用皮爾遜相關系數(Pearson Correlation)來作為評測指標。鏈接[2]
• Quora Question Pairs (QQP):這個數據集是Quora發布的。相比STS,這個數據集規模明顯大,包含400K個question-question pairs,標簽為0/1,代表兩個問句的意思是否相同。既然建模成了分類任務,自然可以使用准確率acc和f1這種常用的分類評價指標啦。(知乎什么時候release一個HuQP數據集( ̄∇ ̄))鏈接[3]
• MSRP/MRPC:這是一個更標准的復述識別數據集。在QQP數據集中文本都是來自用戶提問的問題,而MRPC里的句子則是來源於新聞語料。不過MRPC規模則要小得多,只有5800個樣本(畢竟是2005年release的數據集,而且人工標注,所以可以理解╮( ̄▽ ̄"")╭)。跟QQP一樣,MRPC一般也用acc或f1這種分類指標評估。鏈接[4]
• PPDB:這個paraphrase數據集是通過一種ranking方法來遠程監督[]做出來的,所以規模比較大。文本粒度包含lexical level(單詞對)、phrase level(短語對)和syntactic level(帶句法分析標簽)。而且不僅包含英文語料,還有法語、德語、西班牙語等15種語言(為什么沒有中文!)。語料庫規模從S號、M號一直到XXXL號讓用戶選擇性下載也是很搞笑了,其中短語級就有7000多萬,句子級則有2億多。由於語料規模太大,標注質量還可以,因此甚至可以拿來訓練詞向量[5]。鏈接[6]
二、問答匹配(answer selection)
問答匹配問題雖然可以跟復述識別一樣強行建模成分類問題,但是實際場景往往是從若干候選中找出正確答案,而且相關的數據集也往往通過一個匹配正例+若干負例的方式構建,因此往往建模成ranking問題。
在學習方法上,不僅可以使用分類的方法來做(在ranking問題中叫pointwise learning),還可以使用其他learning-to-rank的學習方法,如pairwise learning(”同question的一對正負樣本”作為一個訓練樣本)和listwise learning(”同question的全部樣本排好序“作為一個訓練樣本) 。因此,相應的評價指標也多使用MAP、MRR這種ranking相關的指標。
注意:這並不代表pointwise matching這種分類做法就一定表現更弱,詳情見相關papers
代表性數據集如:
• TrecQA:包含56k的問答對(但是只有1K多的問題,負樣本超級多),不過原始的數據集略dirty,包含一些無答案樣本和只有正樣本以及只有負樣本的樣本(什么鬼句子),所以做research的話注意一下,有些paper是用的clean版本(濾掉上述三類樣本),有的是原始版本,一個數據集強行變成了兩個track。鏈接[7]
• WikiQA:這也是個小數據集,是微軟從bing搜索query和wiki中構建的。包含10K的問答對(1K多的問題),樣本正負比總算正常了些。鏈接[8],paper[9]
• QNLI:總算有大規模數據集了,這個是從SQuAD數據集改造出來的,把context中包含answer span的句子作為匹配正例,其他作為匹配負例,於是就有了接近600K的問答對(包含接近100K的問題)。鏈接[10]
三、對話匹配(response selection)
對話匹配可以看做是進階版本的問答匹配:1.引入了歷史對話。2.response回復空間比問題答案大很多。
代表數據集:
UDC:Ubuntu Dialogue Corpus是對話匹配任務最最經典的數據集,包含1000K的多輪對話(對話session),每個session平均有8輪對話,不僅規模大而且質量很高,所以近些年的對話匹配工作基本都在這上面玩。鏈接[11],paper[12]
Douban Conversation Corpus:硬要給UDC挑毛病的話,就是UDC是在ubuntu技術論壇這種限定域上做出來的數據集,所以對話topic是非常專的。所以@吳俁 大佬release了這個開放域對話匹配的數據集,而且由於是中文的,所以case study的過程非常享受。鏈接[13],paper[14]
四、自然語言推理/文本蘊含識別(NLI/Textual Entailment)
NLI,或者說RTE任務的目的就是判斷文本A與文本B是否構成語義上的推理/蘊含關系:即,給定一個描述「前提」的句子A和一個描述「假設」的句子B,若句子A描述的前提下,若句子B為真,那么就說文本A蘊含了B,或者說A可以推理出B;若B為假,就說文本A與B互相矛盾;若無法根據A得出B是真還是假,則說A與B互相獨立。
顯然該任務可以看作是一個3-way classification的任務,自然可以使用分類任務的訓練方法和相關評價指標。當然也有一些早期的數據集只判斷文本蘊含與否,這里就不貼這些數據集了。
代表性數據集:
• SNLI:Stanford Natural Language Inference數據集是NLP深度學習時代的標志性數據集之一,2015年的時候發布的,57萬樣本純手寫和手工標注,可以說業界良心了,成為了當時NLP領域非常稀有的深度學習方法試驗場
• MNLI:Multi-Genre Natural Language Inference數據集跟SNLI類似,可以看做SNLI的升級版,包含了不同風格的文本(口語和書面語),包含433k的句子對,鏈接[17]
• XNLI:全稱是Cross-lingual Natural Language Inference。看名字也能猜到這個是個多語言的數據集,XNLI是在MNLI的基礎上將一些樣本翻譯成了另外14種語言(包括中文)。鏈接[18]
五、信息檢索中的匹配
除了上述4個場景之外,還有 query-title匹配、query-doc匹配等信息檢索場景下的文本匹配問答。
信息檢索場景下,一般先通過檢索方法召回相關性,再對相關項進行rerank. 更重要的是reranking,reranking問題就不能僅僅依賴文本這一個維度的特征了,而且相對來說判斷兩個文本的語義匹配有多深以及關系有多微妙就沒有那么重要了。
q-a, q-r,和NLI相關的方法在理論上可以套用在query-title 問題上。 但是 query-doc問題則更多是一個檢索問題。
DSSM:CIKM2013 | Learning Deep Structured Semantic Models for Web Search using Clickthrough DataCDSSM:WWW2014 | Learning Semantic Representations Using Convolutional Neural Networks for Web Search
HCAN:EMNLP2019 | Bridging the Gap between Relevance Matching and Semantic Matching for Short Text Similarity Modeling
2 應用場景: 從大量的數據庫中,選取與用戶輸入內容最匹配的文本
搜索引擎、智能問答、知識檢索、對話系統、query-doc搜索、QA系統、文本匹配、意圖識別、情感識別。
六、機器閱讀理解
做匹配的話,相關的代表性工作如BiDAF、DrQA等最好打卡一下的。
BiDAF:ICLR2017 | Bidirectional Attention Flow for Machine Comprehension
DrQA:ACL2017 | Reading Wikipedia to Answer Open-Domain Questions
注意:雖然基於表示的文本匹配方法(一般為Siamese網絡結構)與基於交互的匹配方法(一般使用花式的attention完成交互)紛爭數年,不過最終文本匹配問題還是被BERT及其后輩們終結了。因此下面兩節請帶着緬懷歷史的心情來打卡,不必糾結paper的細節,大體知道劇情就好。
打卡的Siamese結構(基於表示)
這種結構就是本文開頭提到的,首先對兩段文本分別進行encoding進而得到各自的向量表示,然后通過相似度計算函數或相關結構來得到最終的匹配關系。
在baseline階段提到的SiameseCNN和SiameseLSTM的基礎上,這個方向往下做無非就是兩個方向:
- 加強encoder,得到更好的文本表示
- 加強相似度計算的函數建模
對於第一個方向,無非就是使用更深更強大的Encoder,代表性打卡工作如
InferSent:EMNLP2017 | Supervised Learning of Universal Sentence Representations from Natural Language Inference Data
ps:雖然這篇paper的真正目的是遷移學習
SSE:EMNLP2017 | Shortcut-Stacked Sentence Encoders for Multi-Domain Inference
對於第二個方向,則是使用更花哨的相似度計算函數或更花哨的用於學習相似度函數的網絡結構,可打卡的工作如
SiamCNN:ASRU2015 | Applying deep learning to answer selection: A study and an open taskSiamLSTM:AAAI2016 | Siamese Recurrent Architectures for Learning Sentence SimilarityMulti-view:2016 EMNLP | Multi-view Response Selection for Human-Computer Conversation
顯而易見,這個方向可玩性不強(雖然容易work但是paper寫出來不夠炫酷),所以不要問為什么只更新到了2017年,因為2016年attention就遍地開花了,自然大家基本都跑去趕潮做花式交互結構了。
打卡的花式attention結構(基於交互)
顧名思義,這種思路就是首先通過attention為代表的結構來對兩段文本進行不同粒度的交互(詞級、短語級等),然后將各個粒度的匹配結果通過一種結構來聚合起來,作為一個超級特征向量進而得到最終的匹配關系。
顯然這種思路下,除了讓文本對的交互更花哨以外,就是考慮讓模型變得更深(從而建模更高level的匹配關系)。
不過個人經驗來說,這種思路下雖然可以玩的花樣很多,一些論文argue的點也看似有一些道理,不過實際很多模型都是在廖廖一兩個數據集上瘋(暴)狂(力)改(搜)進(索)各種structure才把分數刷上去的,導致這種structure看似在某個場景甚至僅僅是某些數據集上work,實際上這個structure可能僅僅迎合了特定數據分布或特定場景的一些特性,導致很多工作放到一個新場景下就效果翻車了,甚至努力調參都調不動太多。
因此在BERT之前這類論文提出的模型雖然看起來高大上,不過可能換個數據集后還不如稍微調調參拍拍腦袋的SiameseCNN好用。所以在刷這類論文時,千萬不要被蜜汁花哨的模型結構迷惑了雙眼噢~相關工作很多,從中挑選了幾篇比較有代表性或比較有信息量或容易閱讀的。
MatchCNN:AAAI2016 | Text Matching as Image Recognition
DecAtt:EMNLP2016 | A Decomposable Attention Model for Natural Language Inference
CompAgg:ICLR2017 | A COMPARE-AGGREGATE MODEL FOR MATCHING TEXT SEQUENCES
ESIM:ACL2017 | Enhanced LSTM for Natural Language Inference
2018 COLING | Neural Network Models for Paraphrase Identification, Semantic Textual Similarity, Natural Language Inference, and Question Answering
ps:這篇paper其實可以看做是對前面各模型的實驗和分析大總結
DAM:ACL2018 | Multi-Turn Response Selection for Chatbots with Deep Attention Matching Network
HCAN:EMNLP2019 | Bridging the Gap between Relevance Matching and Semantic Matching for Short Text Similarity Modeling
此外,這里尤其要注意一下模型對稱性的問題,像文本相似度計算/q-q匹配/title-title匹配這類場景下的匹配是對稱的,即match(a,b)=match(b,a),但是模型不對稱后,就會讓模型自己額外的學習這個先驗知識,除非數據集很大,或者已經預訓練過了,否則效果很容易翻車。當然了,也有一些tricks可以強行使用不對稱模型,即在這類場景下對每個樣本都跑一遍match(a,b)和match(b,a)然后取平均,不過相比天然對稱的模型效果如何就要看各位煉丹師的水平啦
為了兼顧效率和准確率,也有很多折中的方法,例如:PolyEncoder、DeFormer等等后融合(later fusion)方法,另一種常用策略則是 模型蒸餾,如對BERT模型瘦身的DistillBert、TinyBert等
特征融合:
在上述相關性特征基礎上,對眾多特征進行融合往往可以進一步提升相關性指標,融合模型則采用驚呆你的LR/GBDT/NN 模型即可。 此外特征融合模型的訓練一般使用人工標注的訓練數據,同時為了標注方便可將相關性目標分為不同檔。如在4檔模式下,在訓練階段,四個檔位分為 1,0.75,0.25,0. 模型則通過回歸或分類的方式對分位進行擬合。由於該部分策略是對子特征的Ensemble,因此不需要多訓練數據,萬級別可以滿足需求。
關於相關性任務中: 問題定位: 技術現狀分析、問題現狀分析
訓練數據:高置信樣本挖掘、定制化負樣本構造
多因子融合:相關性因子、成交效率因子
3 分類
根據文本長度不同:分為3類
A. 短文本-短文本匹配: 網頁搜索,計算query與 網頁title的匹配程度,召回和排序中都用。
B. 短文本-長文本匹配:搜索引擎、智能問答、知識檢索,計算query和整個頁面文本內容之間的相似度。
C. 長文本-長文本匹配: 推薦系統, 例如新聞推薦,由長文本推薦長文本。
評估方法:
MAP、MRR方法
二、研究思路
第一種: 孿生網絡:雙塔采用相同編碼器,完了直接算相似度。
第二種:匹配融合:前半與孿生網絡相同,然后接 一種或多種注意力機制進行信息交互,最后聚合為一個向量,通過MLP獲得短文本的相似度。
第三種:預訓練模型:cls+MLP
-
單語義模型: 通過神經網絡給兩個句子分別編碼,然后計算句子之間的相似度,最經典的代表是2013年微軟提出的DSSM[1]。
-
多語義模型,改善了單語義模型單一粒度的問題,將整個文本分為不同級別的表達方式,例如詞、短語、句子,也會考慮到句子的局部結構[2],編碼表達信息比單語義模型更加豐富。
-
匹配矩陣模型,借用了圖像的矩陣表示方式[3],將文本匹配的交互方式定義為匹配矩陣,因此可將匹配精細到兩兩詞,甚至兩兩字母之間。
-
句子交互模型,主要包括表征層和交互層,應用注意力(attention)機制來挖掘句子內和句子間內容的聯系,從而得到更好的效果[4]。
模型部分:
DRCN:筆記[閱讀筆記] 句子語義匹配模型——DRCN - 知乎 (zhihu.com)
AAAI2019 Semantic sentence matching with densely-connected recurrent and co-attentive information。
ARC-2: query-doc 三個詞卷積,變成二維map.
MatchPyramid: query -doc 兩兩計算,得到匹配矩陣,再操作圖像算法。
MatchRNN: 復雜,神經網絡的動態規划
MV-LSTM: 交互產生圖像矩陣三中方式,然后 k-max_pooling
aNMM:基於value的共享權重。
三、數據集
3.1 幾個數據集供參考:
PI、SSEI、STS 英文:MSRP、SICK、SNLI、STS、Quora QP、MultiNLI
PI、SSEI、STS 中文:LCQMC、BQ corpus
IR-QA 英文:wikiQA、insuranceQA
其中,
PI:paraphrase identification,是判斷一文本是否另一文本的復述;
STS:semantic text similarity,是計算兩文本在語義層面的相似性;
SSEI:sentence semantic equivalent identification,是判斷兩文本在語義層面是否一致;
IR-QA:是給定一個 query,直接從一堆 answer 中尋找最匹配的,省略了 FAQ 中 question-answer pair 的 question 中轉。
• SNLI:570K條人工標注的英文句子對,label有三個:矛盾、中立和支持
• MultiNLI:433K個句子對,與SNLI相似,但是SNLI中對應的句子都用同一種表達方式,但是MultiNLI涵蓋了口頭和書面語表達,可能表示形式會不同(Mismatched)
• Quora 400k個問題對,每個問題和答案有一個二值的label表示他們是否匹配
• WikiQA是問題是相對應的句子的數據集,相對比較小。
3.2 訓練標簽
文本匹配的監督方式多種多樣,一般標簽形式可以分成下述三種形式:
• pointwise,M 通常為 1,標簽形式為 0 或 1,標簽 0 表示 query 與該 doc 不匹配,標簽 1 表示匹配。 M 也可大於 1 ,此時,一組數據中只有一個 1 其余全為 0,表示這 M 個 doc 中只有這一個與 query 匹配,其余全都不匹配。
• pairwise,M 通常為 2,標簽形式為 0 或 1 ,標簽 0 表示 query 與第一個 doc 比與第二個 doc 更匹配,標簽 1 表示 query 與第二個 doc 比與第一個 doc 更匹配,當然也可以反之。
• listwise,M 通常大於等於 2,標簽形式為 1 到 M 的正整數,標簽 m 表示 query 與該 doc 的匹配度在該組里位列第 m 位。實際多采用 pointwise 或者 pairwise 方式。
四、未來工作
4.1 挑戰:
-
匹配對象差異巨大
實際問題中文本匹配的兩個對象往往長度差異巨大,比如搜索場景的query-doc匹配,QA系統的問題答案匹配,標簽系統的文章-標簽匹配等,都是至少有匹配一方是極短文本,展示的語義並不完整,這種情況下進行文本匹配操作會帶來各種各樣的問題,需要根據實際問題來解決。 -
優質訓練樣本難大量獲取
-
文本匹配的層次性
文本是以層次化的方式組織起來的,詞語組成短語,短語組成句子,句子組成段落,段落組成篇章。這種特性使得 在做文本匹配的時候需要考慮不同層次的匹配信息,按照層次的方式組織文本匹配信息。