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

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

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

はじめに

前回の記事「RAGの精度、どう改善する?AIアシスタント「たまちゃん」の改善事例 vol.3 」では、たまちゃんの精度を向上させるために行った取り組みの一部をご紹介しました。

今回は、以下の施策について、その目的、実施内容、そして結果をご紹介します。


  • 施策「表をMarkdown形式にしてRAGに取り込む」

  • 施策「OpenAI o3-miniに切り替え」

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

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

施策「表をMarkdown形式にしてRAGに取り込む」

目的

たまちゃんではRAGという仕組みを採用していますが、現在、社内ドキュメントは単純な文字列に変換してRAGに取り込んでいます。しかし、この取り込み方法では問題が発生します。

例えば、ドキュメント内に表が含まれている場合、表の中の文字列だけが抽出されることで、項目の対応関係や行・列といった表独自の構造が損なわれた状態でRAGに取り込まれてしまいます。その結果、生成AIがドキュメントを元に回答を生成する時、表の内容を正しく理解できず、誤った回答を生成する恐れがあります。

そこで今回の施策では、図2のように、ドキュメント内に含まれる表は、Markdown形式に変換してからRAGに取り込むことで、生成AIがドキュメント内の表を正しく認識して回答を生成できるか検証しました。


たまちゃんにおける「表をMarkdown形式にしてRAGに取り込む」の適用
図2. たまちゃんにおける「表をMarkdown形式にしてRAGに取り込む」の適用

表をMarkdown形式にして生成AIに渡すメリット

図3のように、表をMarkdown形式で生成AIに渡すと、生成AIは表やカラムの情報を正確に把握できるようになり、表の中のデータ同士の関係を正しく理解しやすくなり、正確な回答が得られると、一般的に考えられています。

表の渡し方による生成AIの思考プロセスの違い
図3. 表の渡し方による生成AIの思考プロセスの違い

一方で、最新の高性能な生成AIでは、表をMarkdown形式ではなく、単純な文字列として渡した場合でも、表やカラムの構造を上手く推測し、正しい回答を生成できる場合もあります。

RAGに取り込むドキュメント内のコンテンツを変換

今回の施策では、生成AIが「表」を正しく認識できるように、表をMarkdown形式に変換してRAGに取り込む方法を検証します。この変換には、OCR(光学文字認識)や表検出アルゴリズムを活用できます。

また、似たような変換処理として「図」をRAGに取り込む場合にも、図を文字列形式に変換してから取り込む方法があります。この場合、OCRを使って図の中の文字列を抽出したり、マルチモーダル生成AIを使って図からキャプション(説明文)を生成することで、文字列形式に変換します。

これらの変換の流れを図4に示します。

ドキュメント内の様々なコンテンツを生成AIが扱いやすい形式に変換
図4. ドキュメント内の様々なコンテンツを生成AIが扱いやすい形式に変換
(ドキュメントの例として引用したサイト:「Azure AI Search での AI エンリッチメント」

このように、ドキュメント内の様々なコンテンツを生成AIが理解しやすい形式に変換してからRAGに取り込むことで、検索精度や回答精度の向上が期待できます。

活用可能なサービス・OSS

ドキュメント内の表をMarkdown形式に変換する時に、活用可能なサービスやOSS(オープンソースソフトウェア)を表1にまとめました。

表1.ドキュメント内の表をMarkdown形式に変換する時に活用可能なサービス・OSS
#サービスまたはOSSの名称概要ライセンス対応しているファイル拡張子1ページあたりの処理速度表の抽出のされ方
1 Azure AI Document Intelligence
  • Azureで提供されているOCRのSaaS
  • 利用料金は、1000ページ当たり約1500円
-
  • pptx
  • pdf
  • docx
約3秒 <table>タグ等を含むHTML形式で抽出
2 MarkItDown
  • Microsoftが開発したPythonで利用可能なOSS
  • 独自のグリッド検出アルゴリズムだけでなく、Azure AI Document Intelligenceや任意のLLMを解析に用いることも可能
MIT
  • pptx
  • docx
  • xlsx
約0.2秒 |(パイプ)を含むMarkdown形式で抽出
3 pdfplumber
  • Pythonで利用可能なOSS
  • 独自のグリッド検出アルゴリズムで表を認識
  • pdf
所定のオブジェクト形式で抽出
4 tabula
  • Javaで利用可能なOSS
  • Python版はtabula-py
  • 独自のグリッド検出アルゴリズムで表を認識
-(未計測)
5 PyMuPDF
  • Pythonで利用可能なOSS
  • LLMとの統合に特化したPyMuPDF4LLMも存在
  • ライセンスが厳しい制約なので注意
AGPL

今回は、Azure AI Document Intelligenceに加えて、変換の実行基盤であるAzure Functionsに導入が容易なMarkItDown、pdfplumberを使って検証しました。MarkItDownについては、表の認識にAzure AI Document Intelligenceを使うこともできますが、今回はMarkItDown独自のグリッド検出アルゴリズムを使って検証することにしました。

検証結果

たまちゃんで取り扱っているドキュメントについて、表をMarkdown形式に変換してからRAGに取り込んだ時の精度は、表2のようになりました。

表2.表をMarkdown形式に変換してRAGに取り込んだ時の精度
#使用したサービスまたはOSSたまちゃんで取り扱っているドキュメント全量の処理に掛かる料金評価データに対する正解率
(評価データ:45件)
備考
(現行)1 - 0円 87% -
2
  • pptx, docx, xlsxの変換:MarkItDown
  • pdfの変換:Azure AI Document Intelligence
約3000円 87%
  • ドキュメントが検索でヒットしなくなった件数:1件
  • Markdown形式にしたことで回答できるようになった件数:1件
3
  • pptx, docx, xlsxの変換:MarkItDown
  • pdfの変換:pdfplumber
0円 87%
  • ドキュメントが検索でヒットしなくなった件数:2件
  • Markdown形式にしたことで回答できるようになった件数:2件

表をMarkdown形式にしてRAGに取り込むことで、生成AIが表の内容を正しく認識し、従来は回答できなかったいくつかの質問に対応できるようになりました。

一方で、Markdown形式にしたことでドキュメントの文字数が変わり、ドキュメントを一定のサイズで分割(チャンク化)した際の区切り位置が変化することで、一部のドキュメントが検索でヒットしなくなってしまい、うまく回答できなかったケースもありました。

結果的に、たまちゃんにおいて、「表を文字列としてRAGに取り込む方法」と「Markdown形式に変換してRAGに取り込む方法」とでは、最終的な精度の違いは無いことが分かりました。

現行と比べて最終的な精度の違いはありませんが、表をMarkdown形式にしたことで生成AIが上手く回答できたケースもあったため、pdfやdocx, xlsxの変換にMarkItDown、pdfの変換にはpdfplumberを使う「検証No3」を導入することに決めました。

施策「OpenAI o3-miniに切り替え」

目的

たまちゃんではRAGの仕組みを採用していますが、ユーザーからの質問に対して「検索クエリ/タグ生成」と「回答生成」の2つのタスクで、GPT-4oという生成AIを利用しています。

「検索クエリ/タグ生成」では、ユーザーの質問から、ドキュメント検索用のクエリと検索時に重みづけとして使うタグを生成しています。また、「回答生成」では、検索で見つかったドキュメントから、ユーザーの質問に対する回答を生成しています。

2025年1月には、OpenAIから「OpenAI o3-mini」という新しい生成AIのモデルが発表されました。このモデルは、推論時間と価格を抑えながらも、複雑な課題に取り組む際に「より深く考える」ことができるのが特徴です。また、OpenAI o3-miniは、Azure OpenAI Serviceでも利用可能になりました。

このような背景を踏まえ、図5のように、たまちゃんの「検索クエリ/タグ生成」と「回答生成」において、GPT-4oの代わりにOpenAI o3-miniに切り替えることで、回答精度が向上するか検証しました。

たまちゃんの「検索クエリ/タグ生成」と「回答生成」にOpenAI o3-miniに切り替え
図5. たまちゃんの「検索クエリ/タグ生成」と「回答生成」をOpenAI o3-miniに切り替え

GPTシリーズとoシリーズのモデルの違い

OpenAIは、大きく分けて「GPTシリーズ(汎用モデル)」と「oシリーズ(推論モデル)」という2種類のモデルを提供しています。それぞれの特徴を表3にまとめました。今回施策で検証するOpenAI o3-miniは、このうちoシリーズに属するモデルになります。

表3. GPTシリーズとoシリーズの特徴(2025年4月時点)
GPTシリーズoシリーズ
特徴
  • 汎用モデル
  • マルチモーダルなモデルも存在
    (テキストだけでなく、画像や音声にも対応)
  • 推論モデル
    (内部にCoTプロンプティングが採用されており、時間をかけてじっくり考えることで、推論と問題解決に特化)
Azure OpenAI Serviceで
利用可能なモデル
  • GPT-4o
  • GPT-4o mini
  • GPT-4o audio
  • GPT-4.5
  • GPT-4
  • GPT-4 Turbo
  • GPT-3.5
  • OpenAI o1
  • OpenAI o1-mini
  • OpenAI o3-mini

また、GPT-4oとOpenAI o3-miniをAzure OpenAI Serviceで利用する場合に、指定可能なパラメータの違いを表4にまとめました。GPT-4oは代表的なパラメータのみを記載しています。

表4. Azure OpenAI Serviceにおいて指定可能なパラメータ(2025年4月時点)
#モデルパラメータ名パラメータの概要
1 GPT-4o temperature
  • 生成されるテキストのランダム性や多様性を制御
  • 温度が高いほど創造的なテキストが生成される
top_p
  • 次の単語を予測する際の確率分布の範囲を制御
  • top_pが高いほど多様な単語が含まれたテキストが生成される
max_completion_tokens モデルからの返答に関して、トークン数の最大値を制御
2 OpenAI o3-mini max_completion_tokens モデル内部の推論とモデルからの返答に関して、トークン数の最大値を制御

補足情報ですが、oシリーズのモデルをOpenAIから直接利用する場合は「reasoning_effort」(推論の深さをlow、medium、highから指定)というパラメータが指定可能です。しかし、現時点では、Azure OpenAI Serviceで、このパラメータを指定できるのはOpenAI o1のみです。今後、OpenAI o3-miniでも指定可能になると予想されます。

利用料金の違い

Azure OpenAI ServiceでGPT-4oとOpenAI o3-miniを利用する際の料金を表5に示します。

表5. Azure OpenAI ServiceにおけるGPT-4oとOpenAI o3-miniの利用料金
(2025年4月時点の「Azure OpenAI Serviceの利用料金ページ」から抜粋)
#モデルデプロイ時の設定利用料金の種類100万トークンあたりの利用料金
(キャッシュは考慮しない)
1 GPT-4o 2024-05-13 Global 入力 754.95円
出力 2,264.85円
2 OpenAI o3-mini 2025-01-31 Global 入力 166.09円
出力
(内部の推論で消費したトークンの利用料金も含む)
664.36円

OpenAI o3-miniは、GPT-4oと比べて入力の利用料金が約1/5、出力の利用料金が約1/3と、料金を大きく抑えることができます。ただし、OpenAI o3-miniは、出力にかかる料金として「内部での推論に消費したトークン分」も加算される点に注意が必要です。

検証結果(検索クエリ/タグ生成)

たまちゃんの「検索クエリ/タグ生成」において、GPT-4oとOpenAI o3-miniをそれぞれ使った場合の検証結果を表6にまとめました。

表6.「検索クエリ/タグ生成」の検証結果
#質問文モデル生成された検索クエリ生成されたタグ
1 年休取得奨励日を教えください GPT-4o 年休 取得 奨励日
教えて
人事関連のドキュメント
OpenAI o3-mini 年休 取得 奨励日 人事関連のドキュメント
2 価格承認関連規定の主管はどこですか? GPT-4o 価格承認関連規定
主管 部署
規定集のドキュメント
OpenAI o3-mini 価格承認 関連規定
主管 部署
規定集のドキュメント

それぞれのモデルで生成される検索クエリとタグの内容に大きな違いはありませんでした。一方で、生成に掛かる時間については、GPT-4oが約2秒であるのに対し、OpenAI o3-miniは約8秒と、GPT-4oよりも4倍ほど時間が掛かってしまいました。

以上のことから、「検索クエリ/タグ生成」では、OpenAI o3-miniに切り替えず、引き続きGPT-4oを使った方が良いと判断しました。

検証結果(回答生成)

たまちゃんの「回答生成」において、GPT-4oとOpenAI o3-miniをそれぞれ使った場合の結果を表7にまとめました。

表7.「回答生成」の検証結果
#モデル生成に掛かった時間利用料金評価データに対する正解率
(評価データ:45件)
1(現行) GPT-4o 約4秒 5.62円 87%
2 OpenAI o3-mini 約7秒 1.96円 91%

この結果から、「回答生成」においては、GPT-4oではなくOpenAI o3-miniを使うと、生成にかかる時間は長くなりますが、利用料金を大幅に削減しつつ、正解率を高められることが分かりました。

そして、たまちゃんでは「多少時間がかかっても、正確に質問に答えられることを重視する」というプロジェクトの方針から、「回答生成」に使用するモデルを、GPT-4oからOpenAI o3-miniに切り替えることに決めました。

おわりに

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

表8. 本記事で紹介した施策のまとめ
施策課題の種類評価データに対する正解率回答精度の向上度合導入コスト補足
(実施前) 53% 評価データに対する正解率が約50%になるように評価データを準備
改善事例 vol.1 63%
(+10)
適用した施策
  • 同義語辞書の登録
  • 検索エンジンから取得するドキュメント数を増やす
改善事例vol.2 83%
(+20)
適用した施策
  • セマンティックランカーを適用
  • プロンプト内の文章構成見直し
改善事例vol.3 71%
(-12)
適用した施策
  • 評価データ見直し(正解率が60%になるよう見直し)
  • チャンクサイズの調整
  • 埋め込みモデルの最新化
バグ修正 87%
(+16)
  • 一部のドキュメントがRAGに取り込めていなかったバグを修正
表をMarkdown形式にしてRAGに取り込む 回答生成の課題 87%
(+0)
  • ドキュメントをMarkdown形式にしたことで回答できた質問もあるが、反面、検索でドキュメントがヒットしなくなり、回答できなかった質問もある
  • OSSを使えば無料で導入可能
OpenAI o3-miniに切り替え 回答生成の課題 91%
(+4)
  • 推論時間と価格を抑えながらも、複雑な課題に取り組む際に「より深く考える」ことができるのが特徴
  • 回答速度はGPT-4oよりも遅くなるが、正解率が向上

今回の記事では、「表をMarkdown形式にしてRAGに取り込む」と「OpenAI o3-miniに切り替え」という2つの施策についてご紹介しました。

「表をMarkdown形式にしてRAGに取り込む」では、現行に比べて最終的な正解率は変わらないものの、表をMarkdown形式にしたことで生成AIが上手く回答できたケースもあったため、導入を決定しました。

「OpenAI o3-miniに切り替え」では、OpenAI o3-miniを用いることで、回答速度は若干遅くなりますが、正解率が向上することが分かりました。それに伴い、OpenAI o3-miniの導入を決定しました。

精度改善に関する主な施策は一旦ここで区切りとし、今後は実運用を行いながら、新たな課題や改善ポイントが見つかった際には、随時取り組んでいく予定です。

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


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

執筆者紹介

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

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

関連コラム

関連ソリューション

関連事例

お問い合わせ

CONTACT

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