WebページをRAGしたい時の精度向上手法「HtmlRAG」
本記事では、RAGの性能を高めるための「HtmlRAG」という手法について、ざっくり理解します。株式会社ナレッジセンスは、エンタープライズ企業向けにRAGを提供しているスタートアップです。
この記事は何
この記事は、WebページをRAGしたい時に回答精度を上げる「HtmlRAG」の論文[1]について、日本語で簡単にまとめたものです。
今回も「そもそもRAGとは?」については、知っている前提で進みます。確認する場合はこちらの記事もご参考下さい。
※前提として、HtmlRAGは、Webから取ってきた文書を使ってRAGしたいときにだけ有効な手法です。PDFやWordでRAGしたい場合、今回あまり関係ないです。
本題
ざっくりサマリー
HtmlRAGは、RAGの精度を上げるための新しい手法です。中国人民大学と百川智能(Baichuan Intelligent)の研究者らによって2024年11月に提案されました。
この手法は、HTMLをソースとしたRAGを構築したい場合のみ、有効な手法です。
これまでのRAGでは、ソースとなるHTMLの、テキスト部分だけを抽出して、LLMに渡すのが普通でした。しかし、そうすると、table
や h1
など、構造を表す重要なマーカーも消えてしまっていました。これは回答精度の低下に繋がります。
HtmlRAGでは、HTMLの構造を保持したまま、ソースを言語モデルに渡す ことで回答精度を向上させます。ただしこの際、普通にやると無駄なタグやCSSなどが大量に入って、コンテキストを圧迫してしまいます。なので、HtmlRAGでは、クリーニングと枝刈り(プルーニング) をうまく活用して、文章を圧縮します。
問題意識
「WebページをRAGのソースにしたい」というニーズは、結構あります。例えば、ChatGPTでも人気な「Webブラウジング」機能は、Webページ使ったRAGの典型例です。[2]
従来のRAGでは、WebページをソースとしてLLMに渡す場合、構造データを全て削ぎ落とされ、プレーンなテキストだけ抽出するのが普通でした。しかし、これだとLLMにとって、理解しづらいデータになってしまっていました。これでは回答精度が落ちてしまいます。
逆に、WebページのHTMLデータをそのままLLMに渡す、というのも手段ですが、これはこれで、無駄が多い&長すぎてLLMに渡せないという課題がありました。
手法
HtmlRAGは、文書検索後の後処理にフォーカスした手法です。
【ユーザーが質問を入力して来たとき】
-
普通に検索
- この論文ではBingAPIを利用して、リアルタイムでWeb検索する
- (普通のRAGのように、手元のDBにHTMLのデータを持っていても同じこと)
-
HTMLドキュメントの前処理
- HTMLクリーニング(CSSやJavaScriptなど不要な要素を削除)
- 見出しや段落といった主要な構造を保持
- ここで6%まで圧縮
-
枝刈り(プルーニング)
- HTMLを一定の文字ごとにブロック化(チャンク化)
- 各ブロックについて、ユーザーの質問とのコサイン類似度を確認。低いものは削除
- 各ブロックについて、ユーザーの質問との関連性を、言語モデルで算出。低いもの削除
- ※複雑なので、あまり深く触れません
-
最終回答の生成
- 残ったブロックをLLMに渡し、最終的な回答を生成
HtmlRAGのキモは、構造を保持したまま文章量を減らす「圧縮」の部分です。検索後の処理を丁寧にやることで、情報量をなるべく保ったまま、トークン数(文字数)を減らしています。とはいえこの手法、かなり遅いです。高速化の手法にも触れられていますが、通常のRAGよりかなり遅くなります...(このあたりは、速度と精度との相談ですね)
成果
6つのQAデータセット(TriviaQA, HotpotQAなど)全てで、従来手法より優れた性能を示しています。
まとめ
弊社では普段、大企業向けにRAGシステムを提供しています。その中でも、ChatGPTがWeb検索してから回答してくれる「Webブラウジング」機能は人気です。
今回の手法は、まさにこのWebブラウジング機能の回答精度を高めるのにピッタリな手法です。また他にも、CRAGのようにWeb検索を組み合わせてRAG全体の回答精度を高める手法では、今回のHtmlRAGが活躍します。
以前紹介したPlan×RAG でもそうでしたが、人間にとっては簡単に理解できることを、如何に、LLMにも分かりやすく伝えてあげられるか、という点が、RAGの精度改善では重要な考え方です。
みなさまが業務でRAGシステムを構築する際も、選択肢として参考にしていただければ幸いです。今後も、RAGの回答精度を上げるような工夫や研究について、記事にしていこうと思います。我々が開発しているサービスはこちら。
Discussion