qnaug's picture
Upload EmbeddingGemma 2 decision model
8cd99ae verified
|
Raw History Blame Contribute Delete
3.43 kB
---
license: apache-2.0
base_model: google/embeddinggemma-2
library_name: transformers
pipeline_tag: text-classification
language:
- en
tags:
- decision-model
- calibration
- embeddinggemma
datasets:
- LocalLLaMA/typed-decisions
- google/boolq
- nyu-mll/glue
- mteb/banking77
- clinc/clinc_oos
---
# embeddinggemma2-decision
A decision model built on the text encoder of `google/embeddinggemma-2` (~270M parameters). It reads an input, a set of questions and their options in a single forward pass and returns a calibrated probability for every option. It never generates text. The head follows the Clef design: option and question token spans are mean-pooled and scored by a small MLP.
Question types: `choice` (pick one of named options), `noul` (true / false), `score` (ordered levels).
## Usage
```python
from huggingface_hub import hf_hub_download
import importlib.util
spec = importlib.util.spec_from_file_location("decision_model", hf_hub_download("qnaug/embeddinggemma2-decision", "decision_model.py"))
dm_mod = importlib.util.module_from_spec(spec); spec.loader.exec_module(dm_mod)
dm = dm_mod.DecisionModel("qnaug/embeddinggemma2-decision")
dm.decide("Hi, I was charged twice for invoice #4411. Please refund the duplicate today.", {
"team": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"billing": "invoices, payments, refunds", "technical": "bugs, outages", "sales": "pricing"}},
"refund": {"type": "noul", "instructions": "The customer asks for a refund."},
})
```
`domain="extra"` (default) uses the temperatures calibrated on natural text; `domain="typed"` uses those calibrated on JSON state like typed-decisions. Run in float32 or bfloat16, never float16 (the base model returns NaN).
## Results
typed-decisions test accuracy **74.3%** (random 31.8%, majority label 47.9%).
### typed-decisions (test)
Accuracy 74.3%, ECE 0.029 after calibration.
| Confidence threshold | Decisions handled | Accuracy on handled |
|---|---|---|
| 0.5 | 94.7% | 76.0% |
| 0.6 | 78.8% | 80.2% |
| 0.7 | 62.4% | 83.9% |
| 0.8 | 45.0% | 87.4% |
| 0.9 | 26.6% | 91.3% |
### boolq, mnli, banking77, clinc150 (test)
Accuracy 80.4%, ECE 0.039 after calibration.
| Confidence threshold | Decisions handled | Accuracy on handled |
|---|---|---|
| 0.5 | 90.6% | 83.7% |
| 0.6 | 74.4% | 87.2% |
| 0.7 | 59.5% | 92.6% |
| 0.8 | 48.2% | 96.9% |
| 0.9 | 40.1% | 98.4% |
## Limitations
- Trained on English data only. Other languages (e.g. Vietnamese) are untested and the calibration does not carry over.
- Calibration is only valid for data like the training sources. Recalibrate on a few hundred examples of your own data before relying on the probabilities.
- Yes/no reading comprehension on free text is the weakest part (boolq / mnli ≈ 70%).
- Labels in typed-decisions have low inter-annotator agreement, so accuracy has a ceiling well below 100%.
## Training
Text encoder of `google/embeddinggemma-2` with the vocabulary embedding frozen, trained with soft-label cross-entropy (typed-decisions) and one-hot labels (other datasets). Intent datasets show the gold label plus random distractors, so the model learns to choose among arbitrary option lists. Per-source temperature scaling on a held-out split.
Dataset licenses differ (typed-decisions Apache-2.0, BoolQ CC BY-SA 3.0, banking77 CC BY 4.0, CLINC150 CC BY 3.0, MNLI mixed); check them for your use.