ページの先頭です

ページ内を移動するためのリンク
本文へ (c)

ここから本文です。

RAGの性能を向上させるEmbedding Modelの選択

企業内で、文章生成を行う場合にハルシネーションを防ぐ、企業内の独自知識を元に文章生成する為にはRAGの利用が一般的です。RAGで効果的な結果を返す為には、Promptに応じた正しい文章を見つける事が重要です。この為の要素はいくつかありますが、今回は文章検索に於いて重要な要素であるEmbeddingモデルの性能比較を行いました。

ライター:荒牧 大樹
2007年ネットワンシステムズ入社し、コラボレーション・クラウド製品の担当を経て現在はAI・データ分析製品と技術の推進に従事。最近では次世代の計算環境であるGPU・FPGA・量子コンピュータに注目している。

目次

RAGEmbedding

RAGではデータベースに独自の情報を貯めておいて、Promptに対してデータベース上で文章を検索して取得します。この場合、従来のキーワード検索に加えて、セマンティック検索(ベクターサーチ)を利用するのが一般的です。セマンティック検索を行う場合は、まず検索対象の文章をEmbeddingモデルを使用して密行列に変換します。その後、Promptが来た時に、Promptを密行列に変換して、一番類似度や距離が近い文章を検索して取得します。この数値変換に於いて利用する文章検索の精度は、Embeddingモデルの性能に大きく左右されます。EmbeddingモデルはSaaSサービスとして提供されたり、オープンモデルとしてHugging Face上に掲載されたりしています。

Databricksを利用したオープンEmbeddingモデルの利用

DatabricksModel Servingは機械学習モデルのサービングを提供します。これはEmbeddingモデルもサポートされており、Hugging Face等からオープンモデルをDownloadしてModel ServingEmbeddingサービスとして提供が可能です。モデルをサービングする場合はCPUGPUから選択出来て、CPU/GPUのサイズやスケールアウトの選択も可能です。大量の文章をEmbedding処理する場合はGPUの環境を利用して、通常の運用時はCPUベースに切り替える事でコスト低減が可能です。

CohereAzure AI Service

Cohere社はビジネス向けのLLMを提供しています。提供しているのはEmbeddingを行うEmbedDocumentRerankingを行うRerank、文章生成を行うCommand-Rシリーズになります。Cohereが提供している機械学習モデルは、Cohere社のサイト(SaaS)AWSAzure上、オンプレと様々な環境で利用できるようになっています。また、RAGの精度を上げるための質問拡張や、Reranking、外部システム連携のConnect等企業内でLLMを利用する時に必要になる機能を提供しています。

Embeddingモデルについて

EmbeddingモデルはSaaSベースで提供されているモデルや、オープンなモデルと様々なモデルがあります。また、英語のみ対応のモデルと日本語を含む複数言語に対応しているモデルがあります。今回は日本語での処理を比較する為に複数言語に対応しているモデルを選んでいます。環境はOpen AIAzure Open AIサービスと、CohereAzure AI Serviceを利用しています。

Embeddingモデル

提供元

概要

Max token

ada-002

Open AI

Open AIが提供しているモデル。標準的に利用されている

8192

text-embedding-3

Open AI

Open AIが新しく提供したモデル。smalllarge2種類がある

8192

bge-m3

BAAI

多言語対応のオープンEmbeddingモデル

8192

Embed v3

Cohere

Cohereが提供しているモデル。SaaS、クラウド提供、オンプレ等様々な提供形態がある。

512

Embeddingと検索の性能

NETONE BLOGを元に、社員にPromptと関連するブログ記事を理想回答として作成してもらい、性能の検証を行っています。選択して欲しいDocumentと、検索してきたDocumentを比較してPrecisionndcgRecallを計算しています。@の後はPromptに対して取ってきた文章の数です。@3の場合は3つのDocumentを取ってきています。Rerankを利用する場合は10個のドキュメントを取ってきて、Reranking後に先頭から結果を選んで計測しています。

Precision@1

ndcg@3

Precision@3

ReCall@3

Ada002

0.76

0.84

0.64

0.91

text-embedding-3-large

0.80

0.89

0.69

0.93

bge-m3

0.78

0.85

0.64

0.90

Embed 3

0.83

0.87

0.65

0.92

Rerank 3

0.86

0.89

0.65

0.91

CohereRerank 3が一番良い性能を出しています。Embedding単体では、CohereEmbed 3が良い性能を出しています。

Embedding時間と価格

検索対象のデータ量が増えると、1回のEmbeddingに必要な時間と費用が気になってきます。Open ModelDatabricksModel Servingの機能を利用しています。今回は20万行・1TokenEmbeddingしました。費用に関してはToken数や、実行時間単位でかかります。概算コストを出しています。以下は20248/14時点の計測結果と費用になります。また、Azure環境では独自のRate Limitがかかっている為、Open AICohereのサイトでの結果とは異なる事に留意してください。

時間

費用

費用概算

ada-002

14時間

$0.0001/1,000

$10

text-embedding-3-large

14時間

$0.00013/1,000

$10.3

bge-m3(GPU-Small)

6時間

10.48DBU/h

$4.4

bge-m3(GPU-Medium)

2時間半

24.00DBU/h

$4.2

Cohere-Embed

3時間半

$0.0001/1,000

$10

所感

価格や性能のバランスを考えるとEmbeddingではCohereのEmbed 3を利用して、更にRerank 3を行うのが良さそうです。Documentが大量になるのであれば、bge-m3(GPU-medium)で最初のEmbeddingを行い、その後の検索時はCPUベースで運用するのも選択肢に入ると考えられます。

※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。

RECOMMEND