無編碼利用協同演算法實現個性化推薦

2021-09-23 17:58:13 字數 2213 閱讀 4911

根據昨天的url上報資料生成als模型。之後將模型載入到流式計算中,對實時url的訪問使用者進行內容推薦。整個流程只需要你寫寫sql(做解析),弄弄配置就搞定。

首先我們拷貝乙份配置檔案  

als-training,我在配置檔案裡模擬了一些資料,假設是一些url,大體如下,表示itemid 為2的文章被userid=1的使用者訪問了。

之後的sql就是抽取出userid 和itemid,然後得到乙個包含label, features 的表。在streamingpro中,所有的的演算法的輸入都會遵循這個規範。對於als演算法而言,label 表示userid, features則是userid,itemid,rating 三個按逗號拼接的字串。對於回歸類演算法,則是逗號拼接的數字。

最後通過元件algorithmoutputcompositor 完成模型訓練。

,

]}

path表示輸出路徑。 algorithm 表示演算法。目前只支援 als,lr(線性回歸),lr2(邏輯回歸)三種演算法。後續會不斷新增。

第二組引數則是對應演算法的一些配置引數。你可以配置多組,演算法自動回選擇最優的一組引數得到模型,並且儲存到對應的path路徑下。

你可以直接執行得到結果:

./bin/spark-submit   \

--master local[2] \

/tmp/streamingpro-0.3.2-snapshot-online-mllib-1.6.1.jar \

-streaming.name test \

-streaming.platform spark \

-streaming.job.file.path file://tmp/strategy.v2.json

接著我們要給指定的使用者進行推薦。參看 als-predict。

解析出使用者的邏輯是和上面的是一樣的。裡面的核心模組是:

]}

path 是模型檔案所在的位置。recommendusersforproductsnum 表示對每個使用者推薦多少內容。outputtablename是輸出的表, 方便後續繼續操作,比如儲存到redis或者資料庫中,方便前端程式做呼叫。

+----+----+--------------------+

|user|item| ratings|

+----+----+--------------------+

| 3| 2|[[2,3,0.900332472...|

| 2| 3|[[2,2,0.900333589...|

| 2| 2|[[2,2,0.900333589...|

+----+----+--------------------+

你可以輸入到任何你感興趣的系統中,streamingpro目前支援es,parquet等spark已經支援的格式作為輸出。 參看

als-streaming-predict,將所有的包名字首從

streaming.core.compositor.spark

轉換為streaming.core.compositor.spark.streaming

即可支援流式。執行指令碼如下:

./bin/spark-submit   \

--name "join" \

--master local[2] \

/tmp/streamingpro-0.3.2-snapshot-online-mllib-1.6.1.jar \

-streaming.name test \

-streaming.job.file.path file://tmp/strategy.v2.json

在streamingpro中,乙個演算法的模型訓練,僅僅被看做乙個特殊的儲存。我們完全可以將對應的algothrimoutputcompositor換成 其他的輸出源。

而對於資料的**,我們僅僅是把它看做乙個資料transformer,根據進來的資料,新生成乙個prediction欄位。

無論是模型訓練還是**,都是基於sql流來完成的,完美的融入到了資料的流程當中。

感興趣實現的,可以參考

個性化推薦演算法 協同過濾

sij 物品i 物品j 的相似度。分子 瀏覽過物品i 與 瀏覽過物品j的使用者的交集。分母 瀏覽過物品i 與 瀏覽過物品j的使用者的並集。懲罰熱門物品的相似度 puj 推薦物品j給使用者u的分值。sij 物品i 物品j 的相似度。ruj 使用者u對物品j的評分 一般取使用者最近瀏覽過的物品i 5個左...

利用tensorflow實現自編碼

1 原理 監督神經網路的本質就是對特徵的不斷學習挖掘的過程,而中間層就可以理解為對上一層特徵的提取,自編碼就是對神經網路中間層的提取,所以我們可以把高維的資料經過幾層對映到低維,在進行還原的過程 2 測試資料 構建2個三維的球,將其對映到2維,檢視資料分布 def make ball r 2,a 0...

Hadoop實現協同過濾演算法

step1 static class step1 reducer extends reducer step2 按使用者分組,計算所有物品出現的組合列表,得到使用者對物品的喜愛度得分矩陣 static class step2 reducer extends reducer step3 step4 pr...