HtmlRAG: HTML is Better Than Plain Text for Modeling Retrieved Knowledge in RAG Systemsの紹介
HtmlRAG: HTML is Better Than Plain Text for Modeling Retrieved Knowledge in RAG Systemsの紹介をします。
HtmlRAGの解説と実装例
1. 論文の概要
背景
Retrieval-Augmented Generation (RAG)は、外部の知識を利用して質問応答や文章生成の精度を向上させる方法論です。しかし、RAGシステムではHTML文書をプレーンテキストに変換して使用することが一般的で、HTML特有の構造や意味的情報(例: 見出し、表、リンク)が失われるという課題があります。
HtmlRAGの提案
HtmlRAGは、HTMLをそのままRAGシステムで利用する新しいアプローチを提案します。この方法では以下を実現します:
- HTMLクリーニング: 不要な情報(CSSやJavaScript)を削除し、必要な情報を簡潔化。
- HTMLプルーニング: クエリに関連の低いHTMLブロックを削除し、関連性の高い情報のみを保持。
- 生成性能の向上: HTMLの構造情報を保持することで、質問応答や文章生成の精度を向上。
2. 具体的な実装例
以下は、「映画レビューサイトを利用した質問応答システム」を例に、HtmlRAGの実装を説明します。
(1) HTMLクリーニング
HTML文書から不要な要素を削除して軽量化します。
from bs4 import BeautifulSoup
def clean_html(html_content):
soup = BeautifulSoup(html_content, 'html.parser')
for script_or_style in soup(["script", "style", "meta", "link"]):
script_or_style.decompose()
for tag in soup.find_all():
if not tag.text.strip():
tag.decompose()
else:
tag.attrs = {}
return str(soup)
評価:
- 元のHTML: 80,000トークン
- クリーニング後: 約4,800トークン
構造情報を保持しながらもトークン数を大幅に削減。
(2) ブロックツリーの構築
HTMLを「意味のあるブロック」に分割します。
def build_block_tree(html_content, max_words=50):
soup = BeautifulSoup(html_content, 'html.parser')
blocks = []
def traverse(tag):
text = tag.get_text(separator=" ", strip=True)
if len(text.split()) > max_words:
for child in tag.children:
if child.name:
traverse(child)
else:
blocks.append((tag.name, text.strip()))
traverse(soup.body)
return blocks
評価:
- 入力: クリーンなHTML
- 出力例:
[('h1', '映画レビュー'), ('p', 'アクション映画のレビュー')]
分割後、意味のあるブロック単位で整理され、検索効率が向上。
(3) HTMLプルーニング
質問に関連するブロックのみを残します。
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('all-MiniLM-L6-v2')
def prune_blocks(blocks, query, max_length=300):
query_embedding = model.encode(query, convert_to_tensor=True)
pruned_blocks = []
for tag, text in blocks:
block_embedding = model.encode(text, convert_to_tensor=True)
score = util.pytorch_cos_sim(query_embedding, block_embedding).item()
if score > 0.5:
pruned_blocks.append((tag, text))
total_length = 0
result = []
for tag, text in pruned_blocks:
if total_length + len(text) <= max_length:
result.append((tag, text))
total_length += len(text)
else:
break
return result
評価:
- 入力:
[('h1', '映画レビュー'), ('p', 'アクション映画のレビュー'), ...]
- 質問: 「アクション映画」
- 出力:
[('p', 'アクション映画のレビュー')]
関連性の高いブロックのみを保持。
(4) 生成モデルによる回答
LLMを使用して回答を生成します。
from transformers import pipeline
def generate_answer(pruned_blocks, query):
context = " ".join([text for _, text in pruned_blocks])
llm = pipeline("text2text-generation", model="t5-small")
prompt = f"質問: {query}\n\n文脈: {context}\n\n答え:"
return llm(prompt, max_length=50)[0]['generated_text']
評価:
- 質問: 「アクション映画で最も評価の高い作品は?」
- 回答: 「アクション映画のレビューによると『XXX』が高評価です。」
HTMLの構造情報を保持した結果、高精度の回答が得られます。
3. 論文手法の評価
(1) 論文内実験の要約
- 6つのQAデータセット(例: HotpotQA, ASQA)を用いて評価。
- HtmlRAGは、プレーンテキストやMarkdown形式を利用する従来手法を超える性能を示しました。
- 特に、複数の情報源からのマルチホップ質問や、長文形式の質問に強みを持ちます。
(2) 独自実装の評価
- メリット:
- トークン数の削減(80,000→4,800→300)。
- 高関連性の情報のみ保持。
- 課題:
- テキスト埋め込みや生成モデルの計算コストが増加。
- 複雑なHTML構造への対応が必要。
4. 独自の考察とまとめ
考察
- HTMLの潜在能力:
HTMLにはプレーンテキストよりも多くの構造情報が含まれており、それを活用するHtmlRAGは理にかなっています。 - 実装の柔軟性:
本手法は、多様なデータソース(例: PDFやWeb記事)に適用可能。HTML形式への変換を前提に汎用性が高い。 - 計算コスト:
HTMLを保持する利点がある一方で、クリーニングやプルーニングの計算コストを抑える工夫が必要です。
まとめ
HtmlRAGは、RAGシステムにおける革新的な提案であり、特にWebベースの情報検索に強みを持つ手法です。実装例を通じて、その実用性と効率性が確認できました。今後、クリーニングやプルーニングのアルゴリズムを改良し、計算効率を向上させる研究がさらに進むことが期待されます。
関連ページ
- HtmlRAG: HTML is Better Than Plain Text for Modeling Retrieved Knowledge in RAG Systemsの紹介
- Magentic-One: A Generalist Multi-Agent System for Solving Complex Tasksの紹介
- 書評:LangChainとLangGraphによるRAG・AIエージェント[実践]入門 (エンジニア選書)
- SS推薦の図書
- Singularity Societyに入るには?
- 話題のネコ型ロボット「ミーア」!パワーアップします!
- 「世界モデルを持たないLLM」にとって難しい質問のリスト
- Raycastの機能拡張をカスタマイズ(テンプレート解説)
- RaycastJapan Meetup 第0回 イベントレポート
- Raycastのイベント発表資料
- Macの生産性を10倍上げるRaycastのイベント開催!!
- 「蔦屋家電+」ミーアの展示期間を延長しました!
- 安野たかひろ × 中島聡 緊急対談 書き起こし
- 蔦屋家電+でミーアたちに合う
- 安野たかひろ × 中島聡 緊急対談
- 蔦屋家電+とTi B SHOPでおしゃべり型ロボット「ミーア」に会いに行こう🐾
- W&Bミートアップ#13in東京 Stability AIとTuringからモデルサービングの最新手法を学ぶMeetup
- Turing CTOが語る自動運転2.0 生成AIで実現する次世代自律運転
- サンノゼで開かれたVisionProハッカソンに参加しました!
- おしゃべり猫型ロボット「ミーア」を開発
- コストコを超えるイノベーション!高品質・サプライズ価格なECの立ち上げ
- 空間ジェスチャーアプリを作る
- Turing Semiconductor/AI Day潜入レポ
- アーバンデータチャレンジ2023にてW受賞しました
- visionOSアプリ、Teegardenの開発物語
- エンジニア未経験のPMがChatGPTを使って簡単なプログラミングだけでプロダクトを作った話
- 新しい挑戦を躊躇する心理:優先順位の真実
- 時を超える知の投資:良書と大学教育の意義
- 動画生成AI SORAの革新とサム・アルトマンのビジョン
- イノベーションを起こしやすい組織について
- サッカー選手になりたいが、サッカーボールを蹴ったことがない人の話
- 2024年、国産クラウドに期待
- 仕事と焼肉、意外な共通点とは?
- 業界に激震!!Llama2オープン化がいかにすごいかを解説。
- OpenAIによる今回のアップデートがなぜ私たち開発者たちの間で「神アップデート」と呼ばれているか解説!!
- 統計的自然言語処理によりおぼろげながら浮かんできた思考の仕組みと教育の未来
- アプリ開発の常識を覆す? GPT-4の凄さに魅了された体験談
- あなたの NFT がゴミになるかもよ?
- GPT3の本質を理解し、ChatGPTを使いこなす為に知っておきたい事!!
- 今世紀のベストペーパー
- 「Web3がもたらす未来を考える」中島聡×塚田学対談
- これが未来の生活スタイル。遊牧民のように旅をしながら暮らす理想のノマドライフの提案。
- あなたのNFTは大丈夫?!某NFTが存在するのか確認してみました。
- 元米マイクロソフトのソフトウェアエンジニアが教える「エンジニアになりたいなら知っておいた方がいいコト!」
- 「フルオンチェーンでないNFTの怖さ」が現実に!〜フルオンチェーンNFTを可能にする技術
- 知らないと恐ろしい事に!AM/PM表記のなぞ?!
- DAOに対する「株式会社に代わる新しい仕組み」や「参加者全員が成功の果実を共有できる」という認識は間違いです。DAOの本質とは?
- スマートコントラクトが人々の行動を変え世界を変える!!
- フルブロックチェーンのスマートコントラクトは世の中に価値を提供し続ける!
- ビットコインこそ「究極のDAO」
- Pride Squiggle で画像をオンチェーンでダイナミックに生成するために使ったテクニック
- Netscapeからシェアを奪い取ったInternet Explorerが、終焉してしまった理由
- ソフトウェア・アーキテクチャの面からWeb2.0とWeb3の違いを分かり易く解説
- Web3の技術は素晴らしいがそれを生かすも殺すもエンジニア次第!
- AppleのWWDC22の基調講演で、最も私に刺さったのはCarPlay!!これが何を意味するのか?!
- Web3時代!NounsDAOの最大の発明はこれだ!
- 日本のシステムは最大のポンジースキームだった!?
- そして、すべてはソフトウェアになった
- パーソナル・ブランディング
- あなたの知らないWeb3/NFT/DAOの真実
- ハッカソン開会式のご挨拶「過去の戦争と比べて違うなと思うところ」
- NounsDAOをフォークした人にインタビューを受けました(翻訳)
- すでに解散したバンドのファンになった話
- 帝国化する企業と民主主義の末路
- 衰退していく日本のテレビ業界について語る
- Youtube のダークサイド
- 「理解できない」と言える強さ
- Oculus Go
- メタバース時代に掘り起こせそうな本屋さん
- 日本は少子高齢化・人口減少で新しい枠組みを作るのに良い実験場-<コモン>の領域を再建し人々の生活を安定させる
- Nintendo Switch とエクササイズ・バイク
- こんなダメな日本がかわるきっかけは「戦争か大災害しかない」噴火・地震・メタバースなど
- カルト・オンライン
- 中島聡×草場 壽一 「ソサエティを立ち上げた思い」
- 人工知能・機械学習の父
- 起業家と現実歪曲空間
- デマンド交通『おでかけ号』のタクシー予約/配車システムをDX化、高知・土佐清水で新登場
- 中島聡×SONY社内イベント
- メルカリ × 中島聡 ディスカッション イベントレポート
- 自動車業界の近未来
- 未来の社会のあり方
- SS推薦の動画
- 汎用人工知能・強いAIの開発にまつわる懸念点
- 未来のソフトウェアエンジニア教育を考える
- 財政出前講座 SIM2030
- Elon Musk の悩み
- Elon Musk のビジョン
- 自動運転社会のひとつの形
- Amazon Goに行ってみた
- 中島さん関連動画