Math World Lab

レコメンドの仕組み(コサイン類似度とベクトル検索)

ユーザーの好みと商品の近さを「ベクトルのなす角」で判定するアルゴリズム

この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
レコメンドの仕組み(コサイン類似度とベクトル検索)の本質的な定義と直感的ビジュアルをシミュレーターで体験できる。
2
公式や証明の背景にある数学的意味と、厳密な導出ステップを解説。
3
実社会における工学応用(レコメンドエンジンにおけるコサイン類似度計算とTop-Kランキング)のTypeScript実装コードを収録。

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

レコメンドの仕組み(コサイン類似度とベクトル検索)の基礎原理を体系化し、抽象的な計算を直感的に扱うために誕生した。

身につく武器・思考力

ユーザーの好みと商品の近さを「ベクトルのなす角」で判定するアルゴリズム。この考え方を身につけることで、複雑な課題を単純化して数理モデルとして解く力が養われる。

実社会・ITでの活躍現場

  • •レコメンドエンジンにおけるコサイン類似度計算とTop-Kランキング
  • •ITシステム・アルゴリズム実装における論理設計
  • •データ分析やシミュレーションにおける数理モデリング

Layer 1 — 直感・シミュレーター

2次元の特徴量空間(横軸: アクション度、縦軸: コメディ度)上で、ユーザーの好みベクトル(青い矢印)をドラッグして動かしてみよう。配置された4本の映画アイテム(アクション映画、コメディ映画、アニメ、SF)のうち、ユーザーの矢印と「角度が最も近い(コサイン類似度 cosθ が 1 に近い)」映画がリアルタイムで最もおすすめとしてハイライトされる。

青い点(あなたの好み)をドラッグして、アクション度・コメディ度の好みを動かしてみよう好みの向き: (2.8, 1.2)
コサイン類似度によるリアルタイム推薦ランキング(cos θ が 1 に近い順):
1爆破アクション★ BEST MATCH
類似度 cos θ =0.976
2アクション・コメディ
類似度 cos θ =0.928
3人間ドラマ
類似度 cos θ =0.882
4爆笑コメディ
類似度 cos θ =0.557

↑ ベクトルの長さ(絶対値)が違っても、「原点から見た角度(比率)」が近ければコサイン類似度は 1 に近くなります。NetflixやAmazonの推薦システム、LLMのベクトル検索(RAG)は、この内積とコサイン類似度を数百〜数千次元の空間で高速計算しています。

Layer 2 — 定義・受験・証明

定義

2つの多次元ベクトル A,B\mathbf{A}, \mathbf{B} の類似度を、両者のなす角 θ\theta の余弦(cos⁡θ\cos\theta)で評価したものを「コサイン類似度」と呼ぶ。ベクトルの内積とノルム(大きさ)を用いて次のように計算される。

similarity=cos⁡θ=A⋅B∥A∥∥B∥=∑i=1nAiBi∑i=1nAi2∑i=1nBi2\text{similarity} = \cos\theta = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} = \frac{\sum_{i=1}^n A_i B_i}{\sqrt{\sum_{i=1}^n A_i^2} \sqrt{\sum_{i=1}^n B_i^2}}

値は −1-1(正反対)から +1+1(完全一致)の範囲をとり、ベクトルの絶対的な大きさ(評価の多さなど)に左右されず、方向(好みの傾向)だけを比較できる。

公式・数理モデル

cos⁡θ=A⋅B∥A∥∥B∥\cos\theta = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|}

証明・導出

高校数学のベクトルの内積の定義式 A⋅B=∥A∥∥B∥cos⁡θ\mathbf{A} \cdot \mathbf{B} = \|\mathbf{A}\| \|\mathbf{B}\| \cos\theta の両辺を、それぞれのベクトルの長さ ∥A∥∥B∥\|\mathbf{A}\| \|\mathbf{B}\| で割ることで導かれる。

幾何学的には、ベクトル A\mathbf{A} と B\mathbf{B} をそれぞれ長さ 1 の単位ベクトルに正規化(u=A∥A∥,v=B∥B∥\mathbf{u} = \frac{\mathbf{A}}{\|\mathbf{A}\|}, \mathbf{v} = \frac{\mathbf{B}}{\|\mathbf{B}\|})した上で内積をとることと完全に一致する。方向が一致するとき cos⁡0∘=1\cos 0^\circ = 1、直交して全く無関係なとき cos⁡90∘=0\cos 90^\circ = 0 となる。

押さえておきたいポイント

  • ベクトルの大きさ(長さ)を無視し、「向き(好みの比率)」だけを比較できる指標である
  • 動画配信・ECサイト・音楽アプリのレコメンドエンジンのコアアルゴリズムとして広く採用されている
  • ChatGPTなどのLLMにおける「RAG(検索拡張生成)」やベクトルデータベース(Pinecone, Qdrant等)の類似文章検索でも、テキストをEmbedding(埋め込みベクトル)に変換してコサイン類似度で類似検索している
  • 高校で習うベクトルの内積とノルムの計算が、現代のAIとWebサービスの最前線で直結している好例である
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

レコメンドエンジンにおけるコサイン類似度計算とTop-Kランキング

ユーザーの閲覧・購入履歴から生成した特徴量ベクトルと、データベース内の商品ベクトル群とのコサイン類似度をバッチ計算し、類似度スコアが高い上位 KK 件の商品をレコメンド枠に出力する。

1type Vector = number[];
2
3// コサイン類似度の計算
4function cosineSimilarity(a: Vector, b: Vector): number {
5 let dotProduct = 0;
6 let normA = 0;
7 let normB = 0;
8 for (let i = 0; i < a.length; i++) {
9 dotProduct += a[i] * b[i];
10 normA += a[i] * a[i];
11 normB += b[i] * b[i];
12 }
13 if (normA === 0 || normB === 0) return 0;
14 return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
15}
16
17// ユーザーの好み: [アクション: 0.9, コメディ: 0.2]
18const userProfile: Vector = [0.9, 0.2];
19
20const movies = [
21 { title: "マッド・マックス", features: [0.95, 0.1] },
22 { title: "ハングオーバー", features: [0.1, 0.9] },
23 { title: "スパイ・コメディ", features: [0.6, 0.6] },
24];
25
26const recommendations = movies
27 .map((m) => ({ ...m, score: cosineSimilarity(userProfile, m.features) }))
28 .sort((a, b) => b.score - a.score);
29
30console.log("最推し映画:", recommendations[0].title, "(類似度:", recommendations[0].score.toFixed(3), ")");

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

関連度高工学応用

最短経路探索(ダイクストラ法とA*アルゴリズム)

グラフ上の無数のルートから「最もコストが小さい道」を一瞬で見つけ出す数学

関連度高工学応用

ゲームのレーティングシステムの数学(Eloレーティング)

ロジスティック関数で「勝てる確率」を予測し、番狂わせを大きく評価する自己調整型スコアリング

関連度高高校数学

ベクトルの内積

2本の矢印の「向きの近さ」を1つの数値にする

同じレベルで次に挑戦したいトピック

同レベル推薦工学応用

勾配降下法

谷底を探すAIの基本アルゴリズム

同レベル推薦工学応用

ニューラルネットワークの数学(順伝播と活性化関数)

入力に重みを掛けて足し合わせ、非線形関数で発火させるAIの基本素子

"PASS"c=mᵉ%n
同レベル推薦工学応用

RSA暗号と素数の秘密(公開鍵暗号)

「掛け算は簡単だが、素因数分解は極めて困難」という非対称性を利用した現代暗号の金字塔

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

円の面積と円周率

半径を変えると、円周と面積はどう変わる?

工学・実践連携小学校・算数

三角形・多角形の面積

頂点を動かして、面積の公式が成り立つ理由を確かめよう

工学・実践連携小学校・算数

単位変換(長さ・面積・体積)

長さが2倍になると、面積・体積は何倍になる?

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。