Vellum Deutsch Lokal
Vellum Deutsch Lokal is the PJ Labs offline model package used by the Vellum macOS dictation app. It contains a local German speech-recognition component and an optional local German text-correction component in ONNX format.
The package is designed for local use. After download and hash verification, Vellum runs dictation and optional correction on the user's Mac.
Components
| Component | Required | Purpose | Format |
|---|---|---|---|
speech-recognition |
Yes | Converts speech to German text locally | ONNX |
correction-t5-onnx |
No | Corrects recognized German text locally when enabled | ONNX T5 encoder/decoder, locally fine-tuned |
Correction component: fine-tuning and post-training
The correction component is not used as shipped upstream. PJ Labs fine-tuned and post-trained it locally, and this repository now carries that adapted model.
Base model: oliverguhr/spelling-correction-german-base (Apache-2.0). The component keeps the T5 encoder-decoder architecture, the ONNX layout, and the prompt format of the app (correct: followed by the text to correct).
What was done:
- Continued training from the previously published adaptation on publishable German correction pairs, so that existing domain vocabulary stays intact.
- Vocabulary extension. The inherited vocabulary had no upper-case umlaut pieces. Words such as
ÄnderungorÖlwere therefore split into an unknown token plus a fragment, and the model could not reproduce the letter at all. Eleven pieces were appended (Ä,Ö,Än,Äu,Ös,Öl,Öff,Änd,Üb,Übe,Über), which raises the vocabulary from 32100 to 32111 entries. Existing token ids are unchanged. - Post-training round for these pieces. A dense data set of German sentence pairs in which every target contains a word starting with an upper-case umlaut, with dictation-like inputs: dropped umlauts, swapped umlauts, missing commas, missing sentence punctuation, lower-case sentence start, wrong article and wrong case. Targets always stay correct German.
- Tokenizer segmentation fix in the app-side encoder: best-scoring (Viterbi) segmentation instead of greedy longest-piece matching, so that inference segments text exactly like training did.
The training data is publishable synthetic German material and previously published pairs. No private voice memos, no private transcripts, and no private user correction dictionaries were used.
Measured effect
Evaluation on a held-out set of 200 German sentences (umlaut-weighted, mixed publishable and synthetic), greedy decoding with the app prompt prefix:
| Metric | Before this adaptation | After this adaptation |
|---|---|---|
| Exact match | 0.357 | 0.930 |
| Mean character accuracy | 0.718 | 0.959 |
| Output containing an unknown token | 0.191 | 0.000 |
| Output containing an invented word | 0.452 | 0.045 |
| Umlaut word retained | 0.589 | 0.979 |
| Comma agreement with target | 0.930 | 0.958 |
| Output losing letters against target | 0.246 | 0.030 |
Examples from the acceptance set (input -> output):
| Input | Output |
|---|---|
öl brauchen wir heute |
Öl brauchen wir heute. |
die äußerungen fehlen |
Die Äußerungen fehlen. |
änderung ist wichtig |
Änderung ist wichtig. |
ich glaube dass du recht hast |
Ich glaube, dass du recht hast. |
wir brauchen milch eier brot und kaffee |
Wir brauchen Milch, Eier, Brot und Kaffee. |
ich habe gestern ein brief geschrieben |
Ich habe gestern einen Brief geschrieben. |
Known limitations
- Single letters can still be lost in long umlaut words. The app refuses such a correction and leaves the user text untouched, so this shows up as "no change" rather than as damaged text.
- Capitalisation of nouns inside a sentence is left to the model and is not always corrected.
- Case and article corrections are improved but not complete.
- The correction component is a spelling-and-form aid, not a grammar authority.
Integrity
manifest.json lists every artifact with its byte size, SHA-256 digest, and source URL. Verify a downloaded copy with:
python3 scripts/validate_artifact_manifest.py <path-to-downloaded-repository>
Vellum verifies the same digests before it uses a component, and it validates the correction component against the file list belonging to its directory, so a locally adapted model is not rejected by the published hashes.
Privacy
This public package does not contain private voice memos, private transcripts, user dictionaries, or private training examples. User-specific correction rules in the Vellum app stay local on the user's Mac and are not part of this repository. Corrections run on the user's machine only.
Status
Experimental. The package is suitable for local Vellum integration tests and early offline use. It is not a clinical, legal, or guaranteed transcription system.
Attribution and licenses
See NOTICE.md for model lineage and license notes.
Included license texts
This repository includes the full license texts required by the packaged components:
LICENSE-CC-BY-4.0.txtfor the speech-recognition lineage.LICENSE-Apache-2.0.txtfor the German text-correction lineage, which also applies to the local fine-tuning described above.
Model tree for PJlabs/vellum-de-local
Base model
oliverguhr/spelling-correction-german-base