7

Spark MLLib の ALS を使用してレコメンデーション システムを構築しようとしています。

現在、すべてのユーザー向けの推奨事項を毎日事前に作成しようとしています。単純な暗黙のフィードバックと ALS を使用しています。

問題は、2,000 万人のユーザーと 3,000 万の製品があり、メインの predict() メソッドを呼び出すには、ユーザーと製品のデカルト結合が必要であり、これは大きすぎて、結合だけを生成するのに数日かかる場合があることです。デカルト結合を回避してプロセスを高速化する方法はありますか?

現在、64Gb の RAM を搭載した 8 つのノードがあり、データには十分だと思います。

val users: RDD[Int] = ???           // RDD with 20M userIds
val products: RDD[Int] = ???        // RDD with 30M productIds
val ratings : RDD[Rating] = ???     // RDD with all user->product feedbacks

val model = new ALS().setRank(10).setIterations(10)
  .setLambda(0.0001).setImplicitPrefs(true)
  .setAlpha(40).run(ratings)

val usersProducts = users.cartesian(products)
val recommendations = model.predict(usersProducts)
4

1 に答える 1

1

20M x 30M のマトリックス全体が本当に必要かどうかはわかりません。ユーザーごとに製品の推奨事項を事前に作成したいだけの場合は、すべてのユーザーに対して試して、最も強力な推奨事項recommendProducts(user: Int, num: Int)に制限してください。numもありrecommendUsers()ます。

于 2015-04-11T15:54:32.080 に答える