標籤:

如何學習推薦系統?

最近在學習推薦系統,了解了一些概念和方法,工作中也完成過職位協同的工作,但是對於推薦系統相關知識的了解依然很少,想系統的學習,卻苦於不知從何入手,還望有這方面經驗的同學幫幫忙,指點迷津,將不勝感激!


推薦系統是個複雜的系統工程,依賴數據、架構、演算法、人機交互等環節的有機結合,是數據挖掘技術、信息檢索技術、計算統計學等悠久學科的智慧結晶,也關聯到認知科學、預測理論、營銷學等相關學科。所以,推薦系統的學習也是循序漸進的過程,由淺入深,層層遞進。

首先,必須進行基礎知識的儲備,掌握相關的基本概念、推薦演算法等理論知識,活學活用。這方面有很多書籍可以參考,如《集體智慧編程》《推薦系統實踐》《推薦系統》。還有殿堂級大作《Recommender systems handbook》,裡面不僅對推薦系統方方面面有詳細介紹,還給出了引用的論文,值得投入更多的時間和精力不斷鑽研。

其次,實踐出真知。只有親自動手實踐才能深入體會推薦系統的各個環節,才能對各種推薦演算法的優缺點有真切感受。一方面可以很熟練的完成簡單的推薦演算法,如content-based、item-based CF等。另一方面要掌握一些常見的推薦演算法庫,如SvdFeature、LibFM、Mahout、MLib等。

再者,推薦系統的方方面面提現了很多很多學科的智慧,如信息檢索、數據挖掘和機器學習等。掌握這些知識,對推薦效果提升、性能優化都有極大的幫助,也會不斷的拓展推薦系統的業務場景。

最後,技術的發展日新月異,要時刻保持對業界最新動態的關注。閱讀相關的paper是免不了的,Recsys、KDD、SIGIR等都有推薦系統方面的論文在更新。還可以通過關注技術相關的微博賬號、微信公眾號及各大論壇的相關動態,了解推薦系統在各大公司的實踐情況及最新進展。

推薦系統的構建和實際的業務場景是強相關的,效果提升之道和推薦演算法的選擇也是需要不斷的嘗試慢慢摸索。針對實際情況,分析bad case,不斷迭代開發,才能打造一流的推薦系統。


入門的話, 可以看以下書籍:

  1. Segaran T. Programming collective intelligence: building smart web 2.0 applications[M]. O』Reilly Media, 2007.寓教於樂的一本入門教材,附有可以直接動手實踐的toy級別代碼
  2. Shapira B. Recommender systems handbook[M]. Springer, 2011. 推薦系統可做枕頭,也應該放在枕邊的書籍,看了半本多。如果將該書及其中的參考文獻都看完並理解,那恭喜你,你已經對這個領域有深入理解了
  3. Jannach D, Zanker M, Felfernig A, et al. Recommender systems: an introduction[M]. Cambridge University Press, 2010. 可以認為是2010年前推薦系統論文的綜述集合
  4. Celma O. Music recommendation and discovery[M]. Springer, 2010. 主要內容集中在音樂推薦,領域非常專註於音樂推薦,包括選取的特徵,評測時如何考慮音樂因素
  5. Word sense disambiguation: Algorithms and applications[M]. Springer Science+ Business Media, 2006. 如果涉及到關鍵詞推薦,或是文本推薦, 則可以查閱該書

需要深入研究的話,結合之前這方面的工作及交流整理了一些論文及業界應用, 可以參見:http://semocean.com/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E7%BB%8F%E5%85%B8%E8%AE%BA%E6%96%87%E6%96%87%E7%8C%AE%E5%8F%8A%E8%B5%84%E6%96%99/


看大家推薦的都是重量級的,我推薦個輕量級的。

http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html


補充回答:

之前沒有深入看 Recommender Systems Handbook,現在看了一部分以後來補充回答

對於初入門的本科生,建議看項亮的《推薦系統實踐》……

之前不記得在哪看到評論RSH這本書真的是handbook,適合睡前放在枕邊翻一翻……

(我覺得放在枕邊防色狼還不錯。想砸誰一定能有很高殺傷力……)

對於這麼說的人,我只能看作是,要麼是很大神,要麼是純裝逼……

裡面有很多專業術語,對演算法沒有深入研究的人只會說望洋興嘆。大概我看的是翻譯版,有些句子很拗口……不知道我能不能熬到看英文版的那一天……

我是本科生級別,嗯,看《推薦系統實踐》很多還能理解,看RSH很多地方有點懵……聯繫了本書作者卻還沒有提出一個問題……慚愧。

順便說一句。現在看到「推薦」兩個字我就要吐了……

________分界線________

正好我現在也正在搭建推薦系統,雖然是菜鳥,但也來分享一點自己的經驗吧。一開始,被推薦的是項亮的《推薦系統實踐》,看了一部分,看到樓上回答不少也推薦了這本書,個人建議不要深究書中代碼實現,大體花個兩三天把書看完,明白常用的推薦演算法及其實現方法。

然後根據網上建議買了本殿堂(磚塊級,咳咳)書--recommender system handbook,理論看了許多,倒是自己產生了不少想法。沒有一下子看完,我是根據實際項目的需求來看演算法的,根據需求來定,比如協同過濾演算法是基於item的還是user的,隱語義推薦模型怎麼實現等等。研究演算法會發現用到一些機器學習和線性代數的知識,然後就一邊研究一遍複習……

如果是我這樣學生小白級別的,可以先去實驗樓網站做一個推薦系統的小實驗(親測可行),體驗一下實現的快感。如果樓主有志於深究下去,那就多看看論文,試著改進演算法吧!發現推薦系統現在能在國內應用的只是一些比較大的互聯網企業,相關書籍也不太多,而且都是有一定年限了,從產品的角度,還有很大的發展空間,比如自己最近產生的一個想法,結合搜索引擎來完善推薦系統或從AI語音交互的角度形成新的推薦模式也許會實現哦。

來幾個乾貨網站:從鏈接英文應該能看出裡面的內容,就不介紹了

1. RecSys - ACM Recommender SystemsRecSys - ACM Recommender Systems

2. Recommending music on Spotify with deep learning

3.昨天發現了一個博客,博客裡面提供了一些資料,可以參考看看

BreezeDeus

4.阿里在雲棲大會上發表過一個演講:【直播回顧】21天搭建推薦系統:實現「千人千面」個性化推薦(含視頻)-博客-雲棲社區-阿里雲

5. 餓了么推薦系統:從0到1 - 極客頭條 - CSDN.NET


系統的深入學習的話避免不了閱讀相關的papers

  • 論文:ACM的RecSys,KDD,WWW,SIGIR等會議上都有相關的論文
  • 書籍
    1. 推薦系統實踐 (豆瓣)
    2. 推薦系統 (豆瓣)
    3. 機器學習實戰 (豆瓣)
    4. 統計學習方法 (豆瓣)
    5. Recommender Systems Handbook (豆瓣)等
  • 視頻:Stanford的Andrew 機器學習視頻


首先,你要有個女朋友。(沒上十萬的用戶推薦個毛系統,請兩個機靈點的本科生小妹部署在後台就可以了!給夠零食!給夠福利!某上市視頻網站就是這麼做的!)

然後,你要向女朋友推薦吃的。(推薦不起樓盤就從推薦吃的做起吧,樓盤推薦錯了一輩子就完了,吃的可以多次試錯慢慢改進。還可以從吃完之後的表現搜集數據,衡量表現。比如有的時候吃完就回去洗洗睡了,有的時候吃完跟你徹夜長談,有的時候直接……)

開始她肯定是拒絕的,回家後的心情特別糟糕還不如擼(就和推薦系統上線之後發現完全效果是一坨屎,還不如靜態的手動設置)

後來經過多次推敲和實驗你發現了門道(不停的分析數據發現了一些規律,比如妹紙喜歡吃韓國烤肉)

然後和哥們兒討論經驗,悟出了她不吃東門的阿康燒烤是因為有個前任在那兒當班,所以不要哪壺不開提哪壺(你看了幾個mahout實戰啥啥的,加了點預處理,把所有人都看的太子妃升職記去掉了)

後來突然有一天帶她去吃特別好吃的,情調特別好,後來就……(恩,對的,後面的故事就不用我說了吧,一般就是幾年以後有人在下一個知乎問怎麼學習推薦系統,你成為了老司機,抖出了我這個老司機給你說的故事……)


我結合58招聘推薦的場景,基於長期的業務實踐,寫了一篇《分散式離線加實時增量更新的協同過濾演算法》,希望能和大家一起學習交流。其中文中的第一部分簡單介紹了58趕集招聘業務線目前的推薦系統架構等內容,可供查考。

該文的組織邏輯如下:

首先,簡單介紹58趕集招聘業務線現在的推薦系統現狀;

然後,詳細講述本文基於招聘推薦場景實現的離線加實時的Item based CF演算法分散式設計與實現;

其次,給出了實際線上AB實驗的推薦效果分析;

最後,簡述了該演算法的未來可優化點 。


個性化推薦系統,源於1995年Robert Armstrong等人在美國人工智慧協會上提出了個性化導航系統,後被廣泛用於電子商務系統以及廣告方案中,其中最有名的有Google的AdWords。個性化推薦系統目前為止發展了20年,在資訊閱讀app上也開始大放異彩。比如在看薦客戶端中,個性化推薦系統功能也成為主要特色功能之一。

看薦的個性化推薦系統,主要是平台依據用戶的閱讀使用習慣、閱讀文章類型、閱讀軌跡等判斷與計算,自動化為用戶推薦專屬心水文章。如個性化推薦篩選高熱度、優質內容的關聯文章供用戶閱讀,用戶打開客戶端即可第一時間閱讀到興趣文章,這樣減少了用戶搜索文章的精力和時間,更方便用戶閱讀。

推薦系統,由人創造,又反作用於人。

想要學習推薦系統,就要首先抓住使用者的一些應用特徵,分析用戶的應用場景和使用習慣,對推薦系統進行一定的優化和完善。

具體問題具體分析,看是什麼方面的推薦系統,就從使用者的習慣入手。


那要看你是學推薦系統的 什麼了。

如果是工程上的東西,你想入門的話,你可以看 一本項亮寫的中文書。 應該足夠用了。

如果是想深入學習的話,那就需要學習演算法. 基本演算法就那麼幾個。後面的擴展都是加一些限制條件,然後用梯度下降解方程的過程。

如果還想高端一點的話,

1,需要看recsys 每年的會議paper.

2, SIGIR,KDD,WSDM,WWW,ICDM, 這些會議都有recommender system 的論文。

3, 相關的IR,TEXT MINING,social network的演算法都要懂一些


coursera上有明尼蘇達大學提供推薦系統導論課程。


LibRec 是領先的推薦系統Java開源演算法工具庫,覆蓋了70餘個各類型推薦演算法,有效解決評分預測和物品推薦兩大關鍵的推薦問題。推薦系統是機器學習和大數據技術的經典實際應用,旨在提供高效準確的個性化物品推薦,是現代Web應用的重要組件。

項目結構清晰,代碼風格良好,測試充分,注釋與手冊完善。目前項目使用GPL3.0協議開源在github中,歡迎大家試用。

Librec: http://www.librec.net/

Github Repo: https://github.com/guoguibing/librec

Doc Link: http://wiki.librec.net/doku.php

特色功能:

l 豐富的演算法集

截止到目前,LibRec已經集成了70餘個各類型推薦演算法。具體來說,分為基準演算法、協同過濾演算法、基於內容的演算法、情景感知演算法、混合演算法和其它擴展演算法等。在2.0版本中,增加了40餘個新演算法,包括概率圖模型、張量分解模型、因子分解機、基於評論的模型、深度學習模塊(RBM)等新穎的演算法。團隊的每個核心開發人員往往負責某一類型演算法的開發和測試工作。

l 良好的模塊化

相對於LibRec 1.x,新版本在底層結構上做了非常深入的優化,尤其是模塊化方面。新版本的推薦庫可分為以下三部分:數據預處理、推薦演算法和訓練後處理。在數據預處理模塊,主要是數據的轉換與分割。支持兩種格式數據的輸入和轉換,一個是常見的 User-Item-Rating 格式,另一個是更通用的ARFF格式,用戶還可以擴展新類型的數據以增強現有的ARFF格式。在數據分割方面,支持按Ratio,Given-N,k-fold Cross validation, Leave-one-out等方式。在推薦模型模塊,包括情景感知和演算法集成。情景感知指的是演算法依賴的情景信息,如用戶相似度;演算法集成則是演算法的邏輯實現。在模型訓練之後,LibRec支持兩種操作:一是對測試集進行評估,得到如MAE、RMSE、AUC、MAP、NDCG等測試結果;二是對給定的用戶(或情景)進行評分預測或物品推薦等查詢操作,用戶可以通過實現filter介面自定義更多的過濾操作。

l 靈活的框架配置

LibRec新版本承襲了基於配置的特點,但是有所更新和發展。新的配置實現參考了其它知名數據挖掘工具庫的實現特點,在靈活性上得到了有效的提高。具體來說,我們抽取出很多公共的配置項,也為獨立的演算法保留了特定的配置參數。為了提高演算法的易配置性,我們為大多數演算法保留了可用的供參考配置設置。

l 高效的執行性能

LibRec一直非常注重演算法執行的高效性,並儘可能地優化框架結構和演算法實現。與其它的推薦演算法庫相比,LibRec能夠在得到相當的推薦性能的前提下,在更短的時間內執行完成。

l 簡單的框架用法

LibRec早期版本只能獨立運行,難以集成在其它工程中使用。由於良好的模塊結構,新版本既可以單獨運行,也能夠作為依賴庫應用於其它工程中

l 良好的可擴展性

良好的易擴展性。LibRec提供了很好的公共介面以便用戶進行個性化擴展。包括數據類型、推薦演算法、輸出類型、評估因子、過濾器等的擴展介面。使用LibRec開發新演算法,用戶通常只需要關注新演算法的邏輯實現,而不需要擔心其它部分的實現。


呃。。。我覺得如果是工程上的話,其實一開始真沒必要學太多深入理論的東西

協同過濾需要學習,把幾個常用的相似度演算法了解清楚,基本就差不多了

LDA或者W2V之類的高級貨現在應用上還不怎麼普及,工業界更多的是混合類的推薦演算法(理論不是重點,業務為王)


項亮的推薦系統事件,的確是可以做工程化入門的。基本的推薦模型,原理都幫你介紹到。是本入門的不錯的選擇。


推薦系統手冊中文版這本書14年12月末左右出版可以關注下


個人認為可以分兩部分 學:

1.推薦演算法:處理數據,這個應該就是平常意義的推薦系統。這個的學習樓上的都說的差不多了。

2.推薦系統:承接請求,調用推薦演算法,存儲數據,比如離線和實時數據處理,數據查詢。就是在學Spart這類的~


深深覺得刷上幾本入門書籍是必不可少的。

《推薦系統實踐》(項亮)

《Recommender systems handbook》(Francesco Ricci )

《Recommender systems :The Textbook》(Charu C. Aggarwal) 師兄極力推薦,說是推薦系統的聖經。

《Recommender systems:An introduction》(Dietmar Jannach)覺得這本條理挺清晰的。

一本一本慢慢刷吧


這篇文章講得很全面了:

如何搭建個性化推薦系統?【入門篇】 - Teambition知識文檔


通過一個場景或小產品,比如做個商品推薦,將數據、演算法、線上服務邏輯全面都有。

或者做個文章推薦系統,包含主題演算法、每個主題下數據排序數據側,線上服務穩定可用。

這樣能全面快速感知推薦系統整體。


我從一個非技術但卻必須懂推薦技術的角度來回答此問題。

如果你只是像我一樣學習推薦系統的方法論,那麼有大量的技術文章供你參考,告知你現在推薦所用的主流方法是什麼,所用的技術有哪些。

而如果你想成為推薦系統的技術人員,那麼首先你需要做的事加強自己的代碼能力,其次才是懂得推薦的邏輯。在一個做第三方推薦技術的公司就職會快速且高效地提高自己的推薦系統的技術能力。


《推薦系統實踐》

《集體智慧編程》


推薦閱讀:

為什麼感覺「今日頭條」推薦的內容很不準,而且好像也沒見怎麼改善過?
有哪些解決推薦系統中冷啟動的思路和方法?

TAG:推薦系統 |