Ariadne MiniLM-L6-v2 robot intent
Developed by AKIKI.AI. An English 23-class intent classifier for short robot
commands and observed STT transcripts. The model is an entirely frozen
sentence-transformers/all-MiniLM-L6-v2 backbone with an identity-initialized
384 x 384 input affine and a new 23-class linear head. The affine transforms
word embeddings before position/type embeddings. Outputs are mean-pooled,
L2-normalized, and classified by the head.
This is an initial experimental model. Data and labels are synthetic and model-reviewed; human review and evaluation on real Parakeet transcripts are pending. Known errors are recorded below. Uploading this model does not deploy it to a robot.
Files and loading
The complete original frozen checkpoint is in base_model/; the four trained
FP32 tensors are in adapter.safetensors. There are no machine-local symlinks.
model_config.json and labels.json specify the output order. All model assets
were copied from existing local files, not downloaded during packaging.
On supported Linux x86_64 hosts, use the prebuilt Rust engine with akiki:
from akiki import MiniLM
# A local copy of this repository; no Hub access during inference.
with MiniLM("./robot-intent", model_precision="fp32") as model:
result = model.classify("come here")
print(result.label, result.probabilities[result.index])
With akiki installed, python predict.py "come here" is the equivalent CLI.
FP32 matches the reported validation. The package's default is INT8; other
precisions have not been evaluated for this adapter. Current ARM64 wheels
provide VAD only and do not include the MiniLM engine. No PyTorch is needed for
Rust inference. The bundled model.py is the exact offline PyTorch reference;
it needs requirements-reference.txt and loads with local_files_only=True.
Use plain observed transcript text. Do not use the desktop Clover
Current user message: wrapper. Inputs above 512 tokens raise an error rather
than being truncated. The model has no audio, speaker identity, dialogue
history, or robot-state input. A bare imperative from a TV cannot be
identified as TV speech from identical text alone.
Labels
| ID | Intent | Meaning |
|---|---|---|
| 0 | NONE |
No identifiable supported command addressed to this robot. Ordinary chat, factual questions, explicitly quoted/reported commands, explicit speech to humans/pets/TV, unsupported requests, incomplete or unintelligible fragments, and negated commands. Do not guess a missing direction or missing negation. |
| 1 | STOP |
Stop ALL robot motion now: stop, wait, stay, freeze, hold on, do not move. Not stop talking, stop recording, stop following this recipe, or do not stop. An explicit immediate all-motion stop overrides another action in a compound utterance. |
| 2 | COME |
One approach toward the speaker: come here, come to me, come closer. Not ongoing following, robot-relative forward, or returning to an unspecified place. |
| 3 | FACE |
Orient the robot body toward the speaker: face me, look at me, turn to face me, over here. Not an unspecified turn around, a fixed-angle turn, or a gimbal-only request. |
| 4 | FOLLOW |
Continue tracking/following the speaker as the speaker moves, until stopped. Not a single approach. |
| 5 | BACK_UP |
Move the robot body backward a short distance without turning away. |
| 6 | GO_AWAY |
Turn the robot body away from the speaker and move off. Not backing straight up. |
| 7 | FORWARD |
Move the robot body forward relative to its own current heading, without targeting the speaker. |
| 8 | TURN_LEFT |
Turn the robot body left by a small/default fixed angle. Not gimbal movement or a request for a specifically different unsupported angle. |
| 9 | TURN_RIGHT |
Turn the robot body right by a small/default fixed angle. Not gimbal movement. |
| 10 | TURN_AROUND |
Turn the robot body 180 degrees; bare turn around means this label, not FACE. |
| 11 | SPIN |
Turn the robot body through one full 360-degree revolution for fun. |
| 12 | LOOK_UP |
Tilt the camera/head/gimbal one step upward; body stays in place. |
| 13 | LOOK_DOWN |
Tilt the camera/head/gimbal one step downward; body stays in place. |
| 14 | LOOK_LEFT |
Pan the camera/head/gimbal one step left; body stays in place. |
| 15 | LOOK_RIGHT |
Pan the camera/head/gimbal one step right; body stays in place. |
| 16 | LOOK_AHEAD |
Center the camera/head/gimbal, look straight ahead. Not move the body forward. |
| 17 | NOD |
Perform a yes gesture with the head/gimbal. Bare conversational yes is NONE. |
| 18 | SHAKE_HEAD |
Perform a no gesture with the head/gimbal. Bare conversational no is NONE. |
| 19 | LIGHTS_ON |
Switch on the robot base lights. Not room lights, screen brightness, or eye moods. |
| 20 | LIGHTS_OFF |
Switch off the robot base lights. Not room lights or eye moods. |
| 21 | SLEEP |
Enter voice-inactive mode until explicitly woken: go to sleep, stop listening, quiet until I wake you. QUIET is an alias of this same behavior, not a separate class. Not bedtime chat or temporarily stopping motion. |
| 22 | WAKE |
Resume reacting to voices: wake up, start listening again. Not waking a human or computer. |
QUIET aliases SLEEP, since both suspend voice reactions until woken.
FACE corresponds to the existing robot action named TURN. Bare turn around
is TURN_AROUND; turn to face me is FACE. Eye moods are excluded.
An immediate all-motion STOP takes precedence over other requested actions.
Other unresolved multiple actions are NONE. Factual questions, reported
commands, explicit non-robot addressees, unsupported requests and unrecoverable
fragments are NONE. Polite supported action requests are commands. See
data/README.md and data/policy-cases.jsonl for the full policy.
Training and selection
- Frozen base: 22,713,216 parameters, unchanged by hash check for every seed.
- Trainable input affine: 147,840 parameters; new head: 8,855; total 156,695.
- Three seeds: 0, 1, 2. Selected seed 1, epoch 25 by lowest unweighted validation NLL across all seeds and epochs. Test data was read after selection.
- AdamW, batch 32, affine LR 1e-4, head LR 1e-3, no weight decay, gradient clip 1.0.
- Square-root inverse-frequency weighted cross entropy, using training counts only.
- FP32; TF32 and backbone dropout disabled. Minimum 10 epochs, patience 5, cap 50.
- Training and selection took 33.7 seconds on physical GPU 1
(RTX PRO 6000 Blackwell). Complete histories and best adapters are in
checkpoints/.
The dataset has 3,708 examples: 2,949 train, 379 validation, 380 test.
NONE accounts for 2,713 examples (73.2%). There are 735 synthetic ASR/noise
examples. These are not measured Parakeet transcriptions. Every split has all
23 labels. Variants from the same generated family and normalized duplicates
stay within one split. Semantic paraphrases are not guaranteed disjoint.
Only text and label_id are training inputs; metadata and clean references
are excluded. Full data and generation/review provenance are in data/.
Selected-model results
| Metric | Validation (379) | Test (380) |
|---|---|---|
| Accuracy | 94.20% | 93.95% |
| Macro F1 | 0.8338 | 0.8763 |
| NLL | 0.2408 | 0.1969 |
| Commands predicted on NONE | 2/272 | 8/272 |
Test STOP recall is 4/5 (80%), COME recall is 4/7, FACE recall is 4/5.
There are only 3β7 test examples for most command labels. These synthetic
results do not establish field performance. No confidence threshold or
probability calibration has been fitted; probabilities are plain softmax.
All per-class metrics and confusion matrices are in results.json.
Known limitations: don't move is predicted NONE; over here is predicted
COME rather than FACE; some polite and compound commands are missed. The model
produces 8 false command predictions on 272 NONE test examples (2.94%).
The policy probes pass 60/78; they overlap the dataset and are integration
checks, not an independent benchmark. policy-checks.json lists every probe
and test-predictions.jsonl every test prediction. No retraining occurred after
test inspection.
Verification and reproduction
The native Rust engine and the prebuilt akiki 0.1.2 Linux x86_64 wheel loaded
all 23 outputs and matched all 32 PyTorch reference predictions. Maximum FP32
logit difference was 1.43e-5. Evidence is in native-verification.json and
akiki-package-verification.json.
training-config.json records exact dataset hashes, versions, hyperparameters
and source hashes. runtime.json identifies the network-disabled cached
Docker image used for training. source/ contains original training, inference,
generation and publishing scripts; source/train.py and source/model.py are
exact snapshots of the trained run. Training still requires PyTorch and an
existing local MiniLM directory. Supply absolute paths with --base-model,
--data, --output and an available --device when reproducing. The inference
package needs no training infrastructure.
Base revision: 1110a243fdf4706b3f48f1d95db1a4f5529b4d41. Base weights and adapter are Apache-2.0;
see LICENSE, NOTICE, and the original model card in base_model/README.md.
SHA256SUMS covers every packaged file except itself.
Model tree for Akiki-AI/Akiki-MiniLM-L6-v2-robot-intent
Base model
nreimers/MiniLM-L6-H384-uncased