符号化なし協同アルゴリズムによるパーソナライズされた推奨

3336 ワード

ターゲット
昨日のURLレポートデータからALSモデルを生成します.その後モデルをフロー計算にロードし,リアルタイムURLのアクセスユーザにコンテンツ推薦を行う.全体の流れはSQLを書くだけで(解析をする)、構成をすればできます.
リソースの準備
READMEにダウンロードアドレスがあります
モデルトレーニング
まず、プロファイルals-trainingをコピーし、プロファイルでいくつかのデータをシミュレートしました.URLを仮定すると、itemIdが2の文章がuserId=1のユーザーにアクセスされたことを示します.
http://123.com/path?userId=1&itemId=2

その後のSQLはuseridとitemIdを抽出しlabel,featuresを含むテーブルを得る.StreamingProでは、すべてのアルゴリズムの入力がこの仕様に従います.ALSアルゴリズムの場合、labelはuserIdを表し、featuresはuserId、ItemId、ratingの3つのカンマでつづられた文字列である.回帰クラスアルゴリズムでは、カンマでつなぎ合わせた数値です.
最後に,モデルトレーニングはコンポーネントAlgorithmOutputCompositorによって完了した.
{
        "name": "streaming.core.compositor.spark.output.AlgorithmOutputCompositor",
        "params": [
          {
            "path": "/tmp/als_log",
            "algorithm": "als"
          },
          {
            "rank": 10,
            "alpha": 1.0
          }
        ]
      }

pathは出力経路を表す.Algorithmはアルゴリズムを表す.現在als,lr(線形回帰),lr 2(論理回帰)の3つのアルゴリズムのみがサポートされている.その後はどんどん追加されます.
第2のパラメータのセットは、対応するアルゴリズムのいくつかの構成パラメータです.複数のグループを構成し、アルゴリズムは最適なパラメータのセットを自動的に選択してモデルを取得し、対応するpathパスの下に保存することができます.
結果を直接実行できます.
./bin/spark-submit   \
--class streaming.core.StreamingApp \
--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を参照.
ユーザの論理を解析するのは上記と同じである.コアモジュールは次のとおりです.
{
        "name": "streaming.core.compositor.spark.transformation.AlgorithmCompositor",
        "params": [
          {
            "path": "file:///tmp/als_log",
            "algorithm": "als",
            "outputTableName": "test4",
            "recommendUsersForProductsNum": 1
          }
        ]
      }

pathはモデルファイルが存在する場所です.recommendUsersForProductsNumは、ユーザーごとにどのくらいのコンテンツを推奨するかを示します.outputTableは出力されたテーブルで、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   \
--class streaming.core.StreamingApp \
--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を他の出力源に完全に置き換えることができます.
データの予測に対して、私たちはただそれを1つのデータTransformerと見なして、入ってきたデータに基づいて、新しいpredictionフィールドを生成します.
モデルトレーニングも予測もSQLストリームに基づいて行われ、データの流れに完璧に溶け込んでいます.
ふろく
興味のある実装は、コードを参照することができます