0 小系列初衷
自己接觸的項(xiàng)目大都是初創(chuàng),沒開始多久的項(xiàng)目,從0到1的不少,2020年快結(jié)束,感覺這個具有一定個人特色的技術(shù)經(jīng)驗(yàn)可以在和大家分享一下。
計劃篇章:
(已完成)文本分類篇。針對NLP文本分類任務(wù)。
(已完成)序列標(biāo)注(NER)篇。針對命名實(shí)體識別、序列標(biāo)注任務(wù)。
文本匹配篇。針對語義相似度計算、向量匹配等問題。
人工特征學(xué)習(xí)篇。針對多特征的機(jī)器、深度學(xué)習(xí)方案。
開始我把這個標(biāo)題叫做語義匹配,后來感覺還是不能叫這個名字,應(yīng)該把問題放大為句子相似度和匹配問題。
1 語義匹配的場景
語義匹配的核心其實(shí)是評價兩個query之間的相似度,可以看看現(xiàn)在常用的場景:
搜索領(lǐng)域,語義向量召回是一個比較新潮的召回方式,靈活性更高,下游的精排部分也可以通過語義相似度來進(jìn)行排序。
智能客服,之前的阿里小蜜的文章也提過,對于長尾的結(jié)果,可以通過向量召回的方式來進(jìn)行處理。
對話領(lǐng)域,可以說是智能客服的眼神,閑聊類的,可以通過語義匹配完成閑聊的回復(fù),當(dāng)然多輪也有多輪的玩法。
可以看到,各種領(lǐng)域,其實(shí)語義匹配的舞臺非常大,了解這方面的方案對NLP技術(shù)棧的了解非常有用。
2 方法選型
2.1 文本層面的相似
最簡單的方法往往就是最淺層的方案,所以還是文本層面的相似,方法逐步升級是這樣的:
編輯距離,這應(yīng)該是最嚴(yán)格的一種相似了。
cqr,分子是句子1和句子2詞匯的交集詞匯量,分母是句子1和句子2的并集詞匯量。
加權(quán)的cqr,可以做一個簡單的詞權(quán)重,然后做加權(quán)的cqr。
BM25。傳統(tǒng)搜索的常用方法。
文本層面的方法,在搜索領(lǐng)域已經(jīng)非常成熟,BM25已經(jīng)具有很高的準(zhǔn)度,結(jié)合上游常用的一些改寫,其實(shí)已經(jīng)能夠達(dá)到很好的效果,這也是經(jīng)典搜索最常用的一套范式。
2.2 向量表征作召回
向量召回是當(dāng)前比較流行的一種新的搜索技術(shù),這里以來兩個關(guān)鍵技術(shù)點(diǎn),向量索引和句子表征技術(shù)。
向量索引的是指就是一種向量最近鄰的搜索方案,最常用的場景就是KNN,而在我們的場景中,就是把句子表征成一個向量,構(gòu)建索引,新來一個句子,用同樣的放哪個還是構(gòu)建一個向量,就可以完成相似度召回,常用的構(gòu)建索引方式推薦兩種,這兩種都已經(jīng)有開源工具支持。
annoy,一種基于樹的構(gòu)造方法。
hnsw,一種基于圖的構(gòu)造方法,這應(yīng)該是目前我已知速度最快的方法了。
說完了向量索引,就要說向量表征了,只有足夠好的向量表征,上面說的向量召回,召回的東西才會足夠好,為什么我說好呢,就是因?yàn)檫@里涉及的好的維度多:
準(zhǔn)確率足夠高,召回的內(nèi)容真的是和句子足夠接近。
有比較強(qiáng)的泛化能力,這也是語義向量召回相比傳統(tǒng)搜索的相似召回最突出的優(yōu)勢,只要語義足夠接近,“查詢”和“查看”就可能匹配到,“冪冪”和“楊冪”也能打中,這樣能降低我們挖掘數(shù)據(jù)帶來的成本。
好的相似度匹配能識別關(guān)鍵詞,只需要模型端到端處理,不需要單獨(dú)抽關(guān)鍵詞。
那么,這個語義表征,一般都是什么方法呢,這里也是提幾個:
word2vector預(yù)訓(xùn)練。如果語料不足甚至沒有語料,我們其實(shí)可以用開源的預(yù)訓(xùn)練好的w2v詞向量作為基線,取均值就能拿到句向量。
如果有一些平行樣本,可以開始考慮用一些平行預(yù)料(sentence1,setence2,label)進(jìn)行finetuning,說白了就是兩個向量分別去詞向量后均值,最終用余弦或者歐氏距離計算相似度就行。
數(shù)據(jù)量足夠后,就可以開始在上面搭積木了,CNN、LSTM之類的都可以嘗試,當(dāng)然經(jīng)驗(yàn)之談,self-attention可以嘗試。
數(shù)據(jù)量再多點(diǎn),我們就可以上bert之類的大家伙了。
現(xiàn)在的語義相似度,更多是通過優(yōu)化交互特征來提升相似度計算的效果,但是在向量召回這里,由于目前只能支持簡單的相似度召回,兩個query只有在計算相似度的最后一步才能夠見面,因此query之間的交互特征是無法提取的,所以很多現(xiàn)在流行的方法是用不了的。
2.3 語義相似度
如果語義相似度要被用在后續(xù)的精排,無論是搜索、對話甚至是推薦,在經(jīng)歷初篩之后,我們往往有更多時間和經(jīng)歷來比對剩余的結(jié)果和用戶query之間的相似程度,此時我們就可以使用交互特征逐一匹配,完成最后的精排,這些方案往往在大量比賽中就有提到,以DSSM為基,升級很多方案,包括很多人知道的EISM等,當(dāng)然比賽的經(jīng)驗(yàn)也告訴我們,模型本身還可以加入更多的文本特征來協(xié)助衡量語義相似度,因此在用語義相似度模型的同時,可以加入一些人工特征來協(xié)助優(yōu)化,這也是推薦系統(tǒng)的wide&deep中所提到的深淺層特征均用的思想。
這里給一篇螞蟻金服比賽的文章吧,大家可以根據(jù)這個思路去參考優(yōu)化:https://blog.csdn.net/u014732537/article/details/81038260
3 優(yōu)化手段
當(dāng)然,上面的方式是讓大家用最快的速度去完成一個demo或者說baseline,然后我們需要一系列的手段進(jìn)行優(yōu)化,在這里也給大家介紹一些有用的方案。
如果你的場景里需要一些英文,可以加入一些英文文本去finetuning,開放域的。
針對問答場景,由于用戶的問題都有明顯意圖,因此做一些詞權(quán)重、attention的操作有利于效果提升,包括提槽,當(dāng)然在淺層模型的情況下,詞的歸一化也有好處。
通過傳統(tǒng)的搜索,用ES召回之類而方式,可以召回很多文本接近但是語義遙遠(yuǎn)的case,通過人工標(biāo)注的樣本對效果的提升很有好處。
同樣是hard case挖掘,用自己的語義模型做召回,召回在閾值附近的case,做一下人工的復(fù)核,這樣做樣本也對效果提升有好處,這其實(shí)用的是主動學(xué)習(xí)的思想。
4 小結(jié)
做完搜索,后來又開始做向量表征和召回,感覺就很奇妙,能夠理解傳統(tǒng)搜索和相對新潮的向量表征召回之間的關(guān)系,這兩者之間的關(guān)系還是挺微妙地,互相借鑒的過程中能夠產(chǎn)生一些火花,例如向量檢索之前可以召回一些相似的、標(biāo)準(zhǔn)的query然后來檢索,這樣能大幅提升準(zhǔn)確率,也一定程度降低了對模型深度的要求。(隱約感覺是時候?qū)懸黄嘘P(guān)模型和規(guī)則特征之間關(guān)系的文章了?)
責(zé)任編輯:xj
原文標(biāo)題:任務(wù)方案思考:句子相似度和匹配
文章出處:【微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
語義
+關(guān)注
關(guān)注
0文章
21瀏覽量
8653 -
自然語言處理
+關(guān)注
關(guān)注
1文章
591瀏覽量
13466
原文標(biāo)題:任務(wù)方案思考:句子相似度和匹配
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論