本の「 Mahout in Action 」で説明されているように、アイテムベースの推奨事項が何であるかについて困惑しています。本にはアルゴリズムがあります:
for every item i that u has no preference for yet
for every item j that u has a preference for
compute a similarity s between i and j
add u's preference for j, weighted by s, to a running average
return the top items, ranked by weighted average
アイテム間の類似度を計算するにはどうすればよいですか?コンテンツを使用している場合、それはコンテンツベースの推奨ではありませんか?
元のアイテムベースの推奨は、ユーザーアイテムのランキングに基づいてtotallyです(たとえば、ユーザーが3つ星の映画を評価したか、ユーザーが「いいね!」)ビデオ)。アイテム間の類似度を計算する場合、すべてのユーザーの評価の履歴以外は何も知る必要はありません。したがって、アイテム間の類似性は、アイテムコンテンツのメタデータではなく、評価に基づいて計算されます。
例を挙げましょう。以下のようないくつかの評価データにしかアクセスできないとします。
_user 1 likes: movie, cooking
user 2 likes: movie, biking, hiking
user 3 likes: biking, cooking
user 4 likes: hiking
_
ここで、ユーザー4に推奨を行うとします。
最初に、アイテムの逆インデックスを作成すると、次のようになります。
_movie: user 1, user 2
cooking: user 1, user 3
biking: user 2, user 3
hiking: user 2, user 4
_
これはバイナリの評価(好きかどうかにかかわらず)なので、 Jaccard Similarity のような類似度を使用してアイテムの類似度を計算できます。
_ |user1|
similarity(movie, cooking) = --------------- = 1/3
|user1,2,3|
_
分子では、user1が映画と料理の両方にある唯一の要素です。分母では、映画と料理の結合に3人の異なるユーザー(user1,2,3)があります。 _|.|
_ここで、セットのサイズを示します。したがって、私たちの場合、映画と料理の類似性は1/3であることがわかります。すべての可能なアイテムのペア_(i,j)
_に対して同じことを行うだけです。
たとえば、すべてのペアの類似性計算が完了したら、ユーザー4に推奨を行う必要があります。
similarity(hiking, x)
の類似性スコアを見てください。ここで、xは他のタグの場合があります。ユーザー3に推奨を行う必要がある場合は、リスト内の各アイテムから類似度スコアを集計できます。例えば、
_score(movie) = Similarity(biking, movie) + Similarity(cooking, movie)
score(hiking) = Similarity(biking, hiking) + Similarity(cooking, hiking)
_
コンテンツベースのポイントは、ユーザーとアイテムの両方のコンテンツを知る必要があるということです。通常は、共有属性スペースのコンテンツを使用して、ユーザープロファイルとアイテムプロファイルを作成します。たとえば、映画の場合は、映画のスターとジャンルを使って(たとえば、バイナリコーディングを使用して)表現します。ユーザープロファイルについては、ユーザーが映画のスターやジャンルなどを好きであることに基づいて同じことを行うことができます。次に、ユーザーとアイテムの類似性を、たとえばコサイン類似性を使用して計算できます。
具体的な例を次に示します。
これは、5つの映画スターと5つの映画ジャンルに対するユーザーの好みを含む、ユーザープロフィール(バイナリエンコーディングを使用、0は非類似、1は類似を意味する)であるとします。
_ Movie stars 0 - 4 Movie Genres
user 1: 0 0 0 1 1 1 1 1 0 0
user 2: 1 1 0 0 0 0 0 0 1 1
user 3: 0 0 0 1 1 1 1 1 1 0
_
これが私たちの映画のプロフィールだとしましょう:
_ Movie stars 0 - 4 Movie Genres
movie1: 0 0 0 0 1 1 1 0 0 0
movie2: 1 1 1 0 0 0 0 1 0 1
movie3: 0 0 1 0 1 1 0 1 0 1
_
映画がユーザーにとってどの程度優れているかを計算するには、 コサイン類似度 を使用します。
_ dot-product(user1, movie1)
similarity(user 1, movie1) = ---------------------------------
||user1|| x ||movie1||
0x0+0x0+0x0+1x0+1x1+1x1+1x1+1x0+0x0+0x0
= -----------------------------------------
sqrt(5) x sqrt(3)
= 3 / (sqrt(5) x sqrt(3)) = 0.77460
_
同様に:
_similarity(user 2, movie2) = 3 / (sqrt(4) x sqrt(5)) = 0.67082
similarity(user 3, movie3) = 3 / (sqrt(6) x sqrt(5)) = 0.54772
_
ユーザーi
に1つの推奨を与える場合は、similarity(i, j)
が最も高い映画j
を選択するだけです。
お役に立てれば。
「アイテムベース」は、実際には「アイテム類似性ベース」を意味します。ここには、好きな類似性メトリックを配置できます。はい。コンテンツに基づいている場合、たとえば用語ベクトルのコサイン類似性の場合、これを「コンテンツベース」と呼ぶこともできます。