OVOS intent classifier, English

A static-embedding intent classifier for OpenVoiceOS, fitted on the English slice of the corpus. It maps an utterance to one of 209 intent labels of the form <skill_id>:<intent_name>, exactly as the OVOS m2v pipeline registers them at runtime.

At 16.1 MB it is about a fifth the size of the multilingual model and scores within 0.1 accuracy points of it on English held-out accuracy. It is not the OVOS m2v pipeline's default model, though: see "Trade-offs" below before choosing it over ovos-m2v-intents-multilingual, which is the pipeline default for every language, including English.

The base is minishlab/potion-base-8M (MIT). Inference is a vector lookup and an average, so it runs on a CPU with no neural network at inference time.

Use

from model2vec.inference import StaticModelPipeline

model = StaticModelPipeline.from_pretrained("OpenVoiceOS/ovos-m2v-intents-en")
model.predict(["turn off the kitchen light"])

Evaluation

On the English held-out split of 7504 rows, accuracy is 0.9923 and weighted F1 is 0.9915.

The corpus also carries golden rows: utterances taken from the end-to-end test corpora the skills ship themselves, which are the closest thing in the data to what a user actually says. On the 117 English golden rows in the held-out split, accuracy is 0.9145.

Trade-offs

Held-out accuracy (0.9923) is close to ovos-m2v-intents-multilingual's English accuracy (0.9933), but end-to-end dispatch testing found this model ranks paraphrases worse in prototype mode: utterances that are simple rewordings of a training example (e.g. "lights on now" against prototypes trained on "turn on the lights") are more likely to be scored below a correct-but-more-distant candidate. The multilingual model does not show this weakness on the same cases.

For that reason this model is not wired in as the OVOS m2v pipeline's default for any language, English included; the pipeline defaults to ovos-m2v-intents-multilingual everywhere and only loads this model when a deployment selects it explicitly (model or models["en"] config). Pick it when the 16 MB footprint matters more than paraphrase-ranking accuracy — for example on constrained hardware serving English only in classifier mode, where the ranking weakness is less exposed than in prototype mode.

How it was built

The corpus comes from the reproducible dataset pipeline in ovos-m2v-pipeline at commit 173c1fe. Every source is pinned to an immutable revision, so the build is repeatable: train/build_dataset.py resolves the sources, normalises and deduplicates them, drops labels the pinned skill revisions do not attest, and writes a stratified 80/20 split together with a manifest.

The build behind this model produced 284,687 rows over 210 labels and 54 locales. Its manifest hashes to c6831002352fe59ed2a2e201f057ccf75807bafcb9fa74cef2b4e4f93a3de720 and the label file to fdf0abefd0db94127804763c82e2497f33ff77d5d7fe0eb739ed4df8c849bae9.

The classifier is a model2vec StaticModelForClassification head fitted on the training split and exported with to_pipeline().save_pretrained(). Weights are float16, which reproduces the float32 predictions exactly on the full held-out split.

labels.json ships beside the weights. It lists the label set the model was fitted on, so the pipeline can restrict matching to labels this model can emit.

License

Apache-2.0. The base model is MIT.

Downloads last month
-
Safetensors
Model size
7.56M params
Tensor type
F16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support