OpenVoiceOS/ovos-m2v-intents-multilingual
OVOS intent classifier, multilingual
A static-embedding intent classifier for OpenVoiceOS. It maps an utterance to one of 210 intent labels of the form <skill_id>:<intent_name>, exactly as the OVOS m2v pipeline registers them at runtime.
This is the default model. It covers all 54 locales in the training corpus and is the fallback for every language that has no monolingual model of its own. English also has a smaller monolingual model, ovos-m2v-intents-en, which is the better choice for an English-only device.
The base is a 128-dimensional Model2Vec distillation of intfloat/multilingual-e5-small (MIT). Inference is a vector lookup and an average, so it runs on a CPU with no neural network at inference time.
Size on disk is 73.5 MB. Overall accuracy on the held-out split is 0.9943 across 56,938 rows.
Use
from model2vec.inference import StaticModelPipeline
model = StaticModelPipeline.from_pretrained("OpenVoiceOS/ovos-m2v-intents-multilingual")
model.predict(["turn off the kitchen light"])Evaluation
Accuracy on the held-out 20% split, per language, for every language with at least 50 test rows.
Languages below that threshold are present in the corpus with only a handful of rows each; the model still emits labels for them, but there is not enough held-out data to report a meaningful score.
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.
