爲何google搜索 」idiot「 後,會出現特朗普的照片?html
「咱們已經爬取和存儲了數十億的網頁拷貝在咱們相應的索引位置。因此,你輸入一個關鍵字,咱們將關鍵詞與網頁進行匹配,並根據200多個因子對其進行排名,這些因子包括相關性、新鮮度、流行度、PageRank值、查詢和文檔匹配的單詞個數、網頁URL連接地址長度以及其餘人對排序結果的滿意度等。在此基礎上,在任何給定的時間,咱們嘗試爲該查詢排序並找到最佳結果。」算法
—— GoogleCEO: 桑達爾·皮查伊 數組
最先主要是利用詞頻、逆文檔頻率和文檔長度這幾個因子來人工擬合排序公式。由於考慮因素很少,由人工進行公式擬合是徹底可行的,此時機器學習並不能派上很大用場,由於機器學習更適合採用不少特徵來進行公式擬合。此外,對於有監督機器學習來講,首先須要大量的訓練數據,在此基礎上纔可能自動學習排序模型,單靠人工標註大量的訓練數據不太現實。機器學習
對於搜索引擎來講,儘管沒法靠人工來標註大量訓練數據,可是用戶點擊記錄是能夠當作機器學習方法訓練數據的一個替代品,好比用戶發出一個查詢,搜索引擎返回搜索結果,用戶會點擊其中某些網頁,能夠假設用戶點擊的網頁是和用戶查詢更加相關的頁面。函數
機器學習排序系統由4個步驟組成:post
定義:單文檔方法的處理對象是單獨的一篇文檔,將文檔轉換爲特徵向量後,機器學習系統根據從訓練數據中學習到的分類或者回歸函數對文檔打分,打分結果便是搜索結果。學習
Score(Q, D)=a×CS+b×PM+c×PR+d 搜索引擎
對於某個新的查詢Q和文檔D,系統首先得到其文檔D對應的3個特徵的特徵值,以後利用學習到的參數組合計算二者得分,當得分大於設定的閾值,便可判斷文檔是相關文檔,不然判斷爲不相關文檔。 google
對於左、右兩張圖,按照pointwise的思想,則認爲這兩條樣本 i 和 j 都被點擊,所以label都是1。但在右圖包含更重要的信息 :用戶只點了紅框內的酒店,而沒有點黃框內的酒店(右圖黃框內的酒店和左圖點擊紅框的酒店一致)。這說明樣本 j 的 label應該比樣本 i 的label大(樣本 j 排名比樣本 i 更靠前),很顯然,pointwise並無利用到這個信息。url
對於搜索任務來講,系統接收到用戶查詢後,返回相關文檔列表,因此問題的關鍵是肯定文檔之間的前後順序關係。
單文檔方法(PointWise Approach)徹底從單個文檔的分類得分角度計算,沒有考慮文檔之間的順序關係。
文檔對方法(PairWise Approach)則將重點轉向了對文檔順序關係是否合理進行判斷。之因此被稱爲文檔對方法,是由於這種機器學習方法的訓練過程和訓練目標,是判斷任意兩個文檔組成的文檔對<Doc1,Doc2>是否知足順序關係,即判斷是否Doc1應該排在Doc2的前面。
根據轉換後的訓練實例,就能夠利用機器學習方法進行分類函數的學習: 輸入一個查詢和文檔對<Doc1,Doc2>,機器學習排序可以判斷這種順序關係是否成立,若是成立,那麼在搜索結果中Doc1應該排在Doc2前面,不然Doc2應該排在Doc1前面。經過這種方式,就完成搜索結果的排序任務。
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散度等。
BPR算法的五個核心知識點:
其中,完整性,反對稱性和傳遞性的定義以下:
在推薦系統中,排序算法一般完成對候選商品的二次篩選,也叫Reranking。這裏的BPR算法借鑑了召回步驟中協同過濾算法的思想: 矩陣分解 。
對於用戶u:
對於全部用戶:
其中用戶矩陣W:
物品矩陣H:
BPR算法採用的是最大化後驗機率來估計參數(關於什麼是最大化後驗機率,可移步個人另一篇文章:似然與機率的異同),所以,這裏用到了貝葉斯公式。
以前已經假設每一個用戶之間的偏好行爲相互獨立,同一用戶對不一樣物品的偏序相互獨立,因此:
δ(b)函數返回1 若是條件b成立, 不然返回0。D爲訓練集, (u,i,j) 表示關係,即相對於j,用戶u更喜歡 i 。
因爲知足完整性和反對稱性,因此上式可簡化爲:
其中,δ()爲sigmod函數,用戶 u 相比於 j 更喜歡 i 經過藉助用戶 u 對 i 的喜歡程度與對 j 的喜歡程度的差進行度量。
所以, 可表示爲:
目標是求解θ。 因爲採用最大後驗估計來學習參數,因此假設θ服從正態分佈:
根據機率密度函數,求得:
關於這個等式的推導,筆者嘗試將機率分佈帶入到機率密度函數中,發現並不能推導出來,可是因爲存在正比關係,因此能夠近似等於。
因此,最終的後驗機率估計函數爲:
經過最大化這個函數,能夠求出參數W和H。
網上開源的BPR代碼有不少,這裏着重表達一下用戶embedding矩陣和物品embedding矩陣,以及損失函數的構造。其中損失函數爲最小化上一小節的最大後驗機率函數。
回顧Bayesian Personalized Ranking 算法,有如下三點值得回味:
1. θ的正態分佈(先驗)形式:
之因此這樣設計,筆者覺得有兩點:一是方便取對數、二是能與正則化聯繫起來。
2. 用戶 u 相比於 j 更喜歡 i 經過藉助用戶 u 對 i 的喜歡程度與對 j 的喜歡程度的差進行度量。這固然是最直觀的表示方法,固然也能夠加以改進。
3. 萬物皆可embedding !經過對用戶以及物品分別構造embedding向量,從而完成用戶對物品喜愛程度的計算。