很可惜 T 。T 您現(xiàn)在還不是作者身份,不能自主發(fā)稿哦~
如有投稿需求,請把文章發(fā)送到郵箱tougao@appcpx.com,一經(jīng)錄用會有專人和您聯(lián)系
咨詢?nèi)绾纬蔀榇河鹱髡哒埪?lián)系:鳥哥筆記小羽毛(ngbjxym)
導(dǎo)讀:產(chǎn)品經(jīng)理要不要懂技術(shù)?要的!本系列文章將從最簡單的概念開始,逐步講解推薦系統(tǒng)的發(fā)展歷程和最新實踐。以產(chǎn)品經(jīng)理的視角,闡述推薦系統(tǒng)涉及的算法,技術(shù)和架構(gòu)。本章是第二章,將系統(tǒng)性地通過圖文的方式介紹協(xié)同過濾算法。
我有個兄弟,是抖音的點贊狂魔,他的點贊次數(shù)高達6924次,而且他大多數(shù)的贊都是給那些青春靚麗的小姐姐們,如下圖??此亩兑敉扑]內(nèi)容,都是滿目的小姐姐唱啊跳啊不亦樂乎,他也覺得甚爽。不過,好景不長,沒多久他就跟我說:“我再也不敢再點了,我老婆已經(jīng)發(fā)現(xiàn)我給小姐姐們點了上1000個贊,而且知道我點贊的視頻,也會推薦給她”。
把好友看過的視頻推薦給用戶,這就是協(xié)同過濾。準確地說,叫用戶協(xié)同過濾(User Collaborative Filtering)。
協(xié)同過濾(簡稱CF)是推薦系統(tǒng)最重要的思想之一。在早期,協(xié)同過濾幾乎等同于推薦系統(tǒng)。協(xié)同過濾思想產(chǎn)生于1994年,被用于郵件系統(tǒng)上。2001年,亞馬遜用協(xié)同過濾算法來推薦相似商品。
協(xié)同過濾的思想比較簡單,主要有三種:
用戶協(xié)同過濾(UserCF):相似的用戶可能喜歡相同物品。如加了好友的兩個用戶,或者點擊行為類似的用戶被視為相似用戶。如我兄弟和她的太太互加了抖音好友,他們兩人各自喜歡的視頻,可能會產(chǎn)生互相推薦。
物品協(xié)同過濾(ItemCF):相似的物品可能被同個用戶喜歡。這個就是著名的世界杯期間沃爾瑪尿布和啤酒的故事了。這里因為世界杯期間,奶爸要喝啤酒看球,又要帶娃,啤酒和尿布同時被奶爸所需要,也就是相似商品,可以放在一起銷售。
模型協(xié)同過濾:使用矩陣分解模型來學(xué)習(xí)用戶和物品的協(xié)同過濾信息。一般這種協(xié)同過濾模型有:SVD,SVD++等。這種協(xié)同過濾要比前兩個來得抽象些,這里先不解釋,后面詳述。
下面按照物品協(xié)同過濾,用戶協(xié)同過濾和模型協(xié)同過濾的順序,詳細解釋這幾種算法。
2003年,亞馬遜發(fā)表了一篇論文,闡述了他們?nèi)绾斡梦锲穮f(xié)同過濾算法(Item-to-Item Collaborative Filtering),搭建他們“看了又看”功能。如下圖:
這是17年前的截圖,圖跟紙質(zhì)老照片那樣變得斑駁。圖中是在購物車關(guān)聯(lián)頁面的相關(guān)推薦。那么,這個協(xié)同過濾推薦是如何做計算出來的呢?
前面第一章說到,人工智能實踐過程三個步驟:數(shù)據(jù),學(xué)習(xí)和決策。這里也將用同樣步驟,以圖書銷售推薦為例,解釋物品協(xié)同過濾的過程。為了簡單化,假設(shè)某圖書銷售平臺總共有6本書銷售,有6個用戶購買。
數(shù)據(jù):用戶的評分數(shù)據(jù),分值1-5分。每個用戶對圖書的評分如下圖矩陣所示。
學(xué)習(xí)算法:前面說到ItemCF的定義是,相似的物品可能被同個用戶喜歡。反過來講,就是被同個用戶喜歡的物品是相似商品。如上圖中,圖書1和圖書2兩本書,被用戶A同時喜歡,這兩本書具有相似性。而圖書5和圖書6,沒有被同個用戶同時喜歡,不具有相似性。
如果用余弦相似度計算圖書1和圖書2的相似度,也叫做cosine距離,計算過程為:
回想高中時候的課本我們就可以知道,上面的similarity計算公式,實際上就是計算書籍1的評分向量(4,5,4,0,0,0)和書籍2的評分向量(3,0,3,3,4,0)的 cos 夾角。
用同樣的方式,可以算出圖書1跟其他五本圖書相似度分別為0.27, 0 .79,0.32,0.99和0。對每兩本書計算完這個相似度后,就可以獲得全部圖書的相似矩陣。
一個平臺不僅僅有6本圖書6個用戶,我們再擴展到一般的情況。計算物品的相似度,實際是計算每兩個物品評分向量的cosine距離,評分向量的每一維,代表了一個用戶,下圖中,表格的第一行代表了所有用戶對物品A的評分。當(dāng)有100萬個用戶時,也就是計算每兩個100萬維向量的距離。這樣就導(dǎo)致計算量很大,而且很多平臺不僅僅只有100萬用戶,因而這個低效的計算方式需要改進。
預(yù)測決策:
有了評分矩陣之后,預(yù)測決策一般有兩種場景。
一種是根據(jù)相似度排序推薦最近鄰物品。類似于“看了還看”,“買了還買”場景。在這里的例子中,我們知道圖書1和其他圖書的相似度排序分別是圖書5,圖書3,圖書4和圖書2。當(dāng)用戶點擊了圖書1時,就可以按照相似順序從高到低推薦。
第二種是根據(jù)相似度預(yù)測評分推薦物品。如何決策要不要給用戶B推薦圖書2,圖書4和圖書6呢?如下圖,通過用戶B對圖書1的評分 * 未知圖書與圖書1的相似度來預(yù)測用戶B對剩下圖書的評分。如圖書2的預(yù)測評分 = 圖書1的評分5分 * 圖書1和圖書2的相似度0.27 ,從而用戶B對圖書2的評分是:5*0.27=1.35。同樣方式計算出其他圖書的評分預(yù)測。
從上面的結(jié)果來看,用戶B對其他圖書評分比較低,這幾本圖書推薦的可能性大大減少。
這是推薦系統(tǒng)里最樸素的算法,因為它的計算量會隨著用戶和物品的數(shù)量呈指數(shù)增長,所以它并不適合在大量用戶或大量物品的場景使用。在它誕生的年代,還沒有大數(shù)據(jù),這種計算方式耗費大量內(nèi)存,需要做大量的優(yōu)化。我嘗試過用100萬用戶,100萬物品和500萬條的數(shù)據(jù)在256G內(nèi)存的機器上做過嘗試,計算一分鐘后就宣告內(nèi)存耗盡。確實需要計算的話,一般使用Spark來實現(xiàn)。
因為這個缺點,就需要新的算法來計算物品的協(xié)同過濾。
前面提到,計算任意兩物品之間的相似度后,有兩個使用場景。針對這兩個場景,分別有不同的迭代算法:
根據(jù)相似度排序推薦最近鄰物品:使用如Word2vec,Item2vec等Embedding類的算法,將物品嵌入固定的向量空間中,再使用LSH算法(局部敏感哈希算法)取最近鄰物品。這個后續(xù)文章會介紹。
根據(jù)相似度預(yù)測評分推薦物品:本章后續(xù)介紹的SVD算法。
雖然這個算法使用較少了,但是物品協(xié)同過濾的思想都是一脈相乘的,理解了這個簡單的cosine相似度計算方式,可以更好理解后續(xù)的迭代算法。
最后補充一下,物品協(xié)同過濾的一個缺點,或者說是協(xié)同過濾的缺點,對于一個新物品,協(xié)同過濾是無法推薦的。因為新物品用戶無評分,導(dǎo)致它跟所有物品的相似度都是為0。這個是使用這個算法時非常需要注意的一個點。
用戶協(xié)同過濾(UserCF)的計算方式跟物品協(xié)同過濾(ItemCF)的計算方式類似。不同的是由計算兩兩物品的相似度,轉(zhuǎn)換成計算兩兩用戶的相似度。如下圖所示:
評分了相同圖書的用戶為相似用戶,他們的相似度同樣也用cosine相似度公式來計算。計算完相似度后,就可以根據(jù)用戶間的相似性,預(yù)測用戶對未評分圖書進行評分預(yù)測。
但是在亞馬遜上,由于用戶評分的稀疏性(很多用戶壓根不評分),沒有評分的用戶無法跟其他用戶計算相似性,從而導(dǎo)致很多用戶之間沒有相似度。所以2001年的時候,亞馬遜選擇物品協(xié)同過濾算法來做推薦,并發(fā)表了論文。這個論文也導(dǎo)致大家一度認為物品協(xié)同過濾優(yōu)于用戶協(xié)同過濾。
時間到了移動互聯(lián)網(wǎng)的今天,我們更多是用點擊數(shù)據(jù),用戶好友關(guān)系,通訊錄或者甚至是同一個WIFI地址來計算用戶協(xié)同過濾,數(shù)據(jù)稀疏性得到一定程度上的解決?,F(xiàn)在,用戶的協(xié)同過濾在信息流內(nèi)容推薦,社交性的推薦系統(tǒng)有著很好的利用。比如抖音,因為內(nèi)容更新頻繁,用戶協(xié)同過濾可以作為很好的召回手段,所以也就會出現(xiàn)老公點贊的視頻會被推薦給他老婆的情景。
同樣地,這里介紹的cosine相似度的算法,也不是工業(yè)界現(xiàn)在最佳實踐的用戶相似度計算方式了。用戶相似度的計算,現(xiàn)在的最佳實踐也同樣也是用Embedding的方式實現(xiàn)。
而且,用戶相似度的計算,最有效的方式不一定是通過本節(jié)中介紹的計算方式,帶社交功能的APP可以通過用戶的好友關(guān)系,一般的APP可以通過獲取用戶的通訊錄實現(xiàn)用戶協(xié)同過濾。這些方式都來的更加簡單和直接。
對于很多沒有計算機專業(yè)背景的人來說,直接理解SVD算法是很困難的。需要有高等數(shù)學(xué),線性代數(shù),還要理解機器學(xué)習(xí)模型中的目標函數(shù),損失函數(shù),梯度,正則化,最小二乘法等概念。很多文章介紹SVD都很技術(shù),這里不準備采用技術(shù)大咖們的方式。我還是繼續(xù)用圖文的方式介紹,這也許是世界上最簡單的理解SVD的方式。
首先介紹一下背景。
SVD算法的誕生,跟美國Netflix公司有關(guān)。這家公司中文名叫網(wǎng)飛,拍了大家熟悉的網(wǎng)劇《紙牌屋》。
時間來到2006年,Netflix發(fā)起一個推薦系統(tǒng)的懸賞競賽。他們公開了自己網(wǎng)站的用戶數(shù)據(jù)評分數(shù)據(jù)包,并放出100萬美元懸賞優(yōu)化推薦算法。凡是能在Netflix現(xiàn)有的推薦系統(tǒng)基礎(chǔ)上,把均方根誤差降低10%的人,都能參與瓜分這100萬美元。消息一放出,引來了無數(shù)高手參加。這場比賽中,最佳算法就是SVD。
背景介紹完了,接下來直接介紹SVD是怎么計算的。
還是跟前面那樣,簡單化問題:假設(shè)一個平臺只有4個用戶和4本圖書。
1、數(shù)據(jù):用戶對物品評分1-5分,且有以下評分記錄。
2、學(xué)習(xí)算法:
根據(jù)線性代數(shù)我們知道,一個矩陣可以分解為多個矩陣的乘積。SVD英文全稱叫做Singular Value Decomposition,這個算法是個矩陣分解的通用名稱,在不同領(lǐng)域有不同的形式。在推薦系統(tǒng)領(lǐng)域,可以簡單的認為,SVD就是將一個矩陣,在一定的精度損失下,將一個矩陣分解成兩個矩陣。運用這個算法,我們可以將上圖的矩陣做以下的近似分解:
其中,用戶矩陣部分代表著每個用戶的偏好在一個二維隱語義空間上的映射。同樣地,物品矩陣代表著每本圖書的特性在一個二維隱語義空間上的映射。這兩個矩陣也就是模型的結(jié)果。這樣,我們訓(xùn)練模型的時候,就只需要訓(xùn)練用戶矩陣中的8個參數(shù)和物品矩陣中的8個參數(shù)即可。大大減少了計算量。
模型訓(xùn)練的過程,簡單地說,就是通過最小二乘法,不斷將用戶評分數(shù)據(jù)迭代入矩陣中計算,直到把均方誤差優(yōu)化到最小。上圖的結(jié)果是我通過Spark的ML庫ALS模塊直接計算的。
算法的具體目標函數(shù),損失函數(shù)和梯度等,詳述則涉及很多機器學(xué)習(xí)知識點,這里就不作介紹了。技術(shù)方面有很多解讀文章,需要進一步理解的同學(xué),可以搜索相關(guān)文章閱讀。
3、預(yù)測決策:
通過模型訓(xùn)練,我們得到用戶矩陣Q和物品矩陣P后,全部用戶對全部圖書的評分預(yù)測可以通過R = PQ來獲得。如上圖中,用戶A的向量(1.40,-1.18)乘以物品2的向量(2.19,0.73)則可得用戶A對物品1的評分預(yù)測為:1.40×(-1.18)+2.19×0.73=2.21。
對所有的用戶和物品都執(zhí)行相同操作,可以得到全部用戶對全部物品的評分。如下圖右側(cè)矩陣:
得到全部的評分預(yù)測后,我們就可以對每本圖書進行擇優(yōu)推薦。需要注意的是,用戶矩陣和物品矩陣的乘積,得到的評分預(yù)估值,與用戶的實際評分不是全等關(guān)系,而是近似相等的關(guān)系。如上圖中兩個矩陣綠色部分,用戶實際評分和預(yù)估評分都是近似的,有一定的誤差。
在現(xiàn)在的實際應(yīng)用中,SVD一般作為協(xié)同過濾的離線召回使用。一般地,將需要給用戶推薦的物品提前離線計算好,存在HBASE中,在用戶有請求的時候,直接讀取推薦的結(jié)果,放入初排階段的召回集中。
協(xié)同推薦是應(yīng)用最廣泛的推薦算法?;趦?nèi)容推薦的算法,需要給物品打上標簽和給用戶建用戶畫像,才能實現(xiàn)匹配推薦。相比之下,協(xié)同過濾簡單了許多。它是僅使用用戶行為的進行推薦,我們不需要對物品或信息進行完整的標簽化分析,避免了一些人可能難以量化描述的概念的標簽構(gòu)建,又可以很好地發(fā)現(xiàn)用戶的潛在興趣偏好。
因為協(xié)同過濾依賴用戶的歷史數(shù)據(jù),面對新的用戶或者新的物品,在開始的時候沒有數(shù)據(jù)或數(shù)據(jù)較少時,協(xié)同過濾算法無法做出推薦。需要等數(shù)據(jù)積累,或者其他方案進行彌補缺陷,也就是常說的冷啟動的問題。
當(dāng)精確的方式不行難以計算或者速度太慢的時候,往往會選擇犧牲一點精度,達到差不多但非常快速的效果。SVD就是其中的一個例子。
現(xiàn)在的實踐,也不是單純用協(xié)同過濾來做推薦,而是將他們作為其中的一個或幾個召回策略來使用。
下篇文章將介紹大數(shù)據(jù)生態(tài),敬請期待,謝謝!
本文為作者獨立觀點,不代表鳥哥筆記立場,未經(jīng)允許不得轉(zhuǎn)載。
《鳥哥筆記版權(quán)及免責(zé)申明》 如對文章、圖片、字體等版權(quán)有疑問,請點擊 反饋舉報
測一測
我們致力于提供一個高質(zhì)量內(nèi)容的交流平臺。為落實國家互聯(lián)網(wǎng)信息辦公室“依法管網(wǎng)、依法辦網(wǎng)、依法上網(wǎng)”的要求,為完善跟帖評論自律管理,為了保護用戶創(chuàng)造的內(nèi)容、維護開放、真實、專業(yè)的平臺氛圍,我們團隊將依據(jù)本公約中的條款對注冊用戶和發(fā)布在本平臺的內(nèi)容進行管理。平臺鼓勵用戶創(chuàng)作、發(fā)布優(yōu)質(zhì)內(nèi)容,同時也將采取必要措施管理違法、侵權(quán)或有其他不良影響的網(wǎng)絡(luò)信息。
一、根據(jù)《網(wǎng)絡(luò)信息內(nèi)容生態(tài)治理規(guī)定》《中華人民共和國未成年人保護法》等法律法規(guī),對以下違法、不良信息或存在危害的行為進行處理。
1. 違反法律法規(guī)的信息,主要表現(xiàn)為:
1)反對憲法所確定的基本原則;
2)危害國家安全,泄露國家秘密,顛覆國家政權(quán),破壞國家統(tǒng)一,損害國家榮譽和利益;
3)侮辱、濫用英烈形象,歪曲、丑化、褻瀆、否定英雄烈士事跡和精神,以侮辱、誹謗或者其他方式侵害英雄烈士的姓名、肖像、名譽、榮譽;
4)宣揚恐怖主義、極端主義或者煽動實施恐怖活動、極端主義活動;
5)煽動民族仇恨、民族歧視,破壞民族團結(jié);
6)破壞國家宗教政策,宣揚邪教和封建迷信;
7)散布謠言,擾亂社會秩序,破壞社會穩(wěn)定;
8)宣揚淫穢、色情、賭博、暴力、兇殺、恐怖或者教唆犯罪;
9)煽動非法集會、結(jié)社、游行、示威、聚眾擾亂社會秩序;
10)侮辱或者誹謗他人,侵害他人名譽、隱私和其他合法權(quán)益;
11)通過網(wǎng)絡(luò)以文字、圖片、音視頻等形式,對未成年人實施侮辱、誹謗、威脅或者惡意損害未成年人形象進行網(wǎng)絡(luò)欺凌的;
12)危害未成年人身心健康的;
13)含有法律、行政法規(guī)禁止的其他內(nèi)容;
2. 不友善:不尊重用戶及其所貢獻內(nèi)容的信息或行為。主要表現(xiàn)為:
1)輕蔑:貶低、輕視他人及其勞動成果;
2)誹謗:捏造、散布虛假事實,損害他人名譽;
3)嘲諷:以比喻、夸張、侮辱性的手法對他人或其行為進行揭露或描述,以此來激怒他人;
4)挑釁:以不友好的方式激怒他人,意圖使對方對自己的言論作出回應(yīng),蓄意制造事端;
5)羞辱:貶低他人的能力、行為、生理或身份特征,讓對方難堪;
6)謾罵:以不文明的語言對他人進行負面評價;
7)歧視:煽動人群歧視、地域歧視等,針對他人的民族、種族、宗教、性取向、性別、年齡、地域、生理特征等身份或者歸類的攻擊;
8)威脅:許諾以不良的后果來迫使他人服從自己的意志;
3. 發(fā)布垃圾廣告信息:以推廣曝光為目的,發(fā)布影響用戶體驗、擾亂本網(wǎng)站秩序的內(nèi)容,或進行相關(guān)行為。主要表現(xiàn)為:
1)多次發(fā)布包含售賣產(chǎn)品、提供服務(wù)、宣傳推廣內(nèi)容的垃圾廣告。包括但不限于以下幾種形式:
2)單個帳號多次發(fā)布包含垃圾廣告的內(nèi)容;
3)多個廣告帳號互相配合發(fā)布、傳播包含垃圾廣告的內(nèi)容;
4)多次發(fā)布包含欺騙性外鏈的內(nèi)容,如未注明的淘寶客鏈接、跳轉(zhuǎn)網(wǎng)站等,誘騙用戶點擊鏈接
5)發(fā)布大量包含推廣鏈接、產(chǎn)品、品牌等內(nèi)容獲取搜索引擎中的不正當(dāng)曝光;
6)購買或出售帳號之間虛假地互動,發(fā)布干擾網(wǎng)站秩序的推廣內(nèi)容及相關(guān)交易。
7)發(fā)布包含欺騙性的惡意營銷內(nèi)容,如通過偽造經(jīng)歷、冒充他人等方式進行惡意營銷;
8)使用特殊符號、圖片等方式規(guī)避垃圾廣告內(nèi)容審核的廣告內(nèi)容。
4. 色情低俗信息,主要表現(xiàn)為:
1)包含自己或他人性經(jīng)驗的細節(jié)描述或露骨的感受描述;
2)涉及色情段子、兩性笑話的低俗內(nèi)容;
3)配圖、頭圖中包含庸俗或挑逗性圖片的內(nèi)容;
4)帶有性暗示、性挑逗等易使人產(chǎn)生性聯(lián)想;
5)展現(xiàn)血腥、驚悚、殘忍等致人身心不適;
6)炒作緋聞、丑聞、劣跡等;
7)宣揚低俗、庸俗、媚俗內(nèi)容。
5. 不實信息,主要表現(xiàn)為:
1)可能存在事實性錯誤或者造謠等內(nèi)容;
2)存在事實夸大、偽造虛假經(jīng)歷等誤導(dǎo)他人的內(nèi)容;
3)偽造身份、冒充他人,通過頭像、用戶名等個人信息暗示自己具有特定身份,或與特定機構(gòu)或個人存在關(guān)聯(lián)。
6. 傳播封建迷信,主要表現(xiàn)為:
1)找人算命、測字、占卜、解夢、化解厄運、使用迷信方式治?。?br /> 2)求推薦算命看相大師;
3)針對具體風(fēng)水等問題進行求助或咨詢;
4)問自己或他人的八字、六爻、星盤、手相、面相、五行缺失,包括通過占卜方法問婚姻、前程、運勢,東西寵物丟了能不能找回、取名改名等;
7. 文章標題黨,主要表現(xiàn)為:
1)以各種夸張、獵奇、不合常理的表現(xiàn)手法等行為來誘導(dǎo)用戶;
2)內(nèi)容與標題之間存在嚴重不實或者原意扭曲;
3)使用夸張標題,內(nèi)容與標題嚴重不符的。
8.「飯圈」亂象行為,主要表現(xiàn)為:
1)誘導(dǎo)未成年人應(yīng)援集資、高額消費、投票打榜
2)粉絲互撕謾罵、拉踩引戰(zhàn)、造謠攻擊、人肉搜索、侵犯隱私
3)鼓動「飯圈」粉絲攀比炫富、奢靡享樂等行為
4)以號召粉絲、雇用網(wǎng)絡(luò)水軍、「養(yǎng)號」形式刷量控評等行為
5)通過「蹭熱點」、制造話題等形式干擾輿論,影響傳播秩序
9. 其他危害行為或內(nèi)容,主要表現(xiàn)為:
1)可能引發(fā)未成年人模仿不安全行為和違反社會公德行為、誘導(dǎo)未成年人不良嗜好影響未成年人身心健康的;
2)不當(dāng)評述自然災(zāi)害、重大事故等災(zāi)難的;
3)美化、粉飾侵略戰(zhàn)爭行為的;
4)法律、行政法規(guī)禁止,或可能對網(wǎng)絡(luò)生態(tài)造成不良影響的其他內(nèi)容。
二、違規(guī)處罰
本網(wǎng)站通過主動發(fā)現(xiàn)和接受用戶舉報兩種方式收集違規(guī)行為信息。所有有意的降低內(nèi)容質(zhì)量、傷害平臺氛圍及欺凌未成年人或危害未成年人身心健康的行為都是不能容忍的。
當(dāng)一個用戶發(fā)布違規(guī)內(nèi)容時,本網(wǎng)站將依據(jù)相關(guān)用戶違規(guī)情節(jié)嚴重程度,對帳號進行禁言 1 天、7 天、15 天直至永久禁言或封停賬號的處罰。當(dāng)涉及欺凌未成年人、危害未成年人身心健康、通過作弊手段注冊、使用帳號,或者濫用多個帳號發(fā)布違規(guī)內(nèi)容時,本網(wǎng)站將加重處罰。
三、申訴
隨著平臺管理經(jīng)驗的不斷豐富,本網(wǎng)站出于維護本網(wǎng)站氛圍和秩序的目的,將不斷完善本公約。
如果本網(wǎng)站用戶對本網(wǎng)站基于本公約規(guī)定做出的處理有異議,可以通過「建議反饋」功能向本網(wǎng)站進行反饋。
(規(guī)則的最終解釋權(quán)歸屬本網(wǎng)站所有)