商品排序中的重排
商品排序的目的,很大一部分是為了讓高效的商品獲得更好的展示機會,匹配用戶的需求。一種主流的思路是,商品對於用戶的某次請求來說,是有好壞之分的。而從展示的位置的角度來看,越靠前的商品越能夠獲得曝光機會上的優勢。於是,通過模型對商品打分的思路自然而然的浮現了出來,且似乎只要模型對商品的打分足夠準確,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 強化學習模型是一種方法,讓生成器的產出在已知空間附近。另一種更加主動的方法,是去探索這些未知區域。但我們也不需要太過嚴格地去探索整個空間,而是探索評估器認為比較好的區域就足夠了,因為這一部分更接近我們想要展示的序列。達到這一目標的方法,可以是在離線的環境中訓練出能夠最大化序列評估器打分的序列生成器,然後將它上線。這樣一來,序列評估器的訓練數據中就會增加原本它認為的高分區域,從而得到學習。然而,由於我們目前的版本是離線訓練的,那麼當它接收到信號的時候,已經是一到兩天之後了。所以,讓它更加精確的方法,可以是讓它升級成為一個實時版本,這樣它就能夠做到快速地自我進化。一旦評估器變得更加準確,生成器也將收穫更好的效果。另一個思路,是完全放棄評估器,和線上真實的環境進行交互,不過以我們現有的經驗來看,在這個框架下生成器難以得到良好的訓練。