搜索排序的傳統方法是經過各類方法對商品進行打分,最後按照每一個商品的分數進行排序。這樣傳統的搜索排序方法就無 法考慮到展現出來的商品之間相互的影響。相似地,傳統的針對單個商品估計 ctr、cvr 的方法也都基於這樣一個假設:商品 的 ctr、cvr不會受到同時展現出來的其餘商品 (咱們稱爲展現 context) 的影響。而實際上一個商品的展現 context 能夠影響到 用戶的點擊或者購買決策:假如一個商品周邊的商品都和它比較相似,可是價格卻比它便宜,那麼用戶買它的機率不會 高;反之若是周邊的商品都比它貴,那麼用戶買它的機率就會大增。算法
若是打破傳統排序模型展現 context 沒有影響的假設,該如何進行排序呢?爲此,咱們首次提出了一種考慮商品間相互影響的全局排序方法。咱們將電商排序描述成一個全局優化問題,優化的目標是反應用戶滿意度的商品成交額:GMV(Gross Merchandise Volume)。準確地說,全局排序的優化目標是最大化 GMV 的數學指望。計算 GMV 的數學指望須要知道商品 的成交機率,而商品的成交機率是彼此相互影響的,所以咱們又提出了考慮商品間相互影響的成交機率估計模型。微信
首先, 咱們提出了一種全局特徵擴展的思路,在估計一個商品的成交機率時,將其餘商品的影響以全局特徵的形式加入到機率估 計模型中,從而在估計時考慮到了其餘商品的影響。而後,咱們進一步提出了經過 RNN 模型來精確考慮商品的排序順序對 商品成交機率的影響。經過使用 RNN 模型,咱們將電商排序變成了一個序列生成的問題,並經過 beam search 算法來尋找 一個較好的排序。咱們在淘寶無線主搜索平臺上進行了大量的實驗,相對於當時的淘寶無線主搜算法,取得了GMV 提高 5% 的效果。網絡
全局排序階段的輸入是要排序的 N 個商品,輸出則是 N 商品的排序結果。學習
咱們用 S = (1, … , N) 表示基礎排序輸出的 top‑N 商品序列;O 表示 S 的全排列集合,o = (o1, … , oN ) ∈ O 表示 S 的一個排列;另外,用 di 表示商品 i 在排序 o 中的位置,即 odi = i;c(o, i) 表示商品 i 在排序 o 中的展現 contex 全局排序 t,具體定義後面會分狀況討論;測試
v(i) 表示商品 i 的價值。優化
咱們將目標定義爲本次搜索產生的 GMV,因而在給定 c(o, i) 的狀況下,就有:搜索引擎
全局排序的最終目標就是找到一個指望收益最大的排序:設計
尋找這個最優排序須要解決兩個問題:3d
問題 1. p(i|c(o, i)) 這個機率如何去準確地估計;orm
問題 2. 尋找 o∗是個組合優化的問題,暴力搜索的時間複雜度是 N! 的,須要找到合理高效的近似算法。
問題 1 是提升效果的關鍵,估計得越準,後面組合優化的效果越明顯,反之則會致使第二步的組合優化沒有意義。從理論上講,c(o, i) = (o1, … , oN ) 是 i 的完整的展現 context,可是若是完整地考慮展現 context,問題 2 的組合優化複雜
度很難下降下來。爲了能更高效求解問題 2,須要對 c(o, i) 進行適當地簡化。根據對 c(o, i) 的簡化程度,咱們把全局排序模型分紅了兩類,分別在下面介紹。
電商搜索全局排序方法
第一類模型只利用展現 context 的商品集合信息,而不去深究真實的展現 context 的順序,即 c(o, i) = S ∖ {i}。直觀上理
解,第一類模型假設用戶在判斷是否購買商品 i 的時候,只記得他看過全部的商品集合 S,而不在乎 S 中商品的出現順序。
這種狀況至關於用戶知道本身的挑選集合,從中比較和挑選出最想購買的商品。咱們將商品 i 自己的特徵成爲局部特徵 fi,l。這時能夠把商品 i 的局部特徵 fi,l 與其餘候選商品的局部特徵進行比較,獲得這個商品的特徵與候選集合其餘商品比較的結果,而且把這些比較的結果做爲包含全局信息的特徵加入到 p(i|c(o, i)) 的預測中。
以價格特徵爲例,咱們會按照價格緯度對 S 排序,將商品 i 的價格位次均勻地歸一化成 [0, 1] 之間的一個值(最貴的價格變成變成 1,最便宜的價格變成 0),這樣 i 的價格特徵就擴展出了i 的價格全局特徵。
經過上述的方式能夠對 fi,l 的每一維按照其位次擴展,獲得相應的全局特徵 fi,g,最終咱們將局部和全局特徵拼接起來做爲考慮了展現 context 的商品 i 的特徵 fi = (fi,l, fi,g)。這時展現 context 經過特徵擴展而加入到模型中來,幫助模型預測成交機率 p(i|c(o, i))。
在第一類模型的假設下,問題 2 的組合優化就變得很簡單了。商品集合是靜態的,所以各個商品的成交機率能分別獨立計算出來。
可是 DNN 計算出的 p(i|c(o, i)) 沒有考慮到商品 i 的排序位次,應該根據根據 position bias 對 p(i|c(o, i)) 作一個修正,即 p(i|c(o, i))bias(di)。對於求解問題 2 來講,咱們不須要具體知道 bias(di) 的值,只須要知道 bias 隨着位置從前日後依次下降就能夠了,由於這時只要按照 v(i)p(i|c(o, i)) 從高到低對商品進行排序,就必定能獲得收益最大的排序。
第二類模型不僅僅考慮展現 context 的商品集合信息,還精確地考慮到排在 i 以前的商品的順序。與第一類模型相似,展現 context 的商品集合信息仍是經過擴展全局特徵的方式加入到了每一個商品的特徵中,即 fi = (fi,l, fi,g)。可是與第一類模型不同,計算 p(i|c(o, i)) 時,第二類模型還考慮了排在 i 前面的真實順序,即 p(i|c(o, i)) = p(i|o1, o2, . . . , odi−1),這樣問題 1 變成了一個序列機率估計的問題,最直觀的方法就是用 RNN 來計算 p(i|c(o, i))。
與第一類模型不同的是,因爲咱們考慮了排在 i 以前的商品的順序,前面商品的排序變化會影響商品 i 的成交機率。這時就不能分別獨立計算每一個商品的收益了,由於商品 i 的收益要受到排在它前面的商品的影響;而在最終排序肯定以前,沒法知道商品 i 以前的排序是什麼,並且咱們的目標就是去肯定這樣一個最優的排序。同時,正是由於只考慮了排在 i 以前的商品順序,使得咱們能夠從前日後一步一步地排序,每一步選擇排在當前位置的商品。
爲了便於理解,能夠先看一種簡單的狀況:分位排序。
所謂分位排序是指在排序時先將收益最大的一個商品排到第一位,而後條件在第一個商品之上,從新計算剩餘商品的收益,並選出收益最大的商品排到第二位,依次類推。很明顯分位排序是一種貪婪的算法。beam search 算法能夠理解爲貪婪算法的擴展,beam search 在每一步搜索的時候會保留收益最大的 k 個序列,一直到最後一步,再返回最好的一個序列。
原始的 RNN 模型解決不好長距離依賴的問題:當咱們計算第 20 個位置的商品成交機率時,排在頭 4 位的商品幾乎就沒有任何影響了。而排在前面的商品因爲是用戶最早看到的,通常會有較深的印象,對後面商品的影響不應該被忽略。爲了使模型有能力考慮到長距離和對排序位置的依賴,咱們設計了一種新的 attention 機制加入到 RNN 的網絡中。
經過這種引入 attention 而且加入位置 embedding 的方式,模型能夠根據數據自動學習不同位置 attention 該如何調節以獲得更好的預測結果。直觀來看,模型的結構圖以下:
其中 DNN 是隻使用 fi,l 做爲特徵的 baseline。reDNN 是使用全局特徵 fi = (fi,l, fi,g) 的 DNN 全局排序模型,miRNN 是 RNN 全局排序模型,miRNN+attention 是增長了咱們的 attention 機制的 RNN 模型。
使用 miRNN 和 miRNN + attention 模型作排序,算法的時間分別是Θ(kN 2) 和Θ(kN 3),其中 N 是被排序的商品數,k 是 beam search 算法的 beam size 參數。對於淘寶搜索這樣的大規模的搜索平臺來講,這樣的複雜度顯然是過高了。
不過咱們能夠在 baseline 排序的基礎上,只對排在最前面的 N 個商品進行排序,只要 N 取得不大,計算量就是能夠承擔的。同時,由於排在前面的商品對效果的影響最大,對這些商品從新排序的收益也比較大。
咱們對比了不同 N 和 k 下,本文提出的各類全局排序方法的 GMV 增加(反應模型效果),搜索引擎 latency(反應計算負擔)的增加曲線:
最終效果總結:GMV、搜索引擎 Latency 想對於 baseline DNN 的增加:
咱們首次提出了考慮商品間相互影響的電商全局排序方法,並在淘寶主搜索上取得了明顯的效果。目前最大的問題就是 RNN 的方法效果雖然更好一些,可是帶來的計算負擔太大,如何減小計算量將是重要的研究方向。