集合70多種推薦演算法,東北大學老師用Java寫了一個開源庫,在GitHub上收穫近1500個Star...
【AI科技大本營導讀】在經過一年多的開發工作之後,LibRec 3.0 版本終於釋出了。LibRec 是一個基於 Java 的開源演算法工具庫,覆蓋了 70 餘個各型別推薦演算法,可以有效解決評分預測和物品推薦兩大關鍵的推薦問題,目前已經在 GitHub 上收穫了 1457 個 Star,612 個 Fork。
2012 年,還在新加坡南洋理工大學攻讀博士學位的郭貴冰開始關注推薦系統。當時,MyMedialite 是最知名的推薦工具庫之一。作為初學者,郭貴冰一邊看論文,一邊看MyMedialite 的程式碼,然後在它的基礎上實現我自己的研究演算法。
然而,很快郭貴冰就意識到一個問題,在 Linux 伺服器上跑 MyMedialite 會非常麻煩,而且在平行計算的時候諸多限制(相對於 Windows 平臺),在跨平臺方面存在不足。不得已,郭貴冰只好把自己的程式改成熟悉的 Java 程式碼,於是得到是最原始的 LibRec。隨著研究和學習的深入,更多的演算法慢慢新增到了 LibRec 中,並託管到 GitHub 以便版本控制。
2015 年 11 月,郭貴冰以引進人才的方式加入東北大學軟體學院,任職副教授。由於精力所限,郭貴冰開始組建開源團隊。2016 年 1 月,郭貴冰、王宇峰等人組建起了最初的 LibRec 核心開發團隊,並不斷擴充團隊。
2016 年 12 月,郭貴冰團隊釋出了 LibRec 2.0 版本。經過一年多的開發之後,郭貴冰團隊又在今日釋出了 LibRec 3.0 版本。
▌LibRec 的特點
LibRec 是基於 Java 的開源演算法工具庫,覆蓋了 70 餘個各型別推薦演算法,有效解決評分預測和物品推薦兩大關鍵的推薦問題。
1)豐富的演算法
截止到目前,LibRec已經集成了70餘個推薦演算法。具體包括基準演算法,協同過濾演算法,基於內容的演算法,基於情景感知的演算法,混合演算法以及其他擴充套件演算法等。同時演算法中也包含了概率圖模型,張量分解模型,因子分解機,深度學習中的 RBM 模組等演算法。LibRec 中包含的所有演算法均已歸類並註明實現參考文獻。
2)良好的模組化
目前LibRec中最主要的模組為DataModel,Recommender,Evaluator與Filter,分別負責資料的預處理,推薦模型的訓練,模型的執行,輸出結果的過濾。
3)靈活的框架配置
不同演算法的配置項因配置項不同,所以每一個推薦演算法分別對應一個配置檔案。方便管理的同時也方便使用者根據演算法的執行結果來調參。目前 LibRec 已經針對所有演算法配置好了預設引數。
4)簡單的框架用法
LibRec 分別提供了 Linux 和 Windows 版本的命令列工具。使用者可以根據 LibRec 提供的手冊來編寫配置檔案,並使用命令列來執行演算法。最終評估結果在終端中輸出,推薦結果根據配置檔案生成在相應目錄下。
▌LibRec 3.0
經過一年多的開發,LibRec 3.0 在原版本的基礎上增加了許多新特性,特別是對如今流行的深度學習、整合學習等演算法的支援。
1)深度學習演算法
深度學習能夠使用RNN迴圈神經網路對動態或者序列資料進行建模,並且可以更加準確的學習user和item的特徵。DeepLearning4J(DL4J)是一套基於Java語言的神經網路工具包,可以構建、定型和部署神經網路。DL4J 與 Hadoop 和 Spark 整合,支援分散式 CPU 和 GPU,為商業環境(而非研究工具目的)所設計。結合 DL4J,郭貴冰團隊開發了深度學習演算法模組。
2)POI 演算法
POI 演算法主要是指對使用者興趣點推薦(Point Of Interest)。根據使用者在社交網路中的興趣和地理位置資訊,分析使用者的標籤屬性和地理偏好,給使用者推薦合適的出行地點。基於地理位置,郭貴冰團隊實現了 POI 演算法模組。
3)增量更新演算法
增量更新主要是提高推薦演算法時效性,傳統的個性化推薦系統,採用定期離線對資料進行分析的做法來更新模型。實時個性化推薦實時分析使用者產生的資料,可以更準確地為使用者進行推薦,同時根據實時的推薦結果進行反饋,更好地改進推薦模型。增量更新模組實現了部分推薦演算法的增量更新功能。
4)整合學習演算法
整合學習在機器學習演算法中具有較高的準確率,不足之處就是模型的訓練過程可能比較複雜,效率不是很高。整合學習是使用一系列學習器進行學習,並使用某種規則把各個學習結果進行整合從而獲得比單個學習器更好的學習效果的一種機器學習方法。增量更新模組實現了部分推薦演算法的增量更新功能。
▌專訪郭貴冰
AI科技大本營:請簡單介紹下 LibRec。
郭貴冰:LibRec 就是一個包含了各式各樣推薦演算法的開源庫。利用這個開源庫,首先可以讓入門者在學習和入門過程中快速知道演算法基本操作流程、演算法的實現邏輯,以及演算法效能的對比表現。
此外,這個開源庫提供了很多基礎架構,包括很多除了演算法、邏輯以外的東西,比如資料結構、資料分割、資料演算法評估等這些內容。如果是一個有經驗的人,在有了 LibRec 之後會變得非常方便,他只需要關注演算法本身的邏輯就行了,無需關注其他與演算法邏輯無關的,但這些是使得演算法能跑起來的、能夠運轉的關鍵技術。
另外,很多人需要用 LibRec 做不同的實際應用,因為 LibRec 相對來說比較抽象的演算法庫,我們完全可以利用它作為核心,來開發不同的應用。比如我們可以用它來開發學術論文的推薦、電影的推薦,甚至任何一個需要大資料演算法的實際應用都可以用它來做。
AI科技大本營:為什麼選擇用 Java,不用 Python?
郭貴冰:最開始用 Java 是因為 2012 年 Python 還沒有那麼流行。Java 是可以跨平臺的,比如我在 Windows 上開做發,但是可以在 Linux 伺服器上執行,中間不需要做任何修改。另外, Java 更多用於企業開發,很多企業專案用 Java 來做的。儘管 Python 可以快速地做原型,但是我在跟很多企業人士溝通的過程中發現,如果用 Python 快速做一個離線的原型,先訓練出一個模型,但是這個模型訓練之後,還要再把它放在 Java 開發的程式裡來跑。另外,Java 在企業專案時應用更廣泛一些,Python 更關注快速搭建原型。
我們內部也有討論要不要開發 Python 介面,但是我們本身團隊規模比較小,沒有那麼多經精力,而且 Python 介面這個東西,因為我們學 IT 的知道程式語言什麼的不是最核心的事情,我們還有很多其他的事情需要優先去做,比如優化底層架構等等。
AI科技大本營:獲得博士學位之後為什麼會選擇去東北大學?
郭貴冰:有很多人都問過我這個問題。第一,我大學是在河北秦皇島讀的書,所以其實我對北方的氣候不會產生不適應的狀況,很多人不願意在這邊是覺得氣候不行,但我本身比較適應。
另外,我回國時也有參考天津大學、東北大學和一些南方的高校,但東北大學給我的起點相對高一點。對老師來說,起點高一點可以帶學生做東西,所以我選擇了東北大學。
AI科技大本營:在南洋理工大學和東北大學做科研有什麼不一樣嗎?
郭貴冰:南洋理工大學學術氛圍更濃一些,經常有學術交流,有一些專家過來,我們可以去交流。回國之後,我感覺這方面的研究方式相對來說機會要小很多。硬體設施上我覺得倒還好,因為我現在能夠給學生使用的硬體資源還蠻豐富的。
最後,附上專案連結:
LibRec: http://www.librec.net/
Github Repo: https://github.com/guoguibing/librec
Doc Link: http://wiki.librec.net/doku.php