推薦系統(tǒng)入門

在目前公司,主要做C++后端開發(fā),一直在做推薦系統(tǒng)開發(fā)工作,對推薦系統(tǒng)有了些許認識,總結一下。
推薦系統(tǒng)近幾年開始火起來,想百度,谷歌這些搜索引擎要解決的是用戶明確的知道自己想要找什么信息,根據(jù)用戶的輸入檢索出與數(shù)據(jù)最相關的信息,推薦系統(tǒng)要解決的是如今信息過載的問題,用戶不是很明確的知道自己需要的具體信息,需要推薦系統(tǒng)來根據(jù)用戶的以往操作記錄等來推薦出有價值的信息,亞馬遜的推薦系統(tǒng)給訂單提供了20%的交易量,淘寶等電商對推薦也是相當?shù)闹匾暎袢疹^條憑借牛逼的推薦算法,提供個性化閱讀,如今市值都奔著百億美刀去了。

推薦系統(tǒng)的應用

1.電商行業(yè):

商品詳情頁的推薦,店鋪推薦,猜你喜歡,領家好貨,買了還買,看了還看等。淘寶,蘑菇街,京東等各大電商公司都很重視。

2.音樂,電影行業(yè):

國內的網(wǎng)易云音樂的個人FM,荔枝FM等都有個性化頻道,用戶體驗都很好。

3.個性化閱讀

比較典型的是今日頭條,如今UC首頁,各大新聞網(wǎng)站都有不同程度的推薦個性化推薦

我經(jīng)歷的推薦系統(tǒng)實踐

1.基于簡單規(guī)則的推薦:

初期的推薦系統(tǒng)很簡單,完全基于規(guī)則去做:比如用戶店鋪內查看某個商品信息,我們就給推薦同一類型的按銷量排序的物品列表。這對于初期有一定的效果,但效果很低,但對于同類類物品推薦結果一直都是不變得,比較死板。一些銷量不好的商品永遠不會被推薦出來。

2.基于商品屬性的推薦:

一件商品有自己的一些屬性,比如品牌,分類,價格,性別,賣家,渠道(現(xiàn)貨或者代購)。用戶喜歡這件物品,該商品的某些屬性必然是用戶喜歡的。我們可以根據(jù)以往的點擊數(shù)據(jù),給各個屬性分配一定的權重,和正在瀏覽的物品屬性對比,通不過不斷的組合測試,選擇出點擊效果最佳的組合策略,以此該策略的最終的得分高低來選擇是否推薦給用戶。最終的效果比簡單的規(guī)則有了明顯的提升。
seller:brand:price:gender:channel = 2:2:2:2:2

3.基于內容的推薦:

商品的描述內容主要體現(xiàn)在商品名字(羅西尼情侶手表)以及一些標簽,比如小白鞋,大眼睛等。我們可以嘗試基于內容相似性的算法根據(jù)物品的描述信息來計算物品相似度。
在數(shù)據(jù)挖掘、文本處理、信息檢索等都會涉及到提取它的關鍵詞,業(yè)內有個經(jīng)典的算法TF-IDF算法
它的理論在于:文章是由單詞構成的,如果除過那些的等停用詞,一個單詞出現(xiàn)的次數(shù)很多次,那么它和內容就越相關,但是這樣可能在一篇文章的出現(xiàn)次數(shù)一樣多的單詞,如果某個詞比較少見,但是它在這篇文章中多次出現(xiàn),那么它很可能就反映了這篇文章的特性,正是我們所需要的關鍵詞在詞頻的基礎上,要對每個詞分配一個"重要性"權重。最常見的詞("的"、"是"、"在")給予最小的權重,較常見的詞("中國")給予較小的權重,較少見的詞("蜜蜂"、"養(yǎng)殖")給予較大的權重。這個權重叫做"逆文檔頻率"(Inverse Document Frequency,縮寫為IDF),它的大小與一個詞的常見程度成反比。

知道了"詞頻"(TF)和"逆文檔頻率"(IDF)以后,將這兩個值相乘,就得到了一個詞的TF-IDF值。某個詞對文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的幾個詞,就是這篇文章的關鍵詞

第一步,計算詞頻。

詞頻計算公式

第二步,計算逆文檔頻率。
這時,需要一個語料庫(corpus),用來模擬語言的使用環(huán)境。

如果一個詞越常見,那么分母就越大,逆文檔頻率就越小越接近0。分母之所以要加1,是為了避免分母為0(即所有文檔都不包含該詞)。log表示對得到的值取對數(shù)。
第三步,計算TF-IDF。
TF-IDF = TF * IDF
然后基于物品的tf-idf值用余弦相似度計算兩兩的相似性,計算量略大,需要做一些過濾限定。

4.基于協(xié)同過濾的推薦:

UserCF和ItemCF是協(xié)同過濾中最為古老的兩種算法,在top-N的推薦上被廣泛應用它的思想在于,UserCF認為一個人會喜歡和他有相同愛好的人喜歡的東西,而ItemCF認為一個人會喜歡和他以前喜歡的東西相似的東西。這兩個假設都有其合理性。
收集數(shù)據(jù)
這里的數(shù)據(jù)指的都是用戶的歷史行為數(shù)據(jù),比如用戶的購買歷史,關注,收藏行為,或者發(fā)表了某些評論,給某個物品打了多少分等等,這些都可以用來作為數(shù)據(jù)供推薦算法使用,服務于推薦算法。需要特別指出的在于,不同的數(shù)據(jù)準確性不同,粒度也不同,在使用時需要考慮到噪音所帶來的影響,比如給熱銷物品降權。
找到相似的用戶或物品
當已經(jīng)對用戶行為進行分析得到用戶喜好后,我們可以根據(jù)用戶喜好計算相似用戶和物品,然后基于相似用戶或者物品進行推薦,這就是最典型的 CF 的兩個分支:基于用戶的 CF 和基于物品的 CF。這兩種方法都需要計算相似度。
相似度的計算
關于相似度的計算,現(xiàn)有的幾種基本方法都是基于向量(Vector)的,其實也就是計算兩個向量的距離,距離越近相似度越大。在推薦的場景中,在用戶 - 物品偏好的二維矩陣中,我們可以將一個用戶對所有物品的偏好作為一個向量來計算用戶之間的相似度,或者將所有用戶對某個物品的偏好作為一個向量來計算物品之間的相似度。下面我們詳細介紹幾種常用的相似度計算方法:
****歐幾里德距離(Euclidean Distance)****

最初用于計算歐幾里德空間中兩個點的距離,假設 x,y 是 n 維空間的兩個點,它們之間的歐幾里德距離是:



當用歐幾里德距離表示相似度,一般采用以下公式進行轉換:距離越小,相似度越大



****皮爾遜相關系數(shù)(Pearson Correlation Coefficient)****

皮爾遜相關系數(shù)一般用于計算兩個定距變量間聯(lián)系的緊密程度,它的取值在 [-1,+1] 之間。



sx, sy是 x 和 y 的樣品標準偏差。
****Cosine 相似度(Cosine Similarity)****

Cosine 相似度被廣泛應用于計算文檔數(shù)據(jù)的相似度:



Tanimoto 系數(shù)(Tanimoto Coefficient)

Tanimoto 系數(shù)也稱為 Jaccard 系數(shù),是 Cosine 相似度的擴展,也多用于計算文檔數(shù)據(jù)的相似度:


itemCf:適用于物品數(shù)明顯過于用戶數(shù)的場景,例如電商行業(yè)等。ItemCF算法的推薦結果著重于維護目標用戶的歷史興趣。
UserCf:適用于用戶數(shù)遠大于物品數(shù),比如熱點新聞等。UserCF算法的推薦結果著重于反映那些與目標用戶興趣相似的小群體的熱點。
UserCF的推薦更加社會化,而ItemCF的推薦更加個性化。
在實際的推薦系統(tǒng)中,最終的推薦結果都是多種策略的融合的結果,各種推薦算法都會有使用,推薦算法整體都差不多,卻別的是各個公司在計算的時候,對參數(shù)做了一些調整,更加準確,這些具體的參數(shù),外界是很難知道的。

用戶畫像:

用戶畫像是根據(jù)用戶社會屬性、生活習慣和消費行為等信息而抽象出的一個標簽化的用戶模型。構建用戶畫像的核心工作即是給用戶貼“標簽”,而標簽是通過對用戶信息分析而來的高度精煉的特征標識。在推薦系統(tǒng)中,用戶畫像的作用在于標識了用戶的一些基本信息,比如地域,年齡,消費偏好,價格區(qū)間,用戶類別,這些屬性能夠幫助系統(tǒng)能夠進行一些目標型更強的推薦,比如過濾掉超過用戶消費水平的bad case。

推薦效果的評定

比較粗暴的就是拿點擊率,訂單貢獻率,推薦系統(tǒng)的最終目標是發(fā)現(xiàn)更多的更好的長尾物品。此外還有。
流行度:隨著K的增大,推薦結果的流行度會逐漸提高,但是當K增加到一定的程度,流行度就不會再有明顯變化。
覆蓋率:K越大,覆蓋率會相應地降低。

認真體驗過京東和淘寶的推薦算法,目前大部分推薦都在使用最近點擊模型,大部分都在推同類商品,商品詳情頁一般都會有店鋪內推薦限定,和最近瀏覽記錄關聯(lián)很緊密。
參照:
1.TF-IDF與余弦相似性的應用(一):自動提取關鍵詞
2.深入推薦引擎相關算法 - 協(xié)同過濾

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容