Cache enrichment: entries lixo no suffix_form_to_id #26

Open
opened 2026-05-14 02:13:45 -03:00 by navigator · 0 comments
Owner

TL;DR

Auditoria do word_decomp_cache.pkl (docs/CACHE_ENRICHMENT_AUDIT.md, 2026-05-13) achou 5-20 entries lixo na tabela suffix_form_to_id que vazaram da extração do Houaiss. Representam <0.5 % da tabela, mas pegam ids reais e contribuem com vetores de embedding desperdiçados. Não bloqueia experimentos atuais; deveria ser limpo quando a infra do schema v2 estiver mais quieta.

Exemplos

Olhando as primeiras 30 entries do cache.suffix_form_to_id:

#  12  '<font><sup>2</sup>'                         ← HTML tag
#  19  "tupi e'te 'verdadeiro, legítimo', p.ext..." ← nota etimológica longa
#  24  '<font><sup>1</sup>'                         ← HTML tag
#  27  '¬vel'                                       ← caractere de negação Unicode
#  29  '-ar, prov. por infl. do esp. abanicar...'   ← nota longa

Esses não são sufixos. São fragmentos do texto da entrada Houaiss que foram parseados como form de SUFFIX em algum momento da pipeline scripts/extract_houaiss_v2.py.

Por que não é urgente

  • v0.3 two-stream tem gate α que pode aprender a ignorar features ruins (docs/MASHA_V3_DESIGN.md).
  • A função-word filter recente (fix(cache) em commit 122f02a) já bloqueia uma porção do ruído na atribuição dessas entries lixo a surfaces reais.
  • Total de entries lixo: ~5-20 de 4541 = ≤0.5 % da tabela.

Onde mexer

Duas opções:

Opção A — filtrar na ingestão (scripts/extract_houaiss_v2.py)

Quando o parser deteta um suffix_form, validar:

  • Não contém < ou > (HTML)
  • Não contém espaços (sufixos são tokens únicos)
  • Comprimento ≤ 25 chars (sufixos PT-BR são curtos)
  • Começa com - (convenção de notação morfológica)
  • Não contém aspas (', ") ou caracteres de pontuação inesperados

Opção B — filtrar na carga (WordDecompCache.load_from_pg Step 1)

Mesmo filter mas aplicado quando o cache é construído. Mais isolado; não precisa rebuildar o banco.

Recomendação: Opção B — implementar como helper privado _is_valid_suffix_form(form: str) -> bool em masha/training/data_pipeline.py, aplicado em load_from_pg e load_pickle. Documentar em docstring.

Critério de aceite

  • WordDecompCache carregado tem 0 entries em suffix_form_to_id matching os 5 padrões acima.
  • Cache pickle regenerado (scripts/dump_decomp_cache.py) reflete o filter.
  • Smoke test de v0.3 paired-t n=3 mantém os mesmos números (filter é seguro).

Referências

  • docs/CACHE_ENRICHMENT_AUDIT.md — audit completa
  • commit 122f02a — function-word filter (problema relacionado já endereçado)
  • masha/training/data_pipeline.py — WordDecompCache.load_from_pg
## TL;DR Auditoria do `word_decomp_cache.pkl` (`docs/CACHE_ENRICHMENT_AUDIT.md`, 2026-05-13) achou 5-20 entries lixo na tabela `suffix_form_to_id` que vazaram da extração do Houaiss. Representam <0.5 % da tabela, mas pegam ids reais e contribuem com vetores de embedding desperdiçados. Não bloqueia experimentos atuais; deveria ser limpo quando a infra do schema v2 estiver mais quieta. ## Exemplos Olhando as primeiras 30 entries do `cache.suffix_form_to_id`: ``` # 12 '<font><sup>2</sup>' ← HTML tag # 19 "tupi e'te 'verdadeiro, legítimo', p.ext..." ← nota etimológica longa # 24 '<font><sup>1</sup>' ← HTML tag # 27 '¬vel' ← caractere de negação Unicode # 29 '-ar, prov. por infl. do esp. abanicar...' ← nota longa ``` Esses não são sufixos. São fragmentos do texto da entrada Houaiss que foram parseados como `form` de SUFFIX em algum momento da pipeline `scripts/extract_houaiss_v2.py`. ## Por que não é urgente - v0.3 two-stream tem gate α que pode aprender a ignorar features ruins (`docs/MASHA_V3_DESIGN.md`). - A função-word filter recente (`fix(cache)` em commit `122f02a`) já bloqueia uma porção do ruído na atribuição dessas entries lixo a surfaces reais. - Total de entries lixo: ~5-20 de 4541 = ≤0.5 % da tabela. ## Onde mexer Duas opções: ### Opção A — filtrar na ingestão (`scripts/extract_houaiss_v2.py`) Quando o parser deteta um suffix_form, validar: - Não contém `<` ou `>` (HTML) - Não contém espaços (sufixos são tokens únicos) - Comprimento ≤ 25 chars (sufixos PT-BR são curtos) - Começa com `-` (convenção de notação morfológica) - Não contém aspas (`'`, `"`) ou caracteres de pontuação inesperados ### Opção B — filtrar na carga (`WordDecompCache.load_from_pg` Step 1) Mesmo filter mas aplicado quando o cache é construído. Mais isolado; não precisa rebuildar o banco. Recomendação: **Opção B** — implementar como helper privado `_is_valid_suffix_form(form: str) -> bool` em `masha/training/data_pipeline.py`, aplicado em `load_from_pg` e `load_pickle`. Documentar em docstring. ## Critério de aceite - `WordDecompCache` carregado tem 0 entries em `suffix_form_to_id` matching os 5 padrões acima. - Cache pickle regenerado (`scripts/dump_decomp_cache.py`) reflete o filter. - Smoke test de v0.3 paired-t n=3 mantém os mesmos números (filter é seguro). ## Referências - `docs/CACHE_ENRICHMENT_AUDIT.md` — audit completa - `commit 122f02a` — function-word filter (problema relacionado já endereçado) - `masha/training/data_pipeline.py` — WordDecompCache.load_from_pg
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pop/MASHA#26
No description provided.