Bayesian Personalized Ranking 演算法解析及Python實現
1. Learning to Rank
1.1 什麼是排序演算法
為什麼google搜索 」idiot「 後,會出現特朗普的照片?
「我們已經爬取和存儲了數十億的網頁拷貝在我們相應的索引位置。因此,你輸入一個關鍵字,我們將關鍵詞與網頁進行匹配,並根據200多個因子對其進行排名,這些因子包括相關性、新鮮度、流行度、PageRank值、查詢和文檔匹配的單詞個數、網頁URL鏈接地址長度以及其他人對排序結果的滿意度等。在此基礎上,在任何給定的時間,我們嘗試為該查詢排序並找到最佳結果。」
—— GoogleCEO: 桑達爾·皮查伊
1.2 排序演算法的發展
1.2.1 早期排序技術
最早主要是利用詞頻、逆文檔頻率和文檔長度這幾個因子來人工擬合排序公式。因為考慮因素不多,由人工進行公式擬合是完全可行的,此時機器學習並不能派上很大用場,因為機器學習更適合採用很多特徵來進行公式擬合。此外,對於有監督機器學習來說,首先需要大量的訓練數據,在此基礎上才可能自動學習排序模型,單靠人工標註大量的訓練數據不太現實。
1.2.2 基於機器學習的排序技術
對於搜索引擎來說,儘管無法靠人工來標註大量訓練數據,但是用戶點擊記錄是可以當做機器學習方法訓練數據的一個替代品,比如用戶發出一個查詢,搜索引擎返回搜索結果,用戶會點擊其中某些網頁,可以假設用戶點擊的網頁是和用戶查詢更加相關的頁面。
1.3 Learning to Rank(LTR)
機器學習排序系統由4個步驟組成:
- 人工標註訓練數據
- 文檔特徵抽取
- 學習分類函數
- 在實際搜索系統中採用機器學習模型
2. PointWise Approach
定義:單文檔方法的處理對象是單獨的一篇文檔,將文檔轉換為特徵向量後,機器學習系統根據從訓練數據中學習到的分類或者回歸函數對文檔打分,打分結果即是搜索結果。
Score(Q, D)=a×CS+b×PM+c×PR+d
對於某個新的查詢Q和文檔D,系統首先獲得其文檔D對應的3個特徵的特徵值,之後利用學習到的參數組合計算兩者得分,當得分大於設定的閾值,即可判斷文檔是相關文檔,否則判斷為不相關文檔。
3. PairWise Approach
對於左、右兩張圖,按照pointwise的思想,則認為這兩條樣本 i 和 j 都被點擊,因此label都是1。但在右圖包含更重要的信息 :用戶只點了紅框內的酒店,而沒有點黃框內的酒店(右圖黃框內的酒店和左圖點擊紅框的酒店一致)。這說明樣本 j 的 label應該比樣本 i 的label大(樣本 j 排名比樣本 i 更靠前),很顯然,pointwise並沒有利用到這個信息。
對於搜索任務來說,系統接收到用戶查詢後,返回相關文檔列表,所以問題的關鍵是確定文檔之間的先後順序關係。
單文檔方法(PointWise Approach)完全從單個文檔的分類得分角度計算,沒有考慮文檔之間的順序關係。
文檔對方法(PairWise Approach)則將重點轉向了對文檔順序關係是否合理進行判斷。之所以被稱為文檔對方法,是因為這種機器學習方法的訓練過程和訓練目標,是判斷任意兩個文檔組成的文檔對<Doc1,Doc2>是否滿足順序關係,即判斷是否Doc1應該排在Doc2的前面。
根據轉換後的訓練實例,就可以利用機器學習方法進行分類函數的學習: 輸入一個查詢和文檔對<Doc1,Doc2>,機器學習排序能夠判斷這種順序關係是否成立,如果成立,那麼在搜索結果中Doc1應該排在Doc2前面,否則Doc2應該排在Doc1前面。通過這種方式,就完成搜索結果的排序任務。
- 文檔對方法(PairWise Approach)只考慮了兩個文檔對的相對先後順序,卻沒有考慮文檔出現在搜索列表中的位置。排在搜索結果前列的文檔更為重要,如果前列文檔出現判斷錯誤,代價明顯高於排在後面的文檔。
- 不同的查詢,其相關文檔數量差異很大,所以轉換為只有十幾個對應的文檔對,這對機器學習系統的效果評價造成困難。
4. ListWise Approach
1. 單文檔方法(PointWise Approach)將訓練集里每一個文檔當做一個訓練實例。
2. 文檔對方法(PairWise Approach)將同一個查詢的搜索結果里任意兩個文檔對作為一個訓練實例。
3. 文檔列表方法(ListWise Approach)與上述兩種表示方式不同,是將每一個查詢對應的所有搜索結果列表整體作為一個訓練實例,這也是為何稱之為文檔列表方法的原因。
4. 文檔列表方法根據K個訓練實例(一個查詢及其對應的所有搜索結果評分作為一個實例)訓練得到最優評分函數F。對於一個新的用戶查詢,函數F對每一個文檔打分,之後按照得分順序由高到低排序,就是對應的搜索結果。
對於某個評分函數 f 來說,對3個搜索結果文檔的相關性打分,得到3個不同的相關度得分F(A)、 F(B)和F(C),根據這3個得分就可以計算6種排列組合情況各自的概率值。不同的評分函數,其6種搜索結果排列組合的概率分布是不一樣的。所以可以通過不同的評分函數分布與實際分布比較得出最優的那個評分函數作為排序模型。如何判斷 h 和 f 與虛擬的最優評分函數 g 更接近?一般可以用兩個分布概率之間的距離遠近來度量這種相似性,比如 KL散度等。
5. Bayesian Personalized Ranking
5.1 BPR介紹
- 在推薦系統中,分為召回和排序兩個階段。
- 貝葉斯個性化排序屬於Pairwise Approach。
BPR演算法的五個核心知識點:
- 每個?戶之間的偏好?為相互獨?
- 同??戶對不同物品的偏序,即排序關係相互獨?
- 表??戶u對 I 的偏好?於對 j 的偏好
- 滿?完整性,反對稱性和傳遞性
- 採用最?後驗估計計算參數
其中,完整性,反對稱性和傳遞性的定義如下:
5.2 BPR參數
在推薦系統中,排序演算法通常完成對候選商品的二次篩選,也叫Reranking。這裡的BPR演算法借鑒了召回步驟中協同過濾演算法的思想: 矩陣分解 。
對於用戶u:
對於所有用戶:
其中用戶矩陣W:
物品矩陣H:
5.3 BPR參數計算方法
BPR演算法採用的是最大化後驗概率來估計參數(關於什麼是最大化後驗概率,可移步我的另外一篇文章:似然與概率的異同),因此,這裡用到了貝葉斯公式。
之前已經假設每個用戶之間的偏好行為相互獨立,同一用戶對不同物品的偏序相互獨立,所以:
δ(b)函數返回1 如果條件b成立, 否則返回0。D為訓練集, (u,i,j) 表示關係,即相對於j,用戶u更喜歡 i 。
由於
滿足完整性和反對稱性,所以上式可簡化為:
其中,δ()為sigmod函數,用戶 u 相比於 j 更喜歡 i 通過藉助用戶 u 對 i 的喜歡程度與對 j 的喜歡程度的差進行度量。
因此,
可表示為:
目標是求解θ。 由於採用最大後驗估計來學習參數,所以假設θ服從正態分布:
根據概率密度函數,求得:
關於這個等式的推導,筆者嘗試將概率分布帶入到概率密度函數中,發現並不能推導出來,但是由於存在正比關係,所以可以近似等於。
所以,最終的後驗概率估計函數為:
通過最大化這個函數,可以求出參數W和H。
6. Bayesian Personalized Ranking演算法實現
網上開源的BPR代碼有很多,這裡著重表達一下用戶embedding矩陣和物品embedding矩陣,以及損失函數的構造。其中損失函數為最小化上一小節的最大後驗概率函數。
7. 總結
回顧Bayesian Personalized Ranking 演算法,有以下三點值得回味:
1. θ的正態分布(先驗)形式:
之所以這樣設計,筆者以為有兩點:一是方便取對數、二是能與正則化聯繫起來。
2. 用戶 u 相比於 j 更喜歡 i 通過藉助用戶 u 對 i 的喜歡程度與對 j 的喜歡程度的差進行度量。這當然是最直觀的表示方法,當然也可以加以改進。
3. 萬物皆可embedding !通過對用戶以及物品分別構造embedding向量,從而完成用戶對物品喜好程度的計算。
本博文歡迎轉載,轉載請註明出處和作者。
作者:Bo_hemian
原文:https://www.cnblogs.com/wkang/p/10217172.html
※ES6 Class 類
※python實現並繪製 sigmoid函數,tanh函數,ReLU函數,PReLU函數
TAG:程序員小新人學習 |