5

市場でお互いを見つけようとしている買い手と売り手がいるとします。バイヤーはキーワードで自分のニーズにタグを付けることができます。売り手は、販売しているものに対して同じことを行うことができます。2 つのキーワード セットに基づいて、特定の購入者との関連性に関して販売者をランク付けするアルゴリズムを見つけることに興味があります。

次に例を示します。

buyer_keywords = {"furry", "four legs", "likes catnip", "has claws"} 

次に、関連性の観点から順序をランク付けする必要がある 2 つの潜在的な売り手があります。

seller_keywords[1] = {"furry", "four legs", "arctic circle", "white"}
seller_keywords[2] = {"likes catnip", "furry", 
                      "hates mice", "yarn-lover", "whiskers"}

キーワードの交差のみを使用する場合、あまり差別化されません。両方が 2 つのキーワードで交差します。交差数を集合和集合のサイズで割ると、キーワードの数が多いため、実際には売り手 2 の方が悪いです。これにより、キーワード セットのサイズを修正しないメソッドに対して自動的にペナルティが発生するように思われます (キーワードの追加にペナルティを科したくはありません)。

問題をもう少し構造化するために、キーワード属性の強さの正確な測定値があるとします (各販売者の合計が 1 になる必要があります)。たとえば、次のようになります。

seller_keywords[1] = {"furry":.05, 
                      "four legs":.05, 
                      "arctic circle":.8, 
                      "white":.1}

seller_keywords[2] = {"likes catnip":.5, 
                      "furry":.4, 
                      "hates mice":.02, 
                      "yarn-lover":.02, 
                      "whiskers":.06}

これで、ヒットの値を合計できます。つまり、売り手 1 のスコアは 0.1 しかありませんが、売り手 2 のスコアは 0.9 です。これまでのところ、非常に良いですが、非常に限定的で説明のないキーワード セットを持つ 3 番目のセラーを獲得する可能性があります。

seller_keywords[3] = {"furry":1}

これにより、唯一のキーワードがヒットした場合にトップに躍り出ますが、これは良くありません。

とにかく、私の推測 (そして希望) は、これはかなり一般的な問題であり、既知の長所と制限を持つさまざまなアルゴリズム ソリューションが存在するということです。これはおそらく CS101 でカバーされているものなので、この質問に対する適切な回答は、関連する参考文献へのリンクであると思います。

4

2 に答える 2

8

コサイン類似度を使用しようとしていると思います。これは、最初のハックとして十分に機能する基本的なテクニックです。直感的に、知っているすべてのタグが特定のインデックスを持つベクトルを作成します。

terms[0] --> aardvark
terms[1] --> anteater
...
terms[N] --> zuckerberg

次に、この空間に各人物のベクトルを作成します。

person1[0] = 0     # this person doesn't care about aardvarks
person1[1] = 0.05  # this person cares a bit about anteaters
...
person1[N] = 0

各人は、この N 次元空間のベクトルになります。次に、コサイン類似度を使用して、それらのペア間の類似度を計算できます。計算上、これは基本的に 2 つのベクトル間の角度を求めるのと同じです。コサインを 1 に近づける必要があります。これは、ベクトルがほぼ同一直線上にあることを意味します。つまり、ほとんどの次元で同様の値が得られます。

このメトリックを改善するには、ベクトル内の要素にtf-idf重み付けを使用することをお勧めします。Tf-idf は、人気のある用語 (「iPhone」など) の重要性を軽視し、この人物が特に関連していると思われる人気のない用語の重要性を促進します。

tf-idf 重み付けとコサイン類似度を組み合わせると、このようなほとんどのアプリケーションでうまくいきます。

于 2011-02-28T14:00:12.820 に答える
0

探しているものは分類法と呼ばれます。コンテンツにタグを付けて、関連性の高い順に並べ替えます。

すぐに使用できるアルゴリズムが見つからない場合がありますが、実際のケースから始めることができます。タクソノミーに関する Drupal ドキュメントには、いくつかのガイドラインが記載されており、検索モジュールのソースを確認してください。

基本的に、ランクは用語の頻度に基づいています。商品が少数のタグで定義されている場合、それらの重みはより大きくなります。一部の製品ページにのみ表示されるタグは、非常に具体的であることを意味します。単語の強度を静的な方法で定義するべきではありません。しかし、それらをその文脈で調べます。

よろしく

于 2011-02-28T13:44:50.843 に答える