Text-Embedding-3のSmallとLargeモデルによる検索結果の比較
背景
社内データをQdrantベクトルデータベースに格納し、Azure OpenAIの埋め込みモデルを用いて検索精度を検証しました。これまでは text-embedding-3-small を使用していましたが、最近Production_RAG: 500万以上のドキュメントの処理から学んだことの事例を参考にtext-embedding-3-largeも試してみました。
応答結果の比較
以下は、チャンクサイズ512、オーバーラップ128(25%)、閾値0.5の設定で、12の質問に対して両モデルの応答結果を比較したものです。text-embedding-3-smallは1536次元、text-embedding-3-largeは3072次元と、いずれもデフォルトの次元数に設定されています。
| 番号 | 質問 | 意図に沿った記事タイトル | small (スコア) | large (スコア) |
|---|---|---|---|---|
| 1 | PostgreSQLについて | postgres権限 | 〇 (0.7192123) | 〇 (0.68171453) |
| 2 | おすすめの飲食店について | ぐるめじまん | 〇 (0.57520247) | |
| 3 | お弁当の注文について | 社内システムリンク集 | ✘ | |
| 4 | なぜ継承よりコンポジションのほうがいい? | 継承より合成 | 〇 (0.6776424) | |
| 5 | 岡山について | 岡山について | 〇 (0.63976157) | |
| 6 | 勤怠システム | 社内システムリンク集 | ✘ | |
| 7 | 社内システムについて | 社内システムリンク集 | ||
| 8 | 大阪の歴史的役割 | 大阪の歴史:古代から現代まで | 〇 (0.92002547) | 〇 (0.9207148) |
| 9 | 日本の人気がある電車について | 新幹線 | 〇 (0.5995519) | 〇 (0.5142135) |
| 10 | 日本の電車について | 新幹線 | 〇 (0.5721393) | ✘ |
| 11 | 分かりやすいコードについて | 理解しやすいコード | 〇 (0.7680917) | |
| 12 | 分かりやすい表現について | 「分かりやすい表現」の技術チェックリスト | 〇 (0.7797528) | 〇 (0.7919048) |
〇:最も高いスコアの回答が質問に適切だった場合
✘:404 Not Found(適切な回答が見つからなかった)
空白:回答は微妙で、明確な判断ができなかった
text-embedding-3-largeの方が全体的に精度が高く、特に曖昧な質問や抽象的な内容に対しても適切な回答を返す傾向が見られました。
興味深かった点として、「日本の電車について」という質問では、largeモデルは閾値「0.5」を超える回答がなかった一方、text-embedding-3-smallモデルでは「新幹線」に関する記事がヒットしました。
※ 検索がうまくヒットしない理由の一つとして、記事の構成――例:段落や表など――が影響している可能性があります。
結果
12の質問に対して、text-embedding-3-largeはより多くの質問に対して適切な回答(〇)を返しました。
高いスコアの回答数:正解の回答数/全件数
- smallモデル:5/12件「約42%」
- largeモデル:8/12件「約67%」
考察
text-embedding-3-largeは、語彙の多様性や文脈理解に優れており、特に曖昧な表現や抽象的な質問に対して高い性能を発揮します。一方で、「日本の電車について」といった具体的な質問では、smallモデルが期待通りに「新幹線」に関する記事を返すケースも見られました。
今回テストしたsmallモデルとlargeモデルは、いずれもデフォルトの次元数を使用しています。特にlargeモデルは3072次元と、smallモデルの2倍の次元数を持っているため、より広範な文脈を網羅できる傾向があります。
まとめ & 次のステップ
今回の検証により、text-embedding-3-largeが社内検索において、予測通り高い精度を発揮することが確認できました。これは事前の期待に沿った結果ではありますが、実際の社内データを用いた検証により、導入の有効性を裏付けることができました。今後は以下のステップを検討します:
- 実運用環境でのlargeモデルの導入テスト
- 閾値の調整
- ハイブリッド「ベクトル+キーワード」検索の検討
Discussion