天天看點

基于LUCENE實作自己的推薦引擎

采用基于資料挖掘的算法來實作推薦引擎是各大電子商務網站、SNS社群最為常用的方法,推薦引擎常用的Content-Based推薦算法及協同過濾算法(Item-Based、User-based在電子商務推薦系統入門v2.0、電子商務推薦系統入門基礎中已經有所闡述。但從實際應用來看,對于大部分中小型企業來說,要在電子商務系統完整采用以上算法有很大的難度。 

1、常用推薦引擎算法問題 

1)、相對成熟、完整、現成的開源解決方案較少 

粗略分來,目前與資料挖掘及推薦引擎相關的開源項目主要有如下幾類: 

資料挖掘相關:主要包括Weka、R-Project、Knime、RapidMiner、Orange 等 

文本挖掘相關:主要包括OpenNLP、LingPipe、FreeLing、GATE 等,具體可以參考LingPipe’s Competition 

推薦引擎相關:主要包括Apache Mahout、Duine framework、Singular Value Decomposition (SVD) ,其他包可以參考Open Source Collaborative Filtering Written in Java 

搜尋引擎相關:Lucene、Solr、Sphinx、Hibernate Search等 

2)、常用推薦引擎算法相對複雜,入門門檻較低 

3)、常用推薦引擎算法性能較低,并不适合海量資料挖掘 

以上這些包或算法,除了Lucene/Sor相對成熟外,大部分都還處于學術研究使用,并不能直接應用于網際網路大規模的資料挖掘及推薦引擎引擎使用。 

2、采用Lucene實作推薦引擎的優勢 

對很多衆多的中小型網站而言,由于開發能力有限,如果有能夠內建了搜尋、推薦一體化的解決方案,這樣的方案肯定大受歡迎。采用Lucene來實作推薦引擎具有如下優勢: 

1)、Lucene 入門門檻較低,大部分網站的站内搜尋都采用了Lucene 

2)、相對于協同過濾算法,Lucene性能較高 

3)、Lucene對Text Mining、相似度計算等相關算法有很多現成方案 

在開源的項目中,Mahout或者Duine Framework用于推薦引擎是相對完整的方案,尤其是Mahout 核心利用了Lucene,是以其架構很值得借鑒。隻不過Mahout目前功能還不是很完整,直接用其實作電子商務網站的推薦引擎尚不是很成熟。隻不過從 Mahout實作可以看出采用Lucene實作推薦引擎是一種可行方案。 

3、采用Lucene實作推薦引擎需要解決的核心問題 

Lucene擅長Text Mining較為擅長,Lucene在contrib包中提供了MoreLikeThis功能,可以較為容易實作Content-Based的推薦,但對于涉及使用者協同過濾行為的結果(所謂的Relevance Feedback),Lucene目前并沒有好的解決方案。需要在Lucene中内容相似算法中加入使用者協同過濾行為對因素,将使用者協同過濾行為結果轉化為Lucene所支援的模型。 

4、推薦引擎的資料源 

電子商務網站與推薦引擎相關典型的行為: 

    * 購買本商品的顧客還買過 

    * 浏覽本商品的顧客還看過 

    * 浏覽更多類似商品 

    * 喜歡此商品的人還喜歡 

    * 使用者對此商品的平均打分 

是以基于Lucene實作推薦引擎主要要處理如下兩大類的資料 

1)、内容相似度 

例如:商品名稱、作者/譯者/制造商、商品類别、簡介、評論、使用者标簽、系統标簽 

2)、使用者協同行為相似度 

例如:打标簽、購買商品、點選流、搜尋、推薦、收藏、打分、寫評論、問答、頁面停留時間、所在群組等等 

5、實作方案 

5.1、内容相似度 

基于Lucene MoreLikeThis實作即可。 

5.1、對使用者協同行為的處理 

1)、使用者每一次協同行為都使用lucene來進行索引,每次行為一條記錄 

2)、索引記錄中包含如下重要資訊: 

商品名、商品id、商品類别、商品簡介、标簽等重要特征值、使用者關聯行為的其他商品的特征元素、商品縮略圖位址、協同行為類型(購買、點選、收藏、評分等)、Boost值(各協同行為在setBoost時候的權重值) 

3)、對評分、收藏、點選等協同行為以商品特征值(标簽、标題、概要資訊)來表征 

4)、不同的協同行為類型(例如購買、評分、點選)設定不同的值setBoost 

5)、搜尋時候采用Lucene MoreLikeThis算法,将使用者協同轉化為内容相似度 

以上方案隻是基于Lucene來實作推薦引擎最為簡單的實作方案,方案的準确度及細化方案以後再細說。 

更為精細的實作,可以參考Mahout的算法實作來優化。

繼續閱讀