🌐

WebページをRAGしたい時の精度向上手法「HtmlRAG」

2024/11/26に公開

本記事では、RAGの性能を高めるための「HtmlRAG」という手法について、ざっくり理解します。株式会社ナレッジセンスは、エンタープライズ企業向けにRAGを提供しているスタートアップです。

この記事は何

この記事は、WebページをRAGしたい時に回答精度を上げる「HtmlRAG」の論文[1]について、日本語で簡単にまとめたものです。
https://arxiv.org/abs/2411.02959

今回も「そもそもRAGとは?」については、知っている前提で進みます。確認する場合はこちらの記事もご参考下さい。

※前提として、HtmlRAGは、Webから取ってきた文書を使ってRAGしたいときにだけ有効な手法です。PDFやWordでRAGしたい場合、今回あまり関係ないです。

本題

ざっくりサマリー

WebページをRAGしたい時の精度向上手法「HtmlRAG」

HtmlRAGは、RAGの精度を上げるための新しい手法です。中国人民大学と百川智能(Baichuan Intelligent)の研究者らによって2024年11月に提案されました。

この手法は、HTMLをソースとしたRAGを構築したい場合のみ、有効な手法です。

これまでのRAGでは、ソースとなるHTMLの、テキスト部分だけを抽出して、LLMに渡すのが普通でした。しかし、そうすると、tableh1 など、構造を表す重要なマーカーも消えてしまっていました。これは回答精度の低下に繋がります。

HtmlRAGでは、HTMLの構造を保持したまま、ソースを言語モデルに渡す ことで回答精度を向上させます。ただしこの際、普通にやると無駄なタグやCSSなどが大量に入って、コンテキストを圧迫してしまいます。なので、HtmlRAGでは、クリーニングと枝刈り(プルーニング) をうまく活用して、文章を圧縮します。

問題意識

「WebページをRAGのソースにしたい」というニーズは、結構あります。例えば、ChatGPTでも人気な「Webブラウジング」機能は、Webページ使ったRAGの典型例です。[2]

従来のRAGでは、WebページをソースとしてLLMに渡す場合、構造データを全て削ぎ落とされ、プレーンなテキストだけ抽出するのが普通でした。しかし、これだとLLMにとって、理解しづらいデータになってしまっていました。これでは回答精度が落ちてしまいます。

逆に、WebページのHTMLデータをそのままLLMに渡す、というのも手段ですが、これはこれで、無駄が多い&長すぎてLLMに渡せないという課題がありました。

手法

WebページをRAGしたい時の精度向上手法「HtmlRAG」

HtmlRAGは、文書検索後の後処理にフォーカスした手法です。

【ユーザーが質問を入力して来たとき】

  1. 普通に検索

    • この論文ではBingAPIを利用して、リアルタイムでWeb検索する
    • (普通のRAGのように、手元のDBにHTMLのデータを持っていても同じこと)
  2. HTMLドキュメントの前処理

    • HTMLクリーニング(CSSやJavaScriptなど不要な要素を削除)
    • 見出しや段落といった主要な構造を保持
    • ここで6%まで圧縮
  3. 枝刈り(プルーニング)

    • HTMLを一定の文字ごとにブロック化(チャンク化)
    • 各ブロックについて、ユーザーの質問とのコサイン類似度を確認。低いものは削除
    • 各ブロックについて、ユーザーの質問との関連性を、言語モデルで算出。低いもの削除
    • ※複雑なので、あまり深く触れません
  4. 最終回答の生成

    • 残ったブロックをLLMに渡し、最終的な回答を生成

HtmlRAGのキモは、構造を保持したまま文章量を減らす「圧縮」の部分です。検索後の処理を丁寧にやることで、情報量をなるべく保ったまま、トークン数(文字数)を減らしています。とはいえこの手法、かなり遅いです。高速化の手法にも触れられていますが、通常のRAGよりかなり遅くなります...(このあたりは、速度と精度との相談ですね)

成果

WebページをRAGしたい時の精度向上手法「HtmlRAG」

6つのQAデータセット(TriviaQA, HotpotQAなど)全てで、従来手法より優れた性能を示しています。

まとめ

弊社では普段、大企業向けにRAGシステムを提供しています。その中でも、ChatGPTがWeb検索してから回答してくれる「Webブラウジング」機能は人気です。

今回の手法は、まさにこのWebブラウジング機能の回答精度を高めるのにピッタリな手法です。また他にも、CRAGのようにWeb検索を組み合わせてRAG全体の回答精度を高める手法では、今回のHtmlRAGが活躍します。

以前紹介したPlan×RAG でもそうでしたが、人間にとっては簡単に理解できることを、如何に、LLMにも分かりやすく伝えてあげられるか、という点が、RAGの精度改善では重要な考え方です。

みなさまが業務でRAGシステムを構築する際も、選択肢として参考にしていただければ幸いです。今後も、RAGの回答精度を上げるような工夫や研究について、記事にしていこうと思います。我々が開発しているサービスはこちら

脚注
  1. "HtmlRAG: HTML is Better Than Plain Text for Modeling Retrieved Knowledge in RAG Systems", Tan et al. ↩︎

  2. 弊社サービスでも実装しているWebブラウジングはこんな感じです ↩︎

ナレッジセンス - AI知見共有ブログ

Discussion