Apache Mahout的推薦引擎Taste介紹
Taste是 Apache Mahout 提供的一個個性化推薦引擎的高效實現,該引擎基于java實現,可擴展性強,同時在mahout中對一些推薦算法進行了MapReduce編程模式轉化,從而可以利用hadoop的分布式架構,提高推薦算法的性能。
在Mahout0.5版本中的Taste, 實現了多種推薦算法,其中有最基本的基于用戶的和基于內容的推薦算法,也有比較高效的SlopeOne算法,以及處于研究階段的基于SVD和線性插值的算法,同時Taste還提供了擴展接口,用于定制化開發基于內容或基于模型的個性化推薦算法。
Taste 不僅僅適用于 Java 應用程序,還可以作為內部服務器的一個組件以 HTTP 和 Web Service 的形式向外界提供推薦的邏輯。Taste 的設計使它能滿足企業對推薦引擎在性能、靈活性和可擴展性等方面的要求。
下圖展示了構成Taste的核心組件:
從上圖可見,Taste由以下幾個主要組件組成:
DataModel:DataModel是用戶喜好信息的抽象接口,它的具體實現支持從指定類型的數據源抽取用戶喜好信息。在Mahout0.5中,Taste 提供 JDBCDataModel 和 FileDataModel兩種類的實現,分別支持從數據庫和文件文件系統中讀取用戶的喜好信息。對于數據庫的讀取支持,在Mahout 0.5中只提供了對MySQL和PostgreSQL的支持,如果數據存儲在其他數據庫,或者是把數據導入到這兩個數據庫中,或者是自行編程實現相應的類。
UserSimilarit和ItemSimilarity:前者用于定義兩個用戶間的相似度,后者用于定義兩個項目之間的相似度。Mahout支持大部分駐留的相似度或相關度計算方法,針對不同的數據源,需要合理選擇相似度計算方法。
UserNeighborhood:在基于用戶的推薦方法中,推薦的內容是基于找到與當前用戶喜好相似的“鄰居用戶”的方式產生的,該組件就是用來定義與目標用戶相鄰的“鄰居用戶”。所以,該組件只有在基于用戶的推薦算法中才會被使用。
Recommender:Recommender是推薦引擎的抽象接口,Taste 中的核心組件。利用該組件就可以為指定用戶生成項目推薦列表。