推荐系统开源软件
?????? 以下內(nèi)容是轉(zhuǎn)至盛大創(chuàng)新研究院官方博客的一篇文章http://in.sdo.com/?p=1707,文中幾乎涵蓋了當(dāng)今主流的推薦系統(tǒng)開源軟件,我把全文都貼過來了,不過與原文不同的是我把有些已經(jīng)停止更新/或者更新很慢的都往后面排了。另外也寫寫自己的一些使用總結(jié)。 原文開始: ?????? 收集和整理了目前互聯(lián)網(wǎng)上能找到的開源推薦系統(tǒng),并附上了個人的一些簡單點評(未必全面準確),這個列表是目前為止比較全面的了,希望對大家了解掌握推薦系統(tǒng)有幫助(文/陳運文) ?
SVDFeature
由上海交大的同學(xué)開發(fā),采用C++語言,代碼質(zhì)量很高。去年我們參加KDD競賽時用過,很好很方便,而且出自咱們國人之手,所以置頂推薦! 項目地址: http://svdfeature.apexlab.org/wiki/Main_Page ? SVDFeature包含一個很靈活的Matrix Factorization推薦框架,能方便的實現(xiàn)SVD、SVD++等方法, 是單模型推薦算法中精度最高的一種。SVDFeature代碼精煉,可以用相對較少的內(nèi)存實現(xiàn)較大規(guī)模的單機版矩陣分解運算。 ? 另外含有Logistic regression的model,可以很方便的用來進行ensemble運算 ? ? ?????? 備注:這個真是單機版 推薦神器,能在4G的電腦上,跑1.5G的用戶-物品評分數(shù)據(jù),而且速度也還可以,當(dāng)時給我吃了一驚。該項目文檔相當(dāng)齊全包含:理論和樣例的demo,把評分預(yù)測當(dāng)做矩陣分解、分類、Ranking來做。正如項目介紹,它提供了特征-矩陣分解的框架,你只需騰出雙手,結(jié)合業(yè)務(wù)場景去提取用戶的特征。如果用來參加推薦/機器學(xué)習(xí)方面的比賽,其中的GBRT跟邏輯回歸的各種模型集成,更是加了一層保證。總而言之,它就是你的歐萊雅,你值得擁有!Mahout
網(wǎng)址 http://mahout.apache.org/ ? Mahout知名度很高,它是Apache基金資助的重要項目,在國內(nèi)流傳很廣,并已經(jīng)有一些中文相關(guān)書籍了。注意Mahout是一個分布式機器學(xué)習(xí)算法的集合,協(xié)同過濾只是其中的一部分。除了被稱為Taste的分布式協(xié)同過濾的實現(xiàn)(Hadoop-based,另有pure Java版本),Mahout里還有其他常見的機器學(xué)習(xí)算法的分布式實現(xiàn)方案。 另外Mahout的作者之一Sean Owen基于Mahout開發(fā)了一個試驗性質(zhì)的推薦系統(tǒng),稱為Myrrix, 可以看這里:http://myrrix.com/quick-start/
?????? 備注:也許受到到graphlab跟PredictOI等大數(shù)據(jù)預(yù)測軟件的壓力,最近Mahout也加快了更新速度,截止現(xiàn)在已經(jīng)到了V0.9了。這個庫最大的優(yōu)勢是能處理大的數(shù)據(jù)量,里面不僅有推薦還有分類,回歸,主題模型等,具體做推薦的時候還可以結(jié)合業(yè)務(wù)修改下相似度計算公式MyMediaLite
http://mymedialite.net/index.html 基于.NET框架的C#開發(fā)(也有Java版本),作者基本來自德國、英國等歐洲的一些高校。 除了提供了常見場景的推薦算法,MyMediaLite也有Social Matrix Factorization這樣獨特的功能 盡管是.Net框架,但也提供了Python、Ruby等腳本語言的調(diào)用API MyMediaLite的作者之一Lars Schmidt在2012年KDD會議上專門介紹過他們系統(tǒng)的一些情況,可惜由于.Net開發(fā)框架日漸式微,MyMediaLite對Windows NT Server的系統(tǒng)吸引力大些,LAMP網(wǎng)站用得很少 ?????? 備注:這個軟件也是相當(dāng)?shù)馁?#xff0c;不僅算法完整,文檔清晰,還提供指標測試、交叉驗證尋參等,需要注意的一點是,當(dāng)數(shù)據(jù)量較大的時候,最好要重新編譯一下C#的運行庫Mono --with-large-heap=yes 把內(nèi)存搞大一點,不然很容易out of memory。GraphLab
項目地址: http://graphlab.org/ Graphlab是基于C++開發(fā)的一個高性能分布式graph處理挖掘系統(tǒng),特點是對迭代的并行計算處理能力強(這方面是hadoop的弱項), 由于功能獨到,GraphLab在業(yè)界名聲很響 用GraphLab來進行大數(shù)據(jù)量的random walk或graph-based的推薦算法非常有效。 Graphlab雖然名氣比較響亮(CMU開發(fā)),但是對一般數(shù)據(jù)量的應(yīng)用來說可能還用不上 ??????? 備注:正如軟件的名字一樣,該軟件專注于圖方面的挖掘,不過其中包含一個推薦的toolkit,里面有很多矩陣分解類的算法,另外該軟件的另外一個兄弟Graphchi,又一大單機神奇。前段新聞,就說Mac mini筆記本部署的grapchi 在推特圖譜的計算上超越了1613節(jié)點的hadoop。我做的另外一個應(yīng)用就是在一臺服務(wù)器上部署了Graphchi ,在中等數(shù)據(jù)量上毫無鴨梨。LibFM
項目網(wǎng)址: http://www.libfm.org/ 作者是德國Konstanz University的Steffen Rendle,去年KDD Cup競賽上我們的老對手,他用LibFM同時玩轉(zhuǎn)Track1和Track2兩個子競賽單元,都取得了很好的成績,說明LibFM是非常管用的利器(雖然在Track1上被我們打敗了,hiahia) 顧名思義,LibFM是專門用于矩陣分解的利器,尤其是其中實現(xiàn)了MCMC(Markov Chain Monte Carlo)優(yōu)化算法,比常見的SGD(隨即梯度下降)優(yōu)化方法精度要高(當(dāng)然也會慢一些) ? 順便八卦下,去年KDD會議上和Steffen當(dāng)面聊過,他很靦腆而且喜歡偷笑,呵呵挺可愛。 ????????? 備注:在預(yù)測評分方面是神奇,不過相對來講速度較慢,尤其用MCMC算法的時候,不過總的來說還是非常好的一款軟件LibMF
項目地址: http://www.csie.ntu.edu.tw/~cjlin/libmf/ ? 注意LibMF和上面的LibFM是兩個不同的開源項目。這個LibMF的作者是大名鼎鼎的臺灣國立大學(xué),他們在機器學(xué)習(xí)領(lǐng)域享有盛名,近年連續(xù)多屆KDD Cup競賽上均獲得優(yōu)異成績,并曾連續(xù)多年獲得冠軍。臺灣大學(xué)的風(fēng)格非常務(wù)實,業(yè)界常用的LibSVM, Liblinear等都是他們開發(fā)的,開源代碼的效率和質(zhì)量都非常高 ? LibMF在矩陣分解的并行化方面作出了很好的貢獻,針對SDG優(yōu)化方法在并行計算中存在的locking problem和memory discontinuity問題,提出了一種矩陣分解的高效算法,根據(jù)計算節(jié)點的個數(shù)來劃分評分矩陣block,并分配計算節(jié)點。系統(tǒng)介紹可以見這篇論文(Recsys 2013的 Best paper Award) Y. Zhuang, W.-S. Chin, Y.-C. Juan, and C.-J. Lin. A Fast Parallel SGD for Matrix Factorization in Shared Memory Systems. Proceedings of ACM Recommender Systems 2013. ???????? 備注:我相信Libsvm,很多人用過,沒錯,這個LibMF就是林志仁教授那個團隊寫的,速度、質(zhì)量值得信賴Lenskit
http://lenskit.grouplens.org/ 這個Java開發(fā)的開源推薦系統(tǒng),來自美國的明尼蘇達大學(xué),也是推薦領(lǐng)域知名的測試數(shù)據(jù)集Movielens的作者, 他們的推薦系統(tǒng)團隊,在學(xué)術(shù)圈內(nèi)的影響力很大,很多新的學(xué)術(shù)思想會放到這里 ??????? 備注:明尼蘇達大學(xué)推薦團隊的杰作,另外該團隊還在Coursera上開了一門推薦系統(tǒng) 的公開課,課程的作業(yè)就可以用這個軟件來做。Crab
項目地址: http://geektell.com/story/crab-recommender-systems-in-python/ ? ? 系統(tǒng)的Tutorial可以看這里: http://muricoca.github.io/crab/ ? Crab是基于Python開發(fā)的開源推薦軟件,其中實現(xiàn)有item和user的協(xié)同過濾。據(jù)說更多算法還在開發(fā)中, Crab的python代碼看上去很清晰明了,適合一讀 ??????備注:Python寫的,其中的作者就是下面的Python-recsys作者,看github上一個印度的哥們(猜的,挺黑的,呵呵)。CofiRank
C++開發(fā)的 Collaborative Filtering算法的開源推薦系統(tǒng),但似乎2009年后作者就沒有更新了, CofiRank依賴boost庫,聯(lián)編會比較麻煩。不是特別推薦 項目地址: http://www.cofirank.org/ ? ? ?EasyRec
Java開發(fā)的推薦系統(tǒng),感覺更像一個完整的推薦產(chǎn)品,包括了數(shù)據(jù)錄入模塊、管理模塊、推薦挖掘、離線分析等,整個系統(tǒng)比較完備。 項目地址: http://easyrec.org/ ? ? ? ?PREA
全名是 Personalized Recommendation Algorithms Toolkit, 開發(fā)語言為Java。也是一個輕量級的開源項目 項目網(wǎng)址: http://mloss.org/software/view/420/ ? 放在Mloss這個大project下。我個人感覺PREA還是比較簡陋的,參加開發(fā)的三位工程師Joonseok Lee, Mingxuan Sun, Guy Lebanon更新頻率很低,提供的資料也少。 ? 不過Mloss下倒是能找到其他一些推薦開源項目 http://mloss.org/software/tags/collaborative-filtering/ ? ?Python-recsys
一個非常輕量級的開源推薦系統(tǒng),python開發(fā),作者似乎只有一位, Python-recsys主要實現(xiàn)了SVD、Neighborhood SVD推薦算法, 這個項目麻雀雖小五臟俱全,評估數(shù)據(jù)(Movielens,Last.fm)、評估框架也都有 API也很簡單清晰,代碼簡潔,屬于推薦入門的良好教材。 不過真正要用到實際系統(tǒng)中,還是得補充很多內(nèi)容 ? github的地址位于 https://github.com/ocelma/python-recsys ? 項目的介紹見: http://ocelma.net/software/python-recsys/build/html/ ?????? 備注:用過,不過使用的時候發(fā)現(xiàn)兩次運行的結(jié)果不一致,讓我很是蛋疼,另外運行速度一般(盡管可以用稀疏的矩陣庫,但速度還是不敢恭維)。RapidMiner
項目網(wǎng)址為: http://rapidminer.com/ Java語言開發(fā),RapidMiner(前身是Yale)已經(jīng)是一個比較成熟的數(shù)據(jù)挖掘解決方案了,包括常見的機器學(xué)習(xí)、NLP、推薦、預(yù)測等方法(推薦只占其中很小一部分),而且?guī)в蠫UI的數(shù)據(jù)分析環(huán)境,數(shù)據(jù)ETL、預(yù)處理、可視化、評估、部署等整套系統(tǒng)都有。 ? 另外RapidMiner提供commercial license,提供R語言接口,感覺在向著一個商用的數(shù)據(jù)挖掘公司的方向在前進。 ?Recommendable
基于Ruby語言開發(fā),實現(xiàn)了一些評分預(yù)測的推薦算法,但是整體感覺比較單薄, github上地址如下: https://github.com/davidcelis/recommendable/ ??備注:沒用過。 ?Recommenderlab
基于R語言開發(fā)的開源推薦程序,對經(jīng)常使用R語言的工程師或者BI數(shù)據(jù)分析師來說,recommenderlab的出現(xiàn)絕對算得上是福音了 項目地址: http://cran.r-project.org/web/packages/recommenderlab/index.html ? ? 基于Recommenderlab來開發(fā)推薦系統(tǒng),代碼會非常精簡,因為推薦系統(tǒng)所依賴的user-item rating matrix對擅長處理向量運算的R語言來說再方便不過了, 但是在實際推薦系統(tǒng)中,需要考慮的問題和邏輯都比較復(fù)雜,用Recommenderlab不是很靈活。另外受限于R語言對內(nèi)存的限制,Recommenderlab不太適用于過大規(guī)模的推薦應(yīng)用 ?? 備注:速度跟內(nèi)存,還是需要考慮的問題。 ?Waffles
SF地址: http://waffles.sourceforge.net/ Waffles英文原意是蜂蜜甜餅(見logo),在這里卻指代一個非常強大的機器學(xué)習(xí)的開源工具包,基于C++語言開發(fā)。 Waffles里包含的算法特別多,涉及機器學(xué)習(xí)的方方面面,推薦系統(tǒng)位于其中的Waffles_recommend tool,大概只占整個Waffles的1/10的內(nèi)容(其它還有分類、聚類、采樣、降維、數(shù)據(jù)可視化、音頻處理等許許多多工具包,估計能與之媲美的也就數(shù)Weka了) ? 除了上面的開源軟件之外,還有一些其他開源 http://prediction.io/? PredictionIO http://graphlab.com/products/create/index.html? Graphlab的 網(wǎng)頁版,目前還在beta http://www.duineframework.org/?推薦開源框架 最近火熱的Spark轉(zhuǎn)載于:https://www.cnblogs.com/kobedeshow/p/3560835.html
總結(jié)