企業内ChatGPT活用「RAGの精度向上「意味のあるテキスト抽出」をするために」

はじめに

前回の記事では、RAGを使ってドキュメントに基づいた答えを精度よく出すためのポイントとして、ユーザーの質問に関連の深い情報が含まれたテキストが抽出できることが重要と説明しました。今回はドキュメントからの意味のあるテキスト抽出をしやすくする方法を説明します。

意味のあるテキスト抽出

RAGで質問に対する回答の精度を上げるためには、ドキュメントをインデックスに登録するための「テキスト抽出」の処理で意味のあるテキストを抽出し、それが意味のまとまりで区切られてインデックス化することが大切です。なぜなら、RAGでは抽出されたテキストを小分けのテキストであるチャンク(chunk)に分割してインデックス化し、ユーザーの質問に対して検索されたチャンクのテキストをもとに回答を行うからです。
RAGシステムがドキュメントの本文以外の意味の薄い部分を読み飛ばしてテキスト抽出し、同じ意味のまとまりでテキスト分割してくれればよいのですが、現在のRAGシステムでは自動でうまく処理をしてくれるものはなかなか無いと思われます。そこで、RAGに登録するドキュメントをシステムが読みやすく、分割しやすい形に整えるという手法が考えられます。そのための整形方法をいくつか紹介したいと思います。

目次削除

ドキュメントには目次や索引などがある場合も多いと思います。目次や索引は人間がドキュメントを読む際には情報がどこにあるかを探すのに役に立つ情報ですが、この部分にはユーザーの質問に対する回答の情報が含まれていることは少なく、逆に質問に近いテキストを検索する際のノイズになりがちです。例えば目次がインデックスに登録されており、それが検索対象となった場合はRAGの回答に必要な情報が得られない原因となります。
例えば上の図ではインデックスに目次のテキストチャンクが登録され、ユーザーの質問に対してRAGが関係の高いテキストとして選んでしまった場合の動作を示しています。下の図のように目次を削除することで、そのような動作を避け適切な回答が提示されやすくなります。

目次・索引を削除するべきかどうかは登録するドキュメントのファイル形式にもよります。ワードファイルの場合、ファイル内のデータ康応で目次は本文とは別に管理されているため、多くのRAGシステムでは読み飛ばしてくれるようです。このような場合はドキュメントの目次の有無についてはあまり意識する必要は無いでしょう。一方PDFファイルはデータ上で目次と本文の区別はなく一律でテキストの扱いになり、読み飛ばさないRAGシステムも多いようです。そのような場合は、PDFファイルの変換元のワードファイルを登録するか、目次ページを削除したファイルを登録することを推奨します。

ヘッダ・フッタ削除

ドキュメントには、ページの上下にタイトルやページ番号、「copyright」などのヘッダ・フッタを持つことがります。RAGのインデックスはドキュメントのテキストを分割して作成しますが、ヘッダ・フッタは各ページについているため、インデックスの色々な箇所に含まれることがあります。これらのテキストにはユーザーが聞きたい情報が含まれることはほぼ無いため、インデクスに含めない方が望ましいテキストとなります。

目次と同様に、ワードファイルの場合、ヘッダ・フッタは本文とは別のデータとして管理されているため、多くのRAGシステムでは読み飛ばしてくれるようです。一方PDFファイルではヘッダ・フッタと本文の区別はなく一律でテキストの扱いになります。このためヘッダ・フッタは本文と同じテキストに変換され、データ上は本文との区別が難しくなります。ヘッダ・フッタ読み飛ばさないRAGシステムも多いので、この場合もPDFファイルの変換元のワードファイルを登録するか、ヘッダ・フッタを削除したファイルを登録することを推奨します。

見出しや改ページの設定

RAGは同じ意味のテキストを同じテキストチャンクとしてインデックス化することで精度が上がる傾向がありますが、ドキュメントを構成する章や節は特定のテーマにまとまっていることが多く、その単位でテキストを区切るのが望ましいと思われます。ワードファイルなどでは「見出し」を使って章や節のタイトルを表現します。RAGシステムで見出しをテキスト区切りとして取り扱う仕組みを持っている場合は、ドキュメントに適切に見出しを設定することで意味の単位を意識したインデックス化が行えます。

一方PDFでは「見出し」の概念は持たず、見出しと本文とはフォントが異なるだけのテキストとして扱われますので、ワードファイルをPDFに変換した場合は章や節の構造は消えデータ上は本文との区別が難しくなり、章や節を意識したインデックス化がされにくくなります。このような場合、もしRAGシステムが改ページをテキスト区切りとして扱う仕様だった場合、改ページを適切に設定することでインデックスに章や節の区切りを反映しやすくなります。

表の配置調整

回答の精度を上げるには、テキストから参照されている表は近くに配置するような工夫も必要となります。RAGシステムでは、質問とどれだけ意味が近いかでインデックスから回答のもととなるテキストを検索しますが、そのテキストに具体的な情報が無いと、回答が曖昧な内容となり、使う人から見ると回答の精度が低いように見えます。
例えば規程等のドキュメントでは、例えば出張の日当を示した表が「別表」のようにドキュメント末尾など既定の条項とは遠い場合に記載されることが多いかと思います。ユーザーが「部長の日当は幾らですか」という質問をした時にインデックスから既定の本文だけが抽出され別表が抽出の対象外となると金額の情報は回答に含まれず、「別表を参照してください」という不親切な回答になります。
同じテーマの情報は近い場所に纏めることで、このような問題を避けることができます。前述の規程の例では規程条文の直後に表を配置することで具体的な回答が生成されやすくなります。

図の説明追加

RAGシステムはドキュメントのテキストをもとに回答を得る技術ですが、操作マニュアルや手順書などのドキュメントではテキストによる説明よりも図やスクリーンショットを使って説明されていることも多いと思います。そのようなドキュメントはインデックス化したときに画像で説明している内容が失われてしまうためにRAGでは質問への回答が適切にできない場合があります。図の近くに図の内容を補足する追加の説明を記述することでRAGでも利用可能なドキュメントとすることができます。

別のアプローチとして、インデックス化の処理の際にスクリーンショットなどの画像をAI OCRを使いテキスト化して取り込むような機能を備えたRAGシステムもあります。当社の実験では、スクリーンショットでの説明が多いITツールのマニュアルを登録したときには正解の割合が30%程度向上しました。OCRの手法は効果的に働く場合もありますが、スクリーンショット以外の画像が多いドキュメントでは適さないのと、OCRに追加の費用がかかることもありますので、適するかを見極めて使用することが重要です。

おわりに

今回は、登録するドキュメントをRAGシステムの特性に合わせて精度向上を行う方法を主に説明しました。紹介した方法がご利用中のドキュメントで有効か、またRAGシステムで対応しているかを理解して、活用していただければ幸いです。
既存のドキュメントについて修正を行って対応するのは現実的には難しい場合でも、社内でドキュメントを作成する際のガイドラインを定め、そのガイドラインに沿ってドキュメントを作成していくことで、生成AIを効果的に活用しやすい環境を整えることができると考えられます。またこの取り組みが、デジタルトランスフォーメーション(DX)の推進につながると考えられます。

当社としては、RAGの精度をどれだけ向上させたとしても、生成AIを使用している以上ハルシネーションは避けられないと考えています。そこで当社では、企業内でChatGPTを活用したい場合、重要なデータについてはRAGに頼らず、正しい回答を返すシステムを活用し、そのシステムでカバーできなかった部分をRAGを使って回答するようなハイブリッド型の仕組みを提供することが最適解であると提唱しています。