Cosine Similarity
コサイン類似度 (cosine similarity) がAIでベクトル類似性を測定する仕組みを学びましょう。Ultralytics YOLO26で視覚的埋め込みを計算し、Ultralytics Platformでスケールさせる方法を解説します。
コサイン類似度は、サイズや大きさに関係なく、2つの多次元配列またはベクトルがどれほど似ているかを測定するために、機械学習 (ML)や人工知能 (AI)で使用される基本的な数学的指標です。ベクトル空間内の2点間の角度を計算することで、それらがほぼ同じ方向を向いているかどうかを判定します。この角度に基づくアプローチは、全体的な長さよりも向きが重要になるデータを処理する際に極めて重要であり、埋め込みのような抽象的なデータ表現を比較する上で非常に効果的です。
この指標の数学的背景を理解する#
この指標を計算するには、2つのベクトルの内積を求め、それぞれの大きさ(長さ)の積で割ります。結果として得られるスコアは常に-1から1の固定範囲内に収まります:
- スコアが 1 の場合、ベクトルは全く同じ方向を向いており、最大級の類似性を示します。
- スコアが0の場合、ベクトルは完全に直交(90度の角度)しており、方向的な類似性がないことを意味します。
- スコアが -1 の場合、ベクトルは完全に対極の方向を向いています。
コンピュータビジョン (CV)向けに設計された多くの現代的なディープラーニングフレームワークでは、PyTorchのfunctionalモジュールやTensorFlowのメトリクスなど、この数学的演算に最適化された関数に簡単にアクセスできます。
関連する概念との違い#
いつ使用すべきかを理解するために、コサイン類似度を他の頻繁に使用されるデータ分析の測定値と区別することが役立ちます:
- コサイン距離: 密接に関連しているものの、これらの用語は反比例の関係にあります。コサイン距離は単に1からコサイン類似度を引いたものとして計算されます。したがって、距離が小さいほど、ベクトル間の類似度が高いことを示します。
- ユークリッド距離: この指標は2点間の直線的な物理的距離を測定するもので、ベクトルの全体的なサイズや大きさに非常に敏感です。対照的に、コサイン類似度は角度のみを考慮します。例えば、テキスト分析において、長い文書と短い文章ではユークリッド距離が大きくなる可能性がありますが、主題が同じであればコサイン類似度は高いままとなります。
AIにおける現実世界の応用#
コサイン類似度は、数多くの最新ソフトウェア製品のコアエンジンとして機能し、生のデータと人間の意図の間のギャップを埋める役割を果たします。
- ベクトル検索とRAG: チャットボットなどの自然言語処理 (NLP)アプリケーションでは、ユーザーのクエリや内部ドキュメントを高密度な埋め込みに変換します。システムはコサイン類似度を迅速に計算して、ベクトルデータベースからコンテキスト上最も関連性の高いドキュメントを取得します。これは、検索拡張生成(RAG)における重要なステップです。
- 推薦システム: Eコマースやストリーミングサービスは、Scikit-learnやSciPyなどのツールを利用して、ユーザーの好みやカタログアイテムをベクトルとして表現します。買い物客のプロフィールとさまざまな製品の間で類似度スコアを測定することにより、システムは視覚的またはテーマ的に関連するアイテムを正確に推薦できます。
Ultralytics で視覚的類似性を測定する#
最先端のビジョンモデルを使用すると、視覚データから高次元のフィーチャベクトルを直接抽出できます。次のPythonコードは、画像分類のためにUltralytics YOLO26モデルをロードし、2つの画像の埋め込みを生成し、コサイン類似度計算を実行してそれらの視覚的な類似性を測定する方法を示しています。
import torch
import torch.nn.functional as F
from ultralytics import YOLO
# Load a pre-trained YOLO26 classification model
model = YOLO("yolo26n-cls.pt")
# Generate embedding vectors for two separate images
results = model.embed(["bus.jpg", "car.jpg"])
# Calculate the cosine similarity between the two visual embeddings
similarity = F.cosine_similarity(torch.tensor(results[0]), torch.tensor(results[1]), dim=0)
print(f"Visual Similarity Score: {similarity.item():.4f}")このようなセマンティック検索機能をスケールさせようとする開発者にとって、精度の高いベースモデルのトレーニングは最も重要です。Ultralytics プラットフォームは、データアノテーション、スケーラブルなクラウドトレーニング、シームレスなモデルデプロイのための堅牢なツールを提供することでこのパイプラインを効率化し、基盤となる埋め込みが可能な限り正確で意味のあるものになるようにします。






