洪志理,賴 俊,曹 雷,陳希亮
(陸軍工程大學 指揮控制工程學院,江蘇 南京210007)
推薦系統[1],作為大數據時代方便人們在龐大的可選項目中快速準確定位到自己感興趣物品的工具,基本思想是通過構建模型從用戶的歷史數據中提取用戶和物品的特征,利用訓練好的模型對用戶有針對地推薦物品。
近年來隨著強化學習的快速發展,將強化學習應用于推薦系統的研究越來越受到關注,首次將深度強化學習應用于推薦系統的探索模型是DRN[2],為深度強化學習在推薦系統中的應用構建了基本框架,圖1 所示為基于深度強化學習的推薦系統框圖。

圖1 基于深度強化學習的推薦系統框圖
目前基于深度強化學習的推薦系統研究已有諸多研究成果,如童向榮[3]等人將DQN 應用于以社交網絡為基礎的信任推薦系統中,應用于智能體學習用戶之間信任度的動態表示,并基于這種信任值來為用戶做推薦;劉帥帥[4]將DDQN 應用于電影推薦中來解決推薦精確度低、速度慢以及冷啟動等問題;Munemasa[5]等人將DDPG 算法應用于店鋪推薦,來解決用戶數據稀疏問題;Zhao[6]等人將Actor -Critic 算法應用于列表式推薦,來解決傳統推薦模型只能將推薦過程建模為靜態過程的問題。上述研究成果以及未在此羅列的眾多研究均是利用強化學習本身的性質來解決推薦問題,很少從推薦角度出發考慮問題。
本文在總結以前算法不足的基礎上提出了DDPG-LA 算法,該算法通過算法改進和算法融合,直接對用戶的興趣進行顯式建模,并以用戶的興趣作為輸入智能體的狀態,通過端到端的方式來為用戶做推薦。該算法由用戶長期興趣提取模塊、用戶短期興趣提取模塊和用戶興趣學習及用戶推薦模塊組成。用戶長期興趣提取模塊采用LSTM[7]網絡,利用其長序列依賴的特性,在用戶的歷史瀏覽記錄中提取用戶的長期興趣,另外為更快速地提取到用戶的長期興趣,本文在LSTM 網絡中加入狀態增強單元,改進后的該模塊稱為RLSTM ;用戶短期興趣提取模塊采用機器翻譯[8]領域Transformer 模型[9]中的自注意力機制[10]算法,在推薦系統中該算法通過計算用戶一段時間內各個瀏覽行為相互之間的影響,以此來提取用戶的短期興趣。另外,本文在原自注意力機制算法的基礎上進行改進,加入解決當前短期興趣被稀釋問題的機制,以更好地適應短時間內用戶短期興趣的快速變化,改進后的模塊命名為T-self-attention ;在用戶興趣學習模塊,本文利用深度強化學習中的DDPG[11]算法,并以用戶的興趣為輸入智能體的狀態,而非以用戶的瀏覽記錄為狀態,智能體通過直接學習用戶的興趣轉移方式來為用戶做推薦。模型在Movielens[12]的兩個數據集上進行測試,并采用不同評價指標與其他方法做對比。實驗證明模型效果優于其他方法,從而也說明了模型中涉及到的組件的有效性。
DDPG 的基礎是策略梯度算法[13](PG),是演員-評論家[14](Actor -Critic,AC) 算法的一種,使用一個神經網絡來近似策略函數,稱為Actor 網絡,它與環境進行交互,輸入為狀態s,輸出為與該狀態對應的確定性動作a;另一個神經網絡來近似值函數,此值函數網絡稱為Critic 網絡,輸入為動作a 和狀態s,輸出為Q(s,a),用于評估動作的好壞。DDPG 會出現對Q 值估計過高的問題,因此在設計網絡結構時,對于Actor 和Critic 均采用雙網絡結構。四個網絡可分別用公式表示為:

推薦系統一般由三個模塊組成,即用戶建模模塊、推薦對象建模模塊和推薦算法模塊。其結構示意圖如圖2 所示。

圖2 推薦系統結構框圖
用戶建模模塊用于對用戶進行建模,通過用戶偏好和用戶個人信息,對用戶進行抽象表示。推薦項目建模模塊的作用為通過算法對用戶交互序列和項目信息的學習,推斷待推薦項目特征,并在推薦算法模塊結合用戶建模模型中的用戶特征為用戶進行推薦。在推薦算法模塊中常用算法如: 傳統推薦算法中的基于內容的推薦[15]、協同過濾推薦[16]、基于關聯規則的推薦[17]、基于效用的推薦[18]、組合推薦[19]等,以及基于深度學習的方法。且近年來隨著深度強化學習的快速發展,越來越多學者也將深度強化學習算法作為推薦算法。
本節介紹所提出的模型DDPG-LA,該模型將用戶興趣作為深度強化學習中智能體所看到的狀態,以此來完成推薦任務。本節將詳細介紹有關提取用戶興趣模型的改進方式,以及模型間的融合方式。
為捕獲用戶的長期興趣,本文使用一個加入狀態增強單元的長短時記憶網絡(RLSTM) 來學習用戶較長一段時間內的瀏覽記錄。
LSTM 由一般的循環神經網絡[20](RNN) 改進而來,它在RNN 的基礎上解決了長期依賴問題,具體來說即是通過三個門控單元來控制網絡中狀態流的輸入、輸出以及保留比例,其結構示意圖如圖3 所示。
圖3 中ft,it,ot分別表示遺忘門、輸入門、輸出門;Ct,Ct-1,t,分別表示為當前長期細胞狀態、上一時刻長期細胞狀態和臨時細胞狀態;ht,ht-1分別表示當前時刻隱藏狀態和上一時刻隱藏狀態;xt表示輸入神經網絡的向量。算法運行時首先根據前一時刻的隱藏狀態和當前時刻的輸入向量計算遺忘向量:

圖3 LSTM 神經網絡框圖

之后根據前一時刻的隱藏狀態和當前時刻的輸入向量計算輸入門向量和臨時細胞狀態:

接著計算當前時刻長期細胞狀態:

最后計算輸出門向量和當前時刻隱藏狀態:


為實現增強長期細胞狀態的目的,在式(3) 之后添加操作:

其中,fE為加入的長期細胞狀態增強單元,其設置方式會在下文詳細陳述。依次將原來的式(4) 改為:

考慮到經過遺忘門之后的長期細胞狀態向量的數值均是處于[-1,1]區間,因此增強方式設置為:

用戶的短期興趣、用戶近期接觸過的項目可反應用戶的當前需求,而且Tang[21]、Hidasi[22]、Auley[23]證實用戶下一時刻可能會有所接觸的項目與其近期接觸過的項目有很強的關聯性。
本文利用注意力機制為提取用戶短期興趣的基礎模型。假設用戶的短期興趣可以從連續的三條瀏覽記錄(item1,item2,item3) 中提取出來,三條記錄經過編碼形成向量X1,X2,X3,之后,三個向量分別根據不同的參數WQi,Wki,WVi(i=1,2,3) 計算出各自的Queries 向量、Keys 向量、Values 向量,并合并成矩陣形式,之后經過下述公式計算每條記錄的自注意力值。

其中Q、K、V為根據X1、X2、X3向量分別為Queries向量、Keys 向量、Values 向量合并后的矩陣,dk為一條瀏覽記錄的長度。Z*為最終計算出的各項目所反映的用戶短期興趣向量組合而成的矩陣。
最終產生的用戶短期興趣應可以反映用戶該短時間內的整體興趣,同時顯示出用戶短期興趣的變化趨勢。以各項目所反應的用戶短期興趣向量直接相加的方式來實現,即:

式中的Zi表示的是第i條瀏覽記錄所反映的用戶短期興趣,i具有時間特性,即i越大越接近當前時刻,Zi所表示的興趣越接近用戶當前興趣。仔細思考就會發現當多個的Zi疊加時,當前用戶短期興趣的趨勢隨著Zi的疊加而被稀釋。為解決此問題,本文對short_interest 進行改進,具體改進方式為,按順序對各瀏覽記錄所表示的短期興趣添加權重,時間越靠后的用戶短期興趣分配的權重越大,由公式表示為:

以此來按時間先后分配興趣向量在短期興趣構成中的比重,并將最終模型稱為T-self-attention 。
本文通過將長短期興趣提取模塊嵌入DDPG 算法的Actor 網絡中,以此來達到在訓練Actor 網絡的同時對長短期興趣提取模塊網絡參數進行更新的目的,圖4 展示了Actor 網絡的改進方式。

圖4 Actor 網絡改進圖
如圖4 所示在算法運行過程中首先由長期興趣模塊和短期興趣模塊產生長期興趣和短期興趣,之后將長短期興趣進行拼接,產生用戶的興趣向量,并將該向量作為狀態輸入Actor 網絡,之后Actor 網絡根據該狀態產生動作。算法1 中給出DDPG -LA的算法偽代碼,算法2 中給出了狀態產生模塊的偽代碼。


本文在訓練和測試階段均遵循以下規則: 用戶瀏覽序列記為:Su=(I1,I2,I3,…,I|Su|),其中Ii表示用戶所瀏覽項目的第i個記錄。將每個用戶瀏覽記錄的前0.8*|Su| 作為訓練集,將剩余數據作為測試數據,訓練時將訓練集中的瀏覽記錄以用戶為單位依次輸入模型中,針對每個記錄模型預測記錄所包含的電影的評分,并根據真實評分與預測評分的差距計算出獎勵值反饋給智能體,算法根據獎勵值對模型進行優化。測試時的操作與訓練時相似,但沒有模型優化操作。
硬件條件:AMD Ryzen 74800H with Radeon Graphics 2.9 GHz+16 GB 內存
軟件條件:Windows 10 +TensorFlow ==2.5.0 +Python==3.8
數據條件: 本文算法在Movielens 的兩個公開數據集進行測試,數據集信息如表1 所示。

表1 數據集信息
ML-1M 和ML-100K 數據集均為電影評分數據集,且均包含10個字段,為方便處理本文只取其中較為關鍵的7個字段,分別為user_id 、Gender 、Age 、Occupation、item_id、Genres、time-stamp,在整理數據時為消除個字段數據的量綱差異對結果產生的影響,本文將user_id 、Age、item_id、time-stamp 、按字段進行歸一化處理,同時由于Gender 、Occupation 、Genres 為多值字符型字段,因此為計算便利本文分別將其處理為獨熱(one-hot) 編碼的形式。
(1) 動作空間設計
本文對原始評分進行歸一化處理,將取值范圍映射到[0,1]區間,變為(0,0.25,0.5,0.75,1)。同時在算法全連接層利用sigmoid 激活函數將結果映射到[0,1]區間,以每次產生的具有連續性的浮點型數據作為動作,即預測的電影評分。因此本模型的動作空間為處于[0,1]區間的連續空間。
(2) 狀態空間設計
本文把用戶瀏覽記錄作為一種觀察,按時間順序經過長期興趣和短期興趣提取模塊進行興趣提取后,把提取的興趣作為狀態。簡要過程如圖5 所示。

圖5 狀態產生簡圖
(3) 獎勵函數設計
設計獎勵函數時本文以預測評分與真實評分的差值作為標準,指導智能體的優化方向。具體設計方式為:

其中pre_score 表示預測評分,real_score 表示真實評分,abs 表示取絕對值符號。獎勵函數可以理解為:預測評分與真實評分差距越大智能體獲得的獎勵越小,差距越小獲得的獎勵越大。
(1) 數據處理
本文在訓練階段和測試階段均是以用戶為單位對數據進行運算,將每個用戶的數據按4 :1 分為訓練數據和測試數據。同時在提取用戶短期興趣時,本文設置以5個記錄為一個提取單位,在測試時本文設置在短期興趣提取模塊的數據池存滿數據之后才開始進行預測。
(2) 評價指標
本文在觀察算法的性能時主要通過智能體獲得的回報趨勢來觀察算法最終是否能收斂,在測試算法的收斂性時由于單個用戶的測試結果具有偶然性,并不能反映算法的整體性能,因此本文收集測試時每個用戶的每條記錄智能體獲得的獎勵,并通過計算收集的數據的均值來反映算法的收斂性。因此最終用于測試的獎勵的形式為:

其中rij表示智能體在對測試集中第i個用戶的第j個記錄中的電影評分進行預測時所獲得的獎勵,n表示測試集中所有記錄的數目。利用評分類算法的通用測試指標均方根誤差(RMSE) 和平均絕對誤差(MAE) 來測試算法的有效性。RMSE 和MAE 的表示方式為:

(3) 基線
為更好的顯示本文所提算法DDPG-LA 的有效性,用以下基線算法作為對比。
①KNNBasic[24]。該算法是解決未知物品u的評價問題,其只需要找到K個與u相似的已物品,之后通過K個已知物品再對m進行評估。
②KNNWithMeans[25]。該算法的基本假設是用戶對物品的評分有高有低,考慮每個用戶對物品評分的均值或者每個物品得分的均值,去除參考用戶打分整體偏高或者偏低的影響。
③KNNBaseline[26]。該算法考慮到計算的偏差,偏差的計算是基于Baseline 的。
④SVD[27]該方法首先將用戶的評分矩陣分解為用戶隱向量矩陣和物品隱向量,在預測用戶對某一物品的評分時直接用用戶隱向量與物品隱向量進行內積運算即可得出用戶對物品的預測評分。
⑤SVD++[28]。該算法是在SVD 模型的基礎上加入了用戶對物品的隱式行為。此時可以認為評分=顯式興趣+ 隱式興趣+ 用戶對物品的偏見。
⑥NMF[29]。該算法的思想是,對于任意給定的非負矩陣A,NMF 算法可以求出一個非負矩陣U和一個非負矩陣V,即將一個非負矩陣分解為兩個非負矩陣的乘法形式。該算法用于推薦時,已知用戶信息矩陣、物品信息矩陣以及用戶對物品的評分,利用該算法可以預測用戶對其他未知物品的評分。
(4) 模塊組合算法
DDPG-LA 算法中嵌入了長期興趣提取模塊和短期興趣提取模塊,為體現DDPG-LA 算法的優越性,分別將不同模塊進行組合實驗,并將最終實驗結果與本文提出的算法進行比較。用于對比的算法分別為:
①DDPG+RLSTM 。該算法將用戶短期興趣提取模塊T-self-attention 從整體算法中去除,只保留用戶長期興趣提取模塊。
②DDPG+LSTM 。該算法將該算法將用戶短期興趣提取模塊T -self -attention 從整體算法中去除,只保留用戶長期興趣提取模塊,并將模塊中的狀態增強機制進行去除。
③DDPG+T_self_attention 。該算法將用戶長期興趣提取模塊RLSTM 進行去除,僅保留用戶短期興趣提取模塊。
④DDPG+self_attention 。該算法將用戶長期興趣提取模塊RLSTM 進行去除,僅保留用戶短期興趣提取模塊,同時去除該模塊中用戶解決興趣被稀釋問題的機制。
⑤DDPG+RLSTM+self_attention 。該算法保留了用戶長期興趣提取模塊和用戶短期興趣提取模塊,但是去除了用戶短期興趣提取模塊中用于解決用戶興趣被稀釋問題的機制。
⑥DDPG +LSTM +T_self_attention 。該算法保留了用戶長期興趣提取模塊和用戶短期興趣提取模塊,但是去除了用戶長期興趣提取模塊中用狀態增強機制。
⑦DDPG+LSTM+self_attention 。該算法保留了用戶長期興趣提取模塊和用戶短期興趣提取模塊,但是去除了用戶短期興趣提取模塊中用于解決用戶興趣被稀釋問題的機制和用戶長期興趣提取模塊中的狀態增強機制。
(1) 整體性能比較
具體的,實驗在mL - 1m 和mL - 100k 兩個數據集上進行,主要收集DDPG - LA 算法以及模塊組合算法在測試時每次預測的電影評分與用戶的真實評分的差值,利用差值計算每個算法的平均RMSE(Ave_RMSE) 和MAE(Ave_MAE)。同時也對基線算法進行測試,并直接收集平均RMSE 和MAE 。實驗結果如表2 所示。
將最好的表現結果突出表示,從表2 中可發現無論在mL-1m 數據集還是在mL-100k 數據集本文提出的DDPG -LA 算法在Ave_RMSE 和Ave_MAE 上的結果均要優于其他算法。另外,所有的模塊組合算法除DDPG+RLSTM+self_attention 算法在mL-100k數據集上的Ave_MAE 值略遜于一些基線算法外,其他算法的最終效果均優于基線算法,從而說明DDPG-LA 算法以及模塊組合算法相對于基線算法是具有優越性的。

表2 實驗結果對比
然而,DDPG -LA 算法以及模塊組合算法在mL-100k 上測試的整體效果不如在mL-1m 上的測試效果,且算法DDPG+RLSTM+self_attention 在mL-100k上的Ave_MAE 值甚至低于大部分基線算法。這種整體表現是由于用戶瀏覽記錄數目造成的,當參與模型訓練的用戶瀏覽記錄數據越多,模型越可以清晰地捕捉用戶的興趣,而在mL -100k 數據集中,每個用戶的瀏覽記錄數目要少于mL-1m 中每個用戶的瀏覽記錄數目,因此,興趣提取模塊可以更好地捕捉mL-1m 數據集中的用戶興趣,從而實現更精準的預測。同時DDPG-LA 算法和模塊組合算法所表現出的這種現象與基線算法在兩個數據集上的測試整體效果類似,均是在mL-1m 數據集上表現更好,從而證明DDPG-LA 算法以及模塊組合算法的正確性。
表3 和表4 分別展示了各算法相對于基線算法分別在兩個數據集上的Ave_RMSE 和Ave_MAE提升值。
表3 和表4 中無符號數均為正數,通過兩表可以看出在mL-1m 數據集上,DDPG-LA 算法的Ave_RMSE 值比最差性能的基線算法KNNWithMeans 高0.5287,Ave_MAE 值高0.5097,比最好性能的基線算法SVD++ 的Ave_RMS-E 值高0.4608,Ave_ MAE值高0.4431 。在mL-100k 數據集上,DDPG-LA 算法的Ave_RMSE 值比最差性能的基線算法KNNB asic高0.7348,Ave_MAE 值高0.6612,比最好性能的基線算法SVD ++ 的Ave_RMSE 值高0.6753,Ave_MAE值高0.6097 。同時模塊組合算法除DDPG+RLSTM+self_attention 在mL -100k 上的Ave_MAE 值略遜于部分基線算法外,其他算法的測試效果均較基線算法有很大提升。

表3 DDPG-LA 與模塊組合算法在Ave_RMSE 上的提升值
因此,經過對表2 、表3 、表4 的分析,以用戶興趣提取為基礎的深度強化學習算法性能均要由于基線算法。

表4 DDPG-LA 與模塊組合算法在Ave_MAE 上的提升值
(2) 算法收斂性分析
該部分實驗主要收集算法測試時智能體每次預測電影評分后可獲得的獎勵值Reward,以及每輪預測可獲得的RMSE 和MAE 值,通過觀察這些評價指標的值的趨勢來分析算法的收斂性。同時,為了整體評估算法的收斂性,本文以每輪的平均收益Ave_Reward 的變化趨勢為觀察對象對算法進行分析。圖6 展示了DDPG-LA 算法與各模塊組合算法的Ave_Reward 值在mL-1m 和mL-100k 兩個數據集上隨訓練次數的增加而變化的趨勢圖。
由圖6 可知,所有算法在mL - 1m 上測試的整體效果要好于在mL-100k 上測試的整體效果,該原因已在整體性能部分進行了分析。在兩圖中DDPGLA 算法均具有最好的表現,但是也存在一些問題:

圖6 Ave_Reward 趨勢圖
(1) 在mL-1m 中,該算法最終收斂的高度要高于其他算法,但是這種優勢并沒有很明顯,DDPG+Rlstm、DDPG+Rlstm+self_attention 算法均與之較為接近;
(2) 而在mL - 100k 中,DDPG - LA 算法的收斂高度要遠高于其他算法,同時DDPG + T_self_attention 、DDPG+self_attention 算法也具有很好的表現。
分析認為,在mL-1m 數據集中每個用戶均有數量較多的瀏覽記錄,而在mL-100k 中每個用戶的瀏覽記錄數則相對很少,因此在mL-1m 數據集上訓練時,算法可以更好地學習到用戶的長期興趣,使得長期興趣在用戶的整體興趣中占主導地位,且長期興趣建模中的狀態增強機制使得算法對于用戶的長期興趣建模能力更強,因此DDPG+Rlstm 、DDPG+Rlstm+self_attention 算法可以取得很好的結果;而在mL-100k 數據集上訓練時,由于每個用戶的的瀏覽記錄相對很少,因此算法對用戶長期興趣的學習效果則并不好,這使得用戶的短期興趣在用戶的整體興趣中較為突出,也因此DDPG+T_self_attention、DDPG+self_attention 算法效果較好。同時由于DDPG-LA 算法同時嵌入了Rlstm 和T_self_attention 模塊,因此在兩個數據集中均具有最好的收斂效果。
(3) 折扣因子γ 對比分析
在實驗過程中為得到最好的實驗結果,本文嘗試各種不同的折扣因子值,并通過最終結果直觀展示各折扣因子的效果。圖7 分別展示了在兩個數據集上10個不同折扣因子值的平均獎勵(Ave_Reward)趨勢。
觀察圖7 中γ =0.99 曲線所得到的Ave_Reward變化趨勢,可以發現在mL - 1m 和mL -100k 兩個數據集上測試的結果均是最好的。且通過對比各曲線的高低,發現γ 值從小到大變化時曲線高度也隨著值的變化而呈正相關變化,圖8 給出了這種相關性變化得趨勢。
Total_Ave_Reward 值表示不同γ 值下每輪測試平均Reward 的平均值,即:

式中n 表示測試輪數。圖7 和圖8 表明不同的折扣因子對算法最終收斂時是有影響的,且呈正相關。

圖7 不同γ 值Ave_Reward 趨勢圖

圖8 不同γ 值下Total_Ave_Reward 值得變化趨勢
本文提出一種直接對用戶興趣進行建模的深度強化學習算法DDPG -LA,DDPG -LA 算法引入長短期興趣提取模塊分別對用戶的長期興趣和短期興趣進行顯式建模,并將長期興趣和短期興趣組合成用戶的綜合興趣,智能體直接利用綜合興趣進行學習。同時本文在長期興趣提取模塊中加入狀態增強單元,以加速模塊對用戶長期興趣的建模;在短期興趣提取模塊中加入解決用戶興趣被稀釋問題的機制,以使得提取到的用戶短期興趣更加精確。DDPG -LA 算法由于增加了用戶的長短期興趣提取模塊,使得算法的運行速度大大降低,這會增加系統的響應時間,而對于大規模推薦系統,這種相應時間的延遲將是不可容忍的。因此,下一步的研究重點將是在保持算法高精確度的情況下提升算法的運行速度,尋求對用戶長短期興趣進行同步提取的創新算法,以加速算法的響應速度。