
商品排序中的重排
商品排序的目的,很大一部分是為了讓高效的商品獲得更好的展示機會,比對使用者的需求。一種主流的思路是,商品對于使用者的某次請求來說,是有好壞之分的。而從展示的位置的角度來看,越靠前的商品越能夠獲得曝光機會上的優勢。于是,通過模型對商品打分的思路自然而然的浮現了出來,且似乎隻要模型對商品的打分足夠準确,AUC 足夠高,之後就可以按照這個打分從高到低對商品進行排序!在這套經典的架構中,有一個嚴重的缺陷,這也是絕大多數重排工作都期望解決的:商品的上下文對結果會産生影響。考慮重排之前的模型,由于候選商品集合太大,想要将上下文資訊喂進模型十分困難。是以,用重排來解決上下文影響是一個普遍的思路,我們可以看到幾乎所有的重排模型都會在對商品打分時考慮上下文。但實際上,對商品進行打分判斷是否會産生轉化是一個任務,對候選商品進行排序最大化收益又是另外一個任務,這兩個任務雖有聯系,但卻截然不同。如果我們單純按打分來排序,那麼原序将會被打亂,而我們無法從原序 label 還原出新序 label,于是無法斷定新序的表現如何。除非我們認定商品的轉化行為不會因為上下文發生改變,這顯然是存在問題的。
無視上下文,模型對商品的打分足夠準确嗎?
我們設計了三個模型進行實驗,來展示模型上下文資訊刻畫程度對打分結果的影響。第一個模型是目前最為常用的 pointwise 打分模型,模型輸入為商品的特征和使用者的資訊,我們簡稱它為 Simple DNN。第二個是在重排階段表現穩定良好的線上重排模型 AE rerank,它在 Simple DNN 的基礎上,添加了上下文商品的全局統計資訊,例如某些特征分的方差、均值、極值等等。第三個模型是我們為了進一步刻畫上下文資訊而設計的,在 AE rerank 的基礎上額外加入了 CNN 和 RNN 子產品來捕捉商品序列的資訊。模型結構如下圖所示:( Simple DNN 不包含藍色的 CNN、RNN 以及綠色的全局統計特征輸入,AE rerank 不包含藍色的 CNN、RNN)。
評估模型結構圖
我們使用了 5400 萬條日常資料作為訓練集,将上述三個模型分别訓練了 5 個epoches(都已收斂)。接着我們計算了它們在測試集(約 250 萬條資料)的表現結果,如下表所示。此處的 AEFS 是精排階段産生的精排總分的 alias name。表中的資料回答了我們的問題, pointwise 模型 Simple DNN 對商品進行的打分對比帶有上下文資訊的AE rerank和新模型來說略遜一籌。由此我們能夠得出結論,商品打分應當會受到它所處的上下文環境的影響,将上下文資訊整合才能預估得更加準确。
各評估模型表現(序列内判斷能力)
無視序的改變,按照原序上的打分排序足夠靠譜嗎?
首先,我們假定模型輸出均在拟合考慮上下文的前提下目前商品被購買的機率
,且定義排序結果L的好壞為其能夠産生的期望購買數
,即
Nowa:
該公式對于完整考慮上下文的新模型來說是适用的。但是對于前兩種模型 Simple DNN 和 AE rerank 來說,即使将商品随機打亂,它們對于每個商品的打分或者說是預估的機率
是不變的,是以直接相加來作為商品序列的打分一定是失準的。大緻地,我們以類似 DCG 的方式,每個商品的預估機率乘以位置折扣的和作為排序結果打分,就能夠自然地避免上述情況發生,如下所示:
我們通過實驗測試了該方法判斷 PV 的好壞對于 Simple DNN 和 AE rerank 來說是否有效。實驗分為分别對點選轉化和成交轉換進行了測試,在理想情況下,好的模型應當能夠更準确地判斷兩個排序中,哪一個更可能産生點選行為,或是哪一個更可能産生成交行為。排除了 label 相同的排序對之後,結果如下表所示:
各評估模型表現(序列整體判斷能力)
從上面的測試資料中可以看出,所有的模型都能大緻區分出序列的好壞。從
的定義來看,直接按照商品的打分從高到低進行排序,确實是在評估下最好的序列。然而,這樣産生的排序結果是否真的有效,在評估能力最強的新模型視角來看,結論是否一緻?于是,我們把這些新生成的“最好的”序列以及資料的原始序列一起送到新模型進行評估,如下表所示。每個值表示新生成序列中有多少比例是比原始序列要更好的。
按模型打分排序表現
新模型認為直接按照打分高低排序的政策,最高也隻有 66% 左右的比例能夠比原序列更好,對于直接按照精排總分 AEFS 排序更是比原序列差得多(這是因為離線資料中的大部分原序列都是經過 AE rerank 模型生成的)。通過這個結果我們認定,直接按照商品打分的高低來排序很可能并不是最優的方法。
那麼,不能直接通過打分排序,我們又該如何去尋找最優的序列呢?最直接的辦法是通過枚舉所有可能的序列結果,讓新模型對它們逐個進行打分,再把最好的排序挑選出來作為最終結果。但由于線上算力遠遠不足以讓我們暴力枚舉,是以我們需要對枚舉的集合進行優化。啟發式貪心搜尋 beam search 可以作為一種解決方案,在探索過程中裁剪掉較大部分無用狀态。該方法需要在精度和速度之間有一個權衡,通常在保證一定精度的條件下,很難達到令人滿意的速度。在我們的工作中,我們希望能夠用更直接了當的方式,一步到位地生成序列。
商品序列生成器
商品序列生成器是一個生成序列的模型,它的輸入是 個候選商品,輸出為帶順序的
個商品。使用 pointer network 是一個自然的想法,它需要疊代 步,在每一步中根據目前狀态,挑選一個商品,最終得到了 個商品的排序。我們在 pointer network 的基礎上設計了網絡結構,最終設計的模型如下所示:
生成模型結構圖
這樣設計的模型有兩個方面的好處。第一個是它不需要具體限定 和 的值,模型的參數與 的值無關,當模型訓練或預測時都可以根據需要随意設定 和 的值。第二點是經過我們改造後,原來具有兩個 LSTM 的 pointer network 結構變成了現在的一個,其餘全部用 DNN 來代替,不僅實作簡單,預測所需時間也減少了一半(線上的 cpu 環境運作 LSTM 較慢 )。
有了生成模型之後,我們希望它可以生成能讓新模型打分非常好的排序,如此就能夠有大機率比傳統的方式做得更好。傳統的方法可以通過原序 label 來監督學習,但由于改變排序有可能會改變 label,通過監督學習方法來做完成這個任務是不夠完美的。一個替代方法是我們可以通過随機的方式抽樣一些候選序列,然後由新模型打分來選出最好的序列作為監督學習的目标;也可以通過生成一些備選序列之後取出評估模型認為最好的序列作為結果。在我們的工作中,我們使用了強化學習的方式聯系起生成和評估兩個環節。
強化學習之路
算法設計
在本節中,将上文中生成排列的模型稱為生成器,評估排列的模型稱為評估器,回顧評估器的計算方式:
因為評估器在對序列的期望成交行為數進行預估,如果我們把這個結果看作強化學習中的獎勵,似乎就自然地将生成器和評估器串聯起來了!在生成器訓練的過程中,每一次選擇商品都可以得到評估器發出的獎勵信号,最終隻需要将整條軌迹得到的總獎勵最大化即可。
然而,這裡還存在一個問題,
是利用上下文的資訊計算出來的,但每一步選擇商品的時候我們并不知道後面的商品是如何排序的。是以,我們需要對
進行簡化修改,讓它隻依賴于
之前已選出的商品,與後面的排序結果無關。換句話說,即為假設使用者是從上往下浏覽商品的,他對目前商品的購買機率隻取決于前面浏覽過的商品序列而與後面商品的排列無關。具體在之前評估器的修改就是将 CNN 子產品去掉。
将評估器模型簡化後,要做強化學習的幾大要素都已經具備了。商品生成器就是一個待訓練的agent,它會根據目前的狀态,做出它認為好的動作,然後收到評估器給予的獎勵,接着它會轉移到下一個狀态,繼續做動作拿獎勵。這樣可以得到 N個
三元組,具體的定義如下:
- 每一步的狀态 :之前已經排好的商品序列和剩餘候選的商品集合
脫胎換骨的生成模式:強化學習重排 - 每一步的動作 :候選集中剩餘的某一個商品,為選哪個商品的離散動作
脫胎換骨的生成模式:強化學習重排 - 每一步的獎勵 :在考慮上文的前提下,評估器預測的
脫胎換骨的生成模式:強化學習重排 被購買的機率脫胎換骨的生成模式:強化學習重排 脫胎換骨的生成模式:強化學習重排 - 軌迹長度為 ,衰減系數
脫胎換骨的生成模式:強化學習重排 脫胎換骨的生成模式:強化學習重排
我們主要是考慮用 policy-based 類的方法來對上述生成器模型進行優化。沒有使用 value-based 方法的原因,是我們在實驗中發現,在這個問題下要準确的預估出 V 值或者 Q 值可能是一件困難的事情。
請注意,強化學習要讓總回報最大,也是讓每一步的總回報最大,而每一步的總回報是從目前商品一直到最後的第 N 個商品所得到的獎勵之和,它被稱為Q值,定義如下:
那麼我們從最基本的算法開始, reinforce 算法,損失函數為 :
這個較為簡潔的模型實驗的結果并不理想,我們很容易發現其中的一點:如果一些優質的候選,模型在其中無論怎麼行動總回報都很高,另外還有一些劣質的候選集,無論怎麼行動總回報都很低,那麼模型就很難找到有用的資訊進行優化。是以,我們可以考慮對 reward 進行修改,比如減掉候選集的均值,甚至再減去均值的變化量除以均值(變化率),以達到能夠判斷行動好壞的目的。
均值的計算,一種方法是可以直接使用原序列在評估器中的打分。這裡再補充解釋一下我們的訓練資料。比如在實驗中,我們主要關注的是 30 排 17,那麼我們就把線上對每個 query 真實展示的前 30 個商品撈回來作為我們訓練資料的候選集,生成器就從這 30 個中選出 17 個商品。我們可以知道這 30 個候選商品的前 17 個商品就是線上真實展現的序列。是以,原序列可以拿到在評估器中的打分
,它和上述的
次元相同,都表達的是每一步的總回報或者說是 Q 值。是以,我們上述的 reinforce 算法的損失函數就可以改造為:
簡稱 reinforce_2 算法。當然上述算法還可以繼續加以改造:
簡稱為 reinforce_3 算法(上述的除法可能會發生除 0 異常,全部 clip 在 -10 到 10 之中)。
對強化學習比較了解的讀者可能會産生一個想法,就是均值可以通過 actor-critic 的方法來估計。這就是即将要說的第二種估計均值的方法,本文我們使用了性能強大的 PPO 算法,這樣就可以用 critic 來估計
值,也能算出優勢函數的
值來更新政策。然而這裡隐藏了一個大問題:如何設計網絡來估計
值?
值是從目前的狀态開始,使用目前的政策,平均能拿到多少總獎勵的數值。目前的狀态是目前排好的商品和剩餘候選的商品,我們需要在保持之前模型的優良性質(即候選商品集的數量是可變的)的同時,預測出準确的 值。是以,我們采用與之前模型結構類似的設計,即對剩餘候選的商品打分,然後把分數都加起來,模型結構如下所示:
V 值估計模型圖
該算法的效果和 reinforce_3 算法相差不多。我們認為 ppo 算法表現不佳,是由于 值較難估計,是以能不能保留 ppo 中的 actor 更新方式,而把 critic 子產品進行改變?這裡就要說到估計均值的第三種方法,蒙特卡洛采樣。為了實作友善和高效,我們也對原始的蒙特卡洛采樣做了一些改進。
V 值采樣圖示
對于每一份資料或者說是每一組候選商品集,我們都讓模型就根據它目前自身的參數采樣生成多個排列,那麼這些排列在評估器中得到的總獎勵的均值就可以近似認為是目前政策下的
值了,我們将之稱為 PPO_MC 算法,損失函數定義如下(
的次元是
,如果 std(R) = 0,則将其置為 1):
至此,我們一共提到了 5 種強化學習算法,從 reinforce 算法一直 PPO 算法及其改進版本,它們的訓練效果如下圖所示。為了增加算法的探索能力,這 5 種算法都在 loss 中加入了相同的 entropy 獎勵。左邊這幅圖表示模型輸出動作機率的 entropy 變化情況,越低表示越收斂。右圖表示在測試集中模型生成的排列有多大的比例比原始排列在評估器中的總得分更好,我們稱這個百分數為優勢占比或 better percent,簡稱 BP,在 Lazada 重排又被稱為替換率。在我們的觀點中,強化學習訓練時不看 loss,而看 entropy 和總回報。
強化學習算法表現對比(左:熵;右:成交 BP)
從左邊的 entropy 對比圖中可以看出,我們的 PPO_MC 算法是收斂的最快最好;而從右邊的 BP 對比圖中可以看出,同樣是我們的 PPO_MC 模型可以達到最好的效果。原版的 PPO 模型不僅在 entropy 上難以收斂,而且生成的序列也僅僅隻是比原始序列好一些,反而不如 reinforce_3 算法收斂的效果好。
我們也可以更通俗一些來看 PPO_MC 算法,它在訓練之前會通過采樣來得到多條表現不一的序列,然後更新模型時就可以更加傾向于表現好的序列。這個算法其實也是有改進空間的,可以從上面的訓練圖中看出,前期 entropy 的收斂是非常快的,也可以想象模型在前期時,随機性很大,采樣得到的序列多種多樣,很容易找到有用的梯度更新方向。然而模型在後期 entropy 已經變得很小或者基本收斂了,采樣得到的序列基本都差不多,也難以進行有用的更新了,可以說是這個時候的采樣是對算力的巨大浪費,做了很多無用功。那麼這個采樣一定是需要按照它目前的模型參數來采樣嗎?其實未必。說明一下,這裡的采樣是為了算均值,與算法是 on-policy 還是 off-policy 是沒有任何關系的,更新模型還是按照原來的算法邏輯。原則上來說,我們是需要一個多樣性豐富,并且表現能夠比目前的政策稍好一些的采樣政策。随機采樣肯定是不行,因為它采出來的序列可能都很差。如何去得到更好的采樣政策呢?這也是強化學習圈子中非常熱門的研究範疇,就留給各位看官們來發揮聰明才智了。
兩組實作細節對比
資料的組織由于離線訓練資料的保留機制,如果使用者隻浏覽過第一頁,那麼我們隻能拿到第一頁的 20 個商品,隻有當使用者浏覽到第二頁時,我們才能拿到前兩頁的 40 個商品。這兩種資料(隻有第一頁、有前兩頁)的分布是有顯著差異的,前者是使用者隻在第一頁點選或者購買,可能是這個序列已經比較好了,後者是使用者在一直浏覽到了第二頁,有可能是 top 20 的序列很差造成的。那麼,我們應當如何權衡資料的品質和數量呢?
我們做了三個測試模型,一個是用包含 17 個候選商品的資料來訓練模型;另一個是用 30 個商品的資料訓練;最後一個是同時用這兩份資料訓練(這兩份資料都是在 160 萬條左右)。最後,由于我們的模型上線時要考慮到耗時問題,隻排第一頁的 17 個商品,是以我們讓這三個測試模型分别在 17 排 17, 30 排 17, 50 排 17,100 排 17 這四個環境中進行測試,與原序列對比,觀察它們生成的新序列從我們的評估器看來是不是更好的。如下表所示。
資料的影響
從上表的資料中可以看出,在兩個訓練資料集的大小差不多以及訓練時間差不多的情況下,用第一頁的資料集訓練效果稍微好一些,當然差距也不是很大。從節約計算和存儲資源的角度來看,還是直接用第一頁的資料更為友善。并且通過上表,我們可以發現候選商品集合越大越好,隻要耗時能接受。考慮到我們的模型耗時就相當于是普通打分排序耗時的
倍,對于
較小的情況也能夠快速預測,但對于上百上千數量級的商品,可能就難以接受了。
目标的改變在以上的内容中,我們的優化目标都是最大化期望購買數,而我們能夠通過修改 reward 的定義,達到優化其他目标的效果。舉例子來說,一個模型如果想要提升總體 GMV,在過去方法大緻可以歸為以下幾類:
1)模型目标不變,在轉化率的打分上乘上價格因子,近似于期望 GMV。這類方法通常會對排序結果有一個較大的改變,有明顯的提價效果,但線上效果相對不穩定。
2)模型在訓練時使用價格對正樣本權重或改 loss。這類方法對排序結果的影響不大,在某些情況下可能能夠提升一定的單價,但通常不顯著。
3)将部分非成交(如加購)樣本當作成交樣本進行訓練。以加購樣本為例,從 AE 的統計資料來看,這些商品的價格的平均值數倍高于成交樣本。這是一種在成交樣本中自然添加一定置信度高價樣本的資料增強方法我們能夠看出,以上的幾類方法都是在間接地提升 GMV,而強化學習模型的一個強大之處就在于我們幾乎能夠直接對 GMV 模組化。我們可以将 reward 修改為:
其中,
表示第
個商品的價格。在實際的訓練中,我們并不使用商品的原始價格作為
,而是使用它在這個商品候選集中價格分位數。通過對價格進行此變化,能夠防止商品間的因價格差異過大而産生不良反應,但也丢失了商品價格的一部分原始資訊。如何更好地将價格因素包容進模型,也是一個未來需要更精細考慮的問題。我們把考慮期望成交數的模型稱為 PAY 版本,考慮期望 GMV 的模型稱為 GMV 版本,以及一種是兩者權重融合的 PAY_GMV 版本,優化目标變為:
上式中的
是一個可以調的系數。在離線評估的情況下,三種模型的訓練效果如下所示。
目标的影響(左:熵;中:成交視角 BP;右:GMV 視角 BP)
圖中的模型都是用 30 個商品候選集的資料來進行訓練得到的,其中的 PAY_GMV 版本的
。意料之中,PAY 版本在成交轉化上占據優勢,GMV 版本在 GMV 上占據優勢,PAY_GMV 版本則是會得到一個兩者均衡的結果。
線上部署與真實效果
離線評測終究還是存在偏差的,為了證明生成器模型能夠确實地提升線上效果,我們将模型通過定時排程的政策,每天進行訓練和模型重新上傳。模型訓練時,會收集最近兩周所有 bts 實驗桶的離線資料,使用它們訓練評估器的 5 個小時,而後再訓練生成器,并且在 6 個小時後釋出訓練好的新生成器模型。評估器采用的是增量訓練的模式,而生成器模型為了避免失去探索能力,會每次重新初始化訓練。
線上實驗方面,我們首次取得線上正向效果是在國慶節。當時上線的是 GMV 版本的強化學習重排模型,對比基準桶取得了較好的單價提升效果。線上上實驗中,我們發現這個 GMV 版本的模型會帶來轉化率的虧損。是以,為了平衡 uv 轉化率和 uv 價值,在國慶節後上線了 PAY_GMV 版本的強化學習重排模型,使得 uv 轉化率和 uv 價值這兩個名額都取得了提升。值得一提的是,該版本的模型帶來一定的單價和轉化率置換,損失了部分單價,提升了一定轉化率,使總體 GMV 受益。
線上日常表現
在雙十一大促前,使用者對高價的商品的購買欲望銳減,更傾向于觀望和加購。是以,我們把加購樣本和成交樣本全部當作成交樣本來給評估器進行訓練,接着再利用這個評估器來訓練生成器模型。在這裡我們是希望加購商品的數量越多越好,并且又由于使用者更傾向于低價的商品,于是我們是使用上述 PAY 版的生成器模型。在大促前 5 天,對比基準桶,我們模型的收藏加購率提升約 12.4 %,而在不帶強化學習的實驗桶中,最高的加購率僅在 11.5% 左右,有 1% 左右的 gap。雙十一首日,帶有強化學習重排模型的桶表現最為突出,成交金額提升 6.81%。在雙十一次日中,強化學習重排模型的表現略微下降,成交金額提升 5.65%。相對于實時重排桶(僅重排不同,實時重排為 AE rerank 的實時版本),也有超過 1% 的總體 GMV 提升。
階段總結與未來展望
在過去的五個月中,我們成功地将強化學習重排模型從無到有地搭建了出來,并且經過了雙十一考驗,展示了它的靈活性、可行性和巨大潛力。本節中,我們将展望重排的未來之路。
GAIL 強化學習重排
目前來說,我們重排模型的訓練完全依賴于評估器,它的準确與否決定了生成器的好壞,而我們的評估器又隻是由少量的資料訓練得到的(相比于整個空間來說)。是以,我們猜測評估器在訓練資料附近的分布中是比較可信的,而在與之差别較大的分布中或許是不太可信的。那麼,能不能讓生成器産生的序列不僅好而且還要盡可能落在訓練資料的分布中呢?于是,我們借助了 GAIL 的思想,生成器不僅要接收之前訓練好的評估器給的獎勵,還要接受同時訓練的判别器給的獎勵。這裡,判别器的目标就是給生成的序列打出盡可能低的分數,而給原始序列打出盡可能高的分數。訓練的結果如下圖所示。
GAIL 強化學習重排表現(左:熵;中:成交 BP;右:判别器 AUC)
藍線是之前 PAY 版本的強化學習重排模型,可以在第二幅圖中看到它在成交優勢占比的名額中是最高的,生成的序列有接近 90% 從評估器看來打分更高,而在右圖中判别器也能夠以非常高的準确率将其與原始序列分辨出來。橙線是隻用判别器來訓練生成器,就是原版 GAIL 的過程,目标就是讓生成的序列與原始的序列差不多。不難發現,在第二幅圖中,它生成的序列在評估器中的打分不高。綠線就是上述說的兩者兼顧的版本,生成的序列既要在評估器中的打分更高,也要在判别器中的打分更高。
從上面第一幅圖中可以發現,帶有判别器的兩個模型 entropy 都收斂得很低,這是因為我們在其中加入了随機探索的政策。具體來說,之前每一步是按照政策預估的機率來選擇一個候選商品,而這兩個模型中是會有 0.2 的機率随機挑選一個候選商品。實驗發現,這種簡單的探索政策有助于 GAIL 的訓練。
由 11 月 25 日至 11 月 27 日 3 天的線上結果來看,GAIL 重排對比原重排平均能夠提升單量 3.22%,成交總額 3.81%,是個很不錯的提升。
和 AUC 的愛恨情仇
相信讀者對 AUC 這一名額再熟悉不過了:它是一個刻畫了商品打分與商品 label 的方向一緻性的名額。我們在離線的環境下,想要評價一個排序模型的好壞時,幾乎都會考慮使用 AUC 進行判定,因為 AUC 的值表達的是面對不同 label 的商品對時,我們将 label 更好的商品打上更高的分的頻率,這和我們對商品排序的目标直覺上來說是一緻的。一個高 AUC 的模型意味着它能更好地判斷出商品之間的好壞關系,是以我們通過不斷地優化 AUC,來探索更好的模型。然而,當我們将視線轉移到線上的真實表現時,盡管在通常情況下,能夠提升 AUC 的模型能夠帶來一定的轉化率提升,但我們會發現 UV 轉化率和 AUC 的正向關系并沒有那麼大。在半年前,我們發現了這一現象的極端展現:一個大幅提升離線 AUC 的模型,它大幅降低了線上 AUC,且大幅提升了線上真實的UV轉化率。我們稱該現象為排序測不準原理。那麼,使用 AUC 進行評估究竟有何風險?
1)離線 AUC 與線上 UV 轉化率并無直接關聯。我們通過 AUC 來聯系線上 UV 轉化率的基點,是上下文對 label 的影響不大,以及 position bias 對行為産生的損傷是越單調遞增的這兩點,而它們實際都是不精确的。
2)模型上線改變排序結果後,展示序列分布發生變化,原評估結果失效。我們可以用 AUC 來評價一個評估模型,但是對于生成模型來說,它會改變原序上的 label,我們不能夠通過原序 label 來判斷它的表現。
3)線上 AUC 的問題更為嚴重。本質上來說,線上 AUC 不存在可比性。這裡我們舉一個真實的例子:在這半年裡,我們曾有一個桶的政策降低了 10% 的線上 uv 轉化率,但是從線上 AUC 來看,它在首頁 GAUC 上漲了 1% 以上,而這一個點的提升是通過大多數正常途徑的優化很難達到的!這個現象産生的原因,是重排的上遊模型産出出現了問題,極大稀釋了重排候選集合中優質商品的占比。
試想一個更為誇張的情況,當一頁 20 個商品中的後 10個 商品很糟糕,永遠不會發生成交時,有一半的 pair 就變成了送分題,進而造成了 GAUC 的虛高。透過這個現象,我們找到了一個能夠急劇增大 GAUC 的模型:它将最可能成交的商品放在首位,然後放一堆最無關的商品。這個模型在理想情況下,GAUC 應當為 1,在正常情況下也至少能夠大幅提升 GAUC,想要提升 GAUC 的同學可以嘗試一下,副作用是 UV 轉化或許會跌 90% 左右。被利用的核心漏洞是在不産生成交的情況下,無論排成什麼鬼樣子,都不會對 GAUC 的值産生影響。是以,線上的所有實驗可能都有着不同的商品排序分布,除了一個模型大緻的水位之外,我們無法通過對比線上 AUC 獲得相當精細的資訊。發現以上問題之後,我們可能漸漸想要放棄 AUC 這一名額,但仔細一想,好像又沒有其他的名額能夠直接代替它。而我們在最初發現 AUC 的潛在問題時,就希望能夠找到另一個使用簡易、表現精确、線上線下一緻的新名額。強化學習架構中的評估器,就有能力作為這樣的名額。在我們混合轉化率和 GMV 優化目标的模型中,名額顯示我們生成的序列在評估器看來占了壓倒性的優勢,但 GAUC 僅在 0.5 左右,而正是這樣一個 GAUC 0.5 的模型,線上上取得了雙向的顯著提升,這證明了 AUC 在某些情況下是缺乏判别能力的。
強化學習重排 AUC、BP 對比
World Model:序列評估器
早在 2016 年的 SIGIR 就被 Thorsten Joachims 提出,而主題 Counterfactual Evaluation and Learning 正是想要消除線上線下不一緻性。在他的 tutorial 中,給出了一些簡單的由于系統 selection bias 造成的預測不準确的問題的解決方案,主要還是在針對如何 model 這個 bias 展開的 。其中的一個方法,被稱為 Model the world,是通過用模拟拟合線上真實 reward 來達到 unbias 的目的,這和我們強化學習中使用的序列評估器是一緻的。通過一段時間的線上測試,我們能夠相信強化學習環境使用的評估器是具有較好的能力的,否則生成器模型是難以得到線上提升的。是以我們認為,序列評估器可以作為一種有一定判别能力的離線評估手段。
新老離線評估對比
實時強化學習模型
在我們這一階段的工作中,我們對生成器的研究探索更多,而評估模型隻是一個相對令人滿意的版本。在後續的工作裡,一個直接思路就是讓我們的評估器的評估能力更強。評估器在訓練資料包含的已知空間中能夠取得一個比較好的 AUC,但是對相對未知的空間,我們也無法得知它的表現究竟如何。上面提到的 GAIL 強化學習模型是一種方法,讓生成器的産出在已知空間附近。另一種更加主動的方法,是去探索這些未知區域。但我們也不需要太過嚴格地去探索整個空間,而是探索評估器認為比較好的區域就足夠了,因為這一部分更接近我們想要展示的序列。達到這一目标的方法,可以是在離線的環境中訓練出能夠最大化序列評估器打分的序列生成器,然後将它上線。這樣一來,序列評估器的訓練資料中就會增加原本它認為的高分區域,進而得到學習。然而,由于我們目前的版本是離線訓練的,那麼當它接收到信号的時候,已經是一到兩天之後了。是以,讓它更加精确的方法,可以是讓它更新成為一個實時版本,這樣它就能夠做到快速地自我進化。一旦評估器變得更加準确,生成器也将收獲更好的效果。另一個思路,是完全放棄評估器,和線上真實的環境進行互動,不過以我們現有的經驗來看,在這個架構下生成器難以得到良好的訓練。