本記事は arXiv: 2305.14627 — Enabling Large Language Models to Generate Text with Citations の解説記事です。
この記事は Zenn記事: LangGraph×Claude Sonnet 4.6のtool_useで出典付きAgentic RAGを構築する の深掘りです。
論文概要(Abstract)
LLMは流暢で情報量の多いテキストを生成できるが、事実と矛盾する情報をハルシネーションとして生成する問題があり、出力の出典を提示できない。Gaoらは、LLMの引用付きテキスト生成能力を自動評価するベンチマーク ALCE(Automatic LLMs’ Citation Evaluation) を提案している。ALCEは多様な質問セットに対してWeb全体からドキュメントを検索し、LLMに引用付きテキストの生成を求める。評価は流暢性・正確性・引用品質の3次元で行われる。
情報源
- arXiv ID: 2305.14627
- URL: https://arxiv.org/abs/2305.14627
- 著者: Tianyu Gao, Howard Yen, Jiatong Yu, Danqi Chen(Princeton University)
- 発表年: 2023
- 分野: cs.CL
- コード: https://github.com/princeton-nlp/ALCE
背景と動機(Background & Motivation)
LLMが情報検索シナリオで広く使われるようになる中、ハルシネーション(事実と矛盾する内容の生成)が信頼性の大きな障壁となっている。この問題に対するアプローチの1つが、LLMの出力に引用(citation)を付与し、ユーザーが事実を検証可能にすることである。
しかし、著者らは以下の課題を指摘している。
- 既存研究では引用品質の評価が人手判定に依存しており、スケーラブルでない
- 引用品質を自動評価する標準ベンチマークが存在しない
- 流暢性・正確性・引用品質を統合的に評価するフレームワークが不足している
これらの課題を解決するため、著者らはALCEベンチマークを構築した。
主要な貢献(Key Contributions)
- 貢献1: LLMの引用付きテキスト生成を自動評価する初の標準ベンチマーク(ALCE)の構築。3つのQAデータセット(ASQA、QAMPARI、ELI5)をカバー
- 貢献2: Citation Precision / Citation Recall / Citation F1による引用品質の自動評価フレームワーク。NLIモデル(TRUE)を用いて人手評価と約84%の一致率を達成
- 貢献3: 5つのプロンプト戦略(vanilla、ICL、post-hoc、summary、snippet)の系統的比較。In-context demonstrationsがcitation F1を最大14.1ポイント改善することを実証
- 貢献4: 検索品質(GTR vs BM25)が引用品質に与える影響を定量的に分析
技術的詳細(Technical Details)
タスク定義
質問 $q$ に対して、検索されたドキュメント集合 $D = {d_1, \ldots, d_n}$ が与えられる。LLMは文の列 ${s_1, \ldots, s_m}$ からなる回答 $a$ を生成し、各文 $s_i$ に対応する引用セット $c_i \subseteq D$ を付与する。
\[a = \{(s_1, c_1), (s_2, c_2), \ldots, (s_m, c_m)\}\]ここで、
- $s_i$: 回答中の $i$ 番目の文(クレーム)
- $c_i$: 文 $s_i$ を支持するドキュメントのサブセット
- $D$: 検索されたドキュメント集合(各質問についてtop-100件)
評価指標
引用品質の自動評価は、NLI(Natural Language Inference)モデルを用いて行われる。具体的には、TRUEモデル(Honovich et al., 2022)で引用ドキュメントが文を含意(entail)するかを判定する。
Citation Precision:
\[\text{Cit-Prec} = \frac{1}{m} \sum_{i=1}^{m} \frac{|\{d \in c_i : \text{NLI}(d, s_i) = \text{entail}\}|}{|c_i|}\]引用されたドキュメントのうち、実際にクレームを支持するものの割合。
Citation Recall:
\[\text{Cit-Rec} = \frac{|\{i : \exists d \in c_i, \text{NLI}(d, s_i) = \text{entail}\}|}{m}\]クレームのうち、少なくとも1つの正しい引用を持つものの割合。
Citation F1: Precision と Recall の調和平均。
\[\text{Cit-F1} = \frac{2 \cdot \text{Cit-Prec} \cdot \text{Cit-Rec}}{\text{Cit-Prec} + \text{Cit-Rec}}\]データセット
| データセット | 質問タイプ | サンプル数 | 正確性指標 |
|---|---|---|---|
| ASQA | 曖昧なファクトイド質問 | 948 | ROUGE-L + disambig F1 |
| QAMPARI | 複数エンティティ回答 | 1,015 | String EM (P/R/F1) |
| ELI5 | 複雑なオープンエンド質問 | 1,507 | ROUGE-L |
検索システム
著者らは2つの検索システムを使用している。
- GTR (Ni et al., 2022): Dense Passage Retrieval(ニューラルベースの意味的検索)
- BM25 (Robertson et al., 2009): キーワードベースの伝統的検索
実装にはPyseriniライブラリを使用し、検索コーパスにはMS-MARCO Webクロールデータセットを採用している。各質問に対してtop-100件のpassageを検索する。
プロンプト戦略
著者らは5つのプロンプト戦略を系統的に比較している。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 戦略1: Vanilla(デモなし)
prompt_vanilla = f"""
以下のドキュメントを参考に、質問に引用付きで回答してください。
引用は [1], [2] のように番号で記載してください。
ドキュメント:
{documents}
質問: {question}
"""
# 戦略2: In-context demonstrations (ICL)
prompt_icl = f"""
以下は引用付き回答の例です:
{few_shot_examples}
以下のドキュメントを参考に、同様の形式で回答してください。
ドキュメント:
{documents}
質問: {question}
"""
# 戦略3: Post-hoc citation
# Step 1: 引用なしで回答生成
# Step 2: 各文に対して最も支持するドキュメントを検索して引用付与
実験結果(Results)
ASQAデータセット(GTRリトリーバー)での主要結果
論文Table 1より、主要な結果を以下に示す。
| モデル | ROUGE-L | Disambig F1 | Cit-Recall | Cit-Precision | Cit-F1 |
|---|---|---|---|---|---|
| ChatGPT (vanilla) | 31.7 | 40.9 | 52.2 | 73.2 | 58.2 |
| ChatGPT (ICL) | 33.2 | 40.3 | 67.9 | 79.6 | 72.3 |
| GPT-4 (vanilla) | 36.2 | 47.8 | 72.8 | 74.8 | 73.7 |
| GPT-4 (ICL) | 36.1 | 48.4 | 74.9 | 78.1 | 76.5 |
| LLAMA-65B (ICL) | 22.5 | 30.1 | 45.1 | 60.2 | 50.6 |
| Bing Chat | 33.5 | 41.1 | 74.4 | 74.2 | 74.3 |
著者らの分析によると、以下の知見が得られている。
- ICLの効果: ChatGPTでvanilla→ICLにより Citation F1が58.2→72.3(+14.1ポイント)と大幅に改善
- GPT-4の優位性: GPT-4はvanillaでもCitation F1が73.7と、ChatGPT+ICL(72.3)を上回る
- オープンソースモデルの課題: LLAMA-65Bは最大規模でもCitation F1が50.6にとどまる
- Bing Chatの特徴: 検索エンジン統合により高いCitation Recall(74.4)を達成するが、Precisionは74.2と改善の余地あり
エラー分析
著者らはChatGPTの引用失敗パターンを3つに分類している。
| エラータイプ | 割合 | 説明 |
|---|---|---|
| Missing citations(引用欠如) | 約47% | クレームを生成したが引用を付けない |
| Incorrect citations(誤引用) | 約31% | クレームを支持しないドキュメントを引用 |
| Overcitation(過剰引用) | 約22% | 1クレームに対して過剰な数の引用 |
検索品質の影響
著者らはGTRとBM25の比較も行っている。GTRは全データセットでBM25を一貫して上回り、検索品質が高いほどLLMの引用品質も向上することが確認されている。これはRAGシステム全体の設計において、検索コンポーネントの品質がLLMの引用能力に直接影響することを示唆している。
実装のポイント(Implementation)
NLI評価の実装
ALCEの引用品質評価はNLIモデル(TRUE)に依存している。実装時の注意点は以下の通り。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
def check_citation_quality(
claim: str,
cited_document: str,
nli_model_name: str = "google/t5_xxl_true_nli_mixture"
) -> bool:
"""NLIモデルで引用品質を判定
Args:
claim: LLMが生成した文(クレーム)
cited_document: 引用されたドキュメント
nli_model_name: NLIモデル名
Returns:
引用が正しいかどうか(entailment判定)
"""
tokenizer = AutoTokenizer.from_pretrained(nli_model_name)
model = AutoModelForSequenceClassification.from_pretrained(nli_model_name)
inputs = tokenizer(
f"premise: {cited_document} hypothesis: {claim}",
return_tensors="pt",
truncation=True,
max_length=512,
)
with torch.no_grad():
outputs = model(**inputs)
# entailment判定
return outputs.logits.argmax(dim=-1).item() == 0
引用品質の計測
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def compute_citation_metrics(
claims: list[str],
citations: list[list[str]],
nli_checker: callable,
) -> dict[str, float]:
"""Citation Precision/Recall/F1を計算
Args:
claims: クレームのリスト
citations: 各クレームに対する引用ドキュメントのリスト
nli_checker: NLI判定関数
Returns:
precision, recall, f1のdict
"""
total_claims = len(claims)
claims_with_valid_citation = 0
total_precision = 0.0
for claim, cited_docs in zip(claims, citations):
if not cited_docs:
continue
valid = sum(1 for doc in cited_docs if nli_checker(claim, doc))
precision_i = valid / len(cited_docs) if cited_docs else 0
total_precision += precision_i
if valid > 0:
claims_with_valid_citation += 1
cit_precision = total_precision / total_claims if total_claims > 0 else 0
cit_recall = claims_with_valid_citation / total_claims if total_claims > 0 else 0
cit_f1 = (
2 * cit_precision * cit_recall / (cit_precision + cit_recall)
if (cit_precision + cit_recall) > 0 else 0
)
return {"precision": cit_precision, "recall": cit_recall, "f1": cit_f1}
実装上の注意点
- NLIモデルの精度限界: NLI自動評価と人間判断の一致率は約84%であり、約16%の誤判定リスクがある。本番環境では定期的な人手サンプリング評価を併用すべき
- トークン長制限: NLIモデルの入力長制限(512トークン等)により、長いドキュメントはtruncationが必要。チャンクサイズの設計が品質に影響する
- 計算コスト: 各クレーム×各引用ドキュメントの組み合わせでNLI推論が必要なため、$O(m \times k)$ の推論回数が発生する($m$: クレーム数、$k$: 平均引用数)
実運用への応用(Practical Applications)
ALCEの知見は、Zenn記事で解説されているLangGraph × Claude Sonnet 4.6のAgentic RAGパイプラインに直接適用できる。
- 引用品質の定量評価: GradeDocumentsノードでCitation Precision/Recallを計測し、引用品質が閾値を下回る場合にリトライする自己修正ループを構築できる
- ICLの活用: Zenn記事のwith_structured_outputパターンと組み合わせ、引用付き回答のfew-shot examplesを提供することで引用品質を改善できる(論文では+14.1ポイント)
- 検索品質の重要性: GTR > BM25の結果は、ベクトル検索の品質がAgentic RAG全体の引用精度に直結することを示しており、検索コンポーネントへの投資が重要
関連研究(Related Work)
- AIS (Rashkin et al., 2023): 「Attributable to Identified Sources」フレームワーク。引用の帰属性を定義した先行研究。ALCEはAISを自動化・拡張
- RAG (Lewis et al., 2020): Retrieval-Augmented Generationの原論文。ALCEはRAGの引用品質評価に特化
- WebGPT (Nakano et al., 2021): OpenAIによるWeb検索+引用付き回答生成。人手評価のみでスケーラブルでない
まとめと今後の展望
ALCEは、LLMの引用付きテキスト生成を自動評価する初の標準ベンチマークである。著者らは、現行LLM(GPT-4を含む)がCitation F1で76.5(ASQAデータセット、ICL使用時)にとどまることを示しており、引用品質の向上は依然として重要な研究課題であることを明らかにしている。
Zenn記事で紹介されているClaude Sonnet 4.6のsearch_result content blocks機能は、ALCEで指摘された「プロンプトベースの引用では品質が不十分」という課題に対するモデルネイティブな解決策と位置づけられる。ALCEの評価フレームワークを用いて、search_result blocksの引用品質を定量評価することが今後の実践的な課題となる。
参考文献
- arXiv: https://arxiv.org/abs/2305.14627
- Code: https://github.com/princeton-nlp/ALCE
- Related Zenn article: https://zenn.dev/0h_n0/articles/11cb2066e667ed
:::message この記事はAI(Claude Code)により自動生成されました。内容の正確性については情報源の原論文もご確認ください。 :::