2013-12-17 141 views
4

我有一個包含800萬不同用戶和180K不同產品的5000萬用戶偏好的數據集。我目前正在使用一個布爾數據模型,並有一個基本的基於Tanimoto相似性的推薦器。 我正在嘗試探索不同的算法以獲得更好的建議,並開始使用ALSWR因子分解器進行SVD​​。我使用了mahout中提供的基本SVD推薦器,如下所示。在Mahout中實現SVD推薦器

DataModel dataModel = new FileDataModel("/FilePath");

ALSWRFactorizer factorizer = new ALSWRFactorizer(dataModel, 50, 0.065, 15);

recommender = new SVDRecommender(dataModel, factorizer);

按我的基本的瞭解,我相信因式分解發生脫機,它會在用戶的特點和項目特點。雖然實際的請求是通過獲取用戶向量的點積和所有可能的項目向量來計算用戶的頂級產品來服務的。

我有一對夫婦對這個作法疑慮: -

  1. 什麼是選擇因子分解參數和 多少時間做的因式分解通常採取的最佳方式?我嘗試了上述參數,因子分解本身運行了30分鐘以上。
  2. 有沒有辦法爲實時請求提供更快的服務,因爲使用帶有所有可能項目向量的點積 會導致較高的請求時間? 有沒有什麼離線SVD?
  3. 看看我有的數據集的大小,我應該嘗試一些其他factoriser?

回答

2

我想一起回答你所有的問題。

鑑於數據的大小和實時請求,您應該採取另一種方法。

  1. 執行離線項目項目相似度計算,對於評分很多的項目,通常不需要這樣做。他們大多不會改變。您可能需要重新計算收視率較低的項目。
  2. 使用項目項目相似性列表實時計算每個用戶的用戶項目評級預測。這項操作並不昂貴,因爲您的項目比用戶少很多。當物品尺寸變化不大時,這也是一個恆定的時間操作。
+0

我們已經有這種方法的工作。我們已經實現了一個基本的項目項目,我們現在試圖使用某種形式的SVD實現不同的算法。從我讀過的內容來看,我希望SVD能有更好的推薦質量。 – user1045047

+0

當你有實時需求時,我認爲你運氣不好。順便說一下:你希望更好的質量?你可以先嚐試一個算法,看看它是否更好! – fatih

+0

這就是我的問題所在,我已經閱讀了關於SVD的內容,現在我正在嘗試它,但是如前所述,我的第一個疑問是如何調整算法並使分解運行。除此之外,我問的第二件事是是否有辦法實時提供建議,可能應該是一個單獨的問題。 – user1045047