[導(dǎo)讀]導(dǎo)讀: 本文將 介紹京東搜索場(chǎng)景中的兩塊技術(shù),語(yǔ)義檢索與商品排序。 在業(yè)界檢索算法基礎(chǔ)上,我們提出一系列更適用于電商場(chǎng)景的檢索排序算法,在業(yè)務(wù)上取得了顯著收益。其中的 多篇論文已被? KDD/SIGIR 等收錄。 01 背景介紹 電子商務(wù)搜索是京東等電商重要組
導(dǎo)讀: 本文將 介紹京東搜索場(chǎng)景中的兩塊技術(shù),語(yǔ)義檢索與商品排序。 在業(yè)界檢索算法基礎(chǔ)上,我們提出一系列更適用于電商場(chǎng)景的檢索排序算法,在業(yè)務(wù)上取得了顯著收益。其中的 多篇論文已被 KDD/SIGIR 等收錄。 01
背景介紹
電子商務(wù)搜索是京東等電商重要組成部分,用戶通過(guò)搜索找到自己需要的商品,然后下單購(gòu)買(mǎi)。一個(gè)典型電商搜索引擎的架構(gòu),包括三個(gè)重要組成部分:query 理解、召回和排序。
-
Query 理解:包括 query 的糾錯(cuò)、改寫(xiě)、擴(kuò)展、分詞等。
-
召回階段:給定一個(gè)查詢?cè)~,從商品庫(kù)中召回有效正確的商品候選集,并將結(jié)果返回給排序。召回方式有很多種,這里我們只介紹基于向量檢索的召回。
-
排序階段:給定召回商品的候選集合,根據(jù)眾多因子對(duì)這些商品進(jìn)行排序,挑選出最好的候選商品展示給用戶。
下面我們分別介紹,基于向量檢索召回和商品排序: 02
向量召回
向量檢索作為一種信息檢索方式在工業(yè)界已經(jīng)被廣泛應(yīng)用,它能解決傳統(tǒng)倒排檢索不能解決的問(wèn)題。倒排通過(guò)字面匹配方式召回商品,這種方式存在一種缺陷,不能召回字面不匹配但語(yǔ)義層面相近的商品, 如 query='2-3周歲寶寶玩具'是無(wú)法召回 sku='托馬斯小火車(chē)'的。
通俗的講就是訓(xùn)練一個(gè)模型,該模型通過(guò)將 query 和 sku 映射到統(tǒng)一維度空間,在該空間中,相似的商品距離近,不相近的商品距離較遠(yuǎn)。query=奶粉,在高緯空間里,相對(duì)鞋子、服裝、手機(jī),奶粉商品距離 query 更近。這是建模過(guò)程,生成 query 和 sku 的向量數(shù)據(jù)。 我們得到了 query 和 sku 的向量,接下來(lái)就是做檢索,返回與 query 距離近的 topK 個(gè) sku。而數(shù)據(jù)庫(kù)的商品量非常多,通常是十億級(jí),不可能做線性遍歷,考慮到時(shí)效性,會(huì)引入快速向量近似檢索方法,如 KDTree、TDM、LSH、PQ、HNSW 等等,我們采用的是 PQ 算法,這里不再贅述,網(wǎng)上有很多材料介紹其算法。下面重點(diǎn)介紹我們的模型及在線檢索框架。 模型方面不僅要考慮 query-sku 的相關(guān)性,我們也對(duì)用戶行為進(jìn)行建模,同一 query 針對(duì)不同用戶、同一用戶不同時(shí)刻檢索出更具有個(gè)性化的商品。我們使用的是 DPSR ( Deep Personalized and Semantic Retrieval ) 算法,模型融合個(gè)性化和搜索語(yǔ)義信息,我們的論文已被 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,對(duì)于給定的 query=q, sku=s,模型計(jì)算過(guò)程為: f(q,s)=G(Q(q),S(s)) Q(q)∈R d×m 表示 query 的 embedding S(s)∈R d×m 表示 sku 的 embedding G 表示打分計(jì)算函數(shù),比如 inner product、L2 distance 等 雙塔模型訓(xùn)練完后,query 和 sku 的模型相對(duì)獨(dú)立,我們可以分別計(jì)算他們。所有的 sku embedding 都在離線計(jì)算,以便快速構(gòu)建向量檢索索引。雖然 model 是相互獨(dú)立的,但 query 和 sku 之間使用簡(jiǎn)單的點(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 不同的語(yǔ)義 ( query=蘋(píng)果,語(yǔ)義可以是手機(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)={e 1 ,e 2 ,...,e m },其中 e i ∈R d ,Sku 的 embedding 為 S(s)=g,g ∈R d ,Query 和 sku 的打分計(jì)算如下:β 是 softmax heat 參數(shù)。假設(shè) D 表示訓(xùn)練預(yù)料,r(q i ,s i+ ) 為正樣本,r(q i ,s i- ) 為負(fù)樣本。 ④ Negative Sampling 我們采用的是用戶點(diǎn)擊數(shù)據(jù),數(shù)據(jù)量在10億級(jí)作為正樣本。負(fù)樣本并未使用同 session 未點(diǎn)擊的樣本,因?yàn)樗阉魇謾C(jī),展示了小米和華為手機(jī),不能說(shuō)未點(diǎn)擊就是不相關(guān)商品。負(fù)例分為兩部分:random negatives、batch negatives。我們?cè)黾恿艘唤M超參來(lái)調(diào)整兩者的比例,觀察發(fā)現(xiàn) random negatives 越多,召回商品的 popularity 越高,更能吸引用戶點(diǎn)擊下單,但會(huì)降低商品與檢索 query 的相關(guān)性。 3. 訓(xùn)練優(yōu)化 我們也嘗試過(guò)更強(qiáng)大的神經(jīng)網(wǎng)絡(luò),如 RNN、transform 等,得到的效果類(lèi)似或稍好一些。然而一個(gè)短延時(shí)的模型更適用于工業(yè)生產(chǎn)建模,這樣可以使用更少的服務(wù)器做有效的離線訓(xùn)練和在線服務(wù)。 模型系統(tǒng)方面,我們也做了一系列訓(xùn)練優(yōu)化,簡(jiǎn)單描述其中的幾點(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í)展開(kāi)從而降低數(shù)據(jù)存儲(chǔ)。也便于訓(xùn)練時(shí)做負(fù)例采樣。
-
可伸縮分布式,切分大的 embedding,并將 sum up 放到 ps 以解決 worker/ps 帶寬瓶頸。
-
模型 servable 服務(wù),我們將向量檢索和 tfs 合成一個(gè)服務(wù),不僅減少一次網(wǎng)絡(luò)訪問(wèn),降低系統(tǒng) 3-5ms 的平響,而且將模型分片部署,從而可以支持上百個(gè)模型同時(shí)服務(wù)或者 A/B 實(shí)驗(yàn)。同時(shí) servable 服務(wù)是 cpu 和 gpu 混合部署。
4. 語(yǔ)義檢索效果展示 語(yǔ)義檢索上線后獲得了很好的體驗(yàn)效果,不僅提升了轉(zhuǎn)化,長(zhǎng)尾流量降低了近10%的 query 改寫(xiě)率,也就是說(shuō)用戶不需要多次改寫(xiě) query,就能獲得想要的商品結(jié)果。03
商品排序
下面介紹下商品排序: 商品排序主要是根據(jù)用戶的輸入對(duì)商品進(jìn)行打分排序。商品排序的傳統(tǒng)方法使用 xgboost 等基于決策樹(shù)的方法從數(shù)據(jù)中進(jìn)行學(xué)習(xí),但是這些模型通常有成百乃至上千的數(shù)值型人工特征,不能有效的從原始特征比如用戶歷史點(diǎn)擊購(gòu)買(mǎi)數(shù)據(jù)、商品文本和圖像中直接學(xué)習(xí)。近年來(lái),深度學(xué)習(xí)在各種應(yīng)用中驗(yàn)證了從原始特征中學(xué)習(xí)的有效性,在業(yè)界被廣泛使用,比如 wide&Deep、DIN 等。下面介紹一個(gè)我們?cè)谏唐匪阉髋判蛑袊L試的方法。 1. 雙胞胎網(wǎng)絡(luò) 我們的訓(xùn)練數(shù)據(jù)來(lái)自于用戶的搜索日志,通過(guò)將同一個(gè) session 中用戶購(gòu)買(mǎi)的商品 ( 商品a ) 和沒(méi)有購(gòu)買(mǎi)的商品 ( 商品b ) 配對(duì)起來(lái),并把購(gòu)買(mǎi)未購(gòu)買(mǎi)作為最終學(xué)習(xí)的 label,從而構(gòu)造了用戶查詢-商品對(duì)訓(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ù)的輸入。 在特征方面,我們使用以下幾種不同類(lèi)型的特征:
文本特征可以學(xué)習(xí)到一定的相關(guān)性信息,用戶歷史行為可以學(xué)習(xí)到個(gè)性化信息,id 類(lèi)特征我們做了 pretrain。 2. 個(gè)性化升級(jí) 在第一版雙胞胎模型中,我們簡(jiǎn)單的對(duì)用戶的歷史行為做 sum pooling,但是這樣缺乏和搜索商品的交互,無(wú)法精準(zhǔn)的表示用戶的興趣;為了加強(qiáng)用戶的交互,我們升級(jí)了模型的結(jié)構(gòu),用候選商品和用戶歷史商品做 attention,從而將靜態(tài)的 user embedding 升級(jí)為隨 query 和當(dāng)前商品變化的 user embedding。 我們還加入了 Graph 學(xué)習(xí)方法對(duì) id 類(lèi)特征 embedding 進(jìn)行 pretrain,然后加入到模型訓(xùn)練中。具體方法使用用戶的高質(zhì)量點(diǎn)擊行為生成商品 graph,通過(guò) 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í)級(jí)的點(diǎn)擊加購(gòu)訂單等實(shí)時(shí)信號(hào),訓(xùn)練模型學(xué)習(xí)實(shí)時(shí)變化
-
實(shí)時(shí)在線校準(zhǔn):根據(jù)商品全站的點(diǎn)擊訂單等實(shí)時(shí)反饋信號(hào),對(duì)模型原來(lái)的預(yù)測(cè)分?jǐn)?shù)及時(shí)校準(zhǔn)
-
提升模型的更新頻率:優(yōu)化訓(xùn)練數(shù)據(jù)生產(chǎn)流程,推動(dòng)訓(xùn)練平臺(tái)升級(jí),提升模型訓(xùn)練速度
搜索排序是商品檢索最重要的模塊之一,我們?cè)趥€(gè)性化、時(shí)效性、多目標(biāo)等方向不斷迭代,提升了排序體驗(yàn),也提升了商品成交量。 04
總結(jié)
我們介紹了語(yǔ)義檢索召回和商品排序,在京東搜索服務(wù)上部署并取得了良好效果。我們還在嘗試一些業(yè)內(nèi)其他流行的方法,比如 GNN、KG、MMoE 等方向,也獲得了不錯(cuò)的成績(jī)。 文章作者:
王松林、唐國(guó)瑜,京東算法工程師。
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:
長(zhǎng)按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!
欲知詳情,請(qǐng)下載word文檔
下載文檔
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。