見出し画像

正確にテキストデータをPDFから抽出!生成AI向けPDF抽出エンジンを用いたRAGシステムの回答精度改善

こんにちは、ファイマテクノロジーの佐藤です。

今日は、前回に続いて、私たちが提供しているChatGPTを活用したソリューションの一つ、RAG(Retrieval Augmented Generation)を用いた受託開発や研究支援サービスの回答精度を上げる方法についてご紹介したいと思います。
前回の記事はこちら👇

RAGという技術は下記の3つの流れで行われます。

① 事前にドキュメントから文章を抽出する
② 事前に抽出した文章をベクトル化してデータベースに保存する
③ 質問に関連した文章をデータベースから探し出して参考情報として回答文を作成する

前回のnoteでは、RAGを用いたシステム精度向上策として、②の処理で専門的な文書のベクトル化が正確に行えないことへの対策として大規模言語モデルをファインチューニングをご紹介しました。

上記①~③の処理はLangChainと呼ばれる生成AI向けのオープンソースのフレームワークを用いることが一般的です。進歩の早い生成AIですが、LangChainは論文発表された最新技術も取り込まれるため、RAGシステムの開発者が自身で論文の内容を実装せずとも利用できるような流れができています。

LangChainを用いて、最新のChatGPTを使っていたら、どこのRAGシステムも回答の精度はさほど変わらないんじゃないか?と思われるかもしれませんが、①の文章抽出がネックになり、参照すべき情報を与えても、専門的な質問に対して、思ったほど正しく答えてくれない。ということがよく聞かれます。

特に、研究者、専門分野においては、論文や特許などのPDFデータを扱う必要があるケースも多く、PDFは技術文書や論文では世界でもデファクトスタンダードとなっているフォーマットですが、PDFの仕様、データ構造が複雑なため、PDFからの正確な文章抽出は長年エンジニアを悩ませています。

当社は論文翻訳”1paper”でpdfからテキストを抽出する独自の技術を長年開発しており、PDF抽出エンジンを”1extract”として活用しています。
1extractの詳細はこちら:https://feynma.com/1extract


今回は「①ドキュメントから文章を抽出する」について1extractを用いたらどの程度、研究、技術分野の質問に正しく回答できるか?を評価してみることにしました。

今回はLangChainのローダー(PyPDF)と生成AI向け1extractの性能検証結果を詳しく見ていきます。

対象文書

対象はAI系、医学系、化学系の論文PDFを3種類用意しました。ページ数や文書の構成は以下通りです。

AI系論文(2段組)  全17ページ
医学系論文(2段組) 全8ページ
化学系論文(3段組) 全6ページ

検索能力の評価方法

まず、論文PDFを入力として、質問文と回答の根拠となる文をGPT-4oを用いて生成しました。詳しいデータ作成方法は前回のブログをご参照ください。

検索能力の評価

生成したデータをテストデータとして、PyPDFと1extractを用いてRAGを行い、テストデータの質問に対して、回答の根拠が正しく検索できているかを評価しました。検索した結果、類似度の高かったもの10個を取り出し、その中に根拠となる文が含まれているかの精度を評価します。

結果は以下のとおりです。PyPDFよりも1extractの方が検索精度が高いことが確認できました。

まとめ

今回検証を行ったサンプルは少ないが、PyPDFは文書形態によって性能にブレが生じ、文書構造によっては適切に検索を行えていないケースがありました。
1extractを用いた場合は安定して高い割合で根拠となる文を検索できており、有用性が確認できました。

今回の実験では、検証のためあくまでPDFからのデータ抽出能力の検証用の実装であり、LangChainの各種パラメータはデフォルト設定のままとし、クエリの傾向や内容にあわせたチューニングや、クエリ書き換えなどの精度向上策は実施していません。

実際にRAGシステムを構築する場合は、データ抽出以外にもさまざまな改善を実施します。大規模言語モデルは世界中で日々研究が行われており、ファイマテクノロジーでは、論文のリサーチにより最新の技術動向を調査し、お客様のニーズに合わせて最適な提案をしています。ChatGPT活用をご検討中の方は、ぜひファイマテクノロジーにご相談ください。

お問い合わせはこちら👇

公式Twitter

公式Facebook
https://www.facebook.com/feynmatechnology/

公式HP:https://feynma.com/