enrich_root_only_surfaces não é chamado no pipeline default #27

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

TL;DR

scripts/cache_enrichment.py exporta duas funções: enrich_cache (chamada no fluxo de treino) e enrich_root_only_surfaces (criada como segunda passada que adiciona sufixos inflexionais a surfaces já no cache com root_id != 0 e suffix_ids == []). A segunda função nunca é chamada em produção — nem em run_ablation_word.py, nem em dump_decomp_cache.py. Cobertura morfêmica está abaixo do potencial.

O problema concreto

O cache tem ~484K surfaces com root_id != 0. Destas, ~75K (15.4 %) têm suffix_ids == [] — ou seja, foram resolvidas pra um root via Houaiss/lexicon_fallback/chain_merge mas nunca receberam atribuição inflexional.

enrich_root_only_surfaces foi escrita exatamente pra isso: pra cada surface root-only, olha se algum sibling com mesmo root_id tem decomposição completa, e atribui o sufixo inflexional correspondente. Mas a função nunca é executada no pipeline normal.

Resultado: 15 % do cache opera num tier "root-only" quando poderia estar no tier "decomposed", privando o Stream B (em masha_v3) de informação morfológica útil.

Por que isso é um problema agora

  • Stream B (docs/MASHA_V3_DESIGN.md) consome suffix_ids per posição. Surface root-only contribui só com root_embed + pos_embed; sem sufixo, perde-se a feature derivacional ("-mente", "-ção", etc.).
  • O gate α pode aprender a compensar, mas é desperdício de sinal disponível.
  • Em escala maior (Phase GAMMA Wikipedia full), com mais palavras, o problema cresce proporcionalmente.

Onde mexer

Em scripts/run_ablation_word.py, _load_resources:

if args.enrich_cache:
    enrich_stats = enrich_cache(cache, tokenizer.id_to_word)
    print(f"  cache enrichment: added {enrich_stats['added']:,} ...")
    # NEW — second pass on root-only surfaces
    root_stats = enrich_root_only_surfaces(cache)
    print(f"  root-only upgrade: {root_stats['upgraded']:,} promoted "
          f"(processed {root_stats['processed']:,}, "
          f"skipped {root_stats.get('skipped_function_word', 0):,} function)")

Mesma adição em scripts/dump_decomp_cache.py pra que o pickle persistente já venha enriquecido.

Critério de aceite

  • Após implementação: smoke do v0.3 mostra cache.suffix_ids_of populado pra surfaces antes root-only (verificar com inspect_input_stream.py em palavras como "estuda" — deve manter -a).
  • Não deve regredir os números do v0.3 paired-t n=6 (efeito é aditivo de coverage; baseline não usa cache).
  • masha_v3 BPC deve melhorar marginalmente (mais informação informativa pro Stream B). Esperado: −0.005 a −0.015 BPC.

Risco

A função enrich_root_only_surfaces itera cache.root_id_of.items() na ordem do dict — sensível a PYTHONHASHSEED. Pode produzir cache levemente diferente entre execuções se o hash seed mudar. Mitigação: ordenar items antes de iterar.

Referências

  • scripts/cache_enrichment.py:230enrich_root_only_surfaces definida
  • docs/CACHE_ENRICHMENT_AUDIT.md — audit que documentou a issue 3 (sobre-atribuição de sufixos vogais simples)
  • docs/MASHA_V3_DESIGN.md — Stream B depende de suffix_ids
## TL;DR `scripts/cache_enrichment.py` exporta duas funções: `enrich_cache` (chamada no fluxo de treino) e `enrich_root_only_surfaces` (criada como segunda passada que adiciona sufixos inflexionais a surfaces já no cache com `root_id != 0` e `suffix_ids == []`). A segunda função **nunca é chamada** em produção — nem em `run_ablation_word.py`, nem em `dump_decomp_cache.py`. Cobertura morfêmica está abaixo do potencial. ## O problema concreto O cache tem ~484K surfaces com `root_id != 0`. Destas, ~75K (15.4 %) têm `suffix_ids == []` — ou seja, foram resolvidas pra um root via Houaiss/lexicon_fallback/chain_merge mas nunca receberam atribuição inflexional. `enrich_root_only_surfaces` foi escrita exatamente pra isso: pra cada surface root-only, olha se algum sibling com mesmo root_id tem decomposição completa, e atribui o sufixo inflexional correspondente. Mas **a função nunca é executada** no pipeline normal. Resultado: 15 % do cache opera num tier "root-only" quando poderia estar no tier "decomposed", privando o Stream B (em masha_v3) de informação morfológica útil. ## Por que isso é um problema agora - Stream B (`docs/MASHA_V3_DESIGN.md`) consome `suffix_ids` per posição. Surface root-only contribui só com root_embed + pos_embed; sem sufixo, perde-se a feature derivacional ("-mente", "-ção", etc.). - O gate α pode aprender a compensar, mas é desperdício de sinal disponível. - Em escala maior (Phase GAMMA Wikipedia full), com mais palavras, o problema cresce proporcionalmente. ## Onde mexer Em `scripts/run_ablation_word.py`, `_load_resources`: ```python if args.enrich_cache: enrich_stats = enrich_cache(cache, tokenizer.id_to_word) print(f" cache enrichment: added {enrich_stats['added']:,} ...") # NEW — second pass on root-only surfaces root_stats = enrich_root_only_surfaces(cache) print(f" root-only upgrade: {root_stats['upgraded']:,} promoted " f"(processed {root_stats['processed']:,}, " f"skipped {root_stats.get('skipped_function_word', 0):,} function)") ``` Mesma adição em `scripts/dump_decomp_cache.py` pra que o pickle persistente já venha enriquecido. ## Critério de aceite - Após implementação: smoke do v0.3 mostra `cache.suffix_ids_of` populado pra surfaces antes root-only (verificar com `inspect_input_stream.py` em palavras como "estuda" — deve manter `-a`). - Não deve regredir os números do v0.3 paired-t n=6 (efeito é aditivo de coverage; baseline não usa cache). - masha_v3 BPC deve **melhorar marginalmente** (mais informação informativa pro Stream B). Esperado: −0.005 a −0.015 BPC. ## Risco A função `enrich_root_only_surfaces` itera `cache.root_id_of.items()` na ordem do dict — sensível a PYTHONHASHSEED. Pode produzir cache levemente diferente entre execuções se o hash seed mudar. Mitigação: ordenar items antes de iterar. ## Referências - `scripts/cache_enrichment.py:230` — `enrich_root_only_surfaces` definida - `docs/CACHE_ENRICHMENT_AUDIT.md` — audit que documentou a issue 3 (sobre-atribuição de sufixos vogais simples) - `docs/MASHA_V3_DESIGN.md` — Stream B depende de suffix_ids
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#27
No description provided.