1

クエリ ベクトル A と項目ベクトル B がある場合、ベクトルを重み付け/正規化する方法 (同じ戦略) を誰かが案内してくれると助かります。ベクトル A には次のコンポーネントがあります (property1 (バイナリ)、property2 (バイナリ)、property 3 (範囲 0 から 50 の整数)、property4 (範囲 (0 から 10) の整数)

ベクトル B は同じプロパティを持ちます

コサイン類似度を使用したこれらの 2 つのベクトル間の角度から、2 つのベクトル間の距離がわかります。類似性に基づいてレコメンデーションを作成したい。

しかし、この場合、プロパティやベクトルを正規化する方法については明確ではありません。これは、binary+binary_int 範囲 +int 範囲であるためです。また、あるプロパティに他のプロパティよりも高い重みを付与したい場合は、どうすればよいですか。どのようなオプションがありますか。

ドキュメントでコサイン類似性の例をオンラインで見つけましたが、この場合、ベクトル A と B はドキュメントではないため、この場合は TF-idf を使用していません。

お知らせ下さい、

ありがとう

4

1 に答える 1

1

td/idf の 2 つのベクトル間で従来のコサイン類似度を使用する場合、各項はベクトルの次元です。つまり、2 つの新しいベクトル A' と B' を形成し、これら 2 つの間の類似性を実行する必要があります。

これらのベクトルには各項の次元があり、65 個の項があります。

property 1: true and false
property 2: true and false
property 3: 0 through 50
property 4: 0 through 10

したがって、A' と B' は長さ 65 のベクトルになり、各要素は 0 または 1 になります。

A'(0) = 1 if A(0) = true, and 0 otherwise
A'(1) = 1 if A(0) = false, and 0 otherwise
etc.

明らかに、これは非効率的であることがわかります。td/idf でコサイン類似度を使用するために、実際に A' または B' を計算する必要はありません。それらを計算したふりをして、A と B で計算を実行できます。 A' と B' には正確に 4 つの 1 があるため、length(A') = length(B') = sqrt(4) であることに注意してください。

ただし、プロパティ 3 と 4 の類似性を考慮したい場合は、td/idf が最適ではない可能性があります。つまり、td/idf を使用すると、プロパティ 3 の値 40 はプロパティ 3 の値 41 とは異なり、ただし、41 は 12 よりも 40 から「離れている」とは見なされません。それらはすべて異なる用語です。

したがって、プロパティ 3 と 4 に距離を組み込む場合 (1 は 2 に非常に近く、50 は 2 から遠い)、距離メトリックを定義する必要があります。また、ブール値をプロパティ 3 および 4 よりも多くまたは少なく重み付けする場合は、別の距離メトリックも定義する必要があります。これらのことをしたい場合は、コサインを忘れて値を考え出してください。

次に例を示します。

distance = abs(A.property1 - B.property1) * 5 + 
           abs(A.property2 - B.property2) * 5 + 
           abs(A.property3 - B.property3) / 51 * 1 +
           abs(A.property4 - B.property4) / 10 * 2

そして、類似度 = (すべての距離の最大値) - 距離;

または、必要に応じて、類似度 = 1 / 距離。

好きなように定義できます。類似度を 0 ~ 1 にする必要がある場合は、最大距離で割って正規化します。

于 2014-10-04T22:07:20.907 に答える