入门:现实世界中的推荐系统(术语、技术等)
作者:Parul Pandey? ? ? ??編譯:ronghuaiyang
導讀
推薦系統(tǒng)pipeline的構建過程和總體架構描述。
選擇太少不好,但是選擇太多也不是什么好事
你聽說過著名的果醬實驗嗎?2000 年,哥倫比亞大學和斯坦福大學的心理學家 Sheena Iyengar 和 Mark Lepper 在他們的實地實驗基礎上提出了一項研究。在平常的一天,消費者在當?shù)厥称肥袌龅母邫n雜貨店購物時,會看到一個展示 24 種果醬的品嘗攤位。前幾天,同一個攤位只展示了 6 種果醬。這個實驗是為了判斷哪個攤位的銷量會更高,并假設更多種類的果醬會吸引更多的顧客,從而獲得更多的生意。然而,一個奇怪的現(xiàn)象被觀察到。盡管有 24 種果醬的柜臺更能吸引顧客的興趣,但與只有 6 種果醬的柜臺相比,它們的轉(zhuǎn)化率相當?shù)?大約低 10 倍)。
到底發(fā)生了什么?似乎選擇很多看起來很吸引人,但這種選擇過多有時可能會讓客戶感到困惑和阻礙。因此,即使網(wǎng)上商店可以獲得數(shù)百萬件商品,如果沒有良好的推薦系統(tǒng),這些選擇可能弊大于利。
現(xiàn)在讓我們更深入地了解一下它的架構和與推薦系統(tǒng)相關的各種術語。
術語和架構 Terminology & Architecture
讓我們來看看一些與推薦系統(tǒng)相關的重要術語。
物品/文件
這些是系統(tǒng)推薦的實體,比如 Netflix 上的電影、Youtube 上的視頻和 Spotify 上的歌曲。
查詢/上下文
系統(tǒng)利用一些信息來推薦上述項目,這些信息構成查詢。查詢還可以是下列各項的組合:
用戶信息,其中可能包括用戶 id 或用戶以前與之交互的物品。
一些額外的上下文,如用戶的設備,用戶的位置等。
嵌入
嵌入是一種將分類特征表示為連續(xù)值特征的方法。換句話說,嵌入是高維向量到低維空間(稱為嵌入空間)的轉(zhuǎn)換。在這種情況下,要推薦的查詢或物品必須映射到嵌入空間。許多推薦系統(tǒng)依賴于學習一個適當?shù)牟樵兒臀锲返那度氡硎尽?/strong>
總體架構
推薦系統(tǒng)的一般架構包括以下三個主要部分:
1. 候選生成
這是推薦系統(tǒng)的第一階段,從用戶過去的活動中獲取事件作為輸入,并從大型語料庫中檢索一小部分(數(shù)百個)視頻。主要有兩種常見的候選生成方法:
基于內(nèi)容的過濾
基于內(nèi)容的過濾涉及到根據(jù)項目本身的屬性來推薦物品。系統(tǒng)會推薦與用戶過去喜歡的內(nèi)容相似的內(nèi)容。
協(xié)同過濾
協(xié)同過濾依賴于用戶-物品的交互,依賴于相似的用戶喜歡相似的東西的概念,例如購買了這個物品的顧客也購買了這個。
2. 打分
這就構成了第二階段,在這一階段,另一個模型進一步對候選人進行排名和打分,通常以 10 分為標準。例如,在 Youtube 的例子中,排名網(wǎng)絡通過使用一組描述視頻和用戶的豐富特征,根據(jù)期望的目標函數(shù)為每個視頻分配分數(shù),從而完成這項任務。得分最高的視頻將根據(jù)用戶的得分進行排序,然后呈現(xiàn)給用戶。
3. 重排
在第三階段,系統(tǒng)考慮額外的約束,以確保多樣性、新鮮度和公平性。例如,系統(tǒng)會刪除用戶之前明確不喜歡的內(nèi)容,并考慮到網(wǎng)站上的所有的新內(nèi)容。
一個典型推薦系統(tǒng)的總體結構相似性度量
你如何辨別一個物品是否與另一個相似?事實證明,基于內(nèi)容的過濾和協(xié)同過濾技術都使用了某種相似性度量。讓我們來看兩個這樣的度量標準。
考慮兩部電影 —— movie1 和 movie2,它們屬于兩個不同的類型。讓我們在 2D 圖上繪制電影,如果電影不屬于某個類型,則賦值為 0,如果電影屬于某個類型,則賦值為 1。
這里,電影 1(1,1)同時屬于類型 1 和類型 2,而電影 2 只屬于類型 2(1,0)。這些位置可以被認為是向量,這些向量之間的角度說明了它們之間的相似性。
余弦相似度
它是兩個向量夾角的余弦,similarity(movie1,movie2) = cos(movie1,movie2) = cos 45 大概是 0.7。余弦相似度為 1 表示相似度最高,余弦相似度為 0 表示不相似。
內(nèi)積
兩個向量的點積是角的余弦乘以范數(shù) i 的乘積。similarity(movie1,movie2) = ||movie1|| ||movie 2|| cos(movie1,movie2).
推薦系統(tǒng) Pipeline
典型的推薦系統(tǒng) pipeline 包括以下五個階段:
一個典型的推薦系統(tǒng)管道假設我們正在構建一個電影推薦系統(tǒng)。該系統(tǒng)不知道用戶或電影的先驗知識,只知道用戶通過對電影進行評級而與電影之間的互動。這里有一個 dataframe,它由電影 ID、用戶 ID 和電影的評級組成。
電影評級Dataframe由于我們只有評級,沒有其他信息,我們將使用協(xié)同過濾為我們的推薦系統(tǒng)。
1. 預處理
效用矩陣轉(zhuǎn)換
我們需要首先將電影評分數(shù)據(jù)轉(zhuǎn)換成一個用戶-物品矩陣,也稱為效用矩陣。
矩陣的每個單元格都由用戶對電影的評分來填充。這個矩陣通常表示為一個scipy 稀疏矩陣,因為許多單元是空的,因為沒有對特定的電影進行任何評級。如果數(shù)據(jù)是稀疏的,那么協(xié)同過濾就不能很好地工作,因此我們需要計算矩陣的稀疏性。
如果稀疏性值約為 0.5 或更多,那么協(xié)同過濾可能不是最佳解決方案。這里要注意的另一點是,空單元格實際上表示新用戶和新電影。因此,如果有較高比例的新用戶,那么我們可能會考慮使用其他一些推薦方法,如基于內(nèi)容的過濾或混合過濾。
歸一化
總會有一些用戶的評價過于積極(通常是 4 或 5 分)或過于消極(每個電影的評價都是 1 或 2 分)。這可以通過采取平均歸一化來實現(xiàn)。
2. 模型訓練
數(shù)據(jù)預處理后,我們需要開始模型構建過程。矩陣分解是一種常用的協(xié)同過濾技術,雖然也有其他方法,如鄰域方法。以下是涉及的步驟:
分解用戶-物品矩陣,得到 2 個潛因子矩陣 —— 用戶-因子矩陣和物品-因子矩陣。
用戶評分是由人生成的電影的特征。這些特征是可以直接觀察到的,我們認為它們很重要。然而,也有一些特定的特征是不能直接觀察到的,但在評級預測中也很重要。這些隱藏的特征被稱為潛特征。
潛特征可以被認為是用戶和項目之間交互的基礎特征。本質(zhì)上,我們并不清楚每個潛特征代表什么,但可以假設一個特征可能代表用戶喜歡喜劇電影,另一個潛特征可能代表用戶喜歡動畫電影,等等。
通過這兩個潛矩陣的內(nèi)積來預測缺失評級。
潛因子這里用K表示。此重建矩陣填充原始的用戶-物品矩陣中的空單元格,因此未知評級現(xiàn)在已知。
但是我們?nèi)绾螌崿F(xiàn)上面所示的矩陣分解呢?事實證明,有很多方法可以做到這一點,使用下面的方法之一:
交替最小二乘(ALS)
隨機梯度下降法(SGD)
奇異值分解(SVD)
3. 超參數(shù)優(yōu)化
在調(diào)整參數(shù)之前,我們需要挑選一個評估指標。推薦的一個流行的評估指標是精度(Precision at K),它查看最前面的 K 個推薦,并計算這些推薦中與用戶實際相關的比例。
因此,我們的目標是找到在 K 或任何其他需要優(yōu)化的評估指標上具有最佳精度的參數(shù)。一旦找到了這些參數(shù),我們就可以重新訓練我們的模型來獲得我們的預測評級,我們可以使用這些結果來生成我們的推薦。
4. 后處理
然后,我們可以對所有預測的評級進行排序,并為用戶獲得前 N 個推薦。我們還希望排除或過濾掉用戶以前已經(jīng)交互過的物品。就電影而言,推薦用戶以前看過或不喜歡的電影是沒有意義的。
5. 評估
我們之前已經(jīng)討論過這個問題了,現(xiàn)在讓我們更詳細地討論一下。評估任何推薦系統(tǒng)的最佳方法是在實際系統(tǒng)上進行測試。像A/B 測試這樣的技術是最好的,因為可以從真實的用戶那里得到實際的反饋。然而,如果這是不可能的,那么我們不得不求助于一些離線評估。
在傳統(tǒng)的機器學習中,我們將原始數(shù)據(jù)集分割,創(chuàng)建一個訓練集和一個驗證集。然而,這對推薦模型不起作用,因為如果我們在一個單獨的用戶群上訓練所有數(shù)據(jù),并在另一個用戶群上驗證數(shù)據(jù),模型就不會起作用。所以對于推薦系統(tǒng),我們實際上做的是在矩陣中隨機掩蓋一些已知的評級。然后我們通過機器學習來預測這些掩蓋的評級,然后將預測評級與實際評級進行比較。
離線評估推薦系統(tǒng)之前我們討論了精度作為評估指標。這里有一些其他的可以使用。
Python 庫
有許多專門為推薦目的而創(chuàng)建的 Python 庫。以下是最受歡迎的一些:
Surprise[1]:一個 Python scikit 構建和分析推薦系統(tǒng)。
Implicit[2]:針對隱式數(shù)據(jù)集的快速 Python 協(xié)同過濾。
LightFM[3]: Python 實現(xiàn)了許多隱式和顯式反饋的流行推薦算法。
pyspark.mlib.recommendation[4]: Apache Spark 上的機器學習 API。
結論
在本文中,我們討論了推薦系統(tǒng)在縮小選擇范圍方面的重要性。我們還介紹了推薦系統(tǒng)的設計和構建過程。Python 實際上簡化了這一過程,為此提供了對大量專用庫的訪問。試著用一個來建立你自己的個性化推薦引擎。
參考資料
[1]
Surprise:?http://surpriselib.com/
[2]Implicit:?https://implicit.readthedocs.io/en/latest/quickstart.html
[3]LightFM:?https://lyst.github.io/lightfm/docs/home.html
[4]pyspark.mlib.recommendation:?https://spark.apache.org/docs/2.1.1/api/python/_modules/pyspark/mllib/recommendation.html
—END—
英文原文:https://towardsdatascience.com/recommendation-systems-in-the-real-world-51e3948772f3
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)備注:加入本站微信群或者qq群,請回復“加群”獲取一折本站知識星球優(yōu)惠券,請回復“知識星球”喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的入门:现实世界中的推荐系统(术语、技术等)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [论文浅析]ICLR2017 跨语言,跨
- 下一篇: 自编码AutoEncoder 及PyTo