SQuAD(Stanford Question Answering Dataset)は、Wikipedia の本文から質問の答えにあたる範囲を抜き出させる、機械読解の評価用データセットです。スタンフォード大学の Rajpurkar らが 2016年6月16日に arXiv:1606.05250 で公開しました。「squad ai」という語で探されることが多いものの、正体は AI 製品でもツールでもなく、モデルの読解精度を測るための問題集です。データベース製品でもなく、JSON ファイルとして配布される静的なデータの集まりです。
この記事では、公式配布されている JSON を実際に集計した記事数・設問数・無回答比率、公式スコアラーが定める EM と F1 の採点仕様、そして 2023年10月で更新が止まった公式リーダーボードを踏まえて 2026年時点で SQuAD を使ってよい場面と避けるべき場面を整理します。
まとめ
SQuAD は生成ではなく抽出のデータセットです。回答可能な設問では、答えは必ず与えられた段落の中の連続した文字範囲であり、だからこそ文字列一致による自動採点が成立します。バージョンは 1.1 と 2.0 の 2 系統で、「文脈中に答えが存在しない設問」の追加が 2.0 の最大の違いです。
公式配布 JSON を集計すると、学習用は 1.1 が 442 記事 87,599 問、2.0 が同じ 442 記事で 130,319 問。検証用は 1.1 が 48 記事 10,570 問、2.0 が 35 記事 11,873 問です。テストセットは非公開のままで、論文が挙げる 536 記事との差はこの非公開分にあたります。
採点指標は EM(完全一致)と F1 の 2 つ。公式スコアラーは比較前に大文字小文字・句読点・英語の冠詞を落とすため、表記ゆれでは減点されません。ただし無回答設問だけは部分点がなく 0 か 1 の二値で採点されます。
そして 2026年時点で最も重要な事実は、公式リーダーボードが止まっていることです。上位モデルは人間のスコア(EM 86.831 / F1 89.452)をすでに超え、データの更新は 2023年10月12日を最後に行われていません。新しい LLM の性能を他社と比較する用途にはもう使えません。一方で、自社の抽出型 QA や検索まわりを差し替えたときの回帰テスト用の固定データとしては、いまも十分に働きます。日本語で同じことをしたい場合は JSQuAD が対応します。以降で、この判断の根拠を順に見ていきます。
SQuADの定義と1.1・2.0の違い
答えを原文から抜き出す抽出型タスクとしての定義
1 件のデータは、Wikipedia 記事から取った段落(context)、その段落について作られた質問(question)、そして答え(answers)の組で構成されます。答えは文字列そのものと、段落の先頭から数えた文字オフセット(answer_start)の両方を持ちます。つまりモデルに求められるのは文章を書くことではなく、原文のどこからどこまでが答えかを指し示すことです。
この設計が採点の自動化を可能にしました。正解が原文の部分文字列に固定されるため、生成文の良し悪しを人が判断する必要がありません。2016年の論文では、ロジスティック回帰による当時のモデルが F1 51.0%、単純なベースラインが 20% であるのに対し、人間は 86.8% でした。この 35 ポイント超の差が、その後の読解モデル競争の出発点になります。この時期に読解タスクの精度を押し上げたのが Transformer 系の事前学習モデルで、仕組みはTransformerとは?自己注意の仕組みとBERT・GPTの違いを実装目線で解説で扱っています。
SQuAD 2.0が追加した「答えられない設問」
1.1 には弱点がありました。すべての設問に答えが存在するため、モデルは「それらしい範囲」を必ず 1 つ返せば部分点を稼げてしまいます。文脈に答えが無いことを見抜く能力は測れません。
2018年6月11日公開の arXiv:1806.03822(ACL 2018)が、この穴を埋めるために 53,775 問の回答不能な設問を追加しました。クラウドワーカーが、答えられそうに見えるが実際には段落中に答えが無い質問を意図的に作っています。効果は明確で、論文は SQuAD 1.1 で 86% F1 を出したニューラルモデルが 2.0 では 66% F1 まで落ちたと報告しています。20 ポイントの下落は、当時のモデルが「わからない」と言えなかったことの裏返しです。
2.0 の無回答設問には plausible_answers という項目が付き、誤答として選ばれやすい範囲が記録されています。検証用の 5,945 問の無回答設問のうち 5,930 問がこの項目を持っており、誤答分析にそのまま使えます。
公式配布データの実測内訳と非公開テストセット
train・devの記事数と設問数
公開されている 4 つの JSON を集計した結果が次の表です。段落数と設問数は、ファイル内の全記事を走査して数えた実数です。
| ファイル | 記事数 | 段落数 | 設問数 | 無回答数 |
|---|---|---|---|---|
| train-v1.1.json | 442 | 18,896 | 87,599 | 0 |
| dev-v1.1.json | 48 | 2,067 | 10,570 | 0 |
| train-v2.0.json | 442 | 19,035 | 130,319 | 43,498 |
| dev-v2.0.json | 35 | 1,204 | 11,873 | 5,945 |
学習用の記事タイトル集合は 1.1 と 2.0 で完全に一致します。ただし「同じデータに無回答設問を足しただけ」ではありません。段落は 139 件増え、回答可能な設問は 87,599 問から 86,821 問へ 778 問減っています。検証用はもっと大きく動いており、1.1 の 10,570 問のうち 2.0 に残る回答可能設問は 5,928 問だけです。2.0 の論文は、検証用とテスト用について回答可能な設問と無回答設問がほぼ 1 対 1 になるよう調整したと明記しており、この間引きはその結果です。
公開されている記事は学習用 442 本と検証用 48 本の計 490 本です。ここに非公開のテスト用 46 記事を加えると 442+48+46 で 536 記事となり、2016年の論文が挙げる総記事数と一致します。テスト用の設問数も 2.0 の論文の Table 2 に 9,533 問と記載があります。手元で扱えるのはこのうち 490 記事分だけ、と理解しておけば足ります。Hugging Face の rajpurkar/squad と rajpurkar/squad_v2 も同じ行数(87,599 / 10,570、130,319 / 11,873)で配布されており、設問 ID も公式 JSON と一致します。
trainとdevで33.4%対50.1%に開く無回答比率
2.0 で見落とされがちな数字がここです。学習用の無回答比率は 43,498 ÷ 130,319 で 33.4%、検証用は 5,945 ÷ 11,873 で 50.1%。同じデータセットの中で、無回答が占める割合が 17 ポイント近く違います。
原因は記事単位のカバー率にあります。学習用は 442 記事のうち無回答設問を含むのが 285 記事にとどまるのに対し、検証用は 35 記事すべてが無回答設問を含みます。つまり検証用は最初から無回答を厚くする設計で作られており、学習用の分布とは意図的にずらされています。
これは実装に直接響きます。2.0 のモデルは「答えを返すか、無回答と判定するか」を確信度の閾値で切り替えるのが一般的ですが、その閾値を学習データの無回答比率を前提にチューニングすると、検証データでは無回答を取りこぼします。閾値は必ず検証セット側の分布で決めてください。学習データの 33.4% を事前分布として流用するのは、この時点で誤りです。
EMとF1の採点仕様と、スコアを動かす実装上の落とし穴
冠詞と句読点を落とす正規化処理の中身
公式スコアラー evaluate-v2.0.py は、予測と正解を比較する前に両方を正規化します。処理は小文字化、句読点の除去、英語の冠詞(a / an / the)の除去、連続空白の圧縮という順です。
def normalize_answer(s):
"""Lower text and remove punctuation, articles and extra whitespace."""
def remove_articles(text):
regex = re.compile(r'\b(a|an|the)\b', re.UNICODE)
return re.sub(regex, ' ', text)
def white_space_fix(text):
return ' '.join(text.split())
def remove_punc(text):
exclude = set(string.punctuation)
return ''.join(ch for ch in text if ch not in exclude)
def lower(text):
return text.lower()
return white_space_fix(remove_articles(remove_punc(lower(s))))
この結果、「The Amazon」と「amazon」は同一とみなされ、EM も F1 も満点になります。英語の冠詞ゆれで不当に減点されない設計です。
逆に言えば、この正規化は英語専用です。除去対象の句読点は Python の string.punctuation、つまり ASCII 記号だけなので、日本語の句点は残ります。さらに深刻なのがトークン分割で、内部処理は空白区切りのため、日本語では答え全体が 1 トークンとして扱われます。結果として F1 は部分点を返せなくなり、EM と同じ 0 か 1 に退化します。原典どおりに再実装して確かめると、正解「東京駅」に対する予測「東京駅。」は句点 1 文字の差で EM 0・F1 0.000、正解「1998年4月1日」に対する予測「1998年4月1日に」も助詞 1 文字で EM 0・F1 0.000 になります。このスクリプトを日本語データへ流用すると、表記ゆれの吸収が効かないまま数字だけが出てきます。
部分点が発生しない無回答設問の二値採点
無回答設問の正解は、内部では空文字列 1 件として扱われます。そして F1 の計算では、正解か予測のどちらかが空だった場合、両者が一致すれば 1、しなければ 0 を返します。トークンの重なりによる部分点はここでは発生しません。
つまり無回答設問は EM も F1 も二値です。検証セットの半分が無回答である以上、閾値の当たり外れがスコアの半分をそのまま動かします。2.0 で F1 が伸び悩むときは、読解そのものより先に無回答判定の閾値を疑ってください。公式スクリプトは na-prob ファイルを渡すと、閾値を振ったときの best_exact と best_f1 を出力します。この差分が大きければ、原因は閾値側にあります。
最大6件の正解から最良1件を採る採点方式
学習用の設問には正解が 1 件しかありません。検証用は違います。dev-v1.1 の回答可能な設問を数えると、正解 3 件が 8,490 問で最も多く、5 件が 1,147 問、4 件が 759 問、2 件が 136 問、6 件が 35 問、1 件はわずか 3 問でした。EM と F1 は、この複数の正解それぞれと突き合わせて最大値を採用します。
採点条件が学習用と検証用で異なるということです。学習データ上で自己採点した EM は、正解が 1 件しかないぶん検証データより厳しく出ます。学習中の EM を進捗指標として眺め、検証時に急に数字が上がって驚くのはこの仕様が原因です。学習ループ内の自己採点値は、検証スコアと同じ物差しではありません。
データの入手先とライセンス
公式の配布元は SQuAD explorer のサイトで、同じ JSON が GitHub の rajpurkar/SQuAD-explorer リポジトリの dataset ディレクトリにも置かれています。公式スコアラー evaluate-v2.0.py も同じリポジトリにあり、ローカル採点はこれを使うのが正式です。
ライセンスは CC BY-SA 4.0 です。表示義務に加えて継承条項があるため、SQuAD を改変して作った派生データセットを配布する場合は、同じ CC BY-SA 4.0 で公開する必要があります。学習済みモデルの重みが派生物にあたるかどうかは配布ページに明記がないので、モデルを外部配布する予定があるなら事前に法務確認を通してください。
手元で扱うだけなら Hugging Face 経由が手軽です。
from datasets import load_dataset
squad2 = load_dataset("rajpurkar/squad_v2")
print(squad2["train"].num_rows, squad2["validation"].num_rows)
# 130319 11873
このデータセットは 2026年8月17日時点で直近 30 日間に rajpurkar/squad が 215,898 回、rajpurkar/squad_v2 が 43,402 回ダウンロードされています。公式リーダーボードが止まった後も、学習・評価用の素材としては現役で使われ続けている数字です。なお SQuAD の設問はクラウドワーカーによる人手作成で、その品質設計の考え方はデータラベリングとは?ラベル設計・一致率・自動化を実装目線で解説で整理しています。
リーダーボード更新停止後にSQuADを使う判断
上位モデルが人間スコアを超えたまま止まった公式リーダーボード
SQuAD 2.0 の首位は RICOH_SRCB_DML の IE-Net(アンサンブル)で、EM 90.939 / F1 93.214。2021年6月5日の提出です。人間のスコアは EM 86.831 / F1 89.452 なので、上位陣は 4 ポイント前後の差をつけて人間を上回っています。
そのうえでリーダーボードの中身は止まっています。SQuAD 2.0 の掲載データを保持する out-v2.0.json の更新時刻は 2023年10月12日で、リポジトリ全体の最終コミットも同じ日付です。1.1 側のデータに至っては 2021年9月5日が最後です。2026年時点で新しいモデルを提出しても、公式スコアとして掲載される見込みはありません。
2026年に使ってよい場面と、使うべきでない場面
結論から書きます。新しい LLM どうしの一般的な性能比較に SQuAD を使うべきではありません。理由は 3 つあり、いずれも回避できません。スコアが飽和していて差がつかないこと。公式サーバに新規提出が反映されないため他社と同条件で並べられないこと。そして SQuAD は CC BY-SA 4.0 で Web 上に大量の複製が存在するため、GPT 系をはじめとする現行の LLM が事前学習でこのデータを見ている可能性を排除できないことです。3 つ目は特に厄介で、高いスコアが読解力なのか記憶なのかを切り分ける手段がありません。
一方で、固定された回帰テストのデータとしては今も有効です。自社の抽出型 QA を改修したとき、あるいはリトリーバやリランカを差し替えたときに、同じ 11,873 問で EM と F1 の増減を見る使い方であれば、スコアの絶対値ではなく差分を見ているので飽和は問題になりません。答えが原文の範囲に限定され、複数の正解候補との最大値で採点されるぶん、生成型の評価より測定のばらつきも小さく済みます。
もう 1 つ実務的な使い道が、無回答判定の訓練と検証です。RAG で「参照した文書に答えが書かれていないときは黙る」という挙動は、SQuAD 2.0 の無回答設問とまったく同じ構造をしています。検証セットの半分が無回答という比率も、この目的には都合がよく設計されています。RAG 側の工程分解はRAGパイプラインとは?取り込み系と推論系に分ける工程設計と再索引の実装判断、評価とトレースの運用はLLMOpsとは?MLOpsとの違いとトレース・評価・コスト管理の実装を解説【2026年版】を参照してください。
整理すると、新規ベンチマークとしての SQuAD は役目を終えています。回帰テスト用の固定データとしては現役です。この線引きを曖昧にしたまま「SQuAD で高スコア」と書かれた資料は、2026年時点では評価材料になりません。
日本語で機械読解を測る場合のJSQuAD
日本語で同じ形式の評価をしたい場合は、ヤフーと早稲田大学が構築した日本語言語理解ベンチマーク JGLUE の QA タスク、JSQuAD が対応します。SQuAD 1.1 に準拠しているため無回答設問はなく、日本語 Wikipedia の 2021年11月1日ダンプを素材にしています。翻訳ではなく日本語で新規に作られたデータです。
規模は学習用 62,697 問、検証用 4,442 問、テスト用 4,420 問。ライセンスは SQuAD と同じ CC BY-SA 4.0 です。検証セットでの人手スコアは EM 0.871 / F1 0.944 で、公開されているモデルのうち Waseda RoBERTa large(s512)が EM 0.918 / F1 0.963 と、こちらもすでに人間を上回っています。リポジトリの最終コミットは 2025年3月31日です。
導入時の注意点が 1 つ。英語版の evaluate スクリプトをそのまま日本語に当てると、前述のとおり F1 が EM と同じ二値に退化します。JSQuAD を使う場合は JGLUE 側が提供する評価手順に従ってください。日本語処理全体の位置づけは自然言語処理(NLP)とは?仕組み・事例・LLMとの関係と導入判断をわかりやすく解説で解説しています。
よくある質問
SQuADの読み方は何ですか?
正式名称は Stanford Question Answering Dataset です。公式サイトは英語のみで、カナ表記は定められていません。名称の由来である英単語 squad(分隊・班)の読みに沿って、日本語では「スクワッド」「スクアッド」の両方が使われます。表記を厳密に扱う必要がある文書では、初出で正式名称を綴ったうえで以降を SQuAD と略記する形が無難です。
SQuAD 1.1と2.0はどちらを使えばよいですか?
文脈に答えが無いことを見抜く能力まで測りたいなら 2.0、原文からの抽出精度だけを見たいなら 1.1 です。ここで注意したいのが引き継ぎ率で、1.1 の学習設問は 87,599 問中 86,821 問(99.1%)が 2.0 に残る一方、778 問は除かれています。検証セットはさらに絞られ、1.1 の 10,570 問のうち 2.0 に残るのは 5,928 問だけです。したがって学習セットなら 2.0 から無回答設問を除けば 1.1 にほぼ相当する評価が出せますが、検証セットでは母集団が半減するため 1.1 相当にはなりません。両バージョンの検証スコアを直接比較しないでください。
SQuADはRAGの評価に使えますか?
使えますが、評価できる範囲は限られます。SQuAD は答えを含む段落があらかじめ与えられている前提のデータなので、検索工程そのものの精度は測れません。有効なのは読解工程と無回答判定工程です。特に 2.0 の無回答設問は、参照文書に答えが無いときに回答を作らない挙動を検証する材料として直接使えます。検索工程を含めて測りたい場合は、自社ドキュメントで検索評価用のデータを別途用意する必要があります。
SQuADのライセンスで商用利用はできますか?
CC BY-SA 4.0 なので、出典表示を行えば商用利用は可能です。注意すべきは継承条項で、SQuAD を改変・加工した派生データセットを配布する場合は、同じ CC BY-SA 4.0 で公開しなければなりません。SQuAD で学習したモデルの重みが派生物に該当するかどうかは配布ページに明記がないため、モデルを社外に配布する計画がある場合は事前に法務部門の確認を取ってください。社内利用にとどまるなら、この論点は生じません。
公式リーダーボードに今からスコアを掲載できますか?
できないと考えてください。掲載データを保持するリポジトリの更新は 2023年10月12日で止まっており、SQuAD 1.1 側のデータは 2021年9月5日が最後です。新規提出が反映される見込みはありません。現実的な運用は、公式スコアラー evaluate-v2.0.py をローカルで実行して検証セットのスコアを出し、自社内での比較指標として扱う形になります。この場合の数値は公式リーダーボードの掲載値と同じ物差しではあるものの、テストセットは非公開のため検証セットでの値である旨を明記してください。