生成AIへの取り組みでとてもよく聞かれるのは、「RAGの精度が出ない」という悩みです。今回は、よく見られるケースや考えられる原因、改善策について、非エンジニアの皆さんに分かるように詳しく説明します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
生成AIの業務活用についてのさまざまな悩みに答える本連載。今回取り上げるお悩みはこちらです。
RAGをやってみたが、思うような回答が得られない。精度を上げるためには何をすればいいのか
「うちの会社でも生成AI(人工知能)を導入してみよう!」 そう意気込んでRAG(検索拡張生成)を取り入れてみたものの思ったほど精度が出ず、どう改善すればいいのか悩んでいる、そんな企業も多いのではないでしょうか。
生成AIのブームとともにRAGを活用した事例も増えてきましたが、一口で「RAG」といってもさまざまな仕組みやアプローチがあり、精度を簡単に高めるのは意外と難しいのが現状です。
そこで本記事では、RAGの精度を向上させるためのちょっとした工夫から、実践的な活用方法までをご紹介したいと思います。
初めに、「RAGって何?」というところから簡単におさらいします。詳しい仕組みについては第1回の記事「うちもRAGをやりたい! どうやって進めればいいか詳しく教えて」をご覧ください。ここではイメージをつかむことを優先していただければと思います。
RAGとは「Retrieval-Augmented Generation」の略称で、日本語では「検索拡張生成」と呼ばれることが多いです。AIがただ「知っていること」を答えるのではなく、外部のデータを検索することで知識を拡張し、回答を生成する仕組みになります。人間が自分の知らないことを質問されたときに、マニュアルなどの情報を調べながら回答を考えるイメージです。
生成AI技術の加速によって、専門知識がなくても「とりあえずRAGを導入してみる」ことがしやすくなってきました。その半面、「当初想定していたほどうまく動かない」という壁に直面することも多いかと思います。
具体的な解決方法の前に、まずはRAGを導入した後によくある失敗例を幾つか取り上げてみます。
初めに直面しがちなのが「この文書に書いてあるはずなのに、検索すると出てこない」というケースです。私自身も業務で技術文書を検索対象にしてRAGを使ってみた当初、肝心の情報が引っかからないことが多かったです。
そもそもRAGの性質上、ドキュメントの全ての文章を参照しているわけではなく、ユーザープロンプトの内容に近いものを検索して文章を部分的に引っ張ってきているわけですが、この問題はその「検索」の仕組みの部分に大きく関わってきます。
詳しくは後ほど説明しますが、キーワード検索寄りの実装だと、意味は同じ用語でも、わずかな揺らぎ(「接続設定」と「コネクション設定」など)が影響することが多いです。また、ベクトル検索の場合でも、専門用語や固有名詞のような、そもそも世の中に普及していない言葉の場合、意味をくみ取ってくれないことは珍しくありません。
欲しい情報が検索では引っかかったものの、「そのままの形では回答に使える状態ではない」というケースもよくあります。例えばPDFを情報ソースにした場合、目次やページ番号、フッターに記載された著作権表示などが一緒に取り込まれてしまい、実際に欲しい本文とノイズが混ざった状態になることがあります。
さらに、スクリーンショットや図表を文中に多数挿入した資料では、視覚的な配置関係(縦横の位置情報)を人間の視点と同様に認識することが困難となる場合や、生成AIモデルによってはそもそもテキストしか対応しておらず、画像を認識していない場合もあります。 結果として、回答に引用された文章をAIが理解しきれず、でたらめな結果を回答することも少なくありません。
この問題は、ドキュメント形式(Word、PowerPoint、Excel、PDFなど)や「チャンキング」(AIが扱いやすいようにドキュメントを細かい文章に分割すること)の仕方に依存する部分が大きく、データの前処理が精度に直結する典型例と言えます。
先ほども少し触れましたが、RAGで扱う際にはドキュメントを小さな単位の文章に分割します。これを「チャンキング」と呼びますが、文章の区切り方がうまくいかないために精度が上がらないこともあります。
例えば、説明文の途中でページが分かれているため文章が強制的に分割されてしまい、前半と後半が別の文章に切り離されることがあります。結果として検索では前半しかヒットせず、肝心の後半(具体的な手順や条件など)が取りこぼされる、といったケースが頻発します。
さらに、1つの文章が長すぎて、「複数の話題がひとまとめにされる」こともあり、本来は別々に扱いたい情報が混ざってしまう問題もあります。そのため、回答に使われたテキストが「文脈が足りない」「間違ってはいないが余計な情報が多すぎる」と感じられることが多いのです。
この問題はチャンクサイズや分割方法(段落単位にするか、一定トークン数で切るかなど)に強く依存するため、適切な設計が求められます。
ここまでのケースとは逆に、「検索自体はうまくいっているのに、最終的な回答がいまいち」ということもよくあります。例えば検索対象としたドキュメントの該当部分はちゃんと参照されているのに、回答が要点を外していることがあります。その背景として、最終的にAIへ投げるプロンプトで細かい条件が反映されていないことがあります。
RAGの性質上、検索した文章をどうまとめて生成AIに渡すかによって、回答が大きく左右されます。長文をそのままAIに渡すと、重要な内容が埋もれることがあります。文章間のつながりを考慮しない場合も同様です。
結果として「必要な情報は入っているのに最終的な答えが間違っている」「部分的に正しいけれど全体としてズレている」といった、違和感のある出力につながってしまいます。
これまでは「RAGのあるある失敗談」を紹介しました。「検索が当たらない」 「文章がきれいに取れない」など、RAGを導入すれば誰もが一度は経験する悩みかと思います。
ここからは、それらをどう解決しRAGの精度を高めていけるのか、そのアプローチを整理してみます。
Copyright © ITmedia, Inc. All Rights Reserved.