You need to agree to share your Hugging Face information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Access to this model is by request and is governed by the Hebrish terms of use (https://hebrish.app/terms) and by the FUTO Model Weights License 1.0 (LICENSE in this repository), whose Limitations apply to every use. Non-commercial use is free; commercial use needs a commercial licence from access-requests@hebrish.app.

Log in or Sign Up to review the conditions and access this model content.

Sabich-asr4all-M v1.0

Notice. This model is derived from Asr4All (futo-org/asr4all-m, revision 9b1506ca35ebfdc04be6b87868cc2f95eff10210) and is subject to the FUTO Model Weights License 1.0, included in this repository as LICENSE. The weights have been modified: the CTC acoustic trunk was fine-tuned on English-Hebrew code-switching speech (Hebrew words in romanized form) and English. The PCEC punctuation and casing head is unmodified. This model is not affiliated with or endorsed by the licensor.

Sabich on a tiny streaming base. Sabich is the kitchen-sink line of the Hebrish project: one speaker's English dictation with everything in it. That covers Hebrew words written in canonical romanization (teudat zehut, arnona, makolet), tech vocabulary, brand names, acronyms and everyday email and message dictation. The main Sabich is Parakeet TDT 0.6B v2, sized for phones. This variant applies the same training data to futo-org/asr4all-m, a 55.6M-parameter streaming CTC model, for wearables, small boards and low-end phones, on CPU.

The smaller Sabich-asr4all-S (28M) is about one point worse on most tests (two on LibriSpeech), at half the size.

Name. Each line has a food code name for what it is trained on. A variant on a different base model keeps the line name and adds the base: Sabich-<Base>-<Size>.

Output

English, punctuated and cased by the stock PCEC head. Hebrew words are written in Latin script, never Hebrew script. Numbers come out as words ("four point one", not "4.1"): the model's vocabulary has no digits, so it was trained on spelled-out numbers.

Results

Held-out test split of the speaker's recordings (term-disjoint from training), dataset revision cf84f7e4, streaming tier c256r32, PCEC on. WER is normalised (lower-cased, punctuation stripped) unless marked raw; term recall is a word-boundary match on the romanized Hebrew term.

Stock asr4all-m This model
English-Hebrew code-switching, WER (431 clips) 19.5% 9.1%
English-Hebrew code-switching, raw WER 23.4% 15.4%
Hebrew terms never seen in training, recall 7.5% 36.3%
Hebrew terms seen in training, recall 65.6%
Speaker's own English, WER (100 clips) 12.2% 7.3%
LibriSpeech test-clean (200 utterances), WER 2.2% 4.0%
Long-form (about 3-minute joined clips), WER 19.4% 9.0%

The raw-vs-normalised gap is the stock PCEC head's casing and punctuation, which was not retrained. LibriSpeech gets worse than the stock model: the training mix had only 10% general English replay.

Use

import numpy as np, soundfile as sf, torch
from transformers import AutoModel  # transformers 4.57

model = AutoModel.from_pretrained("Hebrish/Sabich-asr4all-M", trust_remote_code=True).eval()
audio, sr = sf.read("note.wav", dtype="float32")  # 16 kHz mono
audio = np.concatenate([audio, np.zeros(16000, dtype=np.float32)])  # 1 s of silence: keeps the last word
print(model.transcribe(torch.from_numpy(audio), op=(256, 32)))     # punctuated and cased (PCEC)
print(model.transcribe(torch.from_numpy(audio), op=(256, 32), punctuate=False))  # plain lowercase

op picks the streaming tier (commit, right context, in frames). (256, 32) is the most accurate and the one scored above; the lower-latency tiers ((16, 4) … (512, 8), listed in config.json) were all trained, so they all still work, but were not scored. The model card of the base model explains the tiers, streaming use and the wake VAD; all of that applies unchanged.

ONNX

onnx/ is the base model's ONNX bundle with this model's weights: one graph per streaming tier, per PCEC rung and the VAD, all reading one shared asr4all.onnx.data. Run it with the included onnx/asr4all_onnx.py (pip install onnxruntime numpy soundfile):

python onnx/asr4all_onnx.py onnx/ note.wav --tier stream_c256r32
python onnx/asr4all_onnx.py onnx/ note.wav --tier stream_c256r32 --no-pcec

How it was built: the base model's exporter is not published, so the weights were swapped into its released graphs. Every float tensor in those graphs was matched to the PyTorch weights it comes from (directly, transposed, or with BatchNorm folded in), and the same transform of the fine-tuned weights was written in its place. The graphs are otherwise unchanged. Check: on 6 test clips the ONNX bundle produces the fine-tuned model's Hebrew words, and agrees with PyTorch transcribe() on 8 of 12 outputs (PCEC off and on); the other outputs differ by a word or a clipped ending. The stock model's own ONNX and PyTorch agree on 4 of 12 lines on the same clips, so the differences come from the runtime, not from the swap.

ExecuTorch: not included

The base model's ExecuTorch .pte files (XNNPACK int8 and fp32) are not rebuilt here. The int8 build stores quantized weights inside the compiled program, and the quantization and export pipeline is not published, so there is no safe way to put the fine-tuned weights into it. Use the ONNX bundle, or export from the PyTorch weights yourself.

Training

  • Data: danielrosehill/Read-Aloud-Voice-Sentences at revision cf84f7e4, blend all: 602 minutes of the speaker's own takes (388 of them code-switching), plus 10% LibriSpeech-PC replay against forgetting. 669 minutes and 5,748 clips (4 over-long or over-dense clips dropped).
  • Targets: the model's own CTC form: lowercase a-z, apostrophe and spaces. Numbers are spelled out (num2words), "." inside a web address becomes "dot", accents are stripped.
  • Recipe: the CTC trunk fully fine-tuned in plain PyTorch, PCEC and VAD frozen. Loss: CTC on the final layer plus 0.3 × CTC on the self-conditioning auxiliary head. Each step uses one of the six shipped streaming tiers at random, so every operating point stays trained. BatchNorm statistics frozen. 20 epochs, AdamW lr 1e-4 with cosine decay and 5% warmup, about 480 s of padded audio per batch, one L40S, 9.0 minutes. Best epoch by validation greedy WER: epoch 15 (16.0 → 6.2% on the validation split).
  • The run's configuration and result are in training/a1-all/.

Limits

  • Trained on one speaker (an Irish English speaker living in Israel), reading prompts on a phone. Other voices will gain less.
  • Numbers come out as words, not digits.
  • Punctuation and casing are the stock PCEC head's, which does not know the romanized Hebrew words (it capitalises some of them).
  • General English (LibriSpeech) is worse than the stock model.
  • About two thirds of unseen Hebrew words are still missed or misspelled.

Licence

The weights are licensed under the FUTO Model Weights License 1.0 (LICENSE), including its Limitations section, which applies to every use of this model and its outputs. Use is also governed by the Hebrish terms of use, which add a non-commercial default on top. The remote code (modeling_asr4all.py) and the ONNX runtime script (onnx/asr4all_onnx.py) are the base model's, unchanged. If you publish research results using this model, the licence asks you to cite the weights as the "Asr4All Model".

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

Model tree for Hebrish/Sabich-asr4all-M

Finetuned
(1)
this model

Datasets used to train Hebrish/Sabich-asr4all-M

Space using Hebrish/Sabich-asr4all-M 1