問題タブ [cosine-similarity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4036 参照

algorithm - ベクトルのセットで最良のコサイン類似度を見つける

n 個のベクトルがあり、それぞれに m 個の要素 (実数) があります。すべてのペアの中でコサイン類似度が最大になるペアを見つけたいです。

簡単な解決策には、O(n 2 m) の時間が必要です。

より良い解決策はありますか?

アップデート

コサイン類似度/距離と三角形の方程式「コサイン類似度」を「コード長」に置き換えると、精度は失われますが速度が大幅に向上することに気づきました。( ANNのように、メトリック空間で最近傍法を解く既存のソリューションが多数あります)

0 投票する
2 に答える
2141 参照

machine-learning - コサイン類似度による複数文書クラスタリングの数学的手法

コサイン類似度: 2 つのドキュメントを相互に比較するときによく使用されます。2 つのベクトル間の角度を測定します。値がゼロの場合、2 つのベクトル間の角度は 90 度であり、項を共有しません。値が 1 の場合、2 つのベクトルは大きさを除いて同じです。コサインは、データがまばらで非対称であり、特性が不足しているという類似性がある場合に使用されます。

2 つのベクトル (ドキュメント) にコサインを使用すると、次の表に従って結果が得られます。

次に、その正規化を最後まで取得します。次に、コサイン Cos(v1,v2)= 90% を取得します。

しかし、10個のドキュメントがある場合、それは取得したことを意味します

次に、結果を比較する必要があります。

速い方法はありますか?cos を 10 個以上のドキュメントに取得するにはどうすればよいですか。

2 つのドキュメントの余弦を取得する方法は知っていますが、さらに多くのドキュメントを取得するにはどうすればよいでしょうか? 数学的方法が欲しい。

0 投票する
1 に答える
1354 参照

node.js - ドキュメントのストリーム内のドキュメント間の類似性を効率的に計算する方法

i1 つのドキュメントが単語のリストとして表されるテキスト ドキュメントを (Node.js で) 収集します。新しいドキュメントがドキュメントの一種のストリームとして来ることを考慮して、これらのドキュメント間の類似性を計算する効率的な方法は何ですか?

私は現在、各ドキュメント内の単語の正規化頻度に cos-similarity を使用しています。ますます多くのドキュメントを取得するため、スケーラビリティの問題があるため、TF-IDF (用語頻度、逆ドキュメント頻度) は使用しません。

最初は

私の最初のバージョンは、現在利用可能なドキュメントから始めて、大きな Term-Document 行列Aを計算し、 ( と の両方で正規化した後) ドキュメント間の cos-similarityとその単語頻度がそれぞれとであるように計算するS = A^T x Aことでした。S(i, j)norm(doc(i))norm(doc(j))ijdoc(i)doc(j)

新規書類の場合

新しいドキュメントを取得したらどうすればよいdoc(k)ですか? さて、このドキュメントと以前のすべてのドキュメントとの類似性を計算する必要がありますが、これにはマトリックス全体を作成する必要はありません。doc(k) dot doc(j)以前のすべての の内積を取ることができj、その結果はS(k, j)になります。これは素晴らしいことです。

トラブル

  1. SNode.js でのコンピューティングは非常に時間がかかります。実際には長すぎます!そこで、すべてをより高速に実行できる C++ モジュールを作成することにしました。そして、そうです!しかし、私はそれを待つことができません。中間結果を使用できるはずです。そして、「それを待たない」というのは、

    a. 計算が完了するのを待ちますが、
    b. マトリックスAが構築されるのを待ちます (これは大きなものです)。

  2. コンピューティング newS(k, j)は、ドキュメントが与えられたすべての単語のセットよりもはるかに少ない単語を持っているという事実を利用できます (これを使用して、マトリックス全体を構築しますA)。したがって、Node.js で実行する方が高速に見え、データにアクセスするために多くの余分なリソースが必要になるのを回避できます。

しかし、それを行うより良い方法はありますか?

: 私がコンピューティングを始めた理由は、すべてのデータにアクセスできる Node.js でS簡単に構築できA、C++ で行列乗算を実行して Node.js に戻すことができるためです。これにより、全体が大幅に高速化されます。 . しかし、コンピューティングSが実用的でなくなった今、それは役に立たないように見えます。

注 2 : ええ、全体を計算する必要はありません。S右上の要素 (または左下の要素) を計算するだけで済みますが、それは問題ではありません。時間計算の問題はその順序ではありません。

0 投票する
1 に答える
604 参照

java - Java でマップを使用した場合の予期しない/未定義の結果

私はドキュメントを推奨するためにいくつかの作業を行っており、そのためにコサイン類似度法を使用しています。そのメソッドのコードは次のとおりです。

問題は、パラメーターが渡される順序によって結果が異なることです。たとえば、呼び出すcosineSimilarity(v1, v2)と返され0.3ますが、呼び出すcosineSimilarity(v2, v1)とまったく異なる値が返されます。

Map.keySet() これは、マップに基づくセットを返すという事実と関係があると思いますが、これの意味を完全には理解していません。

メソッドのどこが間違っているのか誰にもわかりますか?

0 投票する
1 に答える
10582 参照

matlab - 2 つの行列を使用してコサイン類似度を計算する方法

A (次元 M x N) と B (N x P) の 2 つのマトリックスがあります。実際、それらはベクトルのコレクションです - A の行ベクトル、B の列ベクトルです。すべてのペアのコサイン類似度スコアを取得したいab、ここで、aは行列 A からのベクトル (行) であり、bは行列からのベクトル (列) です。 B.

行列を乗算することから始めました。これにより、行列C(次元 M x P) が得られます。

C = A*B

ただし、コサイン類似度スコアを取得するには、各値C(i,j)を対応する 2 つのベクトルのノルムで割る必要があります。Matlabでこれを行う最も簡単な方法を提案できますか?

0 投票する
2 に答える
6411 参照

java - スレッド"main"の例外java.lang.NumberFormatException:InfiniteまたはNaN

この1人の人を助けてくれませんか。大きな小数(BigDecimal)のログを取得しようとしていますが、以下の例外エラーメッセージが表示されます。

これは私が持っているものです:

2行目に例外があります。これを回避するにはどうすればよいですか?何卒よろしくお願い申し上げます。ちなみに、私はテキストファイルの「tf-idf」を計算しようとしています。

これが完全なコードです

File[] corpus = new File("files//").listFiles(); int totalDocuments = (corpus.length) - 1; //-1 for the suspect document.

`

0 投票する
3 に答える
1084 参照

machine-learning - ビッグ ASCII エンコード整数バイト配列としてフォーマットされたテキスト ドキュメントに類似性検出手法を適用できますか?

ファイル間の類似性を検出したいと思います。これを行う 1 つの方法は、類似性アルゴリズムへの入力スペースを減らすためにファイルをエンコードし、2 つ目はより正確な結果を得るためです。これは、ドキュメントの有益な機能のみを考慮して行われます。これを行う 1 つの方法は、非常に有益な用語を拡大し、頻繁な用語を縮小する tf-idf 頻度に従って、ファイルをベクトル空間変換に変換することです。私の質問は、テキスト表現が保持されていないドキュメントでこれを実行できるかどうかです。たとえば、最初にドキュメントが大きな整数配列に変換され、その文字が ASCII 値として表されるとします。

0 投票する
1 に答える
660 参照

similarity - コサイン類似度の前処理要件は何ですか?

コサイン類似度の入力は、比較したい 2 つの異なるデータを表す 2 つのベクトルです。ベクトルのセマンティックに関する要件はありますか? 単純に各ファイルのバイト表現にすることはできますか? そして、各バイトの頻度を計算しますか? これは理にかなっていますか?または、テキスト ファイルまたは tf-idf エンコーディング モデルについて話す場合、各次元がファイルからの生のデータではなく、各用語の頻度としてのメタデータであるファイルのベクトル化が必要ですか? 別の形で言えば、「正しい」ためにコサイン類似度はデータの複雑な前処理ステップを要求するか、テキストを念頭に置いていない、または頻度だけでデータの各バイトを表す入力整数値としてそれを与えることができます各バイトの用語?

0 投票する
4 に答える
5017 参照

search - TF-IDF(コサイン類似性)とページランクを組み合わせる?

クエリが与えられた場合、ドキュメントのコサインスコアがあります。ドキュメントのページランクもあります。2つを組み合わせる標準的な良い方法はありますか?

私はそれらを増やすことを考えていました

ページランクまたはコサインスコアのいずれかが低くなると、ドキュメントは面白くなくなります。

それとも、加重和を持つことが望ましいですか?

これは良いですか?その場合、コサインスコアはゼロになる可能性がありますが、ページランクが高くなり、結果の中にページが表示されます。

0 投票する
2 に答える
2019 参照

java - 何百万もの文字列間のコサイン類似度を効率的に計算する方法

リスト内の文字列間のコサイン類似度を計算する必要があります。たとえば、1,000 万を超える文字列のリストがあり、各文字列は、リスト内の他のすべての文字列との類似性を判断する必要があります。そのようなタスクを効率的かつ迅速に行うために使用できる最適なアルゴリズムは何ですか? 分割統治アルゴリズムは適用できますか?

編集

特定の文字列に最も類似している文字列を特定し、類似性に関連付けられた測定値/スコアを取得できるようにしたいと考えています。私がやりたいことは、最初はクラスターの数がわからないクラスター化に沿っていると思います。