外貿(mào)領(lǐng)航
首頁行業(yè)資訊 > 京東商品搜索排序規(guī)則「京東搜索規(guī)則」

京東商品搜索排序規(guī)則「京東搜索規(guī)則」

來源:互聯(lián)網(wǎng) 2024-08-07 16:04:00

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

01

背景介紹

電子商務(wù)搜索是京東等電商重要組成部分,用戶通過搜索找到自己需要的商品,然后下單購買。一個(gè)典型電商搜索引擎的架構(gòu),包括三個(gè)重要組成部分:Query 理解、召回和排序。

Query 理解:包括 query 的糾錯(cuò)、改寫、擴(kuò)展、分詞等。召回階段:給定一個(gè)查詢詞,從商品庫中召回有效正確的商品候選集,并將結(jié)果返回給排序。召回方式有很多種,這里我們只介紹基于向量檢索的召回。排序階段:給定召回商品的候選集合,根據(jù)眾多因子對這些商品進(jìn)行排序,挑選出最好的候選商品展示給用戶。

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

02

向量召回

向量檢索作為一種信息檢索方式在工業(yè)界已經(jīng)被廣泛應(yīng)用,它能解決傳統(tǒng)倒排檢索不能解決的問題。倒排通過字面匹配方式召回商品,這種方式存在一種缺陷,不能召回字面不匹配但語義層面相近的商品, 如 query='2-3周歲寶寶玩具'是無法召回 sku='托馬斯小火車'的。

通俗的講就是訓(xùn)練一個(gè)模型,該模型通過將 query 和 sku 映射到統(tǒng)一維度空間,在該空間中,相似的商品距離近,不相近的商品距離較遠(yuǎn)。如上圖例子,query=奶粉,在高緯空間里,相對鞋子、服裝、手機(jī),奶粉商品距離 query 更近。這是建模過程,生成 query 和 sku 的向量數(shù)據(jù)。

我們得到了 query 和 sku 的向量,接下來就是做檢索,返回與 query 距離近的 topK 個(gè) sku。而數(shù)據(jù)庫的商品量非常多,通常是十億級,不可能做線性遍歷,考慮到時(shí)效性,會引入快速向量近似檢索方法,如 KDTree、TDM、LSH、PQ、HNSW 等等,我們采用的是 PQ 算法,這里不再贅述,網(wǎng)上有很多材料介紹其算法。下面重點(diǎn)介紹我們的模型及在線檢索框架。

模型方面不僅要考慮 query-sku 的相關(guān)性,我們也對用戶行為進(jìn)行建模,同一 query 針對不同用戶、同一用戶不同時(shí)刻檢索出更具有個(gè)性化的商品。我們使用的是 DPSR ( Deep Personalized and Semantic Retrieval ) 算法,模型融合個(gè)性化和搜索語義信息,我們的論文已被 SIGIR2020 收錄。

1. 檢索系統(tǒng) overview

從整體看,離線模型是一個(gè)雙塔模型結(jié)構(gòu),query 和 sku 分別有一個(gè) model tower。Query 端包括了 query 包括 query tokens、user profile、user history events 等特征。Sku 端包括 title tokens、brand、category、shopid 等特征。

離線索引 ( offline indexing ),使用的是 sku tower,導(dǎo)出 sku 的 embedding 構(gòu)建 QP 索引。

在線服務(wù) ( online serving ) 使用的是 query tower,模型加載在 tensorflow service,在線 predict query 的 embedding。

2. 模型詳細(xì)設(shè)計(jì)

① Two tower model architecture

上面介紹了模型結(jié)構(gòu),一個(gè) query tower Q,一個(gè) sku tower S,對于給定的 query=q, sku=s,模型計(jì)算過程為:

f(q,s)=G(Q(q),S(s))

Q(q)∈Rd×m 表示 query 的 embedding

S(s)∈Rd×m 表示 sku 的 embedding

G 表示打分計(jì)算函數(shù),比如 inner product、L2 distance 等

雙塔模型訓(xùn)練完后,query 和 sku 的模型相對獨(dú)立,我們可以分別計(jì)算他們。所有的 sku embedding 都在離線計(jì)算,以便快速構(gòu)建向量檢索索引。雖然 model 是相互獨(dú)立的,但 query 和 sku 之間使用簡單的點(diǎn)積計(jì)算,理論上 query 和 sku embedding 仍然在同一個(gè)幾何空間中,具有可比性。

② Query tower with multi heads

我們看到左側(cè)的 tower 和右側(cè)有兩點(diǎn)不一樣:Projection layer 和 mutli heads,目的是為了豐富 query 側(cè)的信息。如下圖所示,不同的 head 可以捕獲 query 不同的語義 ( query=蘋果,語義可以是手機(jī)和水果 ),捕獲不同的品牌屬性 ( query=手機(jī),品牌可以是華為、小米 ),捕獲不同的產(chǎn)品屬性 ( query=三星,產(chǎn)品屬性可以是筆記本、手機(jī) ) 等等。

③ Attention Loss

Multi heads 讓 query 可以生成多個(gè) embedding 與 sku embedding 計(jì)算 score。我們采用 attenion loss 做模型優(yōu)化。

我們標(biāo)記 query 的多個(gè) embeding 為 Q(q)={e1,e2,...,em},其中 ei∈Rd,Sku 的 embedding 為 S(s)=g,g∈Rd,Query 和 sku 的打分計(jì)算如下:

其中 β 是 softmax heat 參數(shù)。假設(shè) D 表示訓(xùn)練預(yù)料,r(qi,si ) 為正樣本,r(qi,si-) 為負(fù)樣本,模型優(yōu)化的 loss 可表示為:

④ Negative Sampling

我們采用的是用戶點(diǎn)擊數(shù)據(jù),數(shù)據(jù)量在10億級作為正樣本。負(fù)樣本并未使用同 session 未點(diǎn)擊的樣本,因?yàn)樗阉魇謾C(jī),展示了小米和華為手機(jī),不能說未點(diǎn)擊就是不相關(guān)商品。負(fù)例分為兩部分:random negatives、batch negatives。我們增加了一組超參來調(diào)整兩者的比例,觀察發(fā)現(xiàn) random negatives 越多,召回商品的 popularity 越高,更能吸引用戶點(diǎn)擊下單,但會降低商品與檢索 query 的相關(guān)性。

模型訓(xùn)練算法具體如下:

3. 訓(xùn)練優(yōu)化

我們也嘗試過更強(qiáng)大的神經(jīng)網(wǎng)絡(luò),如 RNN、transform 等,得到的效果類似或稍好一些。然而一個(gè)短延時(shí)的模型更適用于工業(yè)生產(chǎn)建模,這樣可以使用更少的服務(wù)器做有效的離線訓(xùn)練和在線服務(wù)。

模型系統(tǒng)方面,我們也做了一系列訓(xùn)練優(yōu)化,簡單描述其中的幾點(diǎn):

實(shí)現(xiàn) c tokenizer,以 custom operator 方式加載到 tensorflow,離線訓(xùn)練和在線服務(wù)共用,保證 token 的一致性。訓(xùn)練數(shù)據(jù)壓縮,修改訓(xùn)練數(shù)據(jù)格式,把共用的特征數(shù)據(jù)加載內(nèi)存,訓(xùn)練時(shí)展開從而降低數(shù)據(jù)存儲。也便于訓(xùn)練時(shí)做負(fù)例采樣。可伸縮分布式,切分大的 embedding,并將 sum up 放到 ps 以解決 worker/ps 帶寬瓶頸。模型 servable 服務(wù),我們將向量檢索和 tfs 合成一個(gè)服務(wù),不僅減少一次網(wǎng)絡(luò)訪問,降低系統(tǒng) 3-5ms 的平響,而且將模型分片部署,從而可以支持上百個(gè)模型同時(shí)服務(wù)或者 A/B 實(shí)驗(yàn)。同時(shí) servable 服務(wù)是 cpu 和 gpu 混合部署。

4. 語義檢索效果展示

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

03

商品排序

下面介紹下商品排序:

商品排序主要是根據(jù)用戶的輸入對商品進(jìn)行打分排序。商品排序的傳統(tǒng)方法使用 xgboost 等基于決策樹的方法從數(shù)據(jù)中進(jìn)行學(xué)習(xí),但是這些模型通常有成百乃至上千的數(shù)值型人工特征,不能有效的從原始特征比如用戶歷史點(diǎn)擊購買數(shù)據(jù)、商品文本和圖像中直接學(xué)習(xí)。近年來,深度學(xué)習(xí)在各種應(yīng)用中驗(yàn)證了從原始特征中學(xué)習(xí)的有效性,在業(yè)界被廣泛使用,比如 wide&Deep、DIN 等。下面介紹一個(gè)我們在商品搜索排序中嘗試的方法。

1. 雙胞胎網(wǎng)絡(luò)

我們的訓(xùn)練數(shù)據(jù)來自于用戶的搜索日志,通過將同一個(gè) session 中用戶購買的商品 ( 商品a ) 和沒有購買的商品 ( 商品b ) 配對起來,并把購買未購買作為最終學(xué)習(xí)的 label,從而構(gòu)造了用戶查詢-商品對訓(xùn)練集。

根據(jù)訓(xùn)練數(shù)據(jù),我們首先設(shè)計(jì)了雙胞胎網(wǎng)絡(luò)結(jié)構(gòu):

雙胞胎網(wǎng)絡(luò)結(jié)構(gòu)有兩個(gè)共享參數(shù)的模塊,每個(gè)模塊分別輸入用戶、查詢和商品特征,每個(gè)模塊采用 ReLU 作為激活函數(shù),最終層的輸出一個(gè)分?jǐn)?shù),兩個(gè)模塊的差值和數(shù)據(jù) label 作為交叉熵?fù)p失函數(shù)的輸入。

在特征方面,我們使用以下幾種不同類型的特征:

數(shù)值型特征:包括商品銷量、用戶購買力和用戶是否點(diǎn)過、購買過商品等。文本特征:包括用戶輸入的查詢和商品名稱等。用戶歷史行為:包括歷史點(diǎn)擊、購買、加購商品 list 等商品、用戶 id 等

文本特征可以學(xué)習(xí)到一定的相關(guān)性信息,用戶歷史行為可以學(xué)習(xí)到個(gè)性化信息,id 類特征我們做了 pretrain。

2. 個(gè)性化升級

在第一版雙胞胎模型中,我們簡單的對用戶的歷史行為做 sum pooling,但是這樣缺乏和搜索商品的交互,無法精準(zhǔn)的表示用戶的興趣;為了加強(qiáng)用戶的交互,我們升級了模型的結(jié)構(gòu),用候選商品和用戶歷史商品做 attention,從而將靜態(tài)的 user embedding 升級為隨 query 和當(dāng)前商品變化的 user embedding。

我們還加入了 Graph 學(xué)習(xí)方法對 id 類特征 embedding 進(jìn)行 pretrain,然后加入到模型訓(xùn)練中。具體方法使用用戶的高質(zhì)量點(diǎn)擊行為生成商品 graph,通過 Random Walk 生成訓(xùn)練數(shù)據(jù),然后利用 Skip-gram 進(jìn)行訓(xùn)練,加入 id embedding 可以提高模型離線指標(biāo)和收斂速度。

3. 時(shí)效性優(yōu)化

值得一提的是,為了增強(qiáng)排序捕捉變化的能力,提升排序的流動(dòng)性,我們從三個(gè)方面:特征時(shí)效性、模型時(shí)效性、線上預(yù)估校準(zhǔn)進(jìn)行了優(yōu)化。

提升特征時(shí)效性:接入商品小時(shí)級的點(diǎn)擊加購訂單等實(shí)時(shí)信號,訓(xùn)練模型學(xué)習(xí)實(shí)時(shí)變化實(shí)時(shí)在線校準(zhǔn):根據(jù)商品全站的點(diǎn)擊訂單等實(shí)時(shí)反饋信號,對模型原來的預(yù)測分?jǐn)?shù)及時(shí)校準(zhǔn)提升模型的更新頻率:優(yōu)化訓(xùn)練數(shù)據(jù)生產(chǎn)流程,推動(dòng)訓(xùn)練平臺升級,提升模型訓(xùn)練速度

搜索排序是商品檢索最重要的模塊之一,我們在個(gè)性化、時(shí)效性、多目標(biāo)等方向不斷迭代,提升了排序體驗(yàn),也提升了商品成交量。

04

總結(jié)

我們介紹了語義檢索召回和商品排序,在京東搜索服務(wù)上部署并取得了良好效果。我們還在嘗試一些業(yè)內(nèi)其他流行的方法,比如 GNN、KG、MMoE 等方向,也獲得了不錯(cuò)的成績。

文章作者:

王松林、唐國瑜,京東算法工程師。

團(tuán)隊(duì)介紹:

京東搜索應(yīng)用科學(xué)部,負(fù)責(zé)京東商城商品搜索排序算法,覆蓋京東主站,京喜,微信一級入口的京東搜索。團(tuán)隊(duì)成員有來自國內(nèi)外大廠,也有來自中清北的優(yōu)秀畢業(yè)生。我們致力于用技術(shù)驅(qū)動(dòng)產(chǎn)品,用行業(yè)前沿的先進(jìn)技術(shù)落地業(yè)務(wù)場景;從實(shí)際需求出發(fā),用技術(shù)解決實(shí)際問題,做有用并且有趣的算法,我們也樂于把實(shí)踐經(jīng)驗(yàn)通過論文分享給業(yè)界。歡迎有技術(shù)情懷、有創(chuàng)新活力的你加入我們!

投遞方式:

郵件名:姓名-學(xué)校/公司-算法工程師,將簡歷發(fā)送至:

[email protected]

今天的分享就到這里,謝謝大家。

文章作者:王松林、唐國瑜 京東算法工程師

編輯整理:Hoh

內(nèi)容來源:作者授權(quán)

出品平臺:DataFunTalk

注:歡迎轉(zhuǎn)載,轉(zhuǎn)載請留言。

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如有侵權(quán)行為,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

CopyRight ? 外貿(mào)領(lǐng)航 2023 All Rights Reserved.