Research log Small Model Experimentation
GitHub

Pairwise Table Judge

Table judge picks whichever comes first

The one idea you need

Picture asking a small model to referee two filled-in spreadsheets and crown the more correct one. On the genuinely hard match-ups it stops reading the cells and behaves like a rigged coin that always lands on the top-listed contestant.

The question

When a small model produces several versions of a reformatted data table, can it reliably compare them side by side and pick the one that is actually more correct?

What we found

No. Letting the model run a knockout comparison among its own candidate tables did not help: fully-correct tables slipped from 50% (just trusting its first attempt) to 47.5%. On the hard cases where a correct table existed, it picked the right one 100% of the time when that table was shown first and 0% when shown second. It judged position, not content.

Why it matters

If you let a small model choose among its own outputs, never trust a raw side-by-side vote. Randomize candidate order and require the pick to survive a swap; otherwise you are selecting by slot, not by quality.

Fully correct tables: first attempt vs judged pick50% → 47.5%the comparison step slightly hurt instead of helping
Which table it picked on hard cases, by position100% vs 0%chose the correct table when shown first, never when shown second
Ceiling if it always kept the best candidate62.5%the best table already sitting in the pool, versus 47.5% achieved
Misleadingly rosy overall pick rate90%inflated by easy tasks where both tables were already identical
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Question
    2. Setup
    3. Main Result
    4. Interpretation
    5. Charts
    6. Diagnostic Summary
    7. Headroom-Only Diagnostic
    8. Selected Tables
    9. Tournament Changes
    10. Files
  4. Experiment log
  5. Figures
  6. Data files
  7. Reproduce
  8. Related

Results at a glance 7

How often each method produced a fully correct table

How to read

Grouped bars for four methods: the model's first table, its judged pick between candidates, the best table already in its pool, and a version fed the correct rows. Each shows whole-table and single-row correctness; taller is better.

0%25%50%75%100%direct greedydirect greedy50%72.3%pairwise tournamentpairwise tournament47.5%71.9%table oracletable oracle62.5%82.5%row repair (oracle diagnostic)row repair (oracle diagnostic)80%91.3%

Takeaway → The judged-pick bars sit just below the first-try bars, so the comparison step slightly lowered accuracy, while the pool's best towers above both.

Data table
Methodfull-task exactrow exact
direct greedy50%72.3%
pairwise tournament47.5%71.9%
table oracle62.5%82.5%
row repair (oracle diagnostic)80%91.3%

Numbers from experiments/qwen_pairwise_table_judge/analysis/summary.csv

Technical framing

Full-task exact accuracy by selection method — The deployable pairwise tournament loses 2.5 points vs direct greedy; the 12.5-point oracle gap is unrealized selection headroom.

The model just picks whichever table is shown first

How to read

Two bars for the hard tables where the first try was wrong: left, the correct table is placed second; right, placed first. Height is how often it picked the correct table; higher is better.

0%25%50%75%100%correct table is candidate B (base)correct table is candidate B (bas…0%correct table is candidate A (swapped)correct table is candidate A (swa…100%

Takeaway → The rate jumps from none to all when the correct table moves to first position, meaning the model followed order, not content.

Data table
Candidate order (normal mode, tasks where greedy is wrong)judge picks the correct table
correct table is candidate B (base)0%
correct table is candidate A (swapped)100%

Numbers from experiments/qwen_pairwise_table_judge/analysis/diagnostic_headroom_summary.csv

Technical framing

On headroom tasks the judge just picks candidate A — 0% vs 100% flip with candidate order: pure position bias, not semantic table judging, on the tasks that actually matter.

Overall pick rate looks fine but is misleading

How to read

Four bars, one per prompt style, showing how often the model picked the correct table across all comparisons; higher looks better.

0%25%50%75%100%normalnormal90%no examplesno examples80%shuffled examplesshuffled examples80%row-shuffled candidaterow-shuffled candidate80%

Takeaway → All bars sit near 80-90%, but that height comes from easy tables where both choices were identical, hiding the failure on hard ones.

Data table
Judge prompt modejudge picks hidden-correct table
normal90%
no examples80%
shuffled examples80%
row-shuffled candidate80%

Numbers from experiments/qwen_pairwise_table_judge/analysis/diagnostic_summary.csv

Technical framing

Aggregate direct-vs-correct diagnostic looks fine, misleadingly — 80-90% aggregate pick rates are inflated by saturated tasks where both candidates are identical; the headroom subset reveals the failure.

Per-row accuracy versus whole-table accuracy by method

How to read

For each of the four methods, one bar for how many individual rows were right and one for how many whole tables were fully right; higher is better.

0%25%50%75%100%Row repair (diagnostic)Row repair (diagnostic)91.3%80%Table oracleTable oracle82.5%62.5%Direct greedyDirect greedy72.3%50%Pairwise tournamentPairwise tournament71.9%47.5%

Takeaway → Every method's whole-table bar drops well below its per-row bar, showing one wrong row is enough to sink an otherwise-good table.

Data table
conditionRow exactFull-task exact
Row repair (diagnostic)91.3%80%
Table oracle82.5%62.5%
Direct greedy72.3%50%
Pairwise tournament71.9%47.5%

Numbers from experiments/qwen_pairwise_table_judge/reports/qwen_pairwise_table_judge_report.md (Main Result table)

Technical framing

Row-level vs full-table exact accuracy by method — Every method loses 11-24 points going from per-row accuracy to whole-table exactness; one bad row sinks the table.

On fixable tasks a better table existed but went unpicked

How to read

Ten hard tasks along the bottom; for each, a bar for the first-try row accuracy and a bar for the best-available table's row accuracy; higher is better.

0%25%50%75%100%DateTime.000027DateTime.00002750%83.3%DateTime.000076DateTime.00007666.7%100%DateTime.000081DateTime.00008150%66.7%DateTime.000114DateTime.00011416.7%66.7%Number.000008Number.00000833.3%50%Number.000015Number.00001533.3%100%Number.000016Number.00001683.3%100%Number.000049Number.0000490%75%Number.000075Number.00007566.7%100%Number.000077Number.00007733.3%100%

Takeaway → The best-available bar towers over the first-try bar on all ten, several reaching a perfect score, yet the comparison step never chose them.

Data table
Tasks where the oracle-selected table beats direct greedyDirect greedyTable oracle
DateTime.00002750%83.3%
DateTime.00007666.7%100%
DateTime.00008150%66.7%
DateTime.00011416.7%66.7%
Number.00000833.3%50%
Number.00001533.3%100%
Number.00001683.3%100%
Number.0000490%75%
Number.00007566.7%100%
Number.00007733.3%100%

Numbers from experiments/qwen_pairwise_table_judge/reports/qwen_pairwise_table_judge_report.md (Selected Tables table)

Technical framing

Where the missed headroom lives: per-task row accuracy, greedy vs oracle pick — All 10 recoverable tasks are DateTime or Number; a better pick exists in the pool (six reach 100%) but the judge never selects it.

A small trial hid the result the full run revealed

How to read

Four methods, each with a bar from a small six-task trial and a bar from the full forty-task run, measuring how often a fully correct table appeared; higher is better.

0%25%50%75%100%Table oracleTable oracle100%62.5%Direct greedyDirect greedy66.7%50%Pairwise tournamentPairwise tournament66.7%47.5%Row repair (diagnostic)Row repair (diagnostic)16.7%80%

Takeaway → In the small trial the comparison step tied the first try, but the full run shows it falling below the first try.

Data table
conditionPilot, 6 tasksMain, 40 tasks
Table oracle100%62.5%
Direct greedy66.7%50%
Pairwise tournament66.7%47.5%
Row repair (diagnostic)16.7%80%

Numbers from experiments/qwen_pairwise_table_judge/experiment_log.md (Pilot and Main Run result lists)

Technical framing

Pilot (6 tasks) vs main run (40 tasks): full-task exact by method — The saturated 6-task pilot hid the story: at 40 tasks the tournament falls below greedy while row repair jumps from 16.7% to 80%.

The single table the comparison step changed got worse

How to read

One task the step altered; a bar for the first-try table's row accuracy and a bar for the swapped-in table's row accuracy; higher is better.

0%25%50%75%100%DateTime.000111 (1 of 40 tasks changed)DateTime.000111 (1 of 40 tasks ch…100%83.3%

Takeaway → The swapped table's bar is lower than the original, turning a perfect table into an imperfect one; the only swap it made hurt.

Data table
conditionDirect greedy pickTournament pick
DateTime.000111 (1 of 40 tasks changed)100%83.3%

Numbers from experiments/qwen_pairwise_table_judge/reports/qwen_pairwise_table_judge_report.md (Tournament Changes table)

Technical framing

The only table the tournament changed got worse — Across 40 tasks the tournament swapped exactly one table, turning a perfect 100% task into 83.3% and losing full-task exactness.

In the author’s words from the Overview · “Summary”

Can a model choose the more task-consistent full output table when shown examples, query rows, and two candidate tables?

Overview

This top-level README was generated during repository normalization because the imported experiment did not include one.

How To Read

Start with the primary report, then inspect data/, reports/, analysis/, src/, and scripts/ as available. This folder remains self-contained; do not move its run data into shared directories.

Summary

Can a model choose the more task-consistent full output table when shown examples, query rows, and two candidate tables?

Report

Rendered from reports/qwen_pairwise_table_judge_report.md

Question

Can a model choose the more task-consistent full output table when shown examples, query rows, and two candidate tables?

This experiment evaluates pairwise table judging on public text-transformation tasks. The primary deployable method is a tournament over a non-label shortlist of candidate tables. A separate diagnostic compares direct greedy tables against hidden-correct tables when the hidden-correct table is present.

Setup

  • Benchmark root: /workspace/large_artifacts/qwen_pairwise_table_judge/prose-benchmarks
  • Run: main_qwen_pairwise_40
  • Tasks: 40
  • Candidate table rows: 1370
  • Pairwise judgment rows: 336
  • Shortlist size: 6
  • Train rows per task: 4
  • Held-out cap per task: 6

Main Result

methodtasksrow_exactfull_task_exacttable_oracle_ratemedian_candidate_tables
row_repair_diagnostic2591.3%80.0%100.0%9.00
table_oracle4082.5%62.5%62.5%9.50
direct_row_greedy4072.3%50.0%62.5%9.50
pairwise_tournament4071.9%47.5%62.5%9.50

Interpretation

The deployable pairwise tournament changes full-task exact by -2.5 points relative to direct greedy. The table oracle is 12.5 points above direct greedy, so any gap between tournament and oracle is selection headroom. In the all-oracle-task direct-vs-hidden-correct diagnostic, the normal judge picks the hidden-correct table 90.0% of the time, but that aggregate includes saturated tasks where direct and oracle are identical.

On the actual headroom subset, where direct greedy is wrong and a hidden-correct table exists, the normal judge picks the hidden-correct table 0.0% when direct is candidate A and 100.0% when the hidden-correct table is candidate A. This is the critical diagnostic: a large base/swapped gap indicates position bias rather than semantic table judging.

The row-repair diagnostic reaches 80.0% full-task exact. It is not deployable because it uses hidden oracle row alternatives; it measures whether the judge can accept correct row-level replacements when they are explicitly supplied.

Charts

Full-task exact by method

Row versus task accuracy

Diagnostic pick oracle

Headroom diagnostic pick oracle

Tournament changes

Family heatmap

Diagnostic Summary

modepair_kindcomparisonspicked_oracledirect_full_exactoracle_full_exact
no_examplesdirect_vs_correct2580.0%80.0%100.0%
normaldirect_vs_correct5090.0%80.0%100.0%
row_shuffled_candidatedirect_vs_correct2580.0%80.0%100.0%
shuffled_examplesdirect_vs_correct2580.0%80.0%100.0%

Headroom-Only Diagnostic

modeorder_tagcomparisonsunique_taskspicked_oraclepicked_candidate_a
no_examplesbase550.0%100.0%
normalbase550.0%100.0%
normalswapped55100.0%100.0%
row_shuffled_candidatebase550.0%100.0%
shuffled_examplesbase550.0%100.0%

Selected Tables

task_idfamilymethodsourcerow_exactfull_task_exactcandidate_tablestable_candidate_oracle
Address.000002Addressdirect_row_greedyrow_greedy33.3%False9False
Address.000013Addressdirect_row_greedyrow_greedy66.7%False17False
BillingCode.000007BillingCodedirect_row_greedyrow_greedy33.3%False16False
City.000010Citydirect_row_greedyrow_greedy100.0%True9True
City.000011Citydirect_row_greedyrow_greedy75.0%False12False
Column.000001Columndirect_row_greedyrow_greedy100.0%True9True
DateTime.000004DateTimedirect_row_greedyrow_greedy100.0%True9True
DateTime.000007DateTimedirect_row_greedyrow_greedy100.0%True9True
DateTime.000017DateTimedirect_row_greedyrow_greedy100.0%True44True
DateTime.000025DateTimedirect_row_greedyrow_greedy100.0%True16True
DateTime.000027DateTimedirect_row_greedyrow_greedy50.0%False88False
DateTime.000034DateTimedirect_row_greedyrow_greedy100.0%True9True
DateTime.000051DateTimedirect_row_greedyrow_greedy33.3%False12False
DateTime.000076DateTimedirect_row_greedyrow_greedy66.7%False14True
DateTime.000081DateTimedirect_row_greedyrow_greedy50.0%False14False
DateTime.000094DateTimedirect_row_greedyrow_greedy100.0%True9True
DateTime.000104DateTimedirect_row_greedyrow_greedy100.0%True9True
DateTime.000108DateTimedirect_row_greedyrow_greedy100.0%True9True
DateTime.000111DateTimedirect_row_greedyrow_greedy100.0%True10True
DateTime.000114DateTimedirect_row_greedyrow_greedy16.7%False512False
DateTime.000115DateTimedirect_row_greedyrow_greedy0.0%False9False
DateTime.000116DateTimedirect_row_greedyrow_greedy50.0%False9False
FilePath.000001FilePathdirect_row_greedyrow_greedy100.0%True9True
Gender.000001Genderdirect_row_greedyrow_greedy66.7%False11False
Language.000002Languagedirect_row_greedyrow_greedy100.0%True9True
Name.000028Namedirect_row_greedyrow_greedy100.0%True9True
Number.000008Numberdirect_row_greedyrow_greedy33.3%False16False
Number.000015Numberdirect_row_greedyrow_greedy33.3%False224True
Number.000016Numberdirect_row_greedyrow_greedy83.3%False40True
Number.000022Numberdirect_row_greedyrow_greedy100.0%True32True
Number.000028Numberdirect_row_greedyrow_greedy100.0%True9True
Number.000029Numberdirect_row_greedyrow_greedy66.7%False14False
Number.000043Numberdirect_row_greedyrow_greedy100.0%True9True
Number.000049Numberdirect_row_greedyrow_greedy0.0%False56False
Number.000075Numberdirect_row_greedyrow_greedy66.7%False16True
Number.000077Numberdirect_row_greedyrow_greedy33.3%False26True
Phone.000008Phonedirect_row_greedyrow_greedy100.0%True9True
Phone.000011Phonedirect_row_greedyrow_greedy100.0%True9True
ShippingCode.000008ShippingCodedirect_row_greedyrow_greedy33.3%False9False
UserAgent.000003UserAgentdirect_row_greedyrow_greedy100.0%True9True
Address.000002Addresspairwise_tournamentrow_greedy33.3%False9False
Address.000013Addresspairwise_tournamentrow_greedy66.7%False17False
BillingCode.000007BillingCodepairwise_tournamentrow_greedy33.3%False16False
City.000010Citypairwise_tournamentrow_greedy100.0%True9True
City.000011Citypairwise_tournamentrow_greedy75.0%False12False
Column.000001Columnpairwise_tournamentrow_greedy100.0%True9True
DateTime.000004DateTimepairwise_tournamentrow_greedy100.0%True9True
DateTime.000007DateTimepairwise_tournamentrow_greedy100.0%True9True
DateTime.000017DateTimepairwise_tournamentrow_greedy100.0%True44True
DateTime.000025DateTimepairwise_tournamentrow_greedy100.0%True16True
DateTime.000027DateTimepairwise_tournamentrow_greedy50.0%False88False
DateTime.000034DateTimepairwise_tournamentrow_greedy100.0%True9True
DateTime.000051DateTimepairwise_tournamentrow_greedy33.3%False12False
DateTime.000076DateTimepairwise_tournamentrow_greedy66.7%False14True
DateTime.000081DateTimepairwise_tournamentrow_greedy50.0%False14False
DateTime.000094DateTimepairwise_tournamentrow_greedy100.0%True9True
DateTime.000104DateTimepairwise_tournamentrow_greedy100.0%True9True
DateTime.000108DateTimepairwise_tournamentrow_greedy100.0%True9True
DateTime.000111DateTimepairwise_tournamentbatch_plain83.3%False10True
DateTime.000114DateTimepairwise_tournamentrow_greedy16.7%False512False
DateTime.000115DateTimepairwise_tournamentrow_greedy0.0%False9False
DateTime.000116DateTimepairwise_tournamentrow_greedy50.0%False9False
FilePath.000001FilePathpairwise_tournamentrow_greedy100.0%True9True
Gender.000001Genderpairwise_tournamentrow_greedy66.7%False11False
Language.000002Languagepairwise_tournamentrow_greedy100.0%True9True
Name.000028Namepairwise_tournamentrow_greedy100.0%True9True
Number.000008Numberpairwise_tournamentrow_greedy33.3%False16False
Number.000015Numberpairwise_tournamentrow_greedy33.3%False224True
Number.000016Numberpairwise_tournamentrow_greedy83.3%False40True
Number.000022Numberpairwise_tournamentrow_greedy100.0%True32True
Number.000028Numberpairwise_tournamentrow_greedy100.0%True9True
Number.000029Numberpairwise_tournamentrow_greedy66.7%False14False
Number.000043Numberpairwise_tournamentrow_greedy100.0%True9True
Number.000049Numberpairwise_tournamentrow_greedy0.0%False56False
Number.000075Numberpairwise_tournamentrow_greedy66.7%False16True
Number.000077Numberpairwise_tournamentrow_greedy33.3%False26True
Phone.000008Phonepairwise_tournamentrow_greedy100.0%True9True
Phone.000011Phonepairwise_tournamentrow_greedy100.0%True9True
ShippingCode.000008ShippingCodepairwise_tournamentrow_greedy33.3%False9False
UserAgent.000003UserAgentpairwise_tournamentrow_greedy100.0%True9True
City.000010Cityrow_repair_diagnosticrow_repair_diagnostic100.0%True9True
Column.000001Columnrow_repair_diagnosticrow_repair_diagnostic100.0%True9True
DateTime.000004DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
DateTime.000007DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
DateTime.000017DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True44True
DateTime.000025DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True16True
DateTime.000034DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
DateTime.000076DateTimerow_repair_diagnosticrow_repair_diagnostic66.7%False14True
DateTime.000094DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
DateTime.000104DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
DateTime.000108DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
DateTime.000111DateTimerow_repair_diagnosticrow_repair_diagnostic100.0%True10True
FilePath.000001FilePathrow_repair_diagnosticrow_repair_diagnostic100.0%True9True
Language.000002Languagerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
Name.000028Namerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
Number.000015Numberrow_repair_diagnosticrow_repair_diagnostic33.3%False224True
Number.000016Numberrow_repair_diagnosticrow_repair_diagnostic83.3%False40True
Number.000022Numberrow_repair_diagnosticrow_repair_diagnostic100.0%True32True
Number.000028Numberrow_repair_diagnosticrow_repair_diagnostic100.0%True9True
Number.000043Numberrow_repair_diagnosticrow_repair_diagnostic100.0%True9True
Number.000075Numberrow_repair_diagnosticrow_repair_diagnostic66.7%False16True
Number.000077Numberrow_repair_diagnosticrow_repair_diagnostic33.3%False26True
Phone.000008Phonerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
Phone.000011Phonerow_repair_diagnosticrow_repair_diagnostic100.0%True9True
UserAgent.000003UserAgentrow_repair_diagnosticrow_repair_diagnostic100.0%True9True
Address.000002Addresstable_oraclerow_greedy33.3%False9False
Address.000013Addresstable_oraclerow_greedy66.7%False17False
BillingCode.000007BillingCodetable_oraclerow_greedy33.3%False16False
City.000010Citytable_oraclerow_greedy100.0%True9True
City.000011Citytable_oraclerow_greedy75.0%False12False
Column.000001Columntable_oraclerow_greedy100.0%True9True
DateTime.000004DateTimetable_oraclerow_greedy100.0%True9True
DateTime.000007DateTimetable_oraclerow_greedy100.0%True9True
DateTime.000017DateTimetable_oraclerow_greedy100.0%True44True
DateTime.000025DateTimetable_oraclerow_greedy100.0%True16True
DateTime.000027DateTimetable_oraclerow_combo83.3%False88False
DateTime.000034DateTimetable_oraclerow_greedy100.0%True9True
DateTime.000051DateTimetable_oraclerow_greedy33.3%False12False
DateTime.000076DateTimetable_oraclerow_combo100.0%True14True
DateTime.000081DateTimetable_oraclebatch_plain66.7%False14False
DateTime.000094DateTimetable_oraclerow_greedy100.0%True9True
DateTime.000104DateTimetable_oraclerow_greedy100.0%True9True
DateTime.000108DateTimetable_oraclerow_greedy100.0%True9True
DateTime.000111DateTimetable_oraclerow_greedy100.0%True10True
DateTime.000114DateTimetable_oraclerow_combo66.7%False512False
DateTime.000115DateTimetable_oraclerow_greedy0.0%False9False
DateTime.000116DateTimetable_oraclerow_greedy50.0%False9False
FilePath.000001FilePathtable_oraclerow_greedy100.0%True9True
Gender.000001Gendertable_oraclerow_greedy66.7%False11False
Language.000002Languagetable_oraclerow_greedy100.0%True9True
Name.000028Nametable_oraclerow_greedy100.0%True9True
Number.000008Numbertable_oraclerow_sample050.0%False16False
Number.000015Numbertable_oraclerow_combo100.0%True224True
Number.000016Numbertable_oraclerow_combo100.0%True40True
Number.000022Numbertable_oraclerow_greedy100.0%True32True
Number.000028Numbertable_oraclerow_greedy100.0%True9True
Number.000029Numbertable_oraclerow_greedy66.7%False14False
Number.000043Numbertable_oraclerow_greedy100.0%True9True
Number.000049Numbertable_oraclerow_combo75.0%False56False
Number.000075Numbertable_oraclebatch_plain100.0%True16True
Number.000077Numbertable_oraclerow_combo100.0%True26True
Phone.000008Phonetable_oraclerow_greedy100.0%True9True
Phone.000011Phonetable_oraclerow_greedy100.0%True9True
ShippingCode.000008ShippingCodetable_oraclerow_greedy33.3%False9False
UserAgent.000003UserAgenttable_oraclerow_greedy100.0%True9True

Tournament Changes

task_idfamilydirect_sourcetournament_sourcedirect_row_exacttournament_row_exactdirect_full_exacttournament_full_exactdelta_row_exactdelta_full_exact
DateTime.000111DateTimerow_greedybatch_plain100.0%83.3%TrueFalse-16.7%-100.0%

Files

  • runs/main_qwen_pairwise_40/table_candidates.csv
  • runs/main_qwen_pairwise_40/oracle_summary.csv
  • runs/main_qwen_pairwise_40/pairwise_judgments.csv
  • runs/main_qwen_pairwise_40/judge_details.csv
  • runs/main_qwen_pairwise_40/selected_tables.csv
  • runs/main_qwen_pairwise_40/diagnostic_direct_vs_correct.csv
  • analysis/summary.csv
  • analysis/diagnostic_summary.csv
  • analysis/diagnostic_headroom_summary.csv
  • analysis/tournament_changes.csv
  • analysis/selected_tables.csv
  • analysis/judge_details.csv

Experiment log 8

Show the running log (8 entries, 2026-06-27)

Objective

Test whether a language model can select the more task-consistent full output table when shown concrete alternatives for the same transformation task.

The primary method is pairwise table judging. The experiment includes:

  1. A deployable tournament over a non-label shortlist of candidate tables.
  2. A diagnostic direct-vs-hidden-correct comparison where the correct table is present but not labeled as such.
  3. Controls that remove or corrupt the task context.

The experiment is standalone: all run-local inputs, candidate pools, judgments, analyses, charts, and reports are stored under this directory.

Initial Plan

  1. Create a fresh experiment directory.
  2. Copy a fixed candidate-table pool into the run directory.
  3. Load the public text-transformation tasks and render the train examples/query rows.
  4. Ask Qwen to judge candidate table pairs.
  5. Compare deployable tournament, diagnostic direct-vs-correct judging, no-example control, shuffled-example control, and row-shuffled-candidate control.
  6. Generate CSVs, charts, Markdown report, and HTML report.

Run Notes

2026-06-27 08:06 UTC - Scaffold

  • Created a fresh experiment directory at /workspace/experiments/qwen_pairwise_table_judge.
  • Created a separate large-artifact root at /workspace/large_artifacts/qwen_pairwise_table_judge.
  • Symlinked the public PROSE benchmark data under the large-artifact root instead of duplicating it in the experiment directory.
  • Implemented src/qwen_pairwise_table_judge.py.
  • Verified syntax with python -m py_compile.

2026-06-27 08:07 UTC - No-Qwen Smoke

Command:

python /workspace/experiments/qwen_pairwise_table_judge/src/qwen_pairwise_table_judge.py \
  --run_name smoke_no_qwen \
  --task_limit 6 \
  --heldout_cap 4 \
  --shortlist 4 \
  --no_qwen

Purpose: validate filesystem layout, candidate-pool copying, benchmark loading, CSV output, chart generation, Markdown report generation, and HTML report generation without spending model calls.

Fixes made during smoke:

  • Replaced a pandas Series boolean fallback with an explicit None check.
  • Fixed a mode_summary.mode attribute collision by indexing mode_summary["mode"].

Smoke metrics are not interpreted because --no_qwen defaults uncached judgments to candidate A.

2026-06-27 08:08 UTC - Real-Qwen Pilot

Command:

python /workspace/experiments/qwen_pairwise_table_judge/src/qwen_pairwise_table_judge.py \
  --run_name pilot_qwen_6 \
  --task_limit 6 \
  --heldout_cap 4 \
  --shortlist 4

Result:

  • 52 real model judgments.
  • table_oracle: 100.0% full-task exact.
  • direct_row_greedy: 66.7% full-task exact.
  • pairwise_tournament: 66.7% full-task exact.
  • row_repair_diagnostic: 16.7% full-task exact.

Pilot diagnosis:

  • Qwen emitted parseable A/B choices.
  • The small task sample was mostly saturated, so it was only used to validate mechanics and prompt parsing.

2026-06-27 08:09 UTC - Main Run

Command:

python /workspace/experiments/qwen_pairwise_table_judge/src/qwen_pairwise_table_judge.py \
  --run_name main_qwen_pairwise_40 \
  --task_limit 40 \
  --heldout_cap 6 \
  --shortlist 6

Result:

  • 40 public text-transformation tasks.
  • 336 unique cached model judgments.
  • No blank choices in the cached judgment records.
  • table_oracle: 62.5% full-task exact.
  • direct_row_greedy: 50.0% full-task exact.
  • pairwise_tournament: 47.5% full-task exact.
  • row_repair_diagnostic: 80.0% full-task exact on the 25 tasks with an exact candidate.

Main diagnosis:

  • The deployable pairwise tournament is a negative result: it is 2.5 points worse than direct greedy and does not capture the 12.5-point oracle headroom.
  • The all-oracle-task diagnostic is misleading if read alone: normal direct-vs-hidden-correct judging picks the hidden-correct table 90.0% of the time, but most of those comparisons are saturated cases where direct and oracle are the same candidate.
  • On the five true headroom tasks, Qwen picks candidate A regardless of semantics:

    • direct as A, hidden-correct as B: 0.0% picked hidden-correct.
    • hidden-correct as A, direct as B: 100.0% picked hidden-correct.
    • no examples, shuffled examples, and row-shuffled candidate controls with direct as A: 0.0% picked hidden-correct.
  • The useful signal is row-local and diagnostic only: when hidden correct row replacements are explicitly supplied, row repair reaches 80.0% full-task exact. That is not deployable because it uses oracle alternatives.

2026-06-27 08:11 UTC - Report Hardening

  • Added analysis/diagnostic_headroom_summary.csv.
  • Added analysis/tournament_changes.csv.
  • Added analysis/figures/diagnostic_headroom_pick_oracle.png.
  • Updated the Markdown and HTML report to make the headroom-only position-bias result explicit.
  • Verified the report is standalone and contains no references to earlier experiments.

Final artifacts:

  • src/qwen_pairwise_table_judge.py
  • runs/main_qwen_pairwise_40/pairwise_judgments.csv
  • runs/main_qwen_pairwise_40/judge_details.csv
  • runs/main_qwen_pairwise_40/selected_tables.csv
  • runs/main_qwen_pairwise_40/diagnostic_direct_vs_correct.csv
  • analysis/summary.csv
  • analysis/diagnostic_summary.csv
  • analysis/diagnostic_headroom_summary.csv
  • analysis/tournament_changes.csv
  • analysis/figures/*.png
  • reports/qwen_pairwise_table_judge_report.md
  • reports/qwen_pairwise_table_judge_report.html

Figures 6

diagnostic headroom pick oracle
diagnostic headroom pick oracle · analysis/figures/
diagnostic pick oracle
diagnostic pick oracle · analysis/figures/
family heatmap
family heatmap · analysis/figures/
full task by method
full task by method · analysis/figures/
row vs task
row vs task · analysis/figures/
tournament changes
tournament changes · analysis/figures/

Data files 10

Result tables and metrics copied from the experiment folder — preview inline or open the raw file.

Reproduce

This entry is source code or analysis only — there is no separate run to reproduce.

Browse the experiment folder on GitHub ↗