DSSM文本匹配模型在蘇寧商品語義召回上的應用
原創(chuàng)【51CTO.com原創(chuàng)稿件】1、背景
文本匹配是自然語言處理中的一個核心問題,它不同于MT、MRC、QA 等end-to-end型任務,一般是以文本相似度計算的形式在應用系統中起核心支撐作用。它可以應用于各種類型的自然語言處理任務中,例如信息檢索、搜索引擎、問答系統、信息流推薦、復述問題、知識檢索、機器翻譯等。
之所以文本匹配的適用范圍如此之廣,是因為很多NLP任務本質上可以抽象為一個文本匹配問題,比如說復述問題可以歸結為兩個同義句的匹配,信息檢索就是一個搜索詞和文檔資源的匹配過程,問答系統的核心問題是將用戶輸入的問題和最佳的候選答案匹配起來,對話系統可以歸結為前一句對話和下一句回復的匹配。本文主要介紹DSSM文本匹配模型在蘇寧商品語義召回上的應用。
使用文本匹配模型進行語義召回是在蘇寧易購主搜系統對一些未知詞或者語義不明甚至有錯字少字的用戶搜索詞返回結果不好的情況下提出的。如下圖所示,用戶漏了掛燙機里的掛字,并且后面輸入了有一定干擾作用的具體型號詞,導致沒有返回結果。scolib品牌的耳機沒有在蘇寧進行銷售,因此scolib這個英文詞屬于未知詞。
圖一: 未知、錯字少字等情況搜索效果展示
從以上兩種召回效果較差的情況可以看出,以文本相似度為核心的召回策略雖然能在大部分情況下保證較高的精度,但是無法解決前文所提到的特殊情況。因此采用語義模型,獲取與用戶query的語義相近的商品是非常有必要的。
深度文本匹配可以總結為四種:1、單語義模型 2、多語義模型 3、匹配矩陣模型 4、深層次句子模型。其中單語義模型用全連接、CNN、 RNN或其他的特征提取器得到兩個句子的深層語義向量,再計算兩者的匹配度;多語義模型從多顆粒的角度解讀句子,考慮到句子內部的局部結構;匹配矩陣模型直接捕捉匹配信號,將詞間的匹配信號作為灰度圖,再用深度網絡提取特征,更精細的處理句子中的聯系;深層次的句子間模型用更精細的結構去挖掘句子內和句子間不同單詞之間的聯系,得到更好的效果5。
近幾年來文本匹配相關的論文層出不窮,對句子對結構的處理越來越精細,模型復雜度快速上升6。雖然論文里的實驗SOTA效果不斷刷新, 但是完整的訓練步驟,甚至是單次預測所需時間也是非常長的。線上生產環(huán)境以保證用戶體驗為第一要務,需要快速可靠準確的文本匹配策略7。同時,蘇寧有海量的每日更新的query-doc對文本語料,query是用戶的搜索詞,doc為系統返回的商品title。想要在有限的硬件資源下,能容忍的訓練調試時間范圍內實現對主站全商品類目億級別語料進行訓練,需要一個可調參數規(guī)模不大,待召回千萬級商品集的語義向量可以離線提前算好,模型效果能隨著語料規(guī)模增大而提高的模型。綜上,我們選擇LSTM-DSSM模型作為商品語義召回系統的核心。
2、LSTM-DSSM模型
2.1 模型輸入
在商品語義召回業(yè)務里,待匹配的DOC是商品標題,而標題不可避免的會包含型號詞如GTX2060這種。如果對輸入按字處理,則會強制模型學習2、0、6、0四個數字是一種固定搭配,對于短文本還好,可一些電子產品的型號詞數字加字母長達十幾位,而真正的核心中文詞也許只有短短幾位,這就產生了非常嚴重的干擾效果。而且對于包含幾十個字的長標題,就需要同等長度的LSTM進行特征提取,造成參數過多,增加了模型學習成本。綜上,本模型放棄字token作為輸入,而是使用詞token。
我們參考了遷移學習的思想,不是簡單的隨機初始化詞token的Embedding向量,而是以億級別的蘇寧商品Title為語料,先使用HanLP分詞器進行分詞處理。將分詞所得的詞token按順序編碼,生成后續(xù)模型需要的詞典。并在spark平臺上,用其提供的word2vec模型接口訓練詞token語料。這樣就能得到每個詞token的語義向量,并當作為模型的輸入。
考慮到詞典和各個詞的語義向量的生成,是一勞永逸的工作,通常不需要再變動,所以使用了非常大規(guī)模的語料,spark環(huán)境設置300臺機器,訓練時間接近8個小時,最后的效果還是滿意的。
2.2 模型架構
商品語義召回系統所用DSSM在如下圖所示的基本模型基礎上,增加了兩處針對業(yè)務效果的改進。
圖二: DSSM基礎模型示意圖
首先對于匹配商品召回這種具體的業(yè)務場景,商品的品牌和品類是非常重要的特征。如果能匹配到正確的品類、品牌,那最終效果肯定不會差。因此為了能直接利用這類特征,采取了非常直接的方法,如下圖所示:
圖三: 頻偏、品類特征使用示意圖
由上圖可見,品牌、品類通過Embedding表示學習層、兩層MLP直接映射成和LSTM提取的語義向量同一維度的向量,再將兩者相加得到最終的語義向量表示。
第二,引入了注意力機制,目的是解決諸如洗衣機返回較多洗衣機配件的情況,提升核心詞洗衣機的權重,這樣能極大的改善召回效果,具體使用方式如下圖所示8:
圖四: 注意力機制使用示意圖
由以上兩圖可以看出,有兩種參考了經典乘性注意力機制的方法,第一種是用query的最后一個LSTM單元輸出的隱層向量作為context,分別與doc每個時間步驟的隱層向量作點積計算,計算結果作為權重。每個時間步驟的向量乘以權重再求和就可以作為最終的語義向量。第二種則是求得query每個時間步驟的權重,然后得到query最終語義向量,將其與doc最后單元輸出并聯或者相加,作為最終商品語義向量。
2.3 模型輸出
模型的輸出作為語義召回系統的輸入,主要由兩個方面組成。第一,是實時生成搜索詞query語義向量的模塊。具體做法要考慮到實際業(yè)務場景一次只輸入一條query的情況,改造模型輸入接口和具體處理方式,讀取已經訓練好的模型參數,重新保存為tf-serving服務框架所需要的pb格式模型。第二,離線生成待召回商品的語義向量集,由于使用了注意力機制,還需要query參與商品語義向量的生成。召回集是接近百萬級的規(guī)模,因此可以方便的復用訓練模型,一次生成batch_size個語義向量,并且全部Norm化成平方和為1的向量,保存在內存里,當下一個batch_size生成完畢,直接拼接在一起。在內存里存儲完畢所有商品的語義向量,形式為numpy向量,最終存儲到硬盤里的是npy文件,大小為500M左右,空間費用可以接受。
3、語義召回系統介紹
3.1 數據準備
利用蘇寧完善的數據倉庫環(huán)境,在每日的固定時間執(zhí)行HIVE腳本,獲取用戶搜索詞、對應的商品Title、編碼、品牌品類,質量分等字段的信息。語料按搜索詞搜索次數,商品質量排序,選取質量高的作為語料,并且從友商平臺上抓取商品信息作為補充。同時,在spark平臺上進行初始語料的處理,包括分詞、去除無意義詞、中英文分開處理等預處理步驟,最后要將處理完畢的語料轉化成一個正DOC,四個負DOC, 即可以直接應用于模型訓練的形式。另外還需要針對召回,對語料進行去重處理,避免召回同一件商品的情況出現。最后,給召回系統提供待召回的商品title集以及準確對應的商品ID和商品質量分集。
3.2 在線匹配
從上文可以看出,模型將準備好的待召回商品title集處理為npy文件,存在磁盤之中。另外輸出了tf-serving服務框架所需要的pb格式模型,可以將用戶搜索詞實時轉化為語義向量。接下來要做的事情就是計算query向量與所有商品語義向量之間的兩兩余弦距離,返回TopN, 找到對應的商品ID,提供給前臺展示。
需要注意的是,這里找TopN的過程需要‘快準狠’,我們使用的Facebook開源的Faiss框架,為了保證準確度,沒有使用任何自帶的高級索引功能,只使用最簡單的暴力計算兩兩之間的距離,這樣肯定能找到正確結果。通過測試,在百萬級數據的規(guī)模,維度為256,使用暴力檢索,耗時也不到1ms,完全可以接受。另外出于業(yè)務目標考慮,提高高質量分物品的權重,這簡單通過余弦距離乘以質量分來實現,人為提高高質量分物品與搜索詞的余弦距離。
3.3 系統環(huán)境
整個語義召回系統的系統環(huán)境組成較為清晰,包括在Spark平臺上的大規(guī)模數據處理,jupyter深度學習平臺上的模型訓練和語義向量生成,Linux主機上的Faiss匹配找出TopN的過程,tf-serving線上服務器的布置,以及方便結果調試的前端匹配結果展示,如下圖所示:
圖五: 召回系統前端展示
可以方便的傳入各類參數,比如返回商品的個數,使用模型的版本,使用索引的種類等等,調試起來非常方便。
4、總結
本文介紹了DSSM文本匹配模型在蘇寧商品語義召回上的應用,主要包含算法原理和工程實踐兩個方面。蘇寧搜索團隊在搜索匹配、個性化推薦、知識圖譜、智能對話等自然語言處理領域有很多的嘗試實踐,限于篇幅本文不做介紹,歡迎讀者關注后續(xù)的最新文章分享。
參考文獻
- Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]// ACM International Conference on Conference on Information & Knowledge Management. ACM, 2013:2333-2338.
- Shen, Yelong, et al. “A latent semantic model with convolutional-pooling structure for information retrieval.” Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management. ACM, 2014.
- Palangi, Hamid, et al. “Semantic modelling with long-short-term memory for information retrieval.” arXiv preprint arXiv:1412.6629 (2014).
- http://ju.outofmemory.cn/entry/316660
- http://blog.csdn.net/u013074302/article/details/76422551
- 博客園 DSSM算法-計算文本相似度
- Gers, Felix A., Schmidhuber, Jrgen, and Cummins, Fred. Learning to forget: Continual prediction with lstm. Neural Computation, 12:2451–2471, 1999.
- Gers, Felix A., Schraudolph, Nicol N., and Schmidhuber, J¨urgen. Learning precise timing with lstm recurrent networks. J. Mach. Learn. Res., 3:115–143, March 2003.
作者簡介
周杰,蘇寧科技集團消費者平臺研發(fā)中心算法專家,主要從事自然語言處理、個性化推薦、搜索匹配等領域的研發(fā)工作,在傳統機器學習、深度學習方面有豐富實戰(zhàn)經驗。
李春生,蘇寧科技集團消費者平臺研發(fā)中心技術總監(jiān),負責商品、情報與搜索技術線架構設計與核心技術規(guī)劃等方面的工作,在搜索領域有多年的實戰(zhàn)經驗,從0到1構建蘇寧易購搜索平臺,在搜索領域上耕耘7年有余,精通搜索架構設計與性能優(yōu)化,同時在機器學習、大數據等領域對搜索的場景化應用有豐富的經驗。
孫鵬飛,蘇寧科技集團消費者平臺研發(fā)中心搜索算法團隊負責人,專注于nlp,搜索排序,智能問答方向的研究。帶領團隊從無到有搭建了搜索排序系統、個性化系統、智能搜索系統、反作弊系統等。對算法在產品中的調優(yōu)及工程應用實踐上有著豐富的經驗。
【51CTO原創(chuàng)稿件,合作站點轉載請注明原文作者和出處為51CTO.com】