新手請教乙個問題,如何從百萬條句子中,找出相似度較高的句子?

時間 2021-06-02 03:32:37

1樓:Jsgfery

分召回排序兩階段進行。

第一階段召回,用embedding做召回或用bm25做召回都行,也可以都用上做多路召回。如果用embedding做召回,計算句子的向量表示時可以直接將句子中每次詞的向量進行平均池化。其他複雜的方法如bert做相似性檢索的效果並不會比簡單平均明顯好。

計算句子向量表示之前可將預訓練的詞向量矩陣用pca做降維,降到100維左右。在略微損失效果的情況下可以明顯降低召回階段的時間和視訊記憶體占用。得到句子的向量表示後使用faiss庫做相似性檢索,為每個句子找出與它相似的top 100個句子id。

這裡句子表示不做歸一化,且按L2範數進行檢索效果好一些。

用embedding召回得到的句對往往語義相似,但在詞級別上差別較大,容易丟失細節。

這時候再用TER或者LogTER做排序,過濾掉詞法細節上差別過大的句對。TER和LogTER的計算均可以批量計算,使用GPU加速計算。

百萬條資料中找相似的句對,召回排序兩階段均可在10分鐘內完成計算。親測有效。

2樓:曹軍

看相似度的定義是詞彙還是語義,elasticsearch基於bm25的lexical檢索或基於embedding的語義檢索都支援。

3樓:蘿蔔

大家也都提到了bm25召回,安利一下elastic search,這個的相似度演算法就包括bm25,很適合大規模資料,可以直接拿來用

4樓:Wu-Allin

先召回bm25 演算法如大佬們所說。 然後相似度,要計算快可以直接lookup word2vec ,或者tfidf。 前者表達句子向量的時候,最簡單的方法就是求平均。

5樓:醬紫呀

similarity ranking任務,粗篩先用快的bm25啥的,然後進行精排。精排用bert二分類不合適的,ranking一次就算只經過bert十幾次速度和計算量都受不了。可以對資料訓練個好的句子embedding,然後用計算句子向量之間的距離做相似度ranking。

句子embedding模型可以這樣子搞,用sentence-bert模型,跟bert二分類不一樣的地方時後面是siamese結構,然後用lcqmc句子集訓練一下,然後自己搞點你自己任務的標註資料集再繼續fine-tune一下。

6樓:tranfer will

如果需要速度,可以按先粗篩,再精排的思路做.粗篩的演算法比如:tfidf,bm25之類.

精排的演算法就可以天馬行空自己想象啦,比如,各種embedding模型(問題中提到的word2vec,bert都是)編碼向量,然後做向量近似檢索;再比如,如果有相似的句子對作為標註資料,就可以用bert做是不是相似的二分類,效果相當的好,不過比較慢.

如果不太關心速度,可以直接把每句話編碼成向量,在所有向量裡做近似檢索.編碼成向量,就是各種embedding啦,word2vec,cnn,rnn,bert都可以,不過有些需要標註資料自己訓練. 向量近似檢索有兩個推薦:

facebook的faiss, spotify的annoy. 如果有標註資料, sentence-bert 是個不錯模型, 我把它用到過線上,表現和速度都還可以.

希望對大家有啟發.

健身小白請教乙個問題?

少年ZL 不愛吃肉這個挺難的,肌肉合成不僅需要蛋白質,還需要各種氨基酸,你不吃肉漲的會很慢,真的不能吃的話,就要買蛋白粉了,畢竟只靠吃素蛋白質太少 文涯 不愛吃肉就去喝蛋白粉,不然蛋白攝入不夠增重都是個問題,增肌就更不用想了,按照你想增重的想法一天最少蛋白攝入80 100g,碳水300g 350g以...

請教各位乙個法律問題?

陳仁彪律師 自己做的事,責任肯定由自己承擔。家人沒有義務幫助還款,如果幫助了屬於情分。至於網路貸款,如果涉嫌套路貸,建議立即報警。最近對於套路貸還是比較重視的。 一 性質界定 1 賭博網貸?賭博屬於非法活動,網貸屬於民間借貸,二者有差別,不能一概而論。2 偷身份證不構成盜竊。情節不夠嚴重,且親屬之間...

請教乙個關於電腦功率的問題?

月影 先回答三個提問。1,整機功率不會超過電源介面卡功率 除去一些極其特殊的情況,平時遇不到的,放心啦 2,如果超過會導致介面卡因為電流過大而短時間發熱長時間燒毀 我只是非專業的,按照經驗答的,具體是電流過載還是電壓電流都過載什麼的就不知道了 這個也導致自己換電源介面卡可以選功率更大的而不能選功率更...