EmbeddingGemma 2 Typed Decision

Última atualização:

Aberto—$0/M input

Notas do quadrante

Ver o quadrante completo

Pontuação pela rubrica pública do quadrante (maturidade × capability; bolha = adoção). Revisamos conforme a evidência.

  • Maturidade4.4/10

    Fine-tune Apache-2.0 do EmbeddingGemma 2 (~0,3B) com chamada decide() documentada. Só pesos públicos: sem servidor /v1/systemone, pacote, integração de terceiros ou SLA.

  • Capability6.8/10

    choice, score e noul (boolean). Uma temperatura por tipo, ajustada em linhas de treino held-out. Sem latência publicada. Os 76,4% são do autor, e os hiperparâmetros foram escolhidos no split de teste.

  • Adoção2/100

    Post no X em 11/10: 130 curtidas, 6.098 views, 163 bookmarks (captura de 12/10). HF: 10 likes e 0 downloads no mês. Sem integração de terceiros ou uso em produção reportado.

Vendor claims

Leia antes

  1. Pesos abertos, Python local, código customizado. O carregamento pede trust_remote_code=True. Não há servidor /v1/systemone nem pacote.
  2. 76,4% é o número de teste do autor. Bate com a linha da fase 2 no card. O mesmo card diz que os hiperparâmetros foram escolhidos olhando esse split, então o número é um pouco otimista.
  3. A comparação com 27B está só no post. “~6 pontos atrás de um LLM de 27B” e “~100× menos parâmetros” não estão no card. 0,3B contra 27B é cerca de 90×.

O que é

Manu Romero publicou mrm8488/embeddinggemma-2-ft-typed-decision em 11/10/2026 (card criado às 18:31 UTC). É um fine-tune só de texto do google/embeddinggemma-2 mais uma cabeça de pontuação condicionada ao schema, de cerca de 0,5M de parâmetros. O card lista o checkpoint em 0,3B, Apache-2.0.

A chamada recebe um estado e um schema de perguntas. model.decide(state, questions) devolve um valor tipado e uma probabilidade por pergunta: choice (string), score (nível inteiro) e noul (boolean). A cabeça compara o texto de cada opção com o estado e a pergunta, então nomes e descrições das opções são dados. O card diz que a resposta piora quando o schema fica longe dos dados de treino.

Como foi treinado

O encoder usa o prompt Classification, mean pooling, 768-d e embeddings normalizados. O estado vira linhas key: value, não JSON cru. O logit é um prior de cosseno zero-shot mais uma correção treinada com gate.

A fase 1 treina a cabeça em embeddings em cache. A fase 2 ajusta encoder e cabeça juntos (encoder 2e-5, cabeça 1e-4), com embeddings de token congelados, 5 épocas e 32 linhas por batch. A loss é entropia cruzada nas labels suaves dos anotadores, um termo de Brier e uma distância ordinal para score. Uma temperatura por tipo de pergunta é ajustada em linhas de treino held-out e gravada nos pesos.

float16 estoura e devolve NaN. O card pede bfloat16 ou float32.

Números de teste do autor

No LocalLLaMA/typed-decisions, subset all, split de teste, argmax contra o rótulo gold:

Acurácia Soft CE Brier
Fase 1 (encoder congelado) 67,7% 0,968 0,113
Fase 2 (este checkpoint) 76,4% 0,887 0,065

Por tipo, da fase 1 para a fase 2: choice 66,2% → 71,2%, score 61,8% → 74,0%, noul 77,0% → 84,8%.

Os schemas de treino são em inglês. O card diz que outras línguas ainda rodam, com probabilidades mais moles. Também diz que números dentro do estado são mais difíceis para um modelo de embedding do que palavras, e que score é o tipo mais fraco.

Conta das notas (12/10/2026)

  • Maturidade 4,4 = disponibilidade 8 × 0,30 + docs 6 × 0,25 + integrações 1 × 0,25 + suporte 1 × 0,20 = 2,40 + 1,50 + 0,25 + 0,20.
  • Capability 6,8 = tipos 10 × 0,30 + calibração 7 × 0,25 + latência 4 × 0,25 + acurácia 5 × 0,20 = 3,00 + 1,75 + 1,00 + 1,00 = 6,75 → 6,8. Latência 4 porque não há número publicado. Acurácia 5 porque o número é do autor e o card marca otimismo de teste.
  • Adoção 2 = engajamento 5 × 0,35 + ecossistema 1 × 0,35 + produção 1 × 0,30 = 1,75 + 0,35 + 0,30 = 2,40 → 2.