GPT の「文章理解」は テキストをベクトル化し、
そのベクトル同士の「角度の近さ」を計算することで成り立っている。
そのとき使われるのが コサイン類似度(Cosine Similarity)。
2次元ベクトルを使いながら「GPT がどうやって文章の“似ている”を判定するか」理解できたうちに書いておく。
GPTが文章をどう扱っているか
GPT は文章をそのまま扱うのではなく、
文章 → 数千次元ベクトル に変換して内部で比較する。
現状OpenAI Embeddingでベクトル化できる次元数は1536次元と3072次元の2つがある。
例
| 文章 | ベクトル(イメージ) |
|---|---|
| 「犬が好き」 | [0.12, -0.20, 0.98, ...] |
| 「猫が好き」 | [0.10, -0.18, 0.95, ...] |
| 「寿司を食べたい」 | [0.90, 0.22, -0.10, ...] |
このベクトル同士の「近さ」を判断するためにコサイン類似度を利用する。
コサイン類似度
ベクトル同士の角度 を使って「どれくらい似ているか」を測る方法
類似度の値(直感)
同じ方向(0°) → 類似度 1.0
直角(90°) → 類似度 0
逆方向(180°) → 類似度 -1.0
図で見ると
同じ方向(角度0°) → 類似度 1.0(似てる)
A →
B →
直角(90°) → 類似度 0(似てない)
A →
↑
B
逆方向(180°) → 類似度 -1.0(真逆)
A →
← B
コサイン類似度の計算(2次元)
ベクトル A = (x1, y1)
ベクトル B = (x2, y2)
内積の計算
① A・B = (x1 * x2) + (y1 * y2)
ベクトルの長さ(2乗をして平方根を取ることで、0以上の値にしている)
|A| = √(x1^2 + y1^2)
|B| = √(x2^2 + y2^2)
② |A| × |B|
③ コサイン類似度の公式
cosθ = ① ÷ ②
計算例(見れば公式が成り立つのがわかる)
A と B が直角のとき
ベクトル A = (1, 0)
ベクトル B = (0, 1)
A →
↑
B
内積
1*0 + 0*1 = 0
長さ
|A| = 1
|B| = 1
類似度
0 ÷ (1×1) = 0
つまり、似ていない(類似度 0)
同じ方向のベクトル
A = (1, 1)
B = (1, 1)
内積
1*1 + 1*1 = 2
長さ
|A| = √2
|B| = √2
類似度
2 ÷ 2 = 1
→ 完全に同じ方向 = 類似度 1.0
GPT がコサイン類似度を使う理由
これを使って
- 類似文章検索
- 「意味が近い」質問のマッチング
- ユーザーの意図推定
- FAQ の自動検索
- 要約や分類の前処理
を可能にする。
「距離」ではなく「角度」を使う理由
距離だと「文章の長さの違い」に影響される。
コサイン類似度は方向だけを見る
- 長い文章でも
- 短い文章でも
- 同じ方向なら「意味が似てる」と判断できる
これがGPTでよく使われる理由。
まとめる
今回は2次元の計算を行ったが、GPTで行う場合は次元の数(1536次元か3072次元)だけ内積と長さの計算を繰り返す。