
非エンジニアでもわかるコサイン類似度|LLMの高精度検索を支える技術
目次
1. LLMに自社データを答えさせるには?RAGという解決策
ChatGPT や Claude など高性能なLLMを業務に使う際、社内の文書やデータから答えを出させたいニーズが高まっています。
しかし LLM は基本的に学習時点までの一般知識しか持たず、組織固有の情報や最新データはそのままでは答えられません。そのまま質問するとハルシネーションと呼ばれる事実誤りの回答が出てしまうこともしばしばです。
この課題を解決する方法として注目されているのが RAG(Retrieval-Augmented Generation、検索拡張生成) です。RAG では、質問に答える前に外部データベースから関連情報を検索し、それを LLM に与えて回答させます。いわばAI に調べ物をさせてから答えさせるイメージです。こうすることで、LLM 自身が持っていない社内ドキュメントの知識でも、的確に引用して回答できるようになります。
では、どのように関連情報を検索するのでしょうか? 従来のキーワード検索では単純に文字の一致でしか情報を探せず、言葉遣いが異なると見落としがちでした。そこで RAG では、文章の「意味」そのものを比較できるベクトル検索という手法が用いられます。文章や単語を数値のかたまり(ベクトル)に変換し、そのベクトル同士の類似度によって関連性を測るのです。このとき大きな役割を果たす指標が コサイン類似度 です。
2. コサイン類似度とは?ベクトルで意味を比べる仕組み
コサイン類似度とは、2 つのベクトルがどれだけ似た方向を向いているか(=どれだけ意味が近いか)を測る指標です。名前に「コサイン(余弦)」とある通り、数学的にはベクトル間の角度に着目します。計算式で表すとベクトル間の内積を大きさで割ったものになりますが、難しい式を覚える必要はありません。ポイントは値が -1〜1 の範囲で算出され、1 に近いほど似ていることを示すという点です(0 に近いと無関係、-1 は正反対の向きですが、文章の意味比較では通常 0〜1 の範囲で考えます)。
では、なぜ角度を見ると「意味の近さ」がわかるのでしょうか?これにはEmbedding(エンベディング)という技術が関係します。Embedding とは、テキストなどのデータをその意味を保ったまま多次元の数値ベクトルに変換することです。例えば:
- 「焼肉を食べたいな」→ ベクトルに変換 →
[0.17, 0.03, ..., 0.44]
- 「お肉食べに行きたいよ」→ ベクトルに変換 →
[0.18, 0.04, ..., 0.45]
上記のように、意味が似ている文はベクトル空間上でも近い値になります。両者のベクトルをコサイン類似度で比べると、きっと0.9 台の高い類似度(ほぼ同じ方向)が得られるでしょう。一方、全く関係ない「今日の天気は?」「会議の議事録を送って」など別ジャンルの文とは、ベクトルの向きが大きく異なるため類似度は低く(0 に近づく)なります。
要するにコサイン類似度は「ベクトルで表現した意味の近さ」を数字で示すものです。同じ内容なら 1 に近く、無関係なら 0 に近い数字となるので、これを基準に「どの文章が質問と意味的に近いか」を判定できます。
3. LLMでの活用シーン:コサイン類似度で資料を検索
それでは、実際に LLM がコサイン類似度を活用しているシーンを見てみましょう。典型例が社内ドキュメント QA システムです。たとえば社員が「昨年度の売上推移を教えて」と社内チャットボットに質問した場合を考えます。
このときバックエンドでは、RAG の流れに沿って以下のような処理が行われます:
- 質問をベクトル化: 質問文を Embedding モデルで数値ベクトルに変換します。
- 資料もベクトル化済み: あらかじめ社内の売上レポートや関連資料もベクトルに変換し、データベースに保管してあります。
- コサイン類似度で検索: 質問ベクトルとデータベース内のベクトル群とのコサイン類似度を計算し、一番スコアが高い文書を見つけ出します。
- 関連情報をプロンプトに投入: 見つかった売上レポートの内容を LLM へのプロンプトに追加します。
- LLM が回答生成: 与えられた情報を元に、ユーザの質問に対する回答を生成します。
この一連の流れの中で、ステップ 3 の「コサイン類似度検索」こそが鍵です。表現が違っても意味が近い文書を見つけ出すことができるため、柔軟な情報検索が可能になります。
4. 他との比較:検索・Fine-tuningとの違い
RAG におけるコサイン類似度ベースの検索は強力ですが、他にもアプローチがあります。ここでは従来のキーワード検索や LLM のファインチューニングと比較してみましょう。
項目 | コサイン類似度検索(RAG) | キーワード検索(BM25 など) | LLM ファインチューニング |
---|---|---|---|
仕組み | 質問・文書をベクトル化し、意味の近さをコサイン類似度で判定 | 単語の一致や出現頻度で関連度を算出 | モデル自体を追加学習し、知識を内部に埋め込む |
強み | 言い回しの違いに強く、意味的に近い情報を取得できる | 完全一致に強く、数値や固有名詞検索に向く | 応答が速く、一貫性のある回答が可能 |
弱み | 計算コストがやや高い | 言い換えや表記ゆれに弱い | 再学習コストが大きく、新情報反映に時間がかかる |
適用場面 | FAQ 応答、社内文書検索、カスタマーサポート | 固有名詞・商品コード・数値照会 | 特定業務やドメインに特化した回答(例:専門用語に強い接客 AI) |
更新性 | データベース更新だけで即日反映 | ドキュメント追加で即時反映 | 新データが出るたびに再学習が必要 |
👉 結論として、幅広く柔軟な知識検索には RAG(コサイン類似度)が適し、限定的かつ特化した業務にはファインチューニングが有効です。
また、RAG +キーワード検索のハイブリッドや、RAG +ファインチューニングの併用といった戦略も実務では増えています。
5. 今後の展望:コサイン類似度とLLM活用の未来
コサイン類似度によるベクトル検索は、現状最も実用的な方法ですが、今後は以下のような展開が期待されます。
- Embedding モデルの進化により精度がさらに向上。
- LLM に組み込み型検索機能が搭載され、よりシームレスに外部データを扱えるようになる。
- ハイブリッド検索の活用が進み、従来のキーワード検索と併用される場面が増加。
👉 現状では、RAG +コサイン類似度検索が最適解。今後の技術進歩でさらに扱いやすくなるでしょう。
🔚 まとめ
- コサイン類似度はベクトルで表現した意味の近さを数値で示す仕組み。
- RAG ではこれを用いて関連文書を見つけ、LLM に答えさせる。
- キーワード検索やファインチューニングとも組み合わせることで、より柔軟な AI 活用が可能。
- ビジネス現場では最新情報と LLM の汎用力を両取りできるアプローチとして注目。
OpenBridge では、RAG を活用した社内向け AI チャットボットの構築や、企業データを統合する LLM ソリューション開発まで幅広く支援しています。お気軽にご相談ください。