「関連商品」をよく目にします。たとえば、ブログには関連する投稿があり、本には関連する本があります。私の質問は、それらの関連性をどのようにコンパイルするかです。タグだけの場合、同じタグが付いていない関連アイテムをよく目にします。たとえば、「ピンク」を検索する場合、関連するアイテムに「紫」のタグを付けることができます。
誰かが何か考えを持っていますか?
2つのアイテムの類似度を計算する方法はたくさんありますが、簡単な方法については、Jaccard係数を見てください。
http://en.wikipedia.org/wiki/Jaccard_index
これは次のとおりです。J(a、b)=交差(a、b)/和集合(a、b)
So lets say you want to compute the coefficient of two items:
Item A, which has the tags "books, school, pencil, textbook, reading"
Item B, which has the tags "books, reading, autobiography"
intersection(A,B) = books, reading
union(A,B) = books, school, pencil, textbook, reading, autobiography
so J(a,b) = 2/6 = .333
So the most related item to A would be the item which results in the highest Jaccard Coefficient when paired with A.
いくつかの方法があります:
item_id
とrelated_item_id
、を含むテーブルを作成し、接続を挿入するためのインターフェイスを作成します。関連しているが類似性がないか、同じカテゴリ/タグに属していない(またはカテゴリ化されていないエントリテーブル内の)2つのアイテムを関連付けるのに便利です。例:浴槽とゴム製のアヒルタグに基づいて関連アイテムの簡単なリストを取得するには、基本的なソリューションは次のようになります。
3つのテーブル、1つはアイテム、1つはタグ、もう1つは接続。接続テーブルは2つの列で構成され、残りのテーブルのIDごとに1つです。接続テーブルのエントリは、それぞれのIDを行に配置することにより、タグとアイテムをリンクします。
次に、関連アイテムのリストを取得します。
元のアイテムと少なくとも1つのタグを共有するすべてのアイテムをフェッチします。必ずアイテムと一緒にタグを取得してから、簡単な評価メカニズムを使用して、元のアイテムと最も多くのタグを共有しているアイテムを特定してください。各タグは、関係の関連性を1つ増やします。
タグ付けの習慣によっては、大きな包括的なタグが関連性を混同しないように、いくつかのカウンターメカニズムを追加するのが賢明かもしれません。これを実現するために、アプライアンスの特定のしきい値を下回るタグにより大きな重みを与えることができます。私にとって一般的にうまく機能しているしきい値は、total_number_of_tag_appliances / total_number_of_tagsであり、これはアプライアンスの平均数になります。タグappliance-countが平均よりも小さい場合、関係の関連性は2倍になります。
タグ以上のものにすることができます。たとえば、段落に表示される各作品の平均、次にタイトルなどにすることができます。
私は彼らがアプリケーションにもっと素晴らしい機能を追加するためにオントロジーを使用していると言うでしょう。
「この本を購入した人も購入した」に基づくこともできます
とにかく、あなたはあなたのアイテムの間にいくらかの接続が必要になるでしょう、そしてそれらは主に人間によって作られます
これは、PostgreSQLとRuby on Railsを使用したJaccardインデックスの実装(GIST)です...
これは、バイグラムに基づく2つのテキスト間のジャッカードインデックスの実装です。 https://packagist.org/packages/darkopetreski/textcategorization