テキスト エクスプローラーのコサイン類似度測定テキスト エクスプローラーでコサイン類似度測定を実行して、互いに「近い」ドキュメントを識別することは可能ですか。ドキュメントをクラスタ化して潜在的意味分析を実行できることはわかりましたが、コサイン類似度測定を計算する方法がわかりません。ご協力いただければ幸いです。
ラフル
Re: テキスト エクスプローラーのコサイン類似度測定これは素晴らしい質問です。コサイン類似度係数は、考慮されるベクトルが中心化されている場合(つまり、平均がゼロの場合)、相関係数と同一になります。伝統的に、情報検索分野では、データ項マトリックス(DTM)が作成され、ベクトルを中心化または標準化(つまり、中心化とスケーリング)せずに、そのデータ項マトリックス上で直接特異値分解(SVD)が行われます。これと同様に、コサイン類似度は、中心化されていないベクトルとの関連性の尺度です。
ただし、DTM をセンタリングすることには重要な利点があります。具体的には、センタリングが行われていない場合、SVD の最初の特異ベクトル (最初の次元またはトピック) は、必ずしも多次元空間で最も重要な特異ベクトルであるとは限りません。これが、JMP でユーザーが潜在意味分析やトピック分析で使用するために DTM をセンタリングおよび/または標準化できる理由の 1 つです。同様に、相関係数はセンタリングされ、スケーリングされた (つまり、標準化された) DTM から取得されます。
つまり、DTM をデータ テーブルに保存し、[分析] > [多変量法] > [多変量] の順に進み、すべての DTM 列を Y ロールに追加して [OK] をクリックすることで、ベクトルの類似性の尺度を簡単に取得できます。結果の相関行列は、ベクトルの類似性の度合いを示します。つまり、値 1 は同じ方向の 2 つの同一ベクトルを示し、値 -1 は反対方向を指す 2 つの同一ベクトルを示します。最後に、用語ではなくドキュメント間の類似性を検索する場合は、上記の手順を実行する前にデータを転置する必要があります。
HTH、
~ローラ
PS JMP 13.2 にアップグレードしていない場合は、アップグレードすることを強くお勧めします。13.2 の Text Explorer の改善点について詳しくは、 こちらの投稿をご覧ください。
Re: テキスト エクスプローラーのコサイン類似度測定助言をありがとう。まさにそれをやろうと思っていたところです。マトリックスを入手して自分でやってみます。それが組み込まれているかどうか気になります。
ラフル
Re: テキスト エクスプローラーのコサイン類似度測定JMP ではドキュメント ターム マトリックス (DTM) を保存できるため、いつでもこれを直接計算できます。添付の表は、「航空機インシデント」サンプル データから作成されました。以下のコード (私のラップトップでは実行に数秒かかりました) は、添付の 2 番目の表の類似性マトリックスを生成しました。
// https://en.wikipedia.org/wiki/Cosine_similarity
NamesDefaultToHere(1);
dt = CurrentDataTable();
m = dt << getAsMatrix;
n = NRow(dt);
// Make some column headings for the final table
cols = {};
for(i=1, i<=n, i++,
InsertInto(cols, "Document in Row "||Char(i));
);
// Get the modulus of each feature vector
modulus = J(n, 1, .);
for(i=1, i<=n, i++,
modulus[i] = sqrt(ssq(m[i,0]));
);
// Get the cosine of the angle between each pair of feature vectors
cosTheta = J(n, n, .);
for(i=1, i<=n, i++,
for(j=1, j<=i, j++,
cosTheta[i,j] = Sum(m[i, 0]
m[j, 0])/(modulus[i] * modulus[j]);
);
);
dt2 = AsTable(cosTheta, << ColumnNames(cols));
dt2 << setName("Cosine between feature vectors in "||(dt << getName));