Add part-pair blocking tokens - #346
Conversation
Emit within-name part 2-combinations (pp field, boost 7.0) as blocking
tokens. Pair buckets are far smaller than single-part buckets, so they
survive cost-based stopwording for common names and connect name
variants that the all-or-nothing fingerprint misses ("John Smith" ~
"John Q. Smith"). Legal-form parts are excluded so org-type variants
share pairs; pairs are capped at the 6 longest parts per name.
On the 2023 consolidated sanctions corpus (37k named entities): 28.2%
of np rows are stopworded at the default bucket cap vs 1.6% of pp rows;
pp adds ~357k index rows on 360k existing name-derived rows.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Labelled-pair ablation resultsRan the full For each positive pair: tokenize both sides, intersect, drop tokens whose df exceeds the cap, classify by which fields still connect the pair.
Person/Org split: persons are nearly saturated (99.21% reachable; Reading
Caveats
🤖 Generated with Claude Code |
Builds on the tokenizer fixes from #345.
Emits within-name part 2-combinations as a new
ppblocking token field (boost 7.0): the sorted, deduplicated non-STOP/LEGAL parts of each name, capped at the 6 longest parts (≤15 pairs per name).Why
Dynamic cost-based stopwords remove exactly the tokens common names are made of: on the 2023 consolidated sanctions corpus, 28.2% of
np(single name part) rows are stopworded at the default bucket cap. Pair buckets are structurally smaller —df(pair) ≤ min(df(part))— so only 1.6% ofpprows get stopworded, and pairs stay alive deep into the common-name band. Unlike the full-name fingerprint, pairs are robust to an extra or missing part:John Smith↔John Quincy Smithsharepp:john smithAcme Holdings LLC↔Acme Holdings GmbHsharepp:acme holdings(legal forms excluded)Li Yugets a lexical token (pp:li yu) despite both parts falling under the 3-charnpfloorThe full-name fingerprint stays: it remains the last resort for names whose every pair is also common (fleet vessels, research institutes), effectively-mononym orgs ("OJSC Gazprom"), and the exact-name ranking signal.
Cost
pproughly doubles name-derived index rows (+357k on 360knp+fingerprint rows on the measurement corpus). Production-scale row growth/peak RSS still needs the blocker-spec scale test; see the labelled-pair ablation results in the comments for measured recall contribution.🤖 Generated with Claude Code