當前位置:首頁 > 公眾號精選 > 架構師社區(qū)
[導讀]導讀: 本文將 介紹京東搜索場景中的兩塊技術,語義檢索與商品排序。 在業(yè)界檢索算法基礎上,我們提出一系列更適用于電商場景的檢索排序算法,在業(yè)務上取得了顯著收益。其中的 多篇論文已被? KDD/SIGIR 等收錄。 01 背景介紹 電子商務搜索是京東等電商重要組

京東電商搜索中的語義檢索與商品排序
導讀: 本文將 介紹京東搜索場景中的兩塊技術,語義檢索與商品排序。 在業(yè)界檢索算法基礎上,我們提出一系列更適用于電商場景的檢索排序算法,在業(yè)務上取得了顯著收益。其中的 多篇論文已被 KDD/SIGIR 等收錄。

01

背景介紹

電子商務搜索是京東等電商重要組成部分,用戶通過搜索找到自己需要的商品,然后下單購買。一個典型電商搜索引擎的架構,包括三個重要組成部分:query 理解、召回和排序。
  • Query 理解:包括 query 的糾錯、改寫、擴展、分詞等。

  • 召回階段:給定一個查詢詞,從商品庫中召回有效正確的商品候選集,并將結(jié)果返回給排序。召回方式有很多種,這里我們只介紹基于向量檢索的召回。

  • 排序階段:給定召回商品的候選集合,根據(jù)眾多因子對這些商品進行排序,挑選出最好的候選商品展示給用戶。

下面我們分別介紹,基于向量檢索召回和商品排序:

02

向量召回

向量檢索作為一種信息檢索方式在工業(yè)界已經(jīng)被廣泛應用,它能解決傳統(tǒng)倒排檢索不能解決的問題。倒排通過字面匹配方式召回商品,這種方式存在一種缺陷,不能召回字面不匹配但語義層面相近的商品, 如 query='2-3周歲寶寶玩具'是無法召回 sku='托馬斯小火車'的。
京東電商搜索中的語義檢索與商品排序
通俗的講就是訓練一個模型,該模型通過將 query 和 sku 映射到統(tǒng)一維度空間,在該空間中,相似的商品距離近,不相近的商品距離較遠。query=奶粉,在高緯空間里,相對鞋子、服裝、手機,奶粉商品距離 query 更近。這是建模過程,生成 query 和 sku 的向量數(shù)據(jù)。
我們得到了 query 和 sku 的向量,接下來就是做檢索,返回與 query 距離近的 topK 個 sku。而數(shù)據(jù)庫的商品量非常多,通常是十億級,不可能做線性遍歷,考慮到時效性,會引入快速向量近似檢索方法,如 KDTree、TDM、LSH、PQ、HNSW 等等,我們采用的是 PQ 算法,這里不再贅述,網(wǎng)上有很多材料介紹其算法。下面重點介紹我們的模型及在線檢索框架。
模型方面不僅要考慮 query-sku 的相關性,我們也對用戶行為進行建模,同一 query 針對不同用戶、同一用戶不同時刻檢索出更具有個性化的商品。我們使用的是 DPSR ( Deep Personalized and Semantic Retrieval ) 算法,模型融合個性化和搜索語義信息,我們的論文已被 SIGIR2020 收錄。
1. 檢索系統(tǒng) overview
從整體看,離線模型是一個雙塔模型結(jié)構,query 和 sku 分別有一個 model tower。Query 端包括了 query 包括 query tokens、user profile、user history events 等特征。Sku 端包括 title tokens、brand、category、shopid 等特征。
離線索引 ( offline indexing ),使用的是 sku tower,導出 sku 的 embedding 構建 QP 索引。
在線服務 ( online serving ) 使用的是 query tower,模型加載在 tensorflow service,在線 predict query 的 embedding。
2. 模型詳細設計
① Two tower model architecture
上面介紹了模型結(jié)構,一個 query tower Q,一個 sku tower S,對于給定的 query=q, sku=s,模型計算過程為:
f(q,s)=G(Q(q),S(s))
Q(q)∈R d×m 表示 query 的 embedding
S(s)∈R d×m 表示 sku 的 embedding
G 表示打分計算函數(shù),比如 inner product、L2 distance 等
雙塔模型訓練完后,query 和 sku 的模型相對獨立,我們可以分別計算他們。所有的 sku embedding 都在離線計算,以便快速構建向量檢索索引。雖然 model 是相互獨立的,但 query 和 sku 之間使用簡單的點積計算,理論上 query 和 sku embedding 仍然在同一個幾何空間中,具有可比性。
② Query tower with multi heads
我們看到左側(cè)的 tower 和右側(cè)有兩點不一樣:Projection layer 和 mutli heads,目的是為了豐富 query 側(cè)的信息。不同的 head 可以捕獲 query 不同的語義 ( query=蘋果,語義可以是手機和水果 ),捕獲不同的品牌屬性 ( query=手機,品牌可以是華為、小米 ),捕獲不同的產(chǎn)品屬性 ( query=三星,產(chǎn)品屬性可以是筆記本、手機 ) 等等。
③ Attention Loss
Multi heads 讓 query 可以生成多個 embedding 與 sku embedding 計算 score。我們采用 attenion loss 做模型優(yōu)化。
我們標記 query 的多個 embeding 為 Q(q)={e 1 ,e 2 ,...,e m },其中 e i ∈R d ,Sku 的 embedding 為 S(s)=g,g ∈R d ,Query 和 sku 的打分計算如下:
β 是 softmax heat 參數(shù)。假設 D 表示訓練預料,r(q i ,s i+ ) 為正樣本,r(q i ,s i- ) 為負樣本。
④ Negative Sampling
我們采用的是用戶點擊數(shù)據(jù),數(shù)據(jù)量在10億級作為正樣本。負樣本并未使用同 session 未點擊的樣本,因為搜索手機,展示了小米和華為手機,不能說未點擊就是不相關商品。負例分為兩部分:random negatives、batch negatives。我們增加了一組超參來調(diào)整兩者的比例,觀察發(fā)現(xiàn) random negatives 越多,召回商品的 popularity 越高,更能吸引用戶點擊下單,但會降低商品與檢索 query 的相關性。
3. 訓練優(yōu)化
我們也嘗試過更強大的神經(jīng)網(wǎng)絡,如 RNN、transform 等,得到的效果類似或稍好一些。然而一個短延時的模型更適用于工業(yè)生產(chǎn)建模,這樣可以使用更少的服務器做有效的離線訓練和在線服務。
模型系統(tǒng)方面,我們也做了一系列訓練優(yōu)化,簡單描述其中的幾點:
  • 實現(xiàn) c++ tokenizer,以 custom operator 方式加載到 tensorflow,離線訓練和在線服務共用,保證 token 的一致性。

  • 訓練數(shù)據(jù)壓縮,修改訓練數(shù)據(jù)格式,把共用的特征數(shù)據(jù)加載內(nèi)存,訓練時展開從而降低數(shù)據(jù)存儲。也便于訓練時做負例采樣。

  • 可伸縮分布式,切分大的 embedding,并將 sum up 放到 ps 以解決 worker/ps 帶寬瓶頸。

  • 模型 servable 服務,我們將向量檢索和 tfs 合成一個服務,不僅減少一次網(wǎng)絡訪問,降低系統(tǒng) 3-5ms 的平響,而且將模型分片部署,從而可以支持上百個模型同時服務或者 A/B 實驗。同時 servable 服務是 cpu 和 gpu 混合部署。

4. 語義檢索效果展示
語義檢索上線后獲得了很好的體驗效果,不僅提升了轉(zhuǎn)化,長尾流量降低了近10%的 query 改寫率,也就是說用戶不需要多次改寫 query,就能獲得想要的商品結(jié)果。

03

商品排序

下面介紹下商品排序:
商品排序主要是根據(jù)用戶的輸入對商品進行打分排序。商品排序的傳統(tǒng)方法使用 xgboost 等基于決策樹的方法從數(shù)據(jù)中進行學習,但是這些模型通常有成百乃至上千的數(shù)值型人工特征,不能有效的從原始特征比如用戶歷史點擊購買數(shù)據(jù)、商品文本和圖像中直接學習。近年來,深度學習在各種應用中驗證了從原始特征中學習的有效性,在業(yè)界被廣泛使用,比如 wide&Deep、DIN 等。下面介紹一個我們在商品搜索排序中嘗試的方法。
1. 雙胞胎網(wǎng)絡
我們的訓練數(shù)據(jù)來自于用戶的搜索日志,通過將同一個 session 中用戶購買的商品 ( 商品a ) 和沒有購買的商品 ( 商品b ) 配對起來,并把購買未購買作為最終學習的 label,從而構造了用戶查詢-商品對訓練集。
根據(jù)訓練數(shù)據(jù),我們首先設計了雙胞胎網(wǎng)絡結(jié)構:
京東電商搜索中的語義檢索與商品排序
雙胞胎網(wǎng)絡結(jié)構有兩個共享參數(shù)的模塊,每個模塊分別輸入用戶、查詢和商品特征,每個模塊采用 ReLU 作為激活函數(shù),最終層的輸出一個分數(shù),兩個模塊的差值和數(shù)據(jù) label 作為交叉熵損失函數(shù)的輸入。
在特征方面,我們使用以下幾種不同類型的特征:
  • 數(shù)值型特征:包括商品銷量、用戶購買力和用戶是否點過、購買過商品等。

  • 文本特征:包括用戶輸入的查詢和商品名稱等。

  • 用戶歷史行為:包括歷史點擊、購買、加購商品 list 等

  • 商品、用戶 id 等

文本特征可以學習到一定的相關性信息,用戶歷史行為可以學習到個性化信息,id 類特征我們做了 pretrain。
2. 個性化升級
在第一版雙胞胎模型中,我們簡單的對用戶的歷史行為做 sum pooling,但是這樣缺乏和搜索商品的交互,無法精準的表示用戶的興趣;為了加強用戶的交互,我們升級了模型的結(jié)構,用候選商品和用戶歷史商品做 attention,從而將靜態(tài)的 user embedding 升級為隨 query 和當前商品變化的 user embedding。
我們還加入了 Graph 學習方法對 id 類特征 embedding 進行 pretrain,然后加入到模型訓練中。具體方法使用用戶的高質(zhì)量點擊行為生成商品 graph,通過 Random Walk 生成訓練數(shù)據(jù),然后利用 Skip-gram 進行訓練,加入 id embedding 可以提高模型離線指標和收斂速度。
3. 時效性優(yōu)化
值得一提的是,為了增強排序捕捉變化的能力,提升排序的流動性,我們從三個方面:特征時效性、模型時效性、線上預估校準進行了優(yōu)化。
  • 提升特征時效性:接入商品小時級的點擊加購訂單等實時信號,訓練模型學習實時變化

  • 實時在線校準根據(jù)商品全站的點擊訂單等實時反饋信號,對模型原來的預測分數(shù)及時校準

  • 提升模型的更新頻率:優(yōu)化訓練數(shù)據(jù)生產(chǎn)流程,推動訓練平臺升級,提升模型訓練速度

搜索排序是商品檢索最重要的模塊之一,我們在個性化、時效性、多目標等方向不斷迭代,提升了排序體驗,也提升了商品成交量。

04

總結(jié)

我們介紹了語義檢索召回和商品排序,在京東搜索服務上部署并取得了良好效果。我們還在嘗試一些業(yè)內(nèi)其他流行的方法,比如 GNN、KG、MMoE 等方向,也獲得了不錯的成績。
文章作者:
王松林、唐國瑜,京東算法工程師。

特別推薦一個分享架構+算法的優(yōu)質(zhì)內(nèi)容,還沒關注的小伙伴,可以長按關注一下:

京東電商搜索中的語義檢索與商品排序

長按訂閱更多精彩▼

京東電商搜索中的語義檢索與商品排序

如有收獲,點個在看,誠摯感謝

免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
關閉
關閉