
企業内で、文章生成を行う場合にハルシネーションを防ぐ、企業内の独自知識を元に文章生成する為にはRAGの利用が一般的です。RAGで効果的な結果を返す為には、Promptに応じた正しい文章を見つける事が重要です。この為の要素はいくつかありますが、今回は文章検索に於いて重要な要素であるEmbeddingモデルの性能比較を行いました。
- ライター:荒牧 大樹
- 2007年ネットワンシステムズ入社し、コラボレーション・クラウド製品の担当を経て現在はAI・データ分析製品と技術の推進に従事。最近では次世代の計算環境であるGPU・FPGA・量子コンピュータに注目している。
目次
RAGとEmbedding
RAGではデータベースに独自の情報を貯めておいて、Promptに対してデータベース上で文章を検索して取得します。この場合、従来のキーワード検索に加えて、セマンティック検索(ベクターサーチ)を利用するのが一般的です。セマンティック検索を行う場合は、まず検索対象の文章をEmbeddingモデルを使用して密行列に変換します。その後、Promptが来た時に、Promptを密行列に変換して、一番類似度や距離が近い文章を検索して取得します。この数値変換に於いて利用する文章検索の精度は、Embeddingモデルの性能に大きく左右されます。EmbeddingモデルはSaaSサービスとして提供されたり、オープンモデルとしてHugging Face上に掲載されたりしています。
Databricksを利用したオープンEmbeddingモデルの利用
DatabricksのModel Servingは機械学習モデルのサービングを提供します。これはEmbeddingモデルもサポートされており、Hugging Face等からオープンモデルをDownloadしてModel ServingでEmbeddingサービスとして提供が可能です。モデルをサービングする場合はCPUとGPUから選択出来て、CPU/GPUのサイズやスケールアウトの選択も可能です。大量の文章をEmbedding処理する場合はGPUの環境を利用して、通常の運用時はCPUベースに切り替える事でコスト低減が可能です。
CohereとAzure AI Service
Cohere社はビジネス向けのLLMを提供しています。提供しているのはEmbeddingを行うEmbed、DocumentのRerankingを行うRerank、文章生成を行うCommand-Rシリーズになります。Cohereが提供している機械学習モデルは、Cohere社のサイト(SaaS)、AWSやAzure上、オンプレと様々な環境で利用できるようになっています。また、RAGの精度を上げるための質問拡張や、Reranking、外部システム連携のConnect等企業内でLLMを利用する時に必要になる機能を提供しています。
Embeddingモデルについて
EmbeddingモデルはSaaSベースで提供されているモデルや、オープンなモデルと様々なモデルがあります。また、英語のみ対応のモデルと日本語を含む複数言語に対応しているモデルがあります。今回は日本語での処理を比較する為に複数言語に対応しているモデルを選んでいます。環境はOpen AIはAzure Open AIサービスと、CohereはAzure AI Serviceを利用しています。
Embeddingモデル |
提供元 |
概要 |
Max token |
ada-002 |
Open AI |
Open AIが提供しているモデル。標準的に利用されている |
8192 |
text-embedding-3 |
Open AI |
Open AIが新しく提供したモデル。smallとlargeの2種類がある |
8192 |
bge-m3 |
BAAI |
多言語対応のオープンEmbeddingモデル |
8192 |
Embed v3 |
Cohere |
Cohereが提供しているモデル。SaaS、クラウド提供、オンプレ等様々な提供形態がある。 |
512 |
Embeddingと検索の性能
NETONE BLOGを元に、社員にPromptと関連するブログ記事を理想回答として作成してもらい、性能の検証を行っています。選択して欲しいDocumentと、検索してきたDocumentを比較してPrecision、ndcg、Recallを計算しています。@の後は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 |
CohereのRerank 3が一番良い性能を出しています。Embedding単体では、CohereのEmbed 3が良い性能を出しています。
Embedding時間と価格
検索対象のデータ量が増えると、1回のEmbeddingに必要な時間と費用が気になってきます。Open ModelはDatabricksのModel Servingの機能を利用しています。今回は20万行・1億TokenをEmbeddingしました。費用に関してはToken数や、実行時間単位でかかります。概算コストを出しています。以下は2024年8/14時点の計測結果と費用になります。また、Azure環境では独自のRate Limitがかかっている為、Open AIやCohereのサイトでの結果とは異なる事に留意してください。
|
時間 |
費用 |
費用概算 |
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ベースで運用するのも選択肢に入ると考えられます。
※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。