天天看點

深入了解搜尋引擎——基于語義檢索LSTM-DSSM召回模型

​衆所周知,BM25算法是Elasticsearch全文檢索引擎預設相似度算法,但此種算法僅考慮了文本Term之間的比對關系,并未考慮文本語義之間的資訊,是以導緻很多場景下,語義相關的内容無法召回。随着深度學習在NLP的廣泛應用,在IR和QA(問答系統)中出現了很多深度模型将query和doc通過神經網絡embedding,映射到一個稠密空間的向量表示,然後再計算其是否相關,并取得很好的效果,而本文就來介紹一種基于語義檢索的召回模型LSTM-DSSM。

【DSSM】

DSSM是Deep Structured Semantic Model的縮寫,基于深度網絡的語義模型,由微軟研究院在2013年發表,其其核心思想是基于搜尋引擎的曝光點選行為資料,利用多層DNN網絡把query及文檔Doc Embeding成同一緯度的語義空間中,通過最大化限制query和doc兩個語義向量的餘弦舉例,進而訓練學習得到隐層相似度語義模型,進而實作了檢索召回。

下圖是DSSM模型的網絡結構圖

深入了解搜尋引擎——基于語義檢索LSTM-DSSM召回模型

DSSM 從下往上可以分為三層結構:輸入層、表示層、比對層。

輸入層:将所有query以及候選集doc映射到統一空間并作為輸入,放進DNN中進行訓練,但在DSSM中,中英文的處理方式有所不同。英文一般直接使用word hashing,3個字母為一組,#表示開始和結束符。為啥使用3個字母?3個字母的表達往往能代表英文中的字首和字尾,并且實驗證明,3個字母的單詞沖突僅為22個,比2個字母的單詞沖突數減小近100倍。而中文依賴于分詞,中文分詞本身就比較難,中文語義性太強,同樣的詞語在不同的句子中表達的意思完全不同,中文詞語有近百萬個,在網絡中次元太高不利于訓練,是以DSSM中文輸入層可以模拟英文處理,使用單字分詞,字向量(one-hot)作為輸入,向量空間約為 1.5 萬維。

表示層:采用 BOW(Bag of words)的方式,相當于不考慮文本的字元順序和上下關系,将整個句子裡的詞都放在一個袋子裡了。一個含有多個隐層的 DNN,用 Wi 表示第 i 層的權值矩陣,bi 表示第 i 層的 bias 項。則第一隐層向量 l1(300 維),第 i 個隐層向量 li(300 維),輸出向量 y(128 維)可以分别表示為:

深入了解搜尋引擎——基于語義檢索LSTM-DSSM召回模型

用 tanh 作為隐層和輸出層的激活函數:

深入了解搜尋引擎——基于語義檢索LSTM-DSSM召回模型

最終輸出一個 128 維的低緯語義向量。

比對層:在召回比對過程,我們使用 [公式] 來表示一個query, [公式] 來表示一個doc,那麼他們的相關性分數可以用下面的公式衡量:

深入了解搜尋引擎——基于語義檢索LSTM-DSSM召回模型

其中, yQ 與 yD 分别代表query和doc的語義向量。在搜尋引擎中,給定一個query,會傳回一些按照相關性分數排序的文檔。

DSSM模型對于短文本搜尋召回有很好的召回效果,但對于長文本以及在電商搜尋中很多query詞都帶有型号的情況下,效果會比較差,比如輸入“顯示卡RTX3090”,如果對輸入按字處理,則會強制模型學習3、0、9、0四個數字是一種固定搭配,甚至有些電子産品的型号詞數字加字母長達十幾位,而真正的核心中文詞也許隻有短短幾位,這就産生了非常嚴重的幹擾效果。不僅如此,DSSM因為其特征提取方式會導緻其丢失了文本的字元順序和上下文資訊,是以有很多進化模型,比如LSTM-DSSM。

【LSTM-DSSM】

此模型通過采用LSTM進行編碼的方式,同樣将文本編碼為一段向量,LSTM需要對文本長度進行預先的處理,對于query的長尾詞處理非常的友好。

模型圖如下:

深入了解搜尋引擎——基于語義檢索LSTM-DSSM召回模型

【Bert訓練Embedding】

這裡基于遷移學習的思想,不是簡單的随機初始化詞token的Embedding向量,而是以億級别的搜尋query和docment的title為語料,先使用HanLP分詞器進行分詞處理,将分詞所得的詞token按順序編碼,生成後續模型需要的詞典,基于Bert預訓練模型進行訓練,這樣就能得到每個詞token的語義向量,并當作為模型的輸入。

【LSTM語義向量】

先進行分詞得到句子的詞token-X(i),基于訓練好的Bert模型映射到一個word representation,就是embedding,也就是上圖中的l(i)。然後把整個句子送入LSTM,訓練LSTM,拿出最後輸出的狀态y(m),即可得到LSTM潛層語義向量。

【模型輸出】

LSTM-DSSM裡其實就是将DSSM的全連接配接改成LSTM,此處案例基于海量的搜尋點選資料,分别計算搜尋的query的LSTM語義向量和點選以及未點選的document的LSTM語義向量,基于LSTM訓練的語義向量進行相似度度量,後續的操作與DSSM模型一緻。

當然不同的場景可能使用到不同模型的變種,在電商領域,document除開标題以外,可能還會有其他很重要的資訊,例如品牌和類目。此時可以将品牌、類目通過Embedding表示學習層、兩層MLP直接映射成和LSTM提取的語義向量同一次元的向量,再将兩者相加得到最終的語義向量表示,使用最終的語義向量表示輸入到DSSM模型中進行召回。結構如下圖:

深入了解搜尋引擎——基于語義檢索LSTM-DSSM召回模型

根據不同場景不同需求來調整你的模型,相信可以得到更好的效果。

深入了解搜尋引擎——基于語義檢索LSTM-DSSM召回模型

最後歡迎關注同名微信公衆号:藥老算法(yaolaosuanfa),帶你領略搜尋、推薦等資料挖掘算法魅力。

繼續閱讀