timchen0618's picture
Add E2E Structures tab
e1309c3 verified
|
Raw
History Blame Contribute Delete
9.51 kB
metadata
title: Open-WikiTable Viewer
emoji: πŸ“‘
colorFrom: yellow
colorTo: red
sdk: static
pinned: false

Open-WikiTable Viewer

Interactive viewer for the test split of Open-WikiTable (Kweon et al., ACL Findings 2023) β€” the first open-domain QA dataset that requires complex reasoning over tables, built on WikiSQL + WikiTableQuestions.

For each of the 6,602 test questions you can inspect:

  • The decontextualized question + dataset of origin (WikiSQL / WikiTQ)
  • The gold answer(s)
  • The reference SQL query
  • The three buckets of candidate splitted-table chunks: hard-positive (full match), positive (partial match), negative (BM25-similar distractors) β€” each rendered as a real table with page/section/caption breadcrumb

View modes

The topbar's view-mode toggle switches between nine parallel views (full parity with monaco-benchmark-viewer where data exists for wiki_opentable):

  • πŸ“‘ Dataset (default) β€” browse all 6,602 test questions with their gold answer, reference SQL, and the three buckets of candidate table chunks (hard-positive / positive / negative).
  • πŸ”§ Unified eval β€” the same 500-qid subset used by every downstream eval, fetched from the cross-dataset unified bundle ($DATA_ROOT/eval/wiki_opentable/unified/test_with_chunks.unified.jsonl). Shows the gold question + gold answers + every gold supporting doc rendered as markdown (the wiki_opentable docs are already markdown tables).
  • 🧬 Eval Structures v0 β€” the typed structure docs (e.g. structures/entity/…, structures/_raw/…) that the structures-based eval consumes, fetched from test_with_structures.unified.jsonl. Grouped by subtype in the UI.
  • πŸ— E2E Structures β€” for each of the 500 test qids, the supporting doc(s) + every structure file the information-scaffolds e2e pipeline extracted from each doc on-the-fly (scaffolds_dir/<shape>/<doc_id>.{csv,json,jsonl}). Five possible shapes per doc: πŸͺͺ entity_fact_records Β· πŸ•’ chronology_and_timeline_indexes Β· πŸ’¬ claim_and_theme_summaries Β· ❓ qa_shortcuts_and_templates Β· πŸ•Έ relation_graphs_and_mappings. Each structure card renders CSV β†’ mini-table and JSONL β†’ keyed mini-cards so the underlying records are immediately legible. Click a question in the sidebar to inspect that qid's supporting doc + structures.
  • πŸ›  Structure per q (formerly "Baseline A") β€” the standalone agentic_answer run on the 500-qid subset with per-qid scaffolds (outputs/agentic_wiki_opentable/cell4_agentic_a.response.jsonl). Side-by-side gold + parsed prediction + canonical per-qid F1 / strict-EM / P / R + the full agent loop (events). Mean F1 β‰ˆ 78.95.
  • πŸ›  Structure per ds (formerly "Baseline B") β€” the parallel run with a flat per-dataset structure corpus (cell5_agentic_b_corpus.response.jsonl). Mean F1 β‰ˆ 74.84.
  • πŸ›  DCI (formerly "Baseline C") β€” the parallel run with a flat per-dataset rawtext corpus (cell6_agentic_c_rawtext.response.jsonl). Mean F1 β‰ˆ 89.22.
  • πŸ“Š Compare β€” per-qid side-by-side grid of all 7 configs (closed-book, with-docs, with-structures, structure per q, structure per ds, DCI, e2e). Each card shows the model's answer, the parsed prediction items, and the canonical local set-based F1 / EM / P / R (no LLM-judge file exists for wiki_opentable β€” the deterministic wiki_opentable_adapter.py is the source of truth). The highest-F1 cell per qid is flagged with πŸ†. The "e2e" cell is recomputed from the trajectories_e2e/records/ shards on disk (same scorer, no external eval file). Sidebar rows show a 7-bar sparkline so you can spot disagreement at a glance; an "all EM / all F1=0 / split" filter narrows to qids by agreement.
  • πŸ€– E2E Trajectories β€” for the 500 wikitq-* test questions of the information-scaffolds e2e pipeline run on wiki_opentable, inspect each agent trajectory side-by-side with the gold answer, the parsed prediction, and per-qid F1 / strict-EM / precision / recall (computed with the canonical wiki_opentable_adapter.py set-based scoring + normalization). Sidebar rows are colour-coded by F1 bucket; filter pills narrow by stop_reason (end_turn / error / max_turns) or by score bucket (EM=1 / 0<F1<1 / F1=0).

The four trajectory tabs share the same sidebar filter pills (stop_reason

  • score bucket); Dataset, Unified eval, Eval Structures v0, E2E Structures, and Compare share the WikiSQL / WikiTQ dataset-origin filter pills. The Compare tab adds its own agreement filter (all / all EM / all F1=0 / split) so you can drill into the rows where the cells disagree.

The Structures v0 / v1 / v2 generator tabs from the MoNaCo viewer are intentionally absent: wiki_opentable was never paired with a structures-generation AML response JSONL (only the e2e-pipeline hierarchical structure dirs exist, which πŸ— E2E Structures surfaces).

Deep-link via the URL hash: #dataset:wikisql-00116 Β· #unified:wikitq-00030 Β· #eval_structures:wikitq-00030 Β· #e2e_structures:wikitq-01887 Β· #trajectories:wikitq-00030 Β· #trajectories_corpus:wikitq-00030 Β· #trajectories_rawtext:wikitq-00030 Β· #compare:wikitq-00030 Β· #e2e:wikitq-00030. Legacy #wikisql-00116 links resolve to dataset mode.

Local dev

python -m http.server 8000   # β†’ http://localhost:8000/

Rebuilding the shards

If the source dataset is re-extracted, re-run:

python scripts/build_dataset.py \
  --in-split  /path/to/Open_WikiTable/data/test.json \
  --in-tables /path/to/Open_WikiTable/data/splitted_tables.json \
  --out-dir   .

This writes index.json + records/<qid>.json shards (no LFS needed β€” each shard is a few KB).

Rebuilding the E2E trajectory shards

If the e2e pipeline is re-run on wiki_opentable, regenerate the trajectory view with:

python scripts/build_trajectories_e2e.py \
  --predictions   <run>/named-outputs/predictions/predictions \
  --gold          $DATA_ROOT/eval/wiki_opentable/raw/test_with_chunks.jsonl \
  --eval-results  <run>/named-outputs/eval_results/eval_results.json \
  --out-dir       trajectories_e2e \
  --label         "your run label"

The script inlines the canonical scoring (wiki_opentable_adapter.py + _parse_exact_answer.py) so it has no dependency on the information-scaffolds repo. It writes trajectories_e2e/index.json + trajectories_e2e/records/<qid>.json; per-event tool-result content is truncated at 8 KB to keep each shard browser-friendly.

Rebuilding the other 5 shard collections

# πŸ”§ Unified eval (default --src points at $DATA_ROOT/eval/wiki_opentable/unified/test_with_chunks.unified.jsonl)
python scripts/build_unified.py

# 🧬 Eval Structures v0 (default --src points at .../test_with_structures.unified.jsonl)
python scripts/build_eval_structures.py

# πŸ— E2E Structures (per-qid Β· supporting doc + every e2e-pipeline structure file from scaffolds_dir/)
# Defaults point at the wiki-opentable-fullcorpus-…-20260622 run; pass
# --scaffolds-dir to point at a different e2e run's named-outputs/scaffolds_dir.
python scripts/build_e2e_structures.py

# πŸ›  Trajectory (Baseline A β€” per-qid scaffolds, cell4)
python scripts/build_trajectories.py \
  --predictions /home/azureuser/projects/information-scaffolds/outputs/agentic_wiki_opentable/cell4_agentic_a.response.jsonl \
  --out         trajectories \
  --label       "Baseline A β€” per-qid scaffolds (cell4_agentic_a)"

# πŸ›  Structure per q (formerly Baseline A β€” per-qid scaffolds, cell4)
python scripts/build_trajectories.py \
  --predictions /home/azureuser/projects/information-scaffolds/outputs/agentic_wiki_opentable/cell4_agentic_a.response.jsonl \
  --out         trajectories \
  --label       "structure per q (formerly Baseline A Β· per-qid scaffolds Β· cell4_agentic_a)"

# πŸ›  Structure per ds (formerly Baseline B β€” flat structure corpus, cell5)
python scripts/build_trajectories.py \
  --predictions /home/azureuser/projects/information-scaffolds/outputs/agentic_wiki_opentable/cell5_agentic_b_corpus.response.jsonl \
  --out         trajectories_corpus \
  --label       "structure per ds (formerly Baseline B Β· flat structure corpus Β· cell5_agentic_b_corpus)"

# πŸ›  DCI (formerly Baseline C β€” flat rawtext corpus, cell6)
python scripts/build_trajectories.py \
  --predictions /home/azureuser/projects/information-scaffolds/outputs/agentic_wiki_opentable/cell6_agentic_c_rawtext.response.jsonl \
  --out         trajectories_rawtext \
  --label       "DCI (formerly Baseline C Β· flat rawtext corpus Β· cell6_agentic_c_rawtext)"

# πŸ“Š Compare (per-qid grid across all 7 configs; local set-based F1/EM)
# Reads trajectories_e2e/records/ on disk for the "e2e" cell β€” make sure
# trajectories_e2e/ has been built first (see "Rebuilding the E2E trajectory shards").
python scripts/build_compare.py

Each script writes <out>/index.json + <out>/records/<qid>.json and clears stale shards from a previous build so the index and on-disk shards never drift. The three trajectory scripts share the canonical semicolon-split parser + set-based F1/EM scoring with build_trajectories_e2e.py (inlined β€” no information-scaffolds dependency). build_compare.py reuses the same parser + scorer (also inlined) so per-cell numbers in the Compare tab match the trajectory tabs and evaluation/CANONICAL.md exactly.