File size: 16,717 Bytes
a30f6fc
 
d0b1f55
a30f6fc
 
 
 
 
 
f4eef7d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a30f6fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b343d3f
 
 
 
 
 
 
 
 
 
 
 
 
f4eef7d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
---
language: [fa]
license: apache-2.0
library_name: onnx
pipeline_tag: automatic-speech-recognition
tags: [automatic-speech-recognition, speech, persian, farsi, fastconformer, ctc, streaming, cache-aware-streaming, on-device, tract, rust, shenava, shenava-1, visualears, edge]
base_model: [Reza2kn/Shenava-Rizeh-v1.0]
---

# 🎙️ Shenava-Rizeh-v1.0-tract-streaming

> **English + فارسی** · Part of [Shenava 1.0](https://huggingface.co/collections/Reza2kn/shenava-10-open-streaming-persian-asr-and-captioning) · [Project hub](https://github.com/Reza2kn/shenava-1) · [SLT paper submission](https://openreview.net/forum?id=QTa6ax9PU3)

## 🌟 At a glance | معرفی سریع

| | English | فارسی |
|---|---|---|
| 🎯 Role | Rizeh native-Rust tract streaming export. | مدل دانش‌آموز فشردهٔ شنوا ریزه؛ این مخزن یکی از مصنوعات رسمی خانوادهٔ Shenava-1 است. |
| 🧠 Family | Shenava Rizeh compact student | مدل دانش‌آموز فشردهٔ شنوا ریزه |
| 📦 Format | native Rust tract streaming bundle | بستهٔ جریانی بومی Rust با tract |
| 📐 Scale | 32M parameters | اندازه: 32M parameters |
| 📥 Input | mono Persian speech resampled to 16 kHz | گفتار تک‌کانالهٔ فارسی با نرخ نمونه‌برداری ۱۶ کیلوهرتز |
| 📤 Output | Persian transcription; normalization and ITN belong in the display layer | رونویسی فارسی؛ نرمال‌سازی و تبدیل عدد گفتاری در لایهٔ نمایش انجام می‌شود |
| ⚖️ License | Apache License 2.0 | مجوز Apache 2.0 |

## 🇬🇧 English documentation

### 🧭 Overview

Rizeh native-Rust tract streaming export. This repository is an official Shenava-1 release artifact, not an isolated checkpoint. It belongs to a Persian-first stack covering training data, streaming ASR, semantic evaluation, on-device exports, captioning applications, and reproducible benchmarks. Use the collection link above to locate sibling model sizes, deployment formats, datasets, and evaluation assets.

The artifact is optimized for Persian speech and the conventions used by the Shenava/VisualEars pipeline. A model file alone is not the entire inference system: audio preparation, tokenizer assets, streaming state, decoding, Persian text normalization, and inverse text normalization can materially affect observed output.

### ✅ Intended uses

- Persian ASR research, benchmarking, and reproducible comparison inside the Shenava-1 evaluation protocol.
- Offline or streaming transcription when the selected runtime and graph support that mode.
- On-device captioning, accessibility prototypes, and Persian speech interfaces.
- Conversion or runtime integration work that preserves the source model’s tokenizer, decoding assumptions, and numerical checks.

### 🚫 Out-of-scope or unsafe uses

- Do not treat transcripts as guaranteed verbatim records for legal, medical, emergency, or other high-stakes decisions.
- Do not infer identity, health, ethnicity, intent, or other sensitive traits from speech or model errors.
- Do not compare formats using different text normalization, test subsets, or decoding settings and present the result as model quality.
- Do not assume robustness to every Persian accent, code-switching pattern, recording channel, or adversarial acoustic condition.

### 📁 Repository contents

This snapshot contains **9 files** totaling approximately **205.80 MB**. Common file groups: `.onnx` × 3, `no extension` × 2, `.md` × 1, `.py` × 1, `.patch` × 1, `.txt` × 1.

Largest or representative artifacts:

- `model.onnx`
- `model.int8.onnx`
- `model.int4.onnx`
- `tokens.txt`
- `shenava_tract_streaming.patch`

The repository card and `LICENSE` are part of the release. Runtime-specific configuration, tokenizer, vocabulary, metadata, and state files should be kept beside the main weights when present.

### 🚀 Download and integration

```python
from huggingface_hub import snapshot_download

local_dir = snapshot_download(
    repo_id="Reza2kn/Shenava-Rizeh-v1.0-tract-streaming",
    local_dir="./Shenava-Rizeh-v1.0-tract-streaming",
)
print(local_dir)
```

Use the runtime named by the artifact format. Inspect the exported graph signature before binding input and output tensors; deployment exports may expose cache/state tensors in addition to acoustic features.

For NeMo checkpoints, restore through `nemo.collections.asr.models.ASRModel.restore_from(...)` rather than assuming a CTC-only class. For converted artifacts, follow the graph metadata and the runtime-specific notes retained later in this card. Validate one known clip against the source checkpoint before shipping a conversion.

### 📏 Evaluation

Report at least WER and CER using the same Persian normalization rules, plus S³ when semantic importance matters. Shenava’s public [Triple Threat leaderboard](https://huggingface.co/spaces/Reza2kn/PersianASR-TrippleThreat) combines the Golden6669 and FLEURS-fa splits. Record the exact repository revision, decoder settings, chunk/context configuration, precision, device, and normalization code.

Deployment exports should be checked for numerical and transcription parity against their parent repository, [ `Reza2kn/Shenava-Rizeh-v1.0` ](https://huggingface.co/Reza2kn/Shenava-Rizeh-v1.0). Runtime speed is hardware-specific; publish latency, real-time factor, warm-up policy, thread count, and audio duration together.

### ⚠️ Limitations and responsible use

ASR quality varies with accent, age, speaking style, background noise, distance, clipping, reverberation, telephony bandwidth, overlapping speech, and code-switching. Persian orthography also permits multiple acceptable written forms. WER or CER can therefore penalize a semantically correct alternative, while a low aggregate score can still hide loss of a critical word. Review meaning-critical outputs and expose uncertainty in accessibility-facing products.

### 🔁 Reproducibility checklist

1. Pin the Hub revision and runtime/library versions.
2. Resample audio deterministically and document channel mixing.
3. Keep tokenizer and decoding assets from this repository together.
4. Record streaming chunk, left/right context, cache reset, and endpointing behavior.
5. Apply one documented Persian normalization/ITN pipeline to references and hypotheses.
6. Publish failed cases and condition-level results, not only a single average.

## 🇮🇷 مستندات فارسی

### 🧭 معرفی

مدل دانش‌آموز فشردهٔ شنوا ریزه است. این مخزن یک مصنوع رسمی از انتشار Shenava-1 است و باید همراه با داده‌های آموزشی، توکنایزر، روش رمزگشایی، نرمال‌سازی فارسی و تنظیمات اجرای جریانی دیده شود. پیوند مجموعه در بالای صفحه، نسخه‌های هم‌خانواده، قالب‌های استقرار، داده‌ها و معیارهای ارزیابی را یک‌جا نشان می‌دهد.

هدف پروژه ارائهٔ زیرساخت باز و قابل بازتولید برای بازشناسی گفتار و زیرنویس فارسی است. نتیجهٔ نهایی فقط به وزن مدل وابسته نیست؛ نرخ نمونه‌برداری، کانال صوت، وضعیت کش، روش رمزگشایی، تبدیل اعداد گفتاری و یکسان‌سازی نیم‌فاصله نیز بر خروجی اثر دارند.

### ✅ کاربردهای پیشنهادی

- پژوهش، بنچمارک و مقایسهٔ منصفانهٔ ASR فارسی با پروتکل یکسان.
- رونویسی آفلاین یا جریانی، در صورتی که قالب و زمان‌اجرای انتخابی از آن پشتیبانی کند.
- زیرنویس روی دستگاه، ابزارهای دسترس‌پذیری و رابط‌های گفتاری فارسی.
- تبدیل مدل و یکپارچه‌سازی با زمان‌اجراهای مختلف همراه با آزمون برابری خروجی.

### 🚫 کاربردهای نامناسب

- خروجی را در تصمیم‌های پزشکی، حقوقی، اضطراری یا پرخطر به‌عنوان سند قطعی به کار نبرید.
- از خطا یا صدای کاربر برای استنباط هویت، سلامت، قومیت، نیت یا ویژگی حساس استفاده نکنید.
- نتایجی را که با زیرمجموعه، نرمال‌سازی یا رمزگشایی متفاوت ساخته شده‌اند مقایسهٔ مستقیم ننامید.
- پوشش کامل همهٔ لهجه‌ها، گفتار آمیخته، کانال‌ها و شرایط صوتی را فرض نکنید.

### 📁 محتوای مخزن

این نسخه شامل **9 فایل** با حجم تقریبی **205.80 MB** است. گروه‌های رایج فایل: `.onnx` × 3, `no extension` × 2, `.md` × 1, `.py` × 1, `.patch` × 1, `.txt` × 1.

فایل‌های شاخص:

- `model.onnx`
- `model.int8.onnx`
- `model.int4.onnx`
- `tokens.txt`
- `shenava_tract_streaming.patch`

فایل‌های توکنایزر، واژگان، پیکربندی، وضعیت جریانی و فراداده را در صورت وجود کنار وزن اصلی نگه دارید.

### 🚀 دریافت و استفاده

ابتدا snapshot کامل مخزن را دریافت کنید، سپس از زمان‌اجرای متناسب با قالب استفاده کنید. پیش از اتصال ورودی و خروجی، امضای گراف را بررسی کنید؛ خروجی‌های جریانی ممکن است علاوه بر ویژگی صوتی، تنسورهای وضعیت و کش داشته باشند.

برای چک‌پوینت NeMo از `ASRModel.restore_from(...)` استفاده کنید و مدل را صرفاً CTC فرض نکنید. برای خروجی‌های تبدیل‌شده، یک کلیپ مرجع را با مدل مبدأ مقایسه کنید و سپس استقرار را انجام دهید.

### 📏 ارزیابی

حداقل WER و CER را با نرمال‌سازی فارسی یکسان گزارش کنید و در سناریوهای حساس به معنا، S³ را نیز بیاورید. در [جدول Triple Threat](https://huggingface.co/spaces/Reza2kn/PersianASR-TrippleThreat) دو بخش Golden6669 و FLEURS-fa با هم سنجیده می‌شوند. شناسهٔ دقیق نسخه، تنظیمات دیکودر، کانتکست، دقت عددی، سخت‌افزار و کد نرمال‌سازی را ثبت کنید.

### ⚠️ محدودیت‌ها و استفادهٔ مسئولانه

لهجه، سن، سبک گفتار، نویز، فاصله، کلیپ‌شدن، پژواک، کانال تلفنی، هم‌پوشانی گویندگان و کدسوئیچینگ می‌توانند کیفیت را تغییر دهند. چند نگارش فارسی ممکن است از نظر معنایی درست باشند، اما WER/CER یکی را خطا حساب کند. در محصولات دسترس‌پذیری، واژه‌های کلیدی را جداگانه بازبینی و عدم قطعیت را به کاربر نشان دهید.

### 🔁 چک‌لیست بازتولید

۱. نسخهٔ دقیق مخزن و کتابخانه‌ها را ثابت کنید. ۲. تبدیل نرخ نمونه و کانال را مستند کنید. ۳. توکنایزر و دارایی‌های رمزگشایی همین مخزن را نگه دارید. ۴. اندازهٔ قطعه، کانتکست، بازنشانی کش و endpointing را ثبت کنید. ۵. یک خط لولهٔ نرمال‌سازی/ITN مشترک به مرجع و خروجی اعمال کنید. ۶. خطاهای نمونه‌ای و نتایج هر شرایط را در کنار میانگین منتشر کنید.

## 📚 Citation, links, and license | استناد، پیوندها و مجوز

- 🤗 [Shenava-1 collection](https://huggingface.co/collections/Reza2kn/shenava-10-open-streaming-persian-asr-and-captioning)
- 🧰 [Project repository](https://github.com/Reza2kn/shenava-1)
- 📄 [SLT paper submission](https://openreview.net/forum?id=QTa6ax9PU3)
- 📊 [Persian ASR Triple Threat](https://huggingface.co/spaces/Reza2kn/PersianASR-TrippleThreat)

```bibtex
@misc{shenava1_shenava_rizeh_v1_0_tract_streaming,
  title  = {Shenava-Rizeh-v1.0-tract-streaming: a Shenava-1 Persian speech artifact},
  author = {Reza2kn},
  year   = {2026},
  url    = {https://huggingface.co/Reza2kn/Shenava-Rizeh-v1.0-tract-streaming}
}
```

Released under the **Apache License 2.0**. این مخزن با **مجوز Apache 2.0** منتشر شده است.

---

## 📎 Retained technical notes | یادداشت‌های فنی پیشین

The pre-existing technical card is retained below for revision-specific commands, measurements, and artifact details. The bilingual sections above define the common Shenava-1 documentation contract.

یادداشت فنی قبلی برای فرمان‌ها، اندازه‌گیری‌ها و جزئیات همان نسخه در ادامه حفظ شده است. بخش‌های دوزبانهٔ بالا قرارداد مستندسازی مشترک Shenava-1 را تعریف می‌کنند.

# Shenava — Rizeh v1.0 (32M) · cache-aware streaming · **native-Rust (tract)**

Cache-aware **streaming** CTC export of [`Shenava-Rizeh-v1.0`](https://huggingface.co/Reza2kn/Shenava-Rizeh-v1.0)
that runs in the **pure-Rust [tract](https://github.com/sonos/tract) engine** — no C++, no ONNX Runtime.
Part of [VisualEars / Shenava](https://shenava.app): offline, on-device, streaming Persian ASR for the Deaf/Hard-of-Hearing.

Quality: **near-exact** (12.11% golden-6669 WER). **RTF ≈ 0.027** (30.0 ms/chunk on x86 CPU; chunk = 1.12 s audio).

## ⚠️ Requires patched tract (until upstreamed)
Stock tract rejects NeMo cache-aware streaming graphs in two inference-layer spots. Fix = a **23-line, 2-file patch**
(`shenava_tract_streaming.patch`, included) — PR open at **[sonos/tract#2441](https://github.com/sonos/tract/pull/2441)**.
Build tract with the patch, then load `model.onnx` normally. The graph itself is valid (identical decode to ONNX Runtime).

## Streaming contract
Per-step inputs / outputs (fixed shapes, greedy CTC):
- `audio_signal` `[1,80,121]` — un-normalized log-mel chunk (NeMo featurizer, `normalize=NA`)
- `length` `[1]` i64 — true valid frames in the chunk
- `cache_last_channel` `[1,16,70,256]`, `cache_last_time` `[1,16,256,8]`, `cache_last_channel_len` `[1]` i64 — start zeros / 0
-`logprobs` `[1,T',1025]` + next caches

**Chunking:** feed 121-mel-frame chunks, shift 112 (9-frame pre-encode overlap). First chunk is 105 → pad to 121; pad the tail too; pass the true `length`. Thread the `*_next` caches back each step (cast `cache_last_channel_len_next` to i64). **Greedy CTC: carry the previous token across chunk boundaries** when collapsing repeats; blank id = 1024; map via `tokens.txt`; `▁`→space.

## Numbers are spoken-form → ITN
The model spells numbers (هشت not ۸). Apply `persian_itn.py` at display for spoken→Persian-digit (cardinals + هزار/میلیون/میلیارد + «و» + compounds).

## Shenava-1 family (all native-Rust streaming)
- [Koochik 114M](https://huggingface.co/Reza2kn/Shenava-Koochik-v1.0-tract-streaming) — flagship
- [Rizeh 32M](https://huggingface.co/Reza2kn/Shenava-Rizeh-v1.0-tract-streaming) — mid
- [Rizeh-Pizeh 6.9M](https://huggingface.co/Reza2kn/Shenava-Rizeh-Pizeh-v1.0-tract-streaming) — tiniest


## Quantized variants — int4 / int8 (NEW)

Our streaming support is **merged into tract main** ([sonos/tract#2441](https://github.com/sonos/tract/pull/2441)), which also ships int4 (`MatMulNBits` -> Q4_0) and int8 GEMM kernels. So tract main runs quantized versions of this streaming model:

| file | precision | size | notes |
|---|---|---|---|
| `model.onnx` | fp32 | 116MB | reference |
| `model.int4.onnx` | **int4** (MatMulNBits / Q4_0, weight-only) | **40MB** | ⭐ recommended — 2.9x smaller, ~fp32 speed, **byte-identical** decode |
| `model.int8.onnx` | int8 (matmul-only, MatMulInteger) | 49MB | byte-identical; slower on small-batch streaming (per-matmul `DynamicQuantizeLinear`) — best for large-batch / offline, or CPUs where it wins |

Both quants decode **byte-identically** to fp32. For edge/on-device streaming, use **`model.int4.onnx`** (weight-only, no per-matmul activation quant). Needs **tract main** — the streaming fixes are upstream now, so the bundled `.patch` is no longer required.