Research log Small Model Experimentation
GitHub

Qwen Public PROSE ABI Gate

Frozen text-cleanup recipes miss most real tasks

The one idea you need

Picture a fixed toolbox of preset text-reshaping tools: pull the domain from an email, take the first word, round a number. Freeze it, then hand it an outside pile of formatting jobs, keeping a tool only if it also works on rows it never saw.

The question

If you hand-build a fixed set of text-reshaping recipes, will they handle an independent, outside collection of everyday spreadsheet-cleanup tasks?

What we found

No. The frozen toolkit fully solved only 19% of the 309 outside tasks. In 77% of them no recipe fit even the worked examples, so the toolkit lacked that operation entirely; under 4% overfit. Yet a small four-billion-parameter model, given the same examples, answered a fresh case correctly 73% of the time, and two-thirds right even on tasks the toolkit missed.

Why it matters

Building text normalization from a fixed rule library covers only a fraction of real formats, especially dates and numbers. Prefer letting a small model infer the transformation from examples, or add retrieval to pick domain-specific rules.

Prebuilt toolkit's task coverage19% (59 of 309)solved and verified on rows it never saw
Misses where no recipe fit at all77%the operation was simply missing
Small model answering from examples73% correct4-billion-parameter model, one fresh case per task
Bigger recipe search, tiny payoff13% → 19%500x more recipes tried, still under a fifth solved
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Abstract
    2. Method
    3. Run Configuration
    4. Primary Results
    5. Interpretation
    6. Limitations
    7. Artifacts
  4. Experiment log
  5. Figures
  6. Data files
  7. Reproduce
  8. Related

Results at a glance 7

Even the richest recipe set solves under a fifth of tasks

How to read

Three toolbox sizes along the bottom, smallest to largest. Each bar splits its tasks into solved-and-verified-on-unseen-rows, a recipe that fit examples only by luck, and no recipe fitting at all. A taller solved slice is better.

0%25%50%75%100%12.6%2.6%84.8%core17.8%3.2%79%office19.1%3.6%77.3%concat

Takeaway → The solved slice never clears about a fifth in any toolbox while the 'no recipe fit' band dominates, meaning the tasks are out of reach, not merely overfit.

Data table
frozen ABI tierheld-out coveragetrain-only (coincidence) failuresno train match
core12.6%2.6%84.8%
office17.8%3.2%79%
concat19.1%3.6%77.3%

Numbers from analysis/overall_summary.csv

Technical framing

Frozen transformation ABI covers under 20% of public PROSE tasks — Even the richest frozen tier validates only 19% of tasks; most misses are missing primitives, not held-out coincidences.

The small model answers most tasks the recipes cannot

How to read

Bars show how often a small model, given a few examples, produced the exact right answer on a fresh case: for all sampled tasks, only tasks the toolbox missed, and only tasks it covered. Taller is better.

0%25%50%75%100%all sampled tasksall sampled tasks73.3%ABI not coveredABI not covered65.9%ABI coveredABI covered93.8%

Takeaway → The model still nails about two-thirds of the tasks the toolbox misses, showing the shortfall is the fixed recipes, not the transformations being impossible.

Data table
task slice (60-task sample)Qwen direct exact match (1 held-out query)
all sampled tasks73.3%
ABI not covered65.9%
ABI covered93.8%

Numbers from analysis/qwen_direct_summary.csv

Technical framing

Frozen Qwen answers most tasks the ABI cannot cover — The model infers 66% of transformations the frozen ABI misses, so the bottleneck is the ABI's primitives, not the model.

Simple edits work; date rounding and ranges do not

How to read

Each bar is a type of text operation; height is the share of those tasks the best toolbox solved. Left bars are simple surface edits, right bars are date and number rounding and ranges. Taller is better.

0%20%40%60%SubstringSubstring40.5%CasingCasing33.3%ConcatenationConcatenation19.2%MulticolumnMulticolumn18.8%DateTimeDateTime7.7%NumericNumeric7.3%ConditionalConditional5.4%NumericRoundingNumericRounding4.8%DateTimeRoundingDateTimeRounding0%DateTimeRangeDateTimeRange0%

Takeaway → Coverage falls from about two-in-five for plain substring edits to zero for date rounding and range tasks (number rounding barely clears one-in-twenty), exactly where the toolbox runs out.

Data table
task featureheld-out coverage (concat tier)
Substring40.5%
Casing33.3%
Concatenation19.2%
Multicolumn18.8%
DateTime7.7%
Numeric7.3%
Conditional5.4%
NumericRounding4.8%
DateTimeRounding0%
DateTimeRange0%

Numbers from analysis/feature_summary.csv

Technical framing

Where the ABI fails: coverage by task feature (best tier) — Surface substring/casing tasks are reachable; date-time rounding and range arithmetic are completely outside the frozen ABI.

Structured formats work; dates and numbers barely do

How to read

Each bar is a task family such as dates, phone numbers, or emails; height is the share of that family the best toolbox solved. Taller is better.

0%20%40%60%80%DateTimeDateTime8.5%NumberNumber7.1%NameName39.3%PhonePhone37.5%ShippingCodeShippingCode80%CityCity11.1%UserAgentUserAgent42.9%EmailEmail50%AddressAddress0%BillingCodeBillingCode0%

Takeaway → Tidy families like shipping codes and emails reach half or more, while the two biggest families, dates and numbers, sit near the bottom and drag the total down.

Data table
Task familyCoverage (concat tier)
DateTime8.5%
Number7.1%
Name39.3%
Phone37.5%
ShippingCode80%
City11.1%
UserAgent42.9%
Email50%
Address0%
BillingCode0%

Numbers from experiments/qwen_public_prose_abi_gate/analysis/family_summary.csv

Technical framing

ABI coverage by task family (best tier), largest families — Semi-structured families like ShippingCode and Email are coverable; the two largest families, DateTime and Number, are nearly uncovered.

Failures are missing recipes, not lucky-but-wrong ones

How to read

For each toolbox size, the bar splits all tasks into solved, a recipe matching the examples only by coincidence, and no recipe fitting at all. The thin coincidence slice is the point.

0%25%50%75%100%12.6%2.6%84.8%core17.8%3.2%79%office19.1%3.6%77.3%concat

Takeaway → The coincidence slice stays near 3% while 'no recipe fit' fills roughly four-fifths, so failures are genuinely missing tools, not overfit guesses.

Data table
ABI tierCovered (held-out validated)Train-only fit (coincidence)No train match
core12.6%2.6%84.8%
office17.8%3.2%79%
concat19.1%3.6%77.3%

Numbers from experiments/qwen_public_prose_abi_gate/analysis/overall_summary.csv

Technical framing

Why the ABI fails: no train fit dominates, coincidental fits are rare — Across all tiers roughly 8 in 10 failures are tasks where no candidate even fits the train rows, not overfit programs failing held-out.

The model stumbles most on date tasks

How to read

Each bar is a task family in the sampled set; height is how often the small model gave the exact right answer from examples. Taller is better.

0%25%50%75%100%73.3%Overall50%DateTime100%Name78.6%Number100%Phone

Takeaway → Names and phone numbers hit every case while dates fall to half, the same family where the fixed recipes are weakest.

Data table
SliceQwen3-4B direct answer
Overall73.3%
DateTime50%
Name100%
Number78.6%
Phone100%

Numbers from experiments/qwen_public_prose_abi_gate/analysis/qwen_direct_summary.csv

Technical framing

Frozen Qwen one-query exact match by task family (60-task sample) — Qwen's misses concentrate in DateTime tasks (50% exact) — the same family where the frozen ABI is weakest.

Trying vastly more recipes barely helps

How to read

Each bar is a toolbox size; height is how many candidate recipes it sifts through per task. A taller bar means far more work, not better results.

02k4k6k109core1057office56.83kconcat

Takeaway → The largest toolbox searches over 500 times more recipes than the smallest yet lifts tasks solved only from 13% to 19%, so search size is not the bottleneck.

Data table
ABI tierMedian candidates
core109
office1057
concat56.83k

Numbers from experiments/qwen_public_prose_abi_gate/analysis/overall_summary.csv

Technical framing

Cost of each ABI tier: median candidate programs searched per task — Growing the search space ~500x from core to concat lifts coverage only 12.6% to 19.1% — enumeration size is not the bottleneck.

In the author’s words from the Report · “Abstract”

This standalone experiment evaluates a frozen deterministic transformation ABI on the public Microsoft PROSE Transformation.Text benchmark. A program is selected from train examples and counted only if it also matches held-out examples from the same task.

Overview

Standalone experiment testing whether a frozen deterministic transformation ABI covers public Microsoft PROSE Transformation.Text tasks under within-task held-out validation.

Question

Does the office/transformation ABI cover an independent public benchmark under held-out validation?

Method

  • Fetch public benchmark data into /workspace/large_artifacts/qwen_public_prose_abi_gate/prose-benchmarks.
  • Freeze a generic transformation-template ABI before evaluating the benchmark.
  • For each task with enough examples, split examples into train and held-out rows.
  • Select a program only if it fits train examples; count it as covered only if it also matches held-out examples.
  • Report train-only fits separately as semantic/coincidence failures.

Artifacts

Report

Rendered from reports/qwen_public_prose_abi_gate_report.md

Abstract

This standalone experiment evaluates a frozen deterministic transformation ABI on the public Microsoft PROSE Transformation.Text benchmark. A program is selected from train examples and counted only if it also matches held-out examples from the same task.

Method

  • Dataset: Microsoft PROSE public benchmark suite, Transformation.Text.
  • Tasks with too few examples are excluded so every scored task has held-out examples.
  • Split: first 4 examples, capped by task size, are train examples; up to 50 following examples are held out.
  • Frozen ABI tiers: core surface extraction/casing, office adds regex/date/number/domain primitives, concat adds two-part concatenation over ABI expressions.
  • Train-only fits are counted as failures because they do not validate task semantics on held-out rows.

Run Configuration

Primary Results

  • Best frozen tier coverage: 19.1% (59/309 tasks).
  • Train-only/coincidence failures: 3.6% (11 tasks).
  • No-train-match failures: 77.3% (239 tasks).
  • Synthetic-metadata coverage: 18.3% (55/301 tasks).
  • Non-synthetic-metadata coverage: 50.0% (4/8 tasks).

Frozen Qwen Direct-Answer Sample

  • Model: Qwen/Qwen3-4B.
  • Sample: 60 tasks, seed 20260627.
  • Prompt: first 4 examples, then one held-out query.
  • Exact match on that one held-out query: 73.3% (44/60 tasks).
  • This is a diagnostic baseline, not the same metric as ABI coverage: it scores one held-out query, while ABI coverage requires one program to match all held-out rows.
slicetasksexact
overall600.73
abi_covered=False440.66
abi_covered=True160.94
family=DateTime220.50
family=Name41.00
family=Number140.79
family=Phone61.00
Qwen Sample Misses
task_idfamilyfeaturesabi_coveredexacttargetprediction
BillingCode.000007BillingCodeConcatenationFalseFalse11529][11529]
DateTime.000006DateTimeConcatenation,DateTimeRange,DateTimeRounding,DateTime,MulticolumnFalseFalseFri 8:00-9:00Thu 8:00-9:00
DateTime.000014DateTimeDateTimeFalseFalseFriday #1 February 2013Saturday #1 February 2013
DateTime.000046DateTimeDateTimeFalseFalse1952 7 27/2/1952 2 2
DateTime.000056DateTimeDateTimeRange,DateTimeRounding,DateTimeFalseFalse11AM-1PMNoon-2PM
DateTime.000065DateTimeDateTimeRange,DateTimeRounding,DateTimeFalseFalse12:30PM-12:44PM12:00PM-12:45PM
DateTime.000066DateTimeDateTimeRange,DateTimeRounding,DateTimeFalseFalse12:40PM-12:49PM12:40PM-12:41PM
DateTime.000067DateTimeDateTimeRange,DateTimeRounding,DateTimeFalseFalse12:00PM-1:20PM11:30AM-12:50PM
DateTime.000088DateTimeDateTimeRounding,DateTimeFalseFalse4:00PM8:00AM
DateTime.000093DateTimeDateTimeFalseFalse1990-03-071990-11-07
DateTime.000106DateTimeDateTimeFalseFalseMonWed
DateTime.000115DateTimeDateTimeRange,DateTimeRounding,DateTimeFalseFalse40-600-20
Noise.000001NoiseConcatenation,MulticolumnTrueFalse%@^zxi**d^gx%i ry!d!!e*grumyr%$$#(kcol0=%@^zxi**d^gx%i ry! col1=d!!e*grumyr%$$#(k
Number.000015NumberNumeric,NumericRoundingFalseFalse-22600-22500
Number.000031NumberNumeric,NumericRoundingFalseFalse43.543.0
Number.000094NumberConcatenation,NumericFalseFalse₹56,343₹5,6343

Overall By Tier

tiertaskscoveragetrain_match_ratetrain_only_rateno_train_match_ratemedian_candidates
concat30919.1%22.7%3.6%77.3%56833.00
core30912.6%15.2%2.6%84.8%109.00
office30917.8%21.0%3.2%79.0%1057.00

Feature Coverage

featuretaskscoveragetrain_only_rate
DateTimeRange360.0%0.0%
DateTimeRounding440.0%0.0%
NumericRange70.0%0.0%
NumericRounding424.8%2.4%
Conditional375.4%10.8%
Numeric827.3%2.4%
DateTime1177.7%4.3%
Multicolumn1618.8%0.0%
Concatenation5219.2%0.0%
Casing933.3%0.0%
Substring11140.5%3.6%

Lowest-Coverage Families

familytaskscoveragetrain_only_rate
Address60.0%16.7%
Author10.0%0.0%
BillingCode60.0%0.0%
Column20.0%0.0%
FilePath10.0%100.0%
Gender30.0%0.0%
Log40.0%0.0%
Meteorite10.0%0.0%
Product20.0%50.0%
Url10.0%0.0%
Number847.1%2.4%
DateTime1068.5%4.7%
City911.1%0.0%
Phone1637.5%0.0%
Name2839.3%3.6%
UserAgent742.9%0.0%
Email650.0%0.0%
EmergencyCall250.0%0.0%
Language250.0%0.0%
Rating250.0%0.0%
Currency366.7%0.0%
ShippingCode1080.0%0.0%
Abbreviation1100.0%0.0%
Airline1100.0%0.0%
Noise1100.0%0.0%
Song1100.0%0.0%
State1100.0%0.0%
Team1100.0%0.0%
ZipCode1100.0%0.0%

Covered Program Examples

task_idfamilyfeaturesnum_examplesprogram_depthprogram
Abbreviation.000001AbbreviationConcatenation,Conditional,Substring521.00initials(COL0)
Airline.000002AirlineSubstring51.00field,,0
City.000012CitySubstring221.00field,,1
Currency.000003CurrencyNumeric,Substring201.00number_2dp(COL0)
Currency.000005CurrencyNumeric,Substring1001.00number_2dp(COL0)
DateTime.000003DateTimeDateTime101.00time_hour(COL0)
DateTime.000004DateTimeConcatenation,DateTime,Multicolumn201.00concat' '
DateTime.000013DateTimeConditional,DateTime2300.00COL0
DateTime.000037DateTimeDateTime51.00title(COL0)
DateTime.000092DateTimeDateTime321.00time_hour(COL0)
DateTime.000102DateTimeDateTime201.00time_hour(COL0)
DateTime.000103DateTimeDateTime201.00field:,1
DateTime.000104DateTimeDateTime201.00alpha(COL0)
DateTime.000105DateTimeDateTime201.00field:,2
Email.000010EmailSubstring101.00email_domain(COL0)
Email.000011EmailSubstring101.00field.,0
Email.000013EmailSubstring1001.00email_domain(COL0)
EmergencyCall.000003EmergencyCallCasing,Substring122.00title(field;,1)
Language.000002LanguageMulticolumn,Substring511.00file_stem(COL1)
Name.000008NameConcatenation,Substring201.00first_last_initials(COL0)
Name.000014NameSubstring101.00first_word(COL0)
Name.000025NameCasing,Concatenation,Substring102.00lower(initials_sp(COL0))

Train-Only Failures

task_idfamilyfeaturesnum_examplesprogram
Address.000012AddressConditional,Substring10number_int(COL0)
DateTime.000012DateTimeConditional,DateTime10fieldspace,-1
DateTime.000096DateTimeDateTime20field-,4
DateTime.000097DateTimeDateTime20field-,2
DateTime.000099DateTimeDateTime20field-,0
DateTime.000101DateTimeDateTime20field-,0
FilePath.000001FilePathConditional,Substring17file_stem(COL0)
Name.000037NameConditional,Substring20field,,1
Number.000010NumberNumeric,NumericRounding40COL0
Number.000082NumberNumeric20number_int(COL0)
Product.000003ProductSubstring5concat' ',last_word(COL0))

No-Train-Match Failures

task_idfamilyfeaturesnum_examples
Address.000002AddressSubstring5
Address.000003AddressSubstring5
Address.000009AddressConcatenation,Multicolumn10
Address.000013AddressConditional,Substring10
Address.000014AddressSubstring29
Author.000001AuthorConditional,DateTime39
BillingCode.000001BillingCodeConcatenation11
BillingCode.000002BillingCodeConcatenation,Substring11
BillingCode.000003BillingCodeConcatenation5
BillingCode.000004BillingCodeConcatenation5
BillingCode.000005BillingCodeConcatenation,Substring5
BillingCode.000007BillingCodeConcatenation5
City.000004CityConditional20
City.000005CityConditional14
City.000006CityConditional5
City.000007CityConditional5
City.000008CityConditional5
City.000009CityConditional,Substring6
City.000010CityConditional,Numeric6
City.000011CityConditional7
Column.000001ColumnConcatenation,Conditional,Substring10
Column.000002ColumnCasing,Concatenation,Conditional,Substring10
Currency.000004CurrencyNumeric,Substring20
DateTime.000005DateTimeConditional,DateTime27
DateTime.000006DateTimeConcatenation,DateTimeRange,DateTimeRounding,DateTime,Multicolumn1000
DateTime.000007DateTimeDateTime25
DateTime.000008DateTimeDateTimeRange,DateTimeRounding,DateTime20
DateTime.000009DateTimeDateTime100

coverage_by_tier.png

coverage_by_family.png

coverage_by_feature.png

failure_modes.png

synthetic_split.png

qwen_direct_sample.png

Interpretation

This public benchmark is a hard gate because task definitions come from an independent repository rather than this experiment's generator. It directly tests whether a frozen transformation ABI covers independent string-transformation tasks under held-out validation. The result is negative for this frozen ABI: the best tier covers only 19.1%, and most misses are no-train-match failures rather than held-out coincidence failures. The ABI is therefore too narrow for the public Transformation.Text suite without substantial primitive expansion or a retrieval step that selects a domain-specific ABI. The frozen-Qwen direct-answer diagnostic points in a different direction: the model often infers these public transformations from examples even when the frozen ABI has no matching program. That suggests the immediate bottleneck is not that the transformations are impossible for the model; it is that the fixed ABI does not expose the right operations for this benchmark. The train-only column is load-bearing. Those tasks are exactly the cases where a plausible expression fits examples but fails held-out rows, so they are excluded from coverage.

Limitations

This run covers Transformation.Text, not Split.Text or Extraction.Text. The ABI is a fixed template library rather than a complete PROSE-style DSL, so misses can reflect missing primitives or bounded search. The benchmark itself contains mostly synthetic data according to its metadata, though it is independent public data rather than generated by this experiment.

Artifacts

  • Details: analysis/details.csv
  • Overall summary: analysis/overall_summary.csv
  • Family summary: analysis/family_summary.csv
  • Feature summary: analysis/feature_summary.csv
  • Frozen Qwen direct-answer sample: analysis/qwen_direct_sample.csv
  • Public benchmark checkout: /workspace/large_artifacts/qwen_public_prose_abi_gate/prose-benchmarks

Experiment log 5

Show the running log (5 entries)

Setup

  • Created fresh experiment directory: /workspace/experiments/qwen_public_prose_abi_gate
  • Large artifacts directory: /workspace/large_artifacts/qwen_public_prose_abi_gate
  • Downloaded Microsoft PROSE public benchmark suite into the large artifacts directory.
  • Core question: whether a frozen transformation ABI covers a less-curated public benchmark under held-out validation.
  • Report format: standalone Markdown and HTML with plots.

Run smoke_v1

  • Started: 2026-06-27 03:43:06 UTC
  • Tasks: 40
  • Train examples per task: 3; held-out cap: 12
  • Completed in 45.4s.
  • Primary coverage: 20.0% (8/40 tasks).
  • Train-only: 7.5%; no-train-match: 72.5%.

Run pilot_v1

  • Started: 2026-06-27 03:44:21 UTC
  • Tasks: 120
  • Train examples per task: 4; held-out cap: 20
  • Completed in 179.9s.
  • Primary coverage: 8.3% (10/120 tasks).
  • Train-only: 5.0%; no-train-match: 86.7%.

Run main_v1

  • Started: 2026-06-27 03:47:49 UTC
  • Tasks: 309
  • Train examples per task: 4; held-out cap: 50
  • Completed in 511.5s.
  • Primary coverage: 19.1% (59/309 tasks).
  • Train-only: 3.6%; no-train-match: 77.3%.

Frozen Qwen Direct-Answer Sample

  • Model: Qwen/Qwen3-4B
  • Sample: 60 public tasks, seed 20260627; first 4 examples shown, one held-out query scored.
  • Exact match: 73.3% (44/60).
  • ABI-covered sample exact: 93.8% (15/16); ABI-missed sample exact: 65.9% (29/44).
  • This baseline scores one held-out query per task, so it is diagnostic rather than directly comparable to full-task ABI coverage.

Figures 6

coverage by family
coverage by family · analysis/figures/
coverage by feature
coverage by feature · analysis/figures/
coverage by tier
coverage by tier · analysis/figures/
failure modes
failure modes · analysis/figures/
qwen direct sample
qwen direct sample · analysis/figures/
synthetic split
synthetic split · analysis/figures/

Data files 13

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 ↗