Cosine Similarity
コサイン類似度 (cosine similarity) がAIでベクトル類似性を測定する仕組みを学びましょう。Ultralytics YOLO26で視覚的埋め込みを計算し、Ultralytics Platformでスケールさせる方法を解説します。
コサイン類似度は、機械学習 (ML) や 人工知能 (AI) で使用される基本的な数学的指標であり、2つの 多次元配列 またはベクトルが、そのサイズや大きさに依存せずどれほど類似しているかを測定します。ベクトル空間 内の2点間の角度を計算することで、それらが概ね同じ方向を向いているかを判定します。この角度によるアプローチは、全体的な長さよりも向きが重要なデータの処理に不可欠であり、埋め込み のような抽象的なデータ表現を比較する際に非常に効果的です。
Link to this sectionこの指標の数学的背景を理解する#
この指標を計算するには、2つのベクトルの ドット積 を計算し、それを個々の 大きさ (長さ) の積で割ります。結果として得られるスコアは、常に -1 から 1 の固定範囲内に収まります。
- スコアが 1 の場合、ベクトルは全く同じ方向を向いており、最大級の類似性を示します。
- スコアが 0 の場合、ベクトルは完全に 直交 (90度の角度) しており、方向に関する類似性がないことを意味します。
- スコアが -1 の場合、ベクトルは完全に対極の方向を向いています。
コンピュータビジョン (CV) 向けに設計された多くの現代的なディープラーニングフレームワークでは、PyTorchのfunctionalモジュール や TensorFlowのメトリクス など、この数学的演算に最適化された関数を簡単に利用できます。
Link to this section関連する概念との違い#
コサイン類似度を、頻繁に使用される他の データ分析 指標と区別することは、いつ使用すべきかを判断する上で役立ちます。
- コサイン距離: 密接に関連していますが、これらは反比例の関係にあります。コサイン距離は単純に 1 からコサイン類似度を引いた値として計算されます。したがって、距離が小さいほどベクトル間の類似度が高いことを示します。
- ユークリッド距離: この指標は2点間の直線的な物理的距離を測定するもので、ベクトルの全体的なサイズや大きさに非常に敏感です。対照的に、コサイン類似度は角度のみを考慮します。例えば、テキスト分析において、長い文書と短い文章ではユークリッド距離が大きくなる可能性がありますが、主題が同じであればコサイン類似度は高いままとなります。
Link to this sectionAIにおける現実世界の応用#
コサイン類似度は、数多くの最新ソフトウェア製品のコアエンジンとして機能し、生のデータと人間の意図の間のギャップを埋める役割を果たします。
- ベクトル検索とRAG: チャットボットのような 自然言語処理 (NLP) アプリケーションでは、ユーザーのクエリや内部文書が高密度な埋め込みベクトルに変換されます。システムはコサイン類似度を高速に計算することで、ベクトルデータベース から文脈上最も関連性の高い文書を取得します。これは検索拡張生成 (RAG) における重要なステップです。
- レコメンデーションシステム: Eコマースやストリーミングサービスは、Scikit-learnやSciPy といったツールを利用して、ユーザーの好みやカタログ内のアイテムをベクトルとして表現します。購入者のプロファイルとさまざまな製品間の類似度スコアを測定することで、システムは視覚的または主題的に関連のあるアイテムを正確に推薦できます。
Link to this sectionUltralytics で視覚的類似性を測定する#
You can extract high-dimensional feature vectors directly from visual data using state-of-the-art vision models. The following Python code demonstrates how to load an Ultralytics YOLO26 model for image classification, generate embeddings for two images, and perform a cosine similarity calculation to measure their visual resemblance.
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 Platform は、データアノテーション、スケーラブルなクラウドトレーニング、およびシームレスな モデルデプロイメント のための強力なツールを提供することでこのパイプラインを合理化し、基礎となる埋め込みが可能な限り正確で有意義なものになるよう保証します。






