Skip to main content

The "within-token punctuation" weakness is a misnomer (#375 follow-up)

The failure taxonomy flagged within-tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. punctuation as the clearest open neural weakness — apostrophe 81% vs v0 89%, hyphen 81 vs 87, slash 62 vs 72 (2026-06-14-punctuation-stress) — with the root cause "unmeasured." Measured now (scripts/eval/within-token-punct-diag.ts, neural's actual parseaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. vs gold on the 61 apostrophe/hyphen/slash rows): the punctuation tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. itself rarely fails. The gap decomposes into four distinct mechanisms, three of which are already top-priority levers under other names.

What actually fails

classrows with ≥1 missdominant missed components
apostrophe7/16localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. 3, regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. 3, streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. 3
hyphen13/23streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. 9, house_number 6, localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. 5
slash17/22house_number 12, localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. 10, regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. 10, unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. 10

The apostrophe parsesaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. correctlyO'Connell, O'Fallon, Coeur d'Alene, Martha's Vineyard all land in the right component. The misses in those rows are elsewhere in the address.

The four real mechanisms

  1. The AU/UK slash unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise.-convention (the one new, addressable gap). 4/2A Princes St is unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. 4 + number 2A; Penthouse 1/2 Pacific Hwy is unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. "Penthouse 1" + number 2. Neural keeps the X/Y glued as one house_number and never splits it. This is the bulk of the slash class's 62% and is a specific, learnable convention (slash between unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. and streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.-number in AU/NZ/UK).

  2. Comma-less City STATE segmentation — the #694 family. North Sydney NSW 2060, Sydney NSW 2000: with no comma, neural keeps North Sydney NSW as one localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. and drops the regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.. This is the same delimiter-stripping failure root-caused on #694 (concatenated input loses segmentation) — delimited input fixes it.

  3. StreetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels./affix boundary wobble — the taxonomy's #1 parser lever. Country Club Rd keeps Rd in the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. (no street_suffix); FR Rue Jean-Baptiste Lebas / Rue Neuve-des-Capucines 5 drop the Rue prefix and absorb the house numberhouse numberThe numeric or alphanumeric identifier of a building on a street. Mailwoman's house_number component; its position relative to the street name flips between locales. into the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.. Pure boundary instabilityboundary instabilityA class of parser errors where the model wobbles on where one address component ends and the next begins — a street suffix swallowed into the street name, a French house number that trails instead of leads. Mailwoman's #1 weakness as of v1.5.0. — nothing to do with the hyphen.

  4. OOD-tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. leading-char drop — the #690 family. N9W16851 (a Wisconsin grid address) parsesaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. to house_number 9W16851 — the leading N is dropped, exactly the artifact behind all-caps PALESTINEALESTINE (#690). Plus genuine foreign-postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one.-format gaps: Irish V94 DPF3 splits to localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. Limerick V + postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. 94; hyphenated ranges (55-57) mis-split.

Why it matters

The within-tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. punctuation gap is not a punctuation-tokenizertokenizerThe component that converts a raw address string into a sequence of numeric token IDs the model can process. Mailwoman's tokenizer is a SentencePiece unigram model trained specifically on postal addresses. problem and does not warrant a punctuation-specific fix. It decomposes into:

  • the #694 comma-less/delimiter lever (fixing concatenated-input segmentation — already validated),
  • the #1 boundary-instability lever (streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels./affix; the taxonomy's highest-leverage parser fix),
  • the #690 OOD-tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. family (leading-char drops; foreign postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. formats),
  • and one new specific case: the AU/UK slash unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise.-convention (4/2A).

So three of the four are closed by levers already prioritized — fixing boundary instabilityboundary instabilityA class of parser errors where the model wobbles on where one address component ends and the next begins — a street suffix swallowed into the street name, a French house number that trails instead of leads. Mailwoman's #1 weakness as of v1.5.0. + delimited input would lift the apostrophe/hyphen classes without touching punctuation. The slash class needs the AU/UK unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise.-convention specifically (a trainingtrainingThe process of adjusting a model's parameters so its predictions match labeled examples, by repeatedly measuring error and nudging the weights to reduce it. Distinct from inference, when the trained model is run on new input.-shardshardA partial output file of the corpus build, written in Parquet format. The training pipeline streams shards row by row. or a decode rule for digit/alnum between a unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. designatordesignatorThe closed-vocabulary leading word of a secondary-address phrase — 'Apt', 'Suite', 'Floor', 'PO Box', 'Level' — paired with an identifier to form a complete subpremise. and a street numberhouse numberThe numeric or alphanumeric identifier of a building on a street. Mailwoman's house_number component; its position relative to the street name flips between locales.). Taxonomy update: re-labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. the "within-tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. punctuation" row as a symptom of the boundary-instability + #694 + #690 families, plus the AU/UK slash convention.

Source: scripts/eval/within-token-punct-diag.ts over the apostrophe/hyphen/slash rows of data/eval/external/punctuation-stress.jsonl.