エクサの生成AIチャレンジ日記

連載コラム:エクサの生成AIチャレンジ日記

RAGの精度、どう改善する?
AIアシスタント「たまちゃん」の改善事例 vol.1

はじめに

前回の記事「AIアシスタント「たまちゃん」をより良いサービスにするために」では、たまちゃんの課題を「検索」「回答生成」「UI/UX(ユーザーインターフェース/ユーザーエクスペリエンス)」の3つに分類し、マインドマップを使って具体的な問題点と改善タスクを洗い出したプロセスをご紹介しました。


課題とタスクが見えてきたことで、いよいよ本格的な精度改善のフェーズに入ります。リストアップしたタスクの中から、効果の大きさや実現の難易度、他のタスクへの影響などを考慮して優先順位をつけ、計画的に改善策を実施していくことにしました。


今回の記事では、精度改善策の中から以下の2つの施策について、その目的、実施内容、そして結果をご紹介します。

  • 施策「同義語辞書の登録」

  • 施策「検索エンジンから取得するドキュメント数を増やす」

図1. 本記事で紹介する施策
図1. 本記事で紹介する施策

RAG(検索拡張生成)の精度改善にご興味のある方の参考になれば幸いです。

施策「同義語辞書の登録」

目的

たまちゃんは、質問に関連する社内ドキュメントを検索し、その内容を元に回答を生成します。たまちゃんのシステム構成を図2に示します。

図2. たまちゃんのシステム構成
図2. たまちゃんのシステム構成

検索エンジンとしてMicrosoft Azure AI Search を利用しており、検索時には「ベクトル検索」と「全文検索」を組み合わせた「ハイブリッド検索」を行っています。それぞれの検索方法の特徴を表1にまとめました。

表1. たまちゃんで使用している検索方式
検索方式仕組みメリットデメリット
全文検索 検索クエリで指定されたキーワードが含まれているドキュメントを探す キーワードに合致するものは正確に見つかる 言い換えや類義語、意味が近いものは見逃しやすい
ベクトル検索 埋め込みモデルを使用してテキストをベクトル化(数値化)する技術を用いることで、検索クエリと類似度が高いドキュメントを探す 意味的に関連する情報を幅広く見つけられる 埋め込みモデルが学習していない専門用語はうまく扱えない場合がある
ハイブリッド検索 別々の検索結果(全文検索とベクトル検索)を1つの検索結果に統合する 正確かつ網羅的な検索結果を得やすい システムがやや複雑になる場合がある
左右にスワイプすることで、表が見られます

たまちゃんで採用しているハイブリッド検索ではベクトル検索と全文検索の長所を活かしています。しかし、社内で使われている言葉の中には、ベクトル検索ではうまく検索できないような専門的な表現や、全文検索でもうまく検索できないような独自の略語や同義語などが含まれています。ベクトル検索に利用する埋め込みモデルの学習を行うのも解決策の1つですが、学習データの準備など大きなコストがかかります。


そこで、今回は全文検索の精度を高めるために「同義語辞書」をAzure AI Searchに登録することにしました。同義語辞書の登録はAzure AI Searchの機能として実装されており、比較的容易に試すことができます。同義語辞書として専門的な表現や同義語を登録して全文検索の精度を上げることができれば、ハイブリッド検索の精度向上にもつながる可能性があります。

全文検索への同義語辞書の適用

たまちゃんにおいて、同義語辞書を全文検索に適用して、最終的に回答生成を行うまでの流れを図3に示しました。

図3. 全文検索での同義語辞書の適用
図3. 全文検索での同義語辞書の適用

同義語辞書に登録している同義語の例を以下の表2に示しました。たまちゃんでは合計69件の同義語を登録しています。

表2. 同義語の例
単語同義語1同義語2同義語3
産前産後休暇 産休 出産休暇
定期券 通勤定期券 通勤費 通勤費補助金
F・ウェルネス休暇 エフウェルネス休暇 F休 エフ休
左右にスワイプすることで、表が見られます

検証結果

同義語辞書を登録した後、評価ツール「RAGAS」を使って精度評価を行った結果を表3に示しました。同義語辞書がない場合と比較して、検索精度(Context Recall: 検索したドキュメントに正解の文章が含まれるか)は0.34から0.45へと向上しました(検索精度についてはコラム『AIアシスタント「たまちゃん」をどうやって評価する?~RAGの精度評価の仕組み~』を参照ください)。これは、同義語辞書によって全文検索が強化され、関連ドキュメントを見つけやすくなったことを示しています。


しかし一方で、評価データ30件に対する正解率は53%から57%へと微増にとどまりました。分析を進めると、「正解のドキュメントを検索できているにも関わらず、質問に回答できないケース」が依然として存在することが分かりました。

表3. 同義語辞書登録有無での評価結果
検証No検証内容検索したドキュメントに正解の文章が含まれるか(*)評価データに対する正解率
(評価データ:30件)
1 同義語辞書なし 0.34 53%
2 同義語辞書あり 0.45 57%
左右にスワイプすることで、表が見られます

(*) スコアは0~1の範囲で、1に近いほど検索精度が高いことを示す

例えば、「F休の申請方法を教えて」という質問に対し、同義語辞書の助けもあって「F・ウェルネス休暇」に関する人事の規定ページが検索結果の上位に含まれるようになりました。しかし、たまちゃんは「すみません、F休の申請方法に関する情報を見つけられませんでした」と回答してしまいます。


これは、同義語辞書が検索時にしか参照されず、回答生成を行う際にはその同義語関係(F休=F・ウェルネス休暇)を理解していないことが原因であると考えられました。


今回の施策「同義語辞書の登録」では、検索時に同義語辞書を参照できるようにしたことで検索精度が向上しましたが、回答生成時の同義語理解に課題が残る結果となりました。

施策「検索エンジンから取得するドキュメント数を増やす」

目的

たまちゃんではRAG(Retrieval Augmented Generation)を採用しています。


ユーザからの質問に対して、検索エンジンから関連ドキュメントを取得し、取得した関連ドキュメントをプロンプトに埋め込むことで、生成AIが関連ドキュメントを参照しながら回答を生成する、という流れになっています。この流れにおいて、検索エンジンから取得する関連ドキュメントの数は、回答生成に影響する重要なパラメータの1つです。


現状は、検索エンジンへの検索でヒットした上位3件分の関連ドキュメントを取得し、生成AIに渡していますが、例えば、質問に対する回答が含まれる関連ドキュメントが、上位4位や5位に存在する場合、これらの関連ドキュメントが生成AIに渡されず、回答生成に失敗します。


そこで、本施策では、検索エンジンから取得する関連ドキュメントの数を増やすことで、生成AIが回答できる頻度が向上するか検証しました。


まず、たまちゃんでは、検索エンジンにAzure AI Searchを採用しています。Azure AI Searchでは3種類の検索方式(全文検索、ベクトル検索、ハイブリッド検索)を組み合わせて利用しています。


また、Azure AI Searchにおいて、検索エンジンから取得する関連ドキュメントの数を増やす場合、図4のように、k(ベクトル検索時に何件取得するか)とtop(ハイブリッド検索時に何件取得するか)という2種類のパラメータが設定可能です。本施策ではこの2種類のパラメータを変化させながら、回答の精度が向上するか検証を行いました。

図4.ドキュメントを増やす場合に関係する検索方式とパラメータ
図4.ドキュメントを増やす場合に関係する検索方式とパラメータ

ドキュメントを増やす場合の注意点

検索エンジンから取得する関連ドキュメントの数を増やす場合、プロンプトに埋め込むドキュメントの量も多くなります。そのため、いくつか注意が必要です。


例えば、先行研究「LongLLMLingua: Accelerating and Enhancing LLMs in Long Context Scenarios via Prompt Compression」では、図5のように、プロンプト内に質問に無関係な情報や冗長な情報が含まれるドキュメントが増えていくことで、回答品質が低下していくことを示しました。特にQA対応(Multi-Document QA)は、コーディング支援(Code Completion)や要約(Summarization)に比べ、回答品質が低下しやすい傾向があります。

図5.ドキュメントの数と回答品質の関係性
図5.ドキュメントの数と回答品質の関係性
引用:「LongLLMLingua: Accelerating and Enhancing LLMs in Long Context Scenarios via Prompt Compression

また、表4のように、プロンプト内に埋め込むドキュメント数に比例してトークン数が増加することで、生成AIの利用料金が高くなることにも注意が必要です。

表4. たまちゃんにおいてドキュメント数を変化させた場合の利用料金
プロンプトに埋め込む
ドキュメント数
トークン数
(概算)
利用料金
(GPT-4o)
3 2,500 2円
5 4,000 3円
10 8,000 6円
左右にスワイプすることで、表が見られます

検証結果

たまちゃんにおいて、検索エンジン(Azure AI Search)から取得する時のパラメータ、kとtopを変化させた場合、正解率(回答できた件数の割合)は表5のようになりました。

表5. ドキュメント数を変化させた場合の精度
検証Noktopトークン数
(概算)
利用料金
(GPT-4o)
評価データに対する正解率
(評価データ:30件)
(現行)1 3 3 2,500 2円 57%
2 5 5 4,000 3円 63%
3 10 5 4,000 3円 67%
4 50 5 4,000 3円 63%
5 10 10 8,000 6円 70%
左右にスワイプすることで、表が見られます

まず、kとtopを現状の値から大きくすることで精度が良くなる傾向があります。また、kよりもtopを大きくした方が精度が良くなりやすい傾向もありました。さらに、topは3,5,10の内、10が最も精度が良くなることが分かりました。


一方で、利用料金と精度のバランス、パラメータのシンプルさを考慮し、今回はオレンジ色の検証No2のケース(kとtopが共に5)を採用することとしました。

おわりに

今回の記事で紹介した2つの施策の結果を表6にまとめました。

表6. 本記事で紹介した施策のまとめ
施策課題の種類評価データに対する正解率正解率の向上度合導入コスト補足
(実施前) 53%
同義語辞書の登録 検索の課題 57%
(+4)
  • 検索精度(Context Recall)は0.34から0.45へと向上したが、検索できても回答生成時に同義語を参照できないため回答できないケースが残った
  • 辞書を準備する手間がかかる
検索エンジンから取得するドキュメント数を増やす 検索の課題 63%
(+6)
  • ドキュメント数を増やすと生成AIの利用料金が上がることに注意が必要
  • 質問に無関係な情報が含まれるドキュメントが増えると、回答品質が低下するという研究もあるため精度検証が必要
左右にスワイプすることで、表が見られます

今回の精度改善では、「同義語辞書の登録」により検索精度は向上したものの、回答生成時の同義語理解に課題が残りました。一方、「検索エンジンから取得するドキュメント数を増やす」施策では、コストとのバランスを考慮しつつ、評価データに対する正解率を向上させることができました。


一方で、たまちゃんの評価データに対する正解率はまだ63%と高くない状態です。今回の結果を踏まえて、更なる精度向上に向けて取り組んでいく必要があることがわかりました。


以降の取り組みについては、本コラムで順次紹介する予定です。


最後までお読みいただき、誠にありがとうございました。


本記事に記載されているロゴ、システム名称、企業名称、製品名称は各社の登録商標または商標です。

執筆者紹介

連載コラム:エクサの生成AIチャレンジ日記

本コラムでは、エクサ社内における生成AIの活用に向けた技術的な取り組みと、実際の業務適用事例をご紹介いたします。生成AIによる業務効率化や新たな価値創造のヒントとなれば幸いです。

関連コラム

関連ソリューション

関連事例

お問い合わせ

CONTACT

Webからのお問い合わせ
エクサの最新情報と
セミナー案内を
お届けします