What Changed in v4
match-tm.js and match-patent.js). This eliminates the entire class of single-token false positives regardless of what is or isn't in the stopword list — a structural fix rather than a lexical one. Previously, stripping all tokens to one caused 85% of the high-confidence fuzzy tier (4,977 rows) to be false positives.
collect:db:holders re-fetched all 1,262,112 canonical TM holders (was 39K short); collect:db:applicants upserted 1,479,367 patent applicants (was 42 short); companies synced (+1 new company). All 1,262,112 holders re-tagged with script detection. Both matching pipelines re-run from scratch after the data refresh.
ai_confirmed; rejected entries kept as ai_rejected for audit trail. This replaces all previously-uncertain exact, LEI, DBA, and fuzzy TM matches with AI-validated verdicts.
Top-Level KPIs — v3 → v4
Effective vs. total rows: The DB contains 29,296 rows but 5,241 are ai_rejected entries kept for audit. Effective matches — those available for export — are 24,055. All KPIs below use the effective count unless otherwise noted.
Match Method Breakdown — v4
Trademark Holders (1,262,112 source)
Effective: 11,655 rows · 9,344 unique holders · Total rows incl. audit: 16,896
Patent Applicants (1,479,367 source)
Total: 12,400 rows · 9,736 unique applicants · No AI queue run on patents yet
Average Confidence per Method
Trademark Holders (effective matches)
Patent Applicants
TM method shift: In v3, TM matches were dominated by raw fuzzy (8,585) and LEI (4,725). In v4, the dominant method is ai_confirmed (8,188) — meaning the borderline deterministic matches were reviewed and validated by AI rather than left as unconfirmed. The remaining TM exact (3,378) represents only perfect-confidence matches (country + name match at conf=1.0).
AI Queue P2+P3 — Completed Results
What the AI Queue Reviewed
The P2+P3 queue contained all TM holder matches with confidence 0.50–0.94 that were not already AI-reviewed — this included not just fuzzy matches but also LEI identifier matches, DBA alias matches, and exact name matches where the source had no country code (which reduces confidence to 0.90). Each was presented to the AI as a name-pair comparison question. Accepted items (score ≥ 0.50) are now ai_confirmed; rejected items show ai_rejected with confidence 0.
AI Confirmed Confidence Distribution
The AI scoring is bimodal: most accepted items score 0.795 (model's "yes, same entity" bin) or 0.850. Very few land between 0.74–0.80. This reflects the model returning confident accept/reject rather than a graded confidence.
Scope note for future iterations: The AI queue reviewed items by name similarity alone. LEI-matched pairs (where the match was via shared Legal Entity Identifier, not name similarity) were also subjected to AI review — in some cases the AI rejected pairs that share the same LEI but use different brand names. Future builds of the AI queue should exclude lei matches from the uncertain track, or provide the AI with the LEI code as supporting context.
Fuzzy Quality Analysis
Two-phase false positive reduction: Before this iteration the high-confidence fuzzy tier (≥0.900) held 4,977 rows — sampling found ~85% were false positives driven by single shared generic tokens ("alpha", "american", "power"). Fix A (30+ new stopwords) + Fix B (min-2-token guard) reduced this tier to 611 rows (−87.7%). Total fuzzy matches (TM + patent combined) dropped from 16,058 to 4,520 (−71.8%).
Patent Fuzzy — Confidence Tiers (v4)
The high tier (611 rows) is clean — samples show genuine typo/abbreviation matches ("Knoninklijke Philips" → "Koninklijke Philips N.V.", "Quicksilber Scientific" → "Quicksilver Scientific"). The mid (0.750–0.799) tier is the primary remaining quality concern; sampling shows ~25–30% false positives, driven by companies sharing 2 non-stopword tokens but being unrelated entities in the same industry.
Stopword Coverage Evolution
| Version | Stopword Count | Categories Added | FP Impact |
|---|---|---|---|
| v2 baseline | ~15 terms | pharma, healthcare, tech, industry nouns | 46% FP rate in high-conf tier |
| v3 (+iteration 1) | ~40 terms | + Chinese geography (28 cities), + electronic/chemical/biotech | Shenzhen-company FPs eliminated; new single-token pattern emerged |
| v4 (+iteration 2) | 70+ terms | + geographic adjectives, Greek letters, quality modifiers, generic business (innovation, capital, media, design…) + min-2-token guard | High-conf FP tier −87.7% (4,977 → 611) |
Remaining FP vector — mid-tier (0.750–0.799): Pairs like "Hanmi Semiconductor Co Ltd" → "Kwansemi Semiconductor Co., Ltd." or "Tec Air Inc" → "Air Tea Company, Inc." still pass because they share 2 non-stopword tokens at ≥85 ratio threshold. The correct fix is AI-queue review on patent fuzzy (not yet run). Until then, the mid-tier contributes ~800–1,000 estimated false positives to the patent match set.
Script Coverage — Canonical TM Holders
All 1,262,112 canonical holders re-tagged after the data refresh. Script distribution is unchanged from v3 (expected — same canonical set, just re-collected).
332,342 non-Latin holders (26.3%) remain effectively unmatched. CJK (14.9%), Hangul (3.5%), Arabic (3.3%), and Thai (2.3%) all have match rates below 0.2%. Transliteration pipeline is the planned approach; CJK transliteration to Pinyin is the highest-impact next step given 187K candidates.
v3 → v4 Change Summary
| Dimension | v3 (2026-06-01) | v4 (2026-06-03) | Direction |
|---|---|---|---|
| Total match rows | 35,288 | 29,296 (24,055 effective) | Cleaned |
| Unique companies matched | ~6,800 est. | 5,861 | Validated |
| TM effective matches | 20,903 (unvalidated) | 11,655 (AI-validated) | Quality uplift |
| TM AI confirmed | 93 (prior queue) | 8,188 | +8,095 validated |
| TM AI rejected (audit) | 0 | 5,241 | Excluded from exports |
| TM fuzzy rows | 8,585 | 3 (rest moved to ai_confirmed/rejected) | −99.9% |
| Patent fuzzy rows | 6,502 | 4,517 | −30.5% · stopword fix |
| Fuzzy ≥0.900 tier | 4,977 | 611 | −87.7% · FP cleanup |
| Patent exact | 2,880 | 2,880 | Unchanged |
| Patent LEI | 4,873 | 4,873 | Unchanged |
| FUZZY_STOPWORDS count | ~40 terms | 70+ terms | +30 terms, 6 categories |
| Min-token guard | Not present | ≥2 tokens required for FTS | New structural fix |
| AI queue P2+P3 | 17,447 pending | 13,429 processed · done | Complete |
| AI queue P4–P6 (no-match) | 1,055,846 pending | 998,506 pending | Not yet run |
Recommended Next Steps
| Priority | Action | Expected Impact | Est. Time |
|---|---|---|---|
| Immediate | Export high-confidence matches (exact + AI confirmed ≥0.80 + DBA) for API write-back | ~12K production-ready entity links immediately available | Minimal — export script |
| High | Build + run patent AI queue (P2+P3 uncertain, similar to TM run) | Review 4,517 patent fuzzy matches; expect ~50–60% survive → eliminates mid-tier FPs | ~2–3 hrs at 32/min |
| High | Fix AI queue to exclude lei matches from uncertain track |
Prevents AI from incorrectly rejecting LEI-matched pairs on name-only comparison | Code change in build-ai-queue.js |
| Medium | Run AI queue P4 (top no-match FTS candidates, ~998K) — TM + patent | Expected 1–3% yield = 10K–30K new links from unmatched holders/applicants | ~30 days at 32/min · or ~4 days at 4 parallel processes |
| Medium | CJK transliteration pipeline (Hanzi → Pinyin) | Opens matching for 187,564 CJK holders (14.9% of TM canonical pool) | Pipeline development + re-run |
| Low | Deduplicate upstream company entries (Nestlé ×2, Philip Morris ×3, JTI ×2) | Prevents double-count before write-back; affects ~10 companies | Manual review |