KRLabsOrg/acl-verbatim-spans
is a dataset for query-conditioned extractive evidence selection over papers from the
ACL Anthology.
The release combines:
The underlying document collection is
KRLabsOrg/acl-anthology-md.
This dataset is intended for systems that, given a question and a retrieved paper chunk, must identify the supporting evidence verbatim in the chunk.
Typical uses include:
canonicalOne row per (question, chunk) pair.
train and validation are silver supervisiontest is the manual gold benchmarkThis is the main config for analysis, evaluation, and downstream reuse.
Current split sizes:
| split | rows | notes |
|---|---|---|
train | 20,916 | silver |
validation | 2,319 | silver dev |
test | 100 | gold benchmark |
Expected fields:
| field | type | notes |
|---|---|---|
question | string | Query / question text |
paper_id | string | ACL Anthology identifier |
chunk_index | int | Chunk number within the paper |
chunk | string | Raw chunk text |
label | int | 1 if answer-bearing, 0 otherwise |
answerable | bool | Teacher answerability decision |
spans | list[struct] | {start, end, text} evidence spans |
source | string | Where the candidate chunk came from in data generation: gold = the original chunk used to create the synthetic question, retrieved = a chunk retrieved for that question |
retrieval_rank | int or null | Rank among retrieved candidates |
gold_paper | string | Paper from which the synthetic question was derived |
gold_chunk | int | Chunk from which the synthetic question was derived |
predicted_texts | list[string] | Raw teacher outputs before alignment |
latency_s | float | Teacher latency metadata |
err | string or null | Teacher/extraction error, if any |
encoderToken-classification-ready rows derived from the silver canonical data by tokenization and
windowing.
This config is intended for direct encoder training with Hugging Face transformers.
Current split sizes:
| split | rows |
|---|---|
train | 21,099 |
validation | 2,343 |
Expected fields:
| field | type | notes |
|---|---|---|
input_ids | list[int] | Token ids |
attention_mask | list[int] | Attention mask |
labels | list[int] | Binary or BIO token labels |
encoder split was builtThe encoder split was pretokenized with:
| parameter | value |
|---|---|
| tokenizer | answerdotai/ModernBERT-base |
| max_length | 8192 |
| doc_stride | 256 |
| truncation | only_second (question kept whole, chunk windowed) |
| label_scheme | binary (0 = outside, 1 = evidence) |
| drop_unlabeled_positives | true |
If you want to train with a different tokenizer or label scheme, rebuild from
the canonical config:
python acl_verbatim/span_training/prepare_token_cls_dataset.py \
--input-file <canonical_train.jsonl> \
--output-file train.my_tokenizer.binary.jsonl \
--tokenizer <your-tokenizer> \
--label-scheme binary \
--drop-unlabeled-positives
Evaluation always uses canonical/test (raw text); the encoder config
intentionally does not include a test split, because span-level scoring
needs to map token predictions back to character offsets in the original chunk,
which requires retokenizing at inference time.
The benchmark uses paragraph-oriented evidence annotation rather than minimal SQuAD-style answer spans.
Important consequences:
The canonical/test split is the manually annotated benchmark used for extractor evaluation.
| Queries | 20 |
| Retrieved chunks per query | 5 |
| Total rows | 100 |
| Relevant rows | 47 |
| Gold spans | 78 |
The silver training data was produced by:
Load the canonical config:
from datasets import load_dataset
ds = load_dataset("KRLabsOrg/acl-verbatim-spans", "canonical")
train = ds["train"]
dev = ds["validation"]
test = ds["test"]
Load encoder-ready training rows:
from datasets import load_dataset
encoder = load_dataset("KRLabsOrg/acl-verbatim-spans", "encoder")
train = encoder["train"]
dev = encoder["validation"]
from datasets import load_dataset
canonical = load_dataset("KRLabsOrg/acl-verbatim-spans", "canonical")
silver_train = canonical["train"]
silver_dev = canonical["validation"]
gold_test = canonical["test"]
KRLabsOrg/acl-anthology-mdKRLabsOrg/acl-verbatim@misc{Recski:2026,
title={ACL-Verbatim: hallucination-free question answering for research},
author={Gábor Recski and Szilveszter Tóth and Nadia Verdha and István Boros and Ádám Kovács},
year={2026},
eprint={2605.21102},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2605.21102},
}
10 commits
KRLabsOrg/acl-verbatim-spans
is a dataset for query-conditioned extractive evidence selection over papers from the
ACL Anthology.
The release combines:
The underlying document collection is
KRLabsOrg/acl-anthology-md.
This dataset is intended for systems that, given a question and a retrieved paper chunk, must identify the supporting evidence verbatim in the chunk.
Typical uses include:
canonicalOne row per (question, chunk) pair.
train and validation are silver supervisiontest is the manual gold benchmarkThis is the main config for analysis, evaluation, and downstream reuse.
Current split sizes:
| split | rows | notes |
|---|---|---|
train | 20,916 | silver |
validation | 2,319 | silver dev |
test | 100 | gold benchmark |
Expected fields:
| field | type | notes |
|---|---|---|
question | string | Query / question text |
paper_id | string | ACL Anthology identifier |
chunk_index | int | Chunk number within the paper |
chunk | string | Raw chunk text |
label | int | 1 if answer-bearing, 0 otherwise |
answerable | bool | Teacher answerability decision |
spans | list[struct] | {start, end, text} evidence spans |
source | string | Where the candidate chunk came from in data generation: gold = the original chunk used to create the synthetic question, retrieved = a chunk retrieved for that question |
retrieval_rank | int or null | Rank among retrieved candidates |
gold_paper | string | Paper from which the synthetic question was derived |
gold_chunk | int | Chunk from which the synthetic question was derived |
predicted_texts | list[string] | Raw teacher outputs before alignment |
latency_s | float | Teacher latency metadata |
err | string or null | Teacher/extraction error, if any |
encoderToken-classification-ready rows derived from the silver canonical data by tokenization and
windowing.
This config is intended for direct encoder training with Hugging Face transformers.
Current split sizes:
| split | rows |
|---|---|
train | 21,099 |
validation | 2,343 |
Expected fields:
| field | type | notes |
|---|---|---|
input_ids | list[int] | Token ids |
attention_mask | list[int] | Attention mask |
labels | list[int] | Binary or BIO token labels |
encoder split was builtThe encoder split was pretokenized with:
| parameter | value |
|---|---|
| tokenizer | answerdotai/ModernBERT-base |
| max_length | 8192 |
| doc_stride | 256 |
| truncation | only_second (question kept whole, chunk windowed) |
| label_scheme | binary (0 = outside, 1 = evidence) |
| drop_unlabeled_positives | true |
If you want to train with a different tokenizer or label scheme, rebuild from
the canonical config:
python acl_verbatim/span_training/prepare_token_cls_dataset.py \
--input-file <canonical_train.jsonl> \
--output-file train.my_tokenizer.binary.jsonl \
--tokenizer <your-tokenizer> \
--label-scheme binary \
--drop-unlabeled-positives
Evaluation always uses canonical/test (raw text); the encoder config
intentionally does not include a test split, because span-level scoring
needs to map token predictions back to character offsets in the original chunk,
which requires retokenizing at inference time.
The benchmark uses paragraph-oriented evidence annotation rather than minimal SQuAD-style answer spans.
Important consequences:
The canonical/test split is the manually annotated benchmark used for extractor evaluation.
| Queries | 20 |
| Retrieved chunks per query | 5 |
| Total rows | 100 |
| Relevant rows | 47 |
| Gold spans | 78 |
The silver training data was produced by:
Load the canonical config:
from datasets import load_dataset
ds = load_dataset("KRLabsOrg/acl-verbatim-spans", "canonical")
train = ds["train"]
dev = ds["validation"]
test = ds["test"]
Load encoder-ready training rows:
from datasets import load_dataset
encoder = load_dataset("KRLabsOrg/acl-verbatim-spans", "encoder")
train = encoder["train"]
dev = encoder["validation"]
from datasets import load_dataset
canonical = load_dataset("KRLabsOrg/acl-verbatim-spans", "canonical")
silver_train = canonical["train"]
silver_dev = canonical["validation"]
gold_test = canonical["test"]
KRLabsOrg/acl-anthology-mdKRLabsOrg/acl-verbatim@misc{Recski:2026,
title={ACL-Verbatim: hallucination-free question answering for research},
author={Gábor Recski and Szilveszter Tóth and Nadia Verdha and István Boros and Ádám Kovács},
year={2026},
eprint={2605.21102},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2605.21102},
}
10 commits