大資料應用——資料探勘之推薦系統

weixin_34124651發表於2018-06-02

資料探勘——推薦系統

  大資料可以認為是許多資料的聚合,資料探勘是把這些資料的價值發掘出來,比如有過去10年的氣象資料,通過資料探勘,幾乎可以預測明天的天氣是怎麼樣的,有較大概率是正確的。

機器學習是人工智慧的核心,對大資料進行發掘,靠人工肯定是做不來的,那就得靠機器代替人工得到一個有效模型,通過該模型將大資料中的價值體現出來。

本章內容:

1) 資料探勘和機器學習概念

2) 一個機器學習應用方向——推薦系統

3) 推薦演算法——基於內容的推薦方法

4) 推薦演算法——基於協同過濾的推薦方法

5) 基於MapReduce的協同過濾演算法的實現

1.資料探勘和機器學習概念

  機器學習和資料探勘技術已經開始在多媒體、計算機圖形學、計算機網路乃至作業系統、軟體工程等電腦科學的眾多領域中發揮作用,特別是在計算機視 覺和自然語言處理領域,機器學習和資料探勘已經成為最流行、最熱門的技術,以至於在這些領域的頂級會議上相當多的論文都與機器學習和資料探勘技術有關。總的來看,引入機器學習和資料探勘技術在電腦科學的眾多分支領域中都是一個重要趨勢。

對於資料探勘,資料庫提供資料管理技術,機器學習提供資料分析技術。通常我們要處理的大資料通過HDFS雲端儲存平臺來進行資料管理,目前Hadoop生態圈已經發展成熟,各種工具和介面基本滿足大多數資料管理的需要。面對這樣龐大的資料資源,需要有一種方法需要讓其中的價值體現出來,機器學習提供了一系列的分析挖掘資料的方法。

Hadoop生態圈中有一個機器學習開源庫的專案——Mahout,提供了豐富的可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地建立智慧應用程式,Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。

2.一個機器學習應用方向——推薦領域

  推薦演算法是最為大眾所知的一種機器學習模型。推薦是很多網站背後的核心元件之一,有時也是一個重要的收入來源。

一般來講,推薦系統試圖對使用者與某類物品之間的聯絡建模。比如我們利用推薦系統來告訴使用者有哪些電影他們會可能喜歡。如果這一點做的很好的話,就能夠吸引更多的使用者持續使用我們的服務。這對雙方都有好處。同樣,如果能準確告訴使用者有哪些電影與某一個電影相似,就能方便使用者在站點上找到更多感興趣的資訊。這也能提升使用者的體驗、參與度以及站點內容對使用者的吸引力。對於大型網站來說,很多內容是來自於獨立的第三方——內容提供商,比如淘寶的商品寶貝基本來自各個店鋪、奇藝上的電影很多來自與專業的傳媒集團和工作室、微信上製作精良的廣告也是來自於各個行業的廣告主。

11120339-9c55d4b8c12db41c

建立一個良好的推薦生態圈,對於使用者、網站平臺以及內容提供商,都是有好處的,首先使用者得到他們想要的物品,平臺獲得更多的流量和收入,內容提供商售賣其物品的效率也會提高,所以是一個三者共贏的一個場景,所以一個好的推薦系統會帶來很大的價值。

3.推薦演算法——基於內容的推薦方法

  基於內容的推薦(Content Based)應該算最早被使用的推薦方法,它根據使用者過去喜歡的產品(本文統稱為item),為使用者推薦和他過去喜歡的產品相似的產品。例如,一個推薦飯店的系統可以依據某個使用者之前喜歡很多的烤肉店而為他推薦烤肉店。 CB最早主要是應用在資訊檢索系統當中,所以很多資訊檢索及資訊過濾裡的方法都能用於CB中。

CB的過程一般包括以下三步:

1) Item Representation:為每個item抽取出一些特徵(也就是item的content了)來表示此item;

2) Profile Learning:利用一個使用者過去喜歡(及不喜歡)的item的特徵資料,來學習出此使用者的喜好特徵(profile);

3) Recommendation Generation:通過比較上一步得到的使用者profile與候選item的特徵,為此使用者推薦一組相關性最大的item。

11120339-f1fcc48b77ac8d12

  舉個例子說明前面的三個步驟。對於個性化閱讀來說,一個item就是一篇文章。根據上面的第一步,我們首先要從文章內容中抽取出代表它們的屬性。常用的方法就是利用出現在一篇文章中詞來代表這篇文章,而每個詞對應的權重往往使用資訊檢索中的tf-idf來計算。比如對於本文來說,詞“CB”、“推薦”和“喜好”的權重會比較大,而“烤肉”這個詞的權重會比較低。利用這種方法,一篇抽象的文章就可以使用具體的一個向量來表示了。第二步就是根據使用者過去喜歡什麼文章來產生刻畫此使用者喜好的 profile了,最簡單的方法可以把使用者所有喜歡的文章對應的向量的平均值作為此使用者的profile。比如某個使用者經常關注與推薦系統有關的文章,那麼他的profile中“CB”、“CF”和“推薦”對應的權重值就會較高。在獲得了一個使用者的profile後,CB就可以利用所有item與此使用者profile的相關度對他進行推薦文章了。一個常用的相關度計算方法是cosine。最終把候選item裡與此使用者最相關(cosine值最大)的N個item作為推薦返回給此使用者。


接下來我們詳細介紹下上面的三個步驟。

1) Item Representation:

  真實應用中的item往往都會有一些可以描述它的屬性。這些屬性通常可以分為兩種:結構化的(structured)屬性與非結構化的(unstructured)屬性。所謂結構化的屬性就是這個屬性的意義比較明確,其取值限定在某個範圍;而非結構化的屬性往往其意義不太明確,取值也沒什麼限制,不好直接使用。比如在交友網站上,item就是人,一個item會有結構化屬性如身高、學歷、籍貫等,也會有非結構化屬性(如item自己寫的交友宣言,部落格內容等等)。對於結構化資料,我們自然可以拿來就用;但對於非結構化資料(如文章),我們往往要先把它轉化為結構化資料後才能在模型里加以使用。真實場景中碰到最多的非結構化資料可能就是文章了(如個性化閱讀中)。下面我們就詳細介紹下如何把非結構化的一篇文章結構化。

如何代表一篇文章在資訊檢索中已經被研究了很多年了,下面介紹的表示技術其來源也是資訊檢索,其名稱為向量空間模型(Vector Space Model,簡稱VSM)。

11120339-11384bb676b43173

做歸一化的好處是不同文章之間的表示向量被歸一到一個量級上,便於下面步驟的操作。

2) Profile Learning

  假設使用者u已經對一些item給出了他的喜好判斷,喜歡其中的一部分item,不喜歡其中的另一部分。那麼,這一步要做的就是通過使用者u過去的這些喜好判斷,為他產生一個模型。有了這個模型,我們就可以根據此模型來判斷使用者u是否會喜歡一個新的item。所以,我們要解決的是一個典型的有監督分類問題,理論上機器學習裡的分類演算法都可以照搬進這裡。

下面我們簡單介紹下CB裡常用的學習演算法——KNN:

對於一個新的item,最近鄰方法首先找使用者u已經評判過並與此新item最相似的k個item,然後依據使用者u對這k個item的喜好程度來判斷其對此新item的喜好程度。這種做法和CF中的item-based kNN很相似,差別在於這裡的item相似度是根據item的屬性向量計算得到,而CF中是根據所有使用者對item的評分計算得到。

對於這個方法,比較關鍵的可能就是如何通過item的屬性向量計算item之間的兩兩相似度。[2]中建議對於結構化資料,相似度計算使用歐幾里得距離;而如果使用向量空間模型(VSM)來表示item的話,則相似度計算可以使用cosine。

3) Recommendation Generation

通過上一步的學習,會得到一個推薦列表,我們直接把這個列表中與使用者屬性最相關的n個item作為推薦返回給使用者即可。

4.推薦演算法——基於協同過濾的推薦方法

  俗話說“物以類聚、人以群分”,繼續拿看電影這個例子來說,如果你喜歡《蝙蝠俠》、《碟中諜》、《星際穿越》、《原始碼》等電影,另外有個人也都喜歡這些電影,而且他還喜歡《鋼鐵俠》,則很有可能你也喜歡《鋼鐵俠》這部電影。

所以說,當一個使用者 A 需要個性化推薦時,可以先找到和他興趣相似的使用者群體G,然後把 G 喜歡的、並且 A 沒有聽說過的物品推薦給 A,這就是基於使用者的系統過濾演算法。

根據上述基本原理,我們可以將基於使用者的協同過濾推薦演算法拆分為兩個步驟:

1) 發現興趣相似的使用者

通常用 Jaccard 公式或者餘弦相似度計算兩個使用者之間的相似度。設 N(u) 為使用者 u 喜歡的物品集合,N(v) 為使用者 v 喜歡的物品集合,那麼 u 和 v 的相似度是多少呢:

11120339-82def388b6b0e746

如何一下子計算所有使用者之間的相似度呢?為計算方便,通常首先需要建立“物品—使用者”的倒排表,如下圖所示:

11120339-52e0108bdeb79c61

然後對於每個物品,喜歡他的使用者,兩兩之間相同物品加1。例如喜歡物品 a 的使用者有 A 和 B,那麼在矩陣中他們兩兩加1。如下圖所示:

11120339-b781cbf47022114e

計算使用者兩兩之間的相似度,上面的矩陣僅僅代表的是公式的分子部分。以餘弦相似度為例,對上圖進行進一步計算:

11120339-bd7af9a11dc8d23c

到此,計算使用者相似度就大功告成,可以很直觀的找到與目標使用者興趣較相似的使用者。

2) 推薦物品

  首先需要從矩陣中找出與目標使用者 u 最相似的 K 個使用者,用集合 S(u, K) 表示,將 S 中使用者喜歡的物品全部提取出來,並去除 u 已經喜歡的物品。對於每個候選物品 i ,使用者 u 對它感興趣的程度用如下公式計算:

11120339-879d9dca6a3482ec.png

看樣子使用者 A 對 c 和 e 的喜歡程度可能是一樣的,在真實的推薦系統中,只要按得分排序,取前幾個物品就可以了。

福利:各位想學習大資料的朋友,這裡給大家帶來福利啦,近期整理了一套大資料學習視訊入門到實戰,大家可以加微信:Lxiao_28免費獲取,還可以入微信群交流!(備註領取資料)。

11120339-fdebb407654c07e5.png

相關文章