應用實踐 | 電商應用——一種基於強化學習的特定規則學習模型

本文轉載自公衆號:浙大KG。

作者:汪寒,浙江大學碩士,主要研究方向爲知識圖譜和自然語言處理。


應用場景

在電商實際應用中,每個商品都會被掛載到若干個場景,以圖結構中的節點形式存在。商品由結構化信息表示,以鍵值對(Property:Value)形式(後稱PV)存在場景LifeStyle)的價值則在於打通商品實體之間的聯通,提供跨域的實體搭配,因此新的商品必須要通過規則庫中的規則掛載到特定的場景才能進入電商的運營體系。商品場景的樣例如下圖所示。

圖1 商品場景樣例

規則的作用則包括掛載新的商品以及爲已有的商品新增掛載場景,目前規則庫中的規則主要由人工構造,通過審覈之後才能進入規則庫,商品場景掛載的規則特點是Body部分只由PV組成,Head部分只包含單個場景。規則的形式如下:

人工構造規則的方法效率低,人工成本高,因此商品場景掛載規則學習任務就是利用算法從現有的商品場景數據中生成規則,提高規則生成的效率,降低人工成本。現有規則庫中的規則樣例如下表所示。

Motivation

目前業界常用的規則學習baseline是關聯規則挖掘,用於發現數據集中項與項之間的關係,通過挖掘數據集中存在的頻繁項集來生成規則。這種方法適合數據項之間沒有差異的數據集,比如著名的購物籃分析應用中,不同的商品都可以看作是同種item。而在實際應用中常常需要挖掘不同類型數據項之間的規則,數據集中的元素項之間存在差異,不能簡單地將所有數據項都看作同種item,分析商品場景掛載數據可以看出,商品的 PV 對與場景之間存在差異,若將其視爲同種數據項,用通用的規則挖掘算法學習,就捨棄了商品 PV 對與場景之間的掛載關係信息以及差異。

且關聯規則挖掘是通用的規則生成算法,在頻繁項挖掘階段需要耗費大量時間挖掘無關的頻繁項,無法針對特定的規則進行優化,所以關聯規則挖掘算法無論是效率還是產出結果的指標都偏低。因此,針對商品場景掛載數據生成規則,需要用到task-specific 算法,算法需要考慮到商品 PV 對與場景之間的差異以及掛載關係信息,且生成的規則應滿足 Body 部分爲 PV 對,Head 部分爲單個場景的形式。

算法描述

首先分析數據,商品由20-50個PV對組成,每個商品會掛載到若干個場景,而輸出的規則的body部分爲1-5個PV對,head部分爲單個場景。因此可以認爲,對一個商品的PV對賦予不同的權重就可以讓這個商品掛載到不同的場景,輸出那些權重超過閾值的PV對作爲body部分就可以得到一條規則,從而就可以得到一個算法,就是用一個神經網絡來對PV對賦予權重,在訓練完畢後將高權重的PV輸出作爲規則的body部分。

因此,首先要解決的問題是如何設計一個神經網絡模型來爲PV對賦予權重,PV對的權重是離散值0或1,0表示捨棄當前PV對,1表示選擇當前PV對作爲body部分。把商品包含的PV對看作序列,賦予權重的過程就是一個經典的序列決策過程,而這個序列決策過程是沒有標註數據的,所以無法用監督學習訓練,但整個序列是有標註的,即權重賦予後的PV對序列能否掛載到當前場景。因此,可以把整個問題建模成一個強化學習問題,訓練一個智能體來完成權重賦予的過程。

然後,要解決的第二個問題是如何爲這個智能體返回reward,即如何判斷智能體輸出的PV對子序列可以讓商品掛載到特定場景,且這個子序列的長度不超過5。判斷掛載是否正確可以看作是一個分類問題,預訓練一個FastText網絡作爲分類器,輸入爲PV對序列,輸出爲PV對序列所對應的類(即場景),來判斷當前PV子序列能否分類到對應場景。同時,在reward function中加入子序列長度項,讓智能體儘可能選擇較短的子序列。


模型

模型包括兩個部分,一個用於對PV輸出action的智能體Agent和一個用於返回reward的FastText模型,結構圖如圖2所示。Agent由三個模塊組成:Input Module,Memory Module,Action Module。Input Module包括Property embedding,Value embedding以及LifeStyle Embedding,Property embedding和Value embedding拼接起來當作當前PV的embedding,作爲Memory Module的輸入;Memory Module則由一個雙向LSTM組成,利用LSTM網絡的記憶功能,讓每個時間步輸出的隱狀態都能包含上下文的信息;Action Module則包含一個單向LSTM和一個全連接層,網絡輸入包含Memory Module在當前時間步的輸出,Agent在上一次輸出的action以及當前商品所對應的LifeStyle embedding。

在Agent對所有PV做完決策之後,將action輸出爲1的PV作爲FastText的輸入,FastText會輸出當前輸入的分類結果(也就是場景掛載),若分類正確則返回一個reward給Agent更新參數。


圖2 模型結構圖


模型訓練

首先需要預訓練一個FastText模型來爲Agent返回reward。所以要先把商品掛載場景構造成一個分類任務,而在前面已經提到,一個商品可能會掛載到多個場景,對應到文本分類任務,就是一個樣本會有多個標籤,所以這裏就把掛載數據構造成了一個多標籤分類任務,用的目標函數也是文本分類任務裏常使用的交叉熵損失函數,具體來說,單個樣本的損失函數爲:

這裏n表示標籤的個數,y_i 表示樣本是否屬於當前類,p_i表示當前label對應的概率值,由sigmoid計算後得到。

而智能體的參數更新方式是policy gradient,在監督學習中,本文通常用交叉熵作爲簡化版的KL散度來衡量兩個分佈的差異,單個樣本的交叉熵損失函數如下:

這裏t表示樣本的長度,y_i表示當前label,p_i表示當前label對應的概率值,由softmax計算後得到。

而強化學習則是沒有label的,用當前action所得到的reward來代替,單個樣本的損失函數如下

這裏a_i表示當前時間步Agent輸出的action,這個時候損失函數的作用就不是衡量兩個分佈的差異,而是最大化得到正reward的動作的概率。

 

實驗

實驗所用商品掛載數據集來自某電商網站的一個類目,在實驗開始前先對實驗數據做了一些必要的預處理實驗數據的預處理包括:

1. 對標題進行分詞,去掉停用詞,無關的標點符號以及單個字。

2. 對包含多項的屬性值進行切分,切分成k個部分就形成k個PV。

3. 去掉了一些沒有信息量的屬性項及其對應的屬性值。

4. 增加了屬性項:擁有屬性,對應屬性值爲該商品擁有的屬性項。

預處理結束後的數據集信息如表1所示

表1 數據集統計信息

在規則輸出階段,智能體不再是從動作空間中按概率採樣一個動作,而是直接選擇概率最大的動作,得到所有預測正確的PV序列後,計算每條raw規則的HC和Conf,將滿足要求的作爲備選規則。最後生成的備選規則的body平均長度僅爲2.12,這十分符合規則的要求,模型輸出的規則樣例如表2所示

表2 輸出規則樣例

從樣例中可以看出,智能體確實可以找到一到兩個與某場景關聯度極高的PV,這證明了reward function中對輸出PV序列長度的懲罰的有效性,且規則從直觀上看就很具有可行性,說明本模型確實找到了商品PV與場景之間存在的模式,並以規則的形式輸出。最終模型生成了845條備選規則。

 


 

OpenKG

開放知識圖譜(簡稱 OpenKG)旨在促進中文知識圖譜數據的開放與互聯,促進知識圖譜和語義技術的普及和廣泛應用。

點擊閱讀原文,進入 OpenKG 博客。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章