私は約700kのユーザーのデータベースを持っており、視聴/読んで購入したアイテムなどを持っています。 私が構築しているソーシャルネットワークで友人になりたい人を実際に見つけるだけでなく、似たような好みのユーザーが楽しんだことに基づいて新しいアイテムを推薦するリコメンデーションエンジンを構築したいと思います。 last.fm)。次のように類似のアイテムとユーザーを見つけるための推奨アルゴリズム(と実装)
私の要件は次のとおりです。私のデータベースにある「ユーザー」の
- 大半は、実際に私のウェブサイトのユーザーではありません。それらは第三者ソースから採掘されたデータです。しかし、ユーザーを推薦する際には、私のウェブサイトのメンバーであるユーザーに検索を制限したい(大きなデータセットを利用しながら)。
- 私は複数の項目を考慮する必要があります。 「あなたが楽しんだこの1つのアイテムが好きな人」ではなく、「あなたが楽しんだアイテムの大半を好む人...」。
- ユーザー間の類似点を計算し、プロファイルを表示するときに表示する必要があります(味覚メートル)。
- 評価の高い商品もあれば、評価されていない商品もあります。格付けはブール値ではなく1から10までです。ほとんどの場合、他の統計情報から評価値を差し引くことは可能です(たとえば、ユーザーがアイテムを好きで評価していない場合は、評価は9とすることができます)。
- これは、Pythonコードとやりとりする必要があります。好ましくは、それは別々の(おそらくNoSQL)データベースを使用し、私のウェブのバックエンドで使用するAPIを公開するべきです。私が作っているプロジェクトはPyramidとSQLAlchemyを使っています。
- アイテムのジャンルを考慮したいと思います。
- 私はそのジャンル(おそらくタグ)とそのアイテムを楽しむユーザー(Amazonの「このアイテムを購入した人」とLast.fmのアーティストページのようなもの)の両方に基づいてアイテムページに同様のアイテムを表示したいと思います。異なるジャンルのアイテムはまだ表示されるはずですが、類似性の値は低くなります。
- 私はいくつかの例でアルゴリズムの実装がうまく文書化されている方が好きです。
これらのアルゴリズムは非常に多くのアルゴリズムを実装しており、自分のデータ/用途に最も適したものを探しているので、「pysuggestまたはmahoutを使用する」という回答はしないでください。私はNeo4jに興味を持ち、どのようにしてユーザーとアイテム間の接続のグラフとして表現できるのでしょうか。
ジャンルの項目が接続されているアイテムのカテゴリノードをお勧めします。一致句でそれらを考慮に入れることができます –
実際には非常に便利ですが、リンクはグラフではなくグラフ-dbに情報を格納しています推奨に基づいたアプローチ。 – Steve
ありがとうございました!私はもう少し読んだことがあり、Neo4jの文書の中でcypher料理の本を見て、それが私が必要とするものを正確にしています。私は推薦エンジンのためにグラフデータベースアプローチを採用することに決めました。 – vomitcuddle