コサイン類似度計算機
2つのベクトルがどれだけ同じ向きを指しているかを、正反対の-1から完全に同じ向きの1までで表します。長さは影響しないため、1, 2, 3と10, 20, 30は満点の1になり、文章や評価、アンケートの比較に向いています。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 1つ目のテキスト
- 1, 2, 3
- 2つ目のテキスト
- 4, -5, 6
- N
- 3
- 内積
- 12
- aの大きさ
- 3.7416573868
- bの大きさ
- 8.7749643874
埋め込み、特徴量の重み、項の出現回数、アンケートのスコアなど、2つの成分リストを送信すると、内積、両方のノルム、および-1から1の間の単一の類似度スコアが返されます。1は方向が同一、0は直交、-1は反対方向を意味します。
コサイン類似度が実際に測定するもの
ユークリッド距離は2つの点がどれだけ離れているかを示しますが、コサイン類似度はそれらが同じ方向を向いているかどうかを示します。この違いは、一見した以上に重要です。2つの文書は長さが大きく異なっていても同じ話題を扱っていることがあり、2つの顧客プロファイルは絶対的な支出額が異なっていても同じ嗜好の形を共有していることがあります。
内積をノルムの積で割ることで、コサイン類似度はスケールを取り除き、方向だけを保持します。結果は常に-1から1の間に収まります。スコア1はベクトルが完全に整列していること、0は直交していて方向成分を共有しないこと、-1は完全に反対であることを意味します。
ノルムが除去されるため、ベクトル[1, 2, 3]とベクトル[10, 20, 30]は完全な1を得ます。これらは強度が異なるだけで同じ比率を表しており、テキスト、嗜好、行動の比較のほとんどが求めているのはまさにこれです。
スコアの計算方法
次に、単一のパスで3つの合計を累積します。内積 Σ aᵢbᵢ と、二乗ノルム Σ aᵢ² および Σ bᵢ² です。類似度は、内積をノルムの平方根の積で割ったもので、浮動小数点誤差を吸収するために[-1, 1]にクランプされ、マシン間でバイト単位の安定した答えになるよう小数点以下12桁に丸められます。
どちらかのベクトルのノルムがゼロの場合(すべての成分がゼロ)、除算は定義されず、ゼロベクトルには比較すべき方向がないため、呼び出しは明示的なメッセージで失敗します。
実務での適用場面
コサイン類似度は、セマンティック検索、レコメンデーションエンジン、重複排除、クラスタリングの品質チェックの基盤となる指標です。検索用にテキスト埋め込みを保存している場合、これが候補を順位付けするスコアです。ユーザー・プロファイルを特徴ベクトルとして構築する場合、これが最近傍を見つける方法です。
多数のベクトルを比較するチームにとって、安定した丸めと明示的なエラーケースにより、テストや回帰スイートでの使用が安全です。長さの不一致やゼロベクトルは、静かに誤ったランキングを生成するのではなく、明確に失敗します。
活用例
埋め込み候補のランク付け
クエリ埋め込みが各ドキュメント埋め込みにどれだけ近いかをスコア化し、ベクトルの長さではなく方向の類似性で結果をランク付けします。
ほぼ重複したアイテムの検出
生のカウントが異なっていても、コサイン類似度が1に近いしきい値を超えた場合に、2つの特徴ベクトルを重複としてフラグ付けします。
ユーザー嗜好プロファイルの比較
正規化された評価ベクトルや行動ベクトルを比較して、レコメンデーションエンジン向けに同じ嗜好の形を持つユーザーを見つけます。
よくある質問
スコア0は何を意味しますか?
ベクトルが直交しており、方向成分を共有していないことを意味します。スコア1は方向が同一、-1は完全に反対方向を意味します。
ゼロベクトルの場合はどうなりますか?
すべての成分がゼロのベクトルには方向がないため、類似度は定義されず、誤解を招く数値を返すのではなく、明確なエラーで呼び出しが失敗します。
ベクトルのノルムはスコアに影響しますか?
いいえ。 スコアは方向のみを測定します。[1, 2, 3]と[10, 20, 30]は比率が同一のため、コサイン類似度は1になります。
コサイン類似度はどのように計算されますか?
内積を2つのベクトルの長さの積で割ります。1, 2, 3と4, -5, 6なら内積は12、長さは3.741657386774と8.774964387392で、類似度は0.365486942324です。
2つのベクトルの要素数が違うとどうなりますか?
比較は行われず、分かりやすいメッセージが表示されます。要素数の違うベクトルは比べられないため、長いほうを勝手に切り詰めて誤った値を出すことはありません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/cosine-similarity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":[1,2,3],"b":[4,-5,6]}'const res = await fetch("https://api.kit.forhosting.com/math/cosine-similarity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": [
1,
2,
3
],
"b": [
4,
-5,
6
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/cosine-similarity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": [
1,
2,
3
],
"b": [
4,
-5,
6
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/cosine-similarity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":[1,2,3],"b":[4,-5,6]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":[1,2,3],"b":[4,-5,6]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/cosine-similarity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"a": [
1,
2,
3
],
"b": [
4,
-5,
6
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.cosine_similarity",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_abs | 1000000000000 |
max_dim | 1000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
コサイン類似度APIは、2つのベクトルがどの程度同じ方向を向いているかを、その長さに関係なく測定します。単一の決定的なパスで実行されるため、無料のブラウザ版で表示される数値は、有料APIが返す数値と完全に一致します。
スコアの計算方法
エンドポイントは両方の入力を有限数のベクトルに変換し、JSON配列とカンマ区切りのプレーンテキストの両方を受け付け、両者が同じ長さであることを確認します。次元の異なるベクトル同士の比較は数学的に意味をなさないため、黙って切り捨てるのではなく、明確なinvalid_inputエラーで拒否されます。レスポンスには内積、両方のノルム、人間が読める分類、中間ステップも含まれ、すべての数値を検証できます。
実務での適用場面
この機能はグローバルなエッジで実行され、リクエスト後に何も保持されません。有料APIを動かしているのと同じ決定的コードがこのページのブラウザで無料で実行されるため、呼び出しをパイプラインに組み込む前に、ベクトルのペアを貼り付けて検証できます。自動化する場合にのみ課金され、公開された制限内であれば次元ごとの追加料金なく$0.002/リクエストです。
技術的な質問
料金はいくらですか?
$0.002/リクエストです。同じコードでこのページのブラウザ上でも無料で実行できます。
ベクトルの長さが異なっていてもよいですか?
いいえ。コサイン類似度は同じ次元のベクトル間でのみ定義されるため、長さの不一致はinvalid_inputエラーで拒否されます。
どの入力形式が受け付けられますか?
各ベクトルは数値のJSON配列、またはカンマやスペースで区切られた数値の文字列を指定できます。成分は公開された制限内の有限数である必要があります。