2

私はチューターを学生に推薦するRailsアプリを構築しています。専攻 (数学、生物学など)、経験 (ジュニアなど)、クラス (数学 201 など)、好み (自称キーワード)、評価など、複数の次元に基づいてそれらを一致させる必要があります。

Rails の共同レコメンデーション エンジン (recommendable、recommendify) と Mahout を調べてみました。私の場合、より構造化されたクエリを可能にする構造化データがはるかに多いため、共同レコメンデーションは最良の選択ではないようです。たとえば、次のような学生向けのレコメンデーション ロジックを作成できます。

if student looks for a Math tutor in Math 201:
  if there's a tutor in Math major offering tutoring in Math 201 then return
  else if there's a tutor in Math major then sort by experience then return
  else if there's a tutor in quantitative major then sort by experience then return
  ...

私の質問は次のとおりです。

  1. 私のレコメンデーション システムがプリファレンス ベースであることを考えると、コラボレーション レコメンデーション アルゴリズムにはどのような利点がありますか?

  2. それが大きなメリットをもたらす場合、上記の好みに基づく推奨事項とどのように組み合わせることができますか?

  3. 私のアプローチには複数のテーブルのクエリが含まれるため、効率的ではない可能性があります。これについてどうすればよいですか?

どうもありがとう。

4

2 に答える 2

4

互換性の測定値は、メトリックとして再構築すると有益なようです。あなたがしなければならないことは、あなたの「列」をデータの次元の異なる構成要素として解釈することです。最終的には、学生とチューター (および学生/学生とチューター/チューター) の間の互換性の測定値を返すバイナリ関数を作成する必要があるという考えです。このメトリックをすべてのタイプのデータに拡張する動機は、このアイデアを使用して、一致基準を最近傍検索として再定式化できることです。

http://en.wikipedia.org/wiki/Nearest_neighbor_search

この問題は非常によく研究されているため、この問題には多くのデータ構造と解決策があります。たとえば、点群データでよく使用される次のライブラリを試すことができます。

http://www.cs.umd.edu/~mount/ANN/

物事を少し最適化するために、データ セットに対して主成分分析を実行して、データを事前にフィルター処理することもできます。これにより、最近傍検索を行う空間の次元を減らすことができ、通常はノイズをいくらか減らすという追加の利点があります。

http://en.wikipedia.org/wiki/Principal_component_analysis

幸運を!

于 2012-04-18T06:55:34.580 に答える
3

個人的には、協調フィルタリング(cf)がうまく機能すると思います。cfの中心的な考え方はセレンディピティであることに注意してください。言い換えると、あまりにも多くの制約を追加すると、ユーザーに生ぬるい推奨が行われる可能性があります。cfの全体的なポイントは、同様のユーザーに基づいて刺激的で関連性のある推奨事項を提供することです。このような厳しい制約を課す必要はありません。

カスタムcfアルゴリズムの実装を決定する場合は、Amazonが公開しているこの記事[pdf]を読むことをお勧めします。この記事では、Amazonのレコメンデーションシステムについて説明しています。簡単に言うと、彼らが使用するアルゴリズムは次のとおりです。

for each item I1
    for each customer C who bought I1
        for each I2 bought by a customer
            record purchase C{I1, I2}
    for each item I2
        calculate sim(I1, I2) 
        //this could use your own similarity measure, e.g., cosine based
        //similarity, sim(A, B) = cos(A, B) = (A . B) / (|A| |B|) where A
        //and B are vectors(items, or courses in your case) and the dimensions
        //are customers
return table

このテーブルの作成はオフラインで行われることに注意してください。オンラインアルゴリズムは、推奨事項をすばやく返すことができます。どうやら、推奨品質は優れています。

いずれにせよ、一般的なcf(たとえば、さまざまなcf戦略)とそれが自分に適している理由についてより良いアイデアを知りたい場合は、その記事を読んでください(心配しないでください。非常に読みやすいです)。単純なcfレコメンダーの実装は難しくありません。最適化は後で行うことができます。

于 2012-04-21T19:41:57.707 に答える