鴿了很久的NLP入門系列終于在我的努力下又更新了。
上次聊了分類任務(wù)的模型與技巧,今天我們就來聊聊句間關(guān)系任務(wù)。句間關(guān)系的輸入是一對文本,輸出是文本間的關(guān)系。常用的判別有語義相似度、語義關(guān)系推理(蘊(yùn)含/中立/矛盾)、問答對等,拿GLUE榜單來說,其中有6個(gè)(QQP/MNLI/QNLI/STS/RTE/MRPC)都是句間關(guān)系任務(wù)。這個(gè)任務(wù)的應(yīng)用場景也很廣泛,比如搜索推薦的語義相關(guān)性、智能問答中的問題-問題、問題-答案匹配、知識(shí)圖譜中的實(shí)體鏈接、關(guān)系識(shí)別等,是成為NLPer必須卷的一個(gè)方向。
在深度學(xué)習(xí)中,文本匹配模型可以分為兩種結(jié)構(gòu):雙塔式和交互式。
雙塔式模型也稱孿生網(wǎng)絡(luò)、Representation-based,就是用一個(gè)編碼器分別給兩個(gè)文本編碼出句向量,然后把兩個(gè)向量融合過一個(gè)淺層的分類器;交互是也稱Interaction-based,就是把兩個(gè)文本一起輸入進(jìn)編碼器,在編碼的過程中讓它們相互交換信息,再得到最終結(jié)果。如下圖:
兩種框架比較的話,交互式通常準(zhǔn)確率會(huì)高一些,畢竟編碼器能使用的信息更多了,而雙塔式的速度會(huì)快很多,比如線上來一個(gè)query,庫里有一百萬個(gè)候選,等交互式算完了用戶都走了,但雙塔式的候選可以提前計(jì)算好,只用給query編碼后去和候選向量進(jìn)行淺層計(jì)算就好了。工程落地的話,通常會(huì)用雙塔式來做召回,把一百萬個(gè)候選縮減為10個(gè),再對這10個(gè)做更精細(xì)的計(jì)算。
所以說這兩種方式都是實(shí)際應(yīng)用中必不可缺的,兩個(gè)方向也都有著不少的模型:
下面我們就先講講雙塔式模型的SOTA發(fā)展。這里面通常有三個(gè)點(diǎn)可以優(yōu)化:encoder、merged_vec、classifier,大部分研究都在專注提升encoder的能力。我個(gè)人主要將雙塔的發(fā)展分為詞袋、有監(jiān)督、預(yù)訓(xùn)練+遷移三個(gè)階段。
詞袋句向量
最簡單的就是直接從詞向量計(jì)算句向量。首先可以用mean、max池化,相比字面n-gram重合度肯定是有提升的。但當(dāng)句子中的噪聲多起來之后,如果兩個(gè)句子有大量重合的無意義詞匯,分?jǐn)?shù)也會(huì)很高,這時(shí)候就可以考慮加權(quán)求和,比如TF-IDF。
ICLR2017論文SIF提出了名為smooth inverse frequency的方法,先由詞向量加權(quán)平均得到句向量,再對多個(gè)句子組成的句向量矩陣進(jìn)行PCA,讓每個(gè)句向量減去第一主成分,去掉“公共”的部分,保留更多句子本身的特征。該方法在相似度任務(wù)上有10%-30%的提升,甚至超過了一些RNN模型,十分適合對速度要求高、doc相似度計(jì)算的場景。
之前提到的相似度任務(wù)都適用cosine相似度衡量的,也有學(xué)者研究了其他metric。2016年的WMD提出了Word Mover‘s Distance這一概念,用句子A走到句子B的最短距離來衡量兩者的相似程度。表示在下圖中就是非停用詞的向量轉(zhuǎn)移總距離:
上面介紹的兩篇文章使用的都是word2vec向量,但實(shí)際操作中我推薦使用fasttext(就是加上ngram,但仍用word2vec結(jié)構(gòu)訓(xùn)練),一方面ngram可以增加信息,另一方面也避免了OOV。
千萬不要小看詞向量,用好了真的是很強(qiáng)的baseline。另外現(xiàn)在很多線上場景因?yàn)閷λ俣纫蟾?,或者是toB的業(yè)務(wù)甲方不愿意買GPU,有不少落地都停留在這個(gè)階段。
有監(jiān)督句向量
詞向量雖然可以經(jīng)過處理變成句向量,但詞袋式的融合也會(huì)丟失掉順序信息,同時(shí)在訓(xùn)練時(shí)其目標(biāo)還是word-level的,想要獲得「真正的句向量」,還是需要尋找sentence-level的目標(biāo)函數(shù)。
微軟在2013年提出的CIKM論文DSSM是相當(dāng)知名的多塔模型,它對文本進(jìn)行word hash(也就是表示成ngram,減少詞表數(shù)),再將ngram轉(zhuǎn)成向量再平均得到句向量,經(jīng)過三層MLP得到128維的編碼,用cosine相似度作為每個(gè)Q-D對的分?jǐn)?shù),經(jīng)過sofamax歸一化后得到P(D|Q),最終目標(biāo)為最大化正樣本被點(diǎn)擊的概率。
但BOW式的詞向量平均會(huì)損失上下文信息,所以之后也有學(xué)者提出了CNN-DSSM、LSTM-DSSM,基本上結(jié)構(gòu)都差不多。
Siam-CNN
題目:Applying Deep Learning to Answer Selection: A Study and An Open Task
論文:https://arxiv.org/pdf/1508.01585.pdf
在2015年IBM提出的Siam-CNN架構(gòu)中,作者嘗試了多種孿生架構(gòu),使用CNN作為基礎(chǔ)編碼器,pairwise loss作為損失函數(shù),最后實(shí)驗(yàn)發(fā)現(xiàn)第二種是最好的:
說實(shí)話這個(gè)結(jié)果有點(diǎn)迷,Query和Answer的表達(dá)還是略有不同的,經(jīng)驗(yàn)上看我覺得第三個(gè)結(jié)構(gòu)更靠譜些。不過作者只在一種數(shù)據(jù)集上進(jìn)行了嘗試,或許換個(gè)數(shù)據(jù)集結(jié)果會(huì)有變化。
Siam-LSTM
題目:Siamese Recurrent Architectures for Learning Sentence Similarity
論文:http://www.mit.edu/~jonasm/info/MuellerThyagarajan_AAAI16.pdf
2016年的Siam-LSTM在結(jié)構(gòu)上比較簡單,就是直接用共享權(quán)重的LSTM編碼,取最后一步的輸出作為表示。有個(gè)改進(jìn)點(diǎn)是作者使用了Manhattan距離計(jì)算損失:
后續(xù)還有一些模型改成雙向、char-level的,這里就不過多贅述了。
Multi-View
題目:Multi-view Response Selection for Human-Computer Conversation
論文:https://www.aclweb.org/anthology/D16-1036.pdf
百度的EMNLP2016論文針對多輪對話問題,提出了Multi-view的Q-A匹配方式,輸入的query是歷史對話的拼接,分別編碼了word sequence view和utterance sequence view兩種表示。詞級別的計(jì)算和Siam-LSTM差不多,都是用RNN的最后一步輸出做Q-A匹配,而句子級別的會(huì)對RNN每步輸出做max pooling得到句子表示,然后再將句子表示輸入到GRU中,取最后一步作為帶上下文的表示與回答匹配,如下圖:
融合了兩個(gè)level的匹配后比普通方法的R@1要好上4-6個(gè)點(diǎn),提升很明顯。
預(yù)訓(xùn)練+遷移
有監(jiān)督、領(lǐng)域內(nèi)的語料總是有限的,目前很多任務(wù)都開始轉(zhuǎn)向預(yù)訓(xùn)練+遷移的范式。
Skip-Thought
題目:Skip-Thought Vectors
論文:https://arxiv.org/pdf/1506.06726.pdf
代碼:https://github.com/ryankiros/skip-thoughts
多倫多大學(xué)的NIPS2015論文Skip-Thought提出了一種無監(jiān)督句向量訓(xùn)練方法,參考wrod2vec,一句話與它的上下文也是存在關(guān)聯(lián)的,因此我們可以用一個(gè)句子的編碼去預(yù)測它的上下句:
Skip-Thought用GRU作為編碼器,條件GRU作為解碼器,預(yù)測時(shí)候只用編碼器就可以得到句子表示。
但這種方法訓(xùn)出的decoder不用比較浪費(fèi),后續(xù)也有學(xué)者用同樣的思想改成了判別任務(wù),比如Quick-Thought對句子分別編碼,過分類器選擇上下文,又或者BERT中的NSP,或者ALBERT的SOP。
FastSent
題目:Learning Distributed Representations of Sentences from Unlabelled Data
論文:https://www.aclweb.org/anthology/N16-1162.pdf
代碼:https://github.com/fh295/SentenceRepresentation/tree/master/FastSent
2016年的FastSent主要對Skip-Thought的速度進(jìn)行了改進(jìn),其實(shí)就是用詞袋模型去替換RNN編碼,再用中間句子的表示去預(yù)測上下文的詞。同時(shí)也提出了一個(gè)FastSent+AE變體,預(yù)測目標(biāo)也加上了自身的詞。
最終效果在無監(jiān)督任務(wù)上好于Skip-Thought,但有監(jiān)督任務(wù)上還是略遜色。
InferSent
題目:Supervised Learning of Universal Sentence Representations from Natural Language Inference Data
論文:https://www.aclweb.org/anthology/D17-1070.pdf
代碼:https://github.com/facebookresearch/InferSent
前幾篇可遷移的encoder都是無監(jiān)督的,因?yàn)閷W(xué)者們一直沒有發(fā)現(xiàn)更通用的數(shù)據(jù),直到InferSent。
EMNLP2017中Facebook提出了InferSent,文中使用NLI數(shù)據(jù)集來預(yù)訓(xùn)練雙塔結(jié)構(gòu),超越了之前眾多無監(jiān)督方法。該文章用了很簡單的雙塔結(jié)構(gòu),但在計(jì)算loss時(shí)先對兩個(gè)向量用了多種方式融合,再過分類器。同時(shí)也提出了多個(gè)基于RNN、CNN的編碼器,最后實(shí)驗(yàn)發(fā)現(xiàn)BiLSTM+Max效果最好,在評估的10個(gè)任務(wù)中有9個(gè)達(dá)到了SOTA。
InferSent提出的結(jié)構(gòu)到現(xiàn)在還用很多同學(xué)在用,包括后文的Sentence-BERT(19年的SOTA)也只是換了個(gè)編碼器而已。同時(shí)用NLI來做預(yù)訓(xùn)練這個(gè)點(diǎn)也很重要,優(yōu)質(zhì)語料對模型提示有很大幫助。
后續(xù)也有模型進(jìn)行了小改進(jìn),比如2017年的SSE,使用3層堆疊BiLSTM+Shortcut,效果比InferSent好一些。
GenSen
題目:Learning General Purpose Distributed Sentence Representations via Large Scale Multi-task Learning
論文:https://arxiv.org/abs/1804.00079
代碼:https://github.com/Maluuba/gensen
同樣是提升可遷移性,微軟在ICLR2018上提出了GenSen,使用GRU編碼,將encoder下游接上4種不同的任務(wù)(預(yù)測上下文、翻譯、NLI、句法分析),但只在6/10個(gè)任務(wù)上超越了之前的模型,個(gè)別情況下增加新的任務(wù)還會(huì)使效果下降。
這種多任務(wù)的思想后續(xù)也被用在其他模型上,比如MT-DNN(狗頭。
USE
題目:Universal Sentence Encoder, Learning Semantic Textual Similarity from Conversations
論文:https://arxiv.org/pdf/1803.11175v1.pdf, https://arxiv.org/pdf/1804.07754.pdf
谷歌在ACL2018提出了USE模型,這也是引用量很高的一篇文章(但寫的不是很清楚,推薦讀第二篇),主要改進(jìn)如下:
提出了用Transformer和平均池化+MLP作為encoder,分別適用不同的場景
爬取了大量reddit的問答數(shù)據(jù),用于無監(jiān)督Q-A訓(xùn)練,因?yàn)閝uery和answer的表示空間不一樣,結(jié)構(gòu)上給answer多加一層DNN。并且在問答任務(wù)上使用batch negative策略,也就是除了對應(yīng)的正確答案外batch內(nèi)剩下的樣本都作為負(fù)例,用softmax計(jì)算P(A|Q)的概率,跟現(xiàn)在對比學(xué)習(xí)的loss一樣。
多任務(wù),在無監(jiān)督訓(xùn)練Q-A的同時(shí)也用SNLI進(jìn)行有監(jiān)督訓(xùn)練
這樣訓(xùn)練出的模型比InferSent高3-5個(gè)點(diǎn),效果很好?,F(xiàn)在這個(gè)模型也在一直更新,可以在TFhub上使用,不僅速度快,效果也沒比BERT系差太多。
Sentence-BERT
題目:Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
論文:https://arxiv.org/pdf/1908.10084
代碼:https://github.com/UKPLab/sentence-transformers
EMNLP2019的Sentence-BERT是目前最常用的BERT式雙塔模型,一是效果真的好,二是作者的開源工具做的很方便,用的人越來越多。結(jié)果其實(shí)就是把InferSent改成BERT編碼,訓(xùn)練語料也不變,做離線任務(wù)可以直接用起來。
BERT-flow
題目:On the Sentence Embeddings from Pre-trained Language Models
論文:https://arxiv.org/pdf/2011.05864.pdf
代碼:https://github.com/bohanli/BERT-flow
字節(jié)在EMNLP2020提出了BERT-flow,主要是基于Sentence-BERT做改動(dòng),因?yàn)橹暗念A(yù)訓(xùn)練+遷移都是使用有監(jiān)督數(shù)據(jù),而作者基于對原生BERT表示的分析發(fā)現(xiàn),那些表示在空間的分布很不均勻,于是使用flow-based生成模型將它們映射到高斯分布的均勻空間,比之前的Sentence-BERT提升了4個(gè)點(diǎn)之多。
但這個(gè)模型的缺點(diǎn)是又加了一層機(jī)制,在預(yù)測時(shí)候會(huì)降低速度,同時(shí)在知乎上看到個(gè)別同學(xué)在自己任務(wù)上的試用反饋也不太好。不過我倒是驗(yàn)證了SentEval上有監(jiān)督的效果(論文只給了無監(jiān)督的),效果跟Sentence-BERT差不多。
Cross-Thought
題目:Cross-Thought for Sentence Encoder Pre-training
論文:https://arxiv.org/abs/2010.03652
代碼:https://github.com/shuohangwang/Cross-Thought
微軟在EMNLP2020提出了Cross-Thought,先用transformer對每個(gè)句子編碼,再取多個(gè)CLS(紅點(diǎn)部分)作為句子表示再進(jìn)行attention,得到一個(gè)整體的上下文表示,再回頭去預(yù)測每個(gè)句子被mask的token。相比起NSP來說,該任務(wù)的解空間更豐富,相比單純的BERT表示提升明顯,在QA任務(wù)上更是提了幾十個(gè)點(diǎn)。
對比學(xué)習(xí)
對比學(xué)習(xí)是20年圖像領(lǐng)域火熱的表示預(yù)訓(xùn)練方法,在訓(xùn)練時(shí)會(huì)給輸入A生成一個(gè)數(shù)據(jù)增強(qiáng)版本B,經(jīng)過編碼器對A和B編碼后,如果兩個(gè)表示還是最接近的(batch內(nèi)分類),就說明這個(gè)編碼器抓住了用于區(qū)分A與其他樣本的本質(zhì)特征。對比學(xué)習(xí)目前在NLP領(lǐng)域還沒開始大放異彩,從20年下半年的一些新論文來看,在預(yù)訓(xùn)練過程、精調(diào)中加入對比損失都會(huì)輕微提升模型效果并增強(qiáng)魯棒性、小樣本場景的表現(xiàn)。相信用對比做出的優(yōu)秀文本表示不久就會(huì)出現(xiàn)。
?。?!我是朋克風(fēng)分割線?。?!
上文講了眾多雙塔模型,其主要的重點(diǎn)都在編碼器的優(yōu)化,對速度要求高的召回場景可以用BOW+MLP、CNN,精度要求高的排序場景可以用LSTM、Transformer。同時(shí)兩個(gè)向量的融合方法以及l(fā)oss也都可以優(yōu)化,比如做一些輕微的交互、像Deformer一樣前面雙塔接后面的多層交互,或者根據(jù)需要選擇pointwise、pairwise(排序場景)損失。
但真要想做句間關(guān)系SOTA的話,比如刷榜,光靠雙塔模型還是不行的,它有兩個(gè)問題比較大:
位置信息。如果用BOW的話“我很不開心”和“我不很開心”兩句的意思就變成一樣了,雖然用RNN、BERT引入位置編碼可以減緩一些,但不去讓兩個(gè)句子相互比較的話對于最后的分類層還是很難的
細(xì)粒度語義。比如“我開心”和“我不開心”這兩句話只有一個(gè)字的區(qū)別,但BOW模型很可能給出較高的相似度,交互式模型則可以稍有緩解
交互式匹配
比起雙塔只能在encoder上下功夫,交互式模型的套路就多多了,其核心思想是將兩個(gè)句子逐個(gè)詞比較。比如判斷“進(jìn)擊的巨人”和“進(jìn)擊的矮子”語義是否相同時(shí),前三個(gè)字在兩句話中都能找到,而第二句里沒找到跟“巨人”接近的,那分?jǐn)?shù)就會(huì)被降低一些。因此得讓兩個(gè)句子有interaction,一般用attention解決,因?yàn)闆]那么在意速度了,在交互前后都可以加encoder,再讓向量拼接、做差、點(diǎn)積。。。不說了,請開始讓它們表演。
DecAtt
題目:A Decomposable Attention Model for Natural Language Inference
論文:https://arxiv.org/pdf/1606.01933.pdf
Google在EMNLP2016提出了輕量級的交互模型DecAtt,作者的出發(fā)點(diǎn)是讓句子中的各個(gè)元素相互對比,找出詞級別的同義和反義。分為三步計(jì)算:
Attend:將兩個(gè)句子中每對次 相互attention,加權(quán)后得到對齊的
Compare:將 分別拼接,過一層FFN得到
Aggregate:分別將第二步得到的表示求和得到 ,拼接起來進(jìn)行分類
比較難懂的主要是第二步,作者的解釋是經(jīng)過第一步attend后可以將問題拆解為子問題,再通過每個(gè)詞向量的compare解決。
這個(gè)模型的缺點(diǎn)是最后一步求句向量時(shí)用了求和操作,如果序列過長的話數(shù)值會(huì)較大,造成梯度大,需要裁剪。但計(jì)算還是很輕量的,從結(jié)果來看跟LSTM差不多。
MatchPyramid
題目:Text Matching as Image Recognition
論文:https://arxiv.org/pdf/1602.06359.pdf
代碼:https://github.com/pl8787/MatchPyramid-TensorFlow
計(jì)算所在2016AAAI發(fā)表的MatchPyramid主要受圖像處理的啟發(fā),先對詞進(jìn)行交互得到Matching矩陣,然后通過多層2D卷積抽取更高維度的特征,最后得到表征用MLP分類。作者憑借此模型在2017年的Quora Question Pairs比賽上拿到了全球第四。
相比上文的DecAtt,MatchPyramid通過CNN捕獲到了ngram特征。從結(jié)果看比DSSM等模型高出了3、5個(gè)點(diǎn)。
PWIM
題目:Pairwise Word Interaction Modeling with Deep Neural Networks for Semantic Similarity Measurement
論文:https://www.aclweb.org/anthology/N16-1108.pdf
代碼:https://github.com/lanwuwei/Subword-PWIM
ACL2016的PWIM模型主打細(xì)粒度交互,模型非常的深,分為以下四個(gè)計(jì)算步驟:
Context Modeling:用BiLSTM對輸入編碼
Pairwise Word Interaction Modeling:作者定義了一個(gè)對比向量的函數(shù)coU(包含cosine、點(diǎn)積、歐式距離),對兩句話的詞進(jìn)行兩兩比較,總共計(jì)算了前向向量、反向向量、前后向拼接、前后向相加四種表示的coU,作者將輸出稱為simCube
Similarity Focus Layer:提出了一個(gè)算法,根據(jù)simCube的分?jǐn)?shù)排序,計(jì)算出一個(gè)mask矩陣,其中重要元素的權(quán)重是1,非重要為0.1。作者認(rèn)為如果句子A中的某個(gè)詞在句子B中也找到了,那這就是一個(gè)衡量兩者相似度的重要指標(biāo)。最終mask和simCube相乘得到focusCube
Deep ConvNet:作者把前面產(chǎn)出的三維矩陣看作圖像,用19層卷積神經(jīng)網(wǎng)絡(luò)的到最后的表征,再過softmax分類
這篇文章真的是花式計(jì)算,雖然從結(jié)果來看超過了雙層BiLSTM 2、3個(gè)點(diǎn),但這計(jì)算復(fù)雜度讓人難以承受。在后文也會(huì)被ESIM超越,所以就別用了,當(dāng)做多學(xué)習(xí)一些思想吧~
ESIM
題目:Enhanced LSTM for Natural Language Inference
論文:https://www.aclweb.org/anthology/P17-1152.pdf
代碼:https://github.com/coetaur0/ESIM
ACL2017中的ESIM也是效果很好的模型,基于DecAtt改動(dòng),在兩句話交互融合后又加了一層BiLSTM,將效果提升了1-2個(gè)點(diǎn)。同時(shí)也嘗試使用句法樹進(jìn)一步提升效果。它的計(jì)算過程有一下四步:
用BiLSTM對embedding編碼,得到表示
將兩句話的BiLSTM輸出進(jìn)行attention,得到融合的句子表示
將 拼接作為新表示,用BiLSTM進(jìn)行推理
池化后過進(jìn)行最終分類
DIIN
題目:Natural Language Inference over Interaction Space
論文:https://arxiv.org/pdf/1709.04348.pdf
代碼:https://github.com/YerevaNN/DIIN-in-Keras
ICLR2018的DIIN看起來像PWIM一樣花式,比ESIM高出5、6個(gè)點(diǎn)。主要有以下改動(dòng):
在embedding層除了使用詞向量,還使用了字向量、詞性特征和英文詞根的完全匹配特征
使用Self-Attention編碼
HCAN
題目:Bridging the Gap Between Relevance Matching and Semantic Matching for Short Text Similarity Modeling
論文:https://cs.uwaterloo.ca/~jimmylin/publications/Rao_etal_EMNLP2019.pdf
代碼:https://github.com/jinfengr/hcan
HCAN是Facebook在EMNLP2019提出的模型,雖然比上文的ESIM、PWIM等模型高上4+個(gè)點(diǎn),但還是被BERT甩了很遠(yuǎn)。不過這個(gè)模型的核心也不只是做語義匹配,而是同時(shí)做檢索相關(guān)性(Relevance Matching),也就是搜索中query-doc的匹配。
模型計(jì)算如下:
Encoding層作者提出了三種方法,堆疊的CNN作為Deep Encoder,不同尺寸卷積核作為Wide Encoder,BiLSTM作為Contextual Encoder編碼更長距離的上下文
先把兩句話交互得到attention score矩陣,之后對于query中每個(gè)詞,求得doc中最相似的詞的分?jǐn)?shù),作為向量Max(S),按照同樣的方法求出Mean(S),長度都為|Q|,再分別乘上query中每個(gè)詞的tfidf統(tǒng)計(jì),得到相關(guān)性匹配向量
用加性attention對query和doc進(jìn)行交互,得到新的表示,再花式拼接過BiLSTM,得到語義匹配向量
將 拼接起來過MLP,最后分類
通過實(shí)驗(yàn)結(jié)果來看,Deep Encoder的表現(xiàn)是最好的,在7/8個(gè)評估上都超過另外兩個(gè)。
RE2
題目:Simple and Effective Text Matching with Richer Alignment Features
論文:https://www.aclweb.org/anthology/P19-1465.pdf
代碼:https://github.com/hitvoice/RE2
RE2是阿里在ACL2019提出的模型,也是很不錯(cuò)的一個(gè)工作,優(yōu)點(diǎn)是模型輕量且效果好。上文雖然很多模型都用到了交互,但只交互1、2次,而RE2則像transformer一樣把兩句話交互了多次。
計(jì)算邏輯是(圖中只展示了雙塔的一半):
Encoding:對輸入進(jìn)行embedding得到,拼接上之前的輸出,用CNN編碼
Alignment:把encoder的輸入輸出拼接起來,兩句話進(jìn)行attention
Fusion:將encoder的輸入輸出與attention的結(jié)果一起融合,得到的表示進(jìn)入下一循環(huán)或max pooling輸出句子表示
將兩個(gè)句子表示各種拼接后進(jìn)行分類
這個(gè)模型除了多次交互之外,還有個(gè)點(diǎn)是一直都把最初的embedding拼接上,從消融實(shí)驗(yàn)看可以提升1-6個(gè)點(diǎn)。
!?。∥沂桥罂孙L(fēng)分割線?。。?/p>
一口氣講了7個(gè)交互式匹配模型,感覺自己都不會(huì)愛了。其實(shí)大部分都是為了解之前的思想,因?yàn)楝F(xiàn)在無腦用BERT就夠了。
同時(shí)老司機(jī)們也很清楚,模型只是工具,數(shù)據(jù)才是天花板,數(shù)據(jù)質(zhì)量不好/數(shù)量不夠,模型再花哨也沒用。所以這里分享兩個(gè)數(shù)據(jù)洗刷刷經(jīng)驗(yàn):
負(fù)例的構(gòu)造。都說句間關(guān)系任務(wù)負(fù)例的構(gòu)造是很重要的,確實(shí)如此。但構(gòu)造前一定要把正、負(fù)界定清楚,明確這個(gè)任務(wù)的粒度有多細(xì)。比如“我很不開心”和“我不太開心”都是不開心,但程度不一樣,在自己的任務(wù)中到底是算正例還是負(fù)例呢?這個(gè)界定的越清楚、標(biāo)注人員培訓(xùn)越到位,數(shù)據(jù)噪聲也就越少。之后才是盡量構(gòu)造有難度的負(fù)例,比如用BOW召回一些再人工標(biāo)注,讓樣本們越來越逼近分類邊界
數(shù)據(jù)增強(qiáng)。交互式模型雖然準(zhǔn)確,但他們有個(gè)缺點(diǎn)是容易過擬合,因?yàn)閷Α敖换ァ笨吹锰亓?。比如一對正例里只有一兩個(gè)字一樣,模型可能就會(huì)認(rèn)為這兩個(gè)字很重要,有些overlap超低的文本對也會(huì)給出高得分。這時(shí)候就要對正例進(jìn)行清洗,看看特殊情況是否存在,再嘗試用增刪改的方法加一些負(fù)例,避免過擬合這種極端正例。另外BERT這種交互式模型是不對稱的,如果做paraphrase任務(wù)也可以鏡面構(gòu)造些新正負(fù)例。
總結(jié)
可能是文本匹配方面看得比較多吧,終于把我收藏的模型都扒拉出來了,直接像文本分類一樣再給大家提供一個(gè)選型方案吧:
原文標(biāo)題:【代碼&技巧】21個(gè)經(jīng)典深度學(xué)習(xí)句間關(guān)系模型
文章出處:【微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5560瀏覽量
122762 -
nlp
+關(guān)注
關(guān)注
1文章
490瀏覽量
22604
原文標(biāo)題:【代碼&技巧】21個(gè)經(jīng)典深度學(xué)習(xí)句間關(guān)系模型
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
在OpenVINO?工具套件的深度學(xué)習(xí)工作臺(tái)中無法導(dǎo)出INT8模型怎么解決?
BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系
NPU與機(jī)器學(xué)習(xí)算法的關(guān)系
深度學(xué)習(xí)模型的魯棒性優(yōu)化
GPU深度學(xué)習(xí)應(yīng)用案例
FPGA加速深度學(xué)習(xí)模型的案例
AI大模型與深度學(xué)習(xí)的關(guān)系
FPGA做深度學(xué)習(xí)能走多遠(yuǎn)?
【《大語言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)知識(shí)學(xué)習(xí)
深度學(xué)習(xí)模型有哪些應(yīng)用場景
ai大模型和ai框架的關(guān)系是什么
深度神經(jīng)網(wǎng)絡(luò)模型量化的基本方法
深度學(xué)習(xí)模型量化方法

評論