搜索中query擴展方法匯總


1、背景

搜索系統是一個復雜的系統,當用戶在輸入框中輸入想要的問題,或者輸入想要的商品后,點擊"確定"按鈕,搜索系統會經歷一系列的操作,query理解和分析,召回結果,相關性打分,排序等,所有的這些操作都在毫秒級別內完成。

而本文所講述的query擴展是在query理解和分析階段的操作。query擴展,顧名思義就是對當前輸入的query進行一定的改寫,經過擴充,得到其擴充的詞匯。

在不同的地方,可能叫法不同,有的叫query改寫,有的叫同義詞等等。

2、用途

query擴展的用途主要用於召回階段的擴召回。當用戶的輸入不明確的時候,我們可以將當前的query進行擴展,得到用戶想要的結果。例如當用戶輸入'西紅柿炒雞蛋'的時候,我們可以將query擴展為'番茄炒雞蛋'、'番茄炒蛋',這樣在召回階段就可以召回更多的結果,給用戶更好的體驗。

西紅柿炒雞蛋----番茄炒蛋
馬鈴薯----土豆

3、方法

query擴展方法大體可以分為如下幾類:字面匹配方式、基於用戶日志的挖掘、基於外部數據的挖掘方式、語義相似度、基於seq2seq的改寫、基於強化學習的改寫等。

3.1、字面匹配

字面匹配方式是通過各種規則,拼音匹配,編輯距離等方式,得到字面上的匹配結果。

  • 中文數字改寫

一千零一夜---1001夜
客二代---客2代

  • 中文拼音匹配

凱德茂---凱德mall
la尚癮---辣尚癮

  • 編輯距離
    編輯距離即通過計算兩個文本串的編輯距離來進行相似度的計算
  • 優缺點
    字面匹配方法簡單,一般在系統剛開始的時候,使用這種方式可以挖掘出很多這種的詞匯,但是缺點也比較明顯,無法適配語義相關的query,比如治腳氣和達克寧就沒有辦法進行匹配。

3.2、基於用戶日志的挖掘

  • 基於用戶session日志
    一般情況下,若用戶搜索一個query,但是沒有想要的結果,用戶會繼續改變輸入,直到搜索到想要的結果為止。基於用戶的這種行為,我們可以挖掘出相應的query對。

    例如:用戶搜索“比薩”,但是沒有想要的結果,那么用戶會改變其輸入,比如“披薩”,那么這時,可以將“比薩”和“披薩”作為同義詞。
  • 基於用戶點擊日志
    基於用戶點擊行為日志是指若用戶通過兩個不同的搜索詞點擊了同一個doc,那么我們認為這兩個query是有聯系的,共點擊次數越多,相似性也越大。所以一些基於推薦的方法都可以用於這里的query改寫,常用的一些算法有simrank,simrank++等。
  • 優缺點
    基於用戶行為日志可以一定程度上解決語義的問題,同時也可以挖掘出較多的相似query,不過生成的badcase也可能較多,所以需要進行甄別。除此之外,對於一些冷啟動的系統來說,由於沒有較多的用戶行為信息,所以就沒有辦法利用當前方法。

3.3、基於外部數據的挖掘

基於外部數據是指直接通過挖掘好的數據來擴充同義詞,例如中文的同義詞詞林,百度百科中的XX又名XX等。可以直接擴充改寫詞。

這種方法少了一些挖掘的工作,但是也需要對原始數據進行處理。同時,對於LBS的場景,也許這種外部數據並不適配。

3.4、語義相似度

若是我們訓練好了一個語言模型,通過該模型我們可以得到query的向量的話,那我們可以計算候選query對相似性信息,最常見的就是雙塔模型,同於兩個query,分別得到其向量,進而通過cosin的方式計算相似性分數。這種方法會用到預訓練的語言模型,同時,我們也需要得到有標記的query對作為訓練數據。

3.5、基於seq2seq的改寫

基於seq2seq的方法類似於翻譯,首先我們要有一批同義詞數據集合,進而我們可以用NMT的方法來進行求解。當然這種方法會引起語義飄移的現象。

3.6、基於強化學習的改寫

4、總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM