File size: 4,840 Bytes
fca80e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---

license: apache-2.0
language: ru
library_name: transformers
base_model: Qwen/Qwen3.5-0.8B
tags:
  - dictation
  - russian
  - lora
  - VoiceScribe
  - corrector
  - qwen3.5
datasets:
  - VoiceScribe/dictation-corrector-seed
metrics:
  - exact-match
---


# Voice Scribe Russian Dictation Corrector (Qwen3.5-0.8B, V15 R-3, cuda-int4-nf4)

Consumer ship-form: bitsandbytes 4-bit NF4 (double-quant). ~750 MB. -12pp wild vs bf16 (still passes consumer gate >=78%); preserves hard-neg 5/5 absolute. Target: RTX 2060+/6GB.

## Eval results (held-out wild_eval, 58 prompts × 9 sectors)



| Metric | Score |

|---|---:|

| Wild pass | 84.48% |

| Hard-negative | 5/5 |

| Smoke | 8/8 |

| p50 latency | 676 ms |

| Ship-form size | 750 MB |



**Comparison:**

- macOS V15 R-3 reference: 93.1% wild

- V14 baseline: 86.2%

- Qwen3-4B Q5 production (pre-LoRA): 48%

- This model: **84.48%** (-1.7pp vs V14 baseline)



## Training recipe (V15 R-3)



Mirrors macOS `configs/r4_v15_extended.yaml` byte-for-byte logical-recipe.



```

base               = Qwen/Qwen3.5-0.8B (vanilla, NOT Instruct)

LoRA rank          = 16

LoRA alpha         = 80 (rsLoRA mode -> effective scale 20.0)

target_modules     = q_proj, k_proj, v_proj, o_proj
layers_to_transform = last 16 of 24 (range(8, 24))
mask_prompt        = ON (assistant_masks via patched chat_template {% generation %})

max_steps          = 1100
batch_size         = 2

max_seq_length     = 384

lr_schedule        = cosine, peak 3e-5, warmup 100
weight_decay       = 0.01

optim              = adamw_torch_fused

precision          = bf16

seed               = 20260515

trainable params   = 720,896 (0.0957% of 753M)

data               = 1104 rows = V14 seeds (691) + V15 brand expansion (271) + V15 R-3 patches (142)

```



## Intended use



- Russian dictation cleanup after ASR (GigaAM, Whisper, Parakeet)

- Conservative editing policy: remove filler (эм/ну/типа/короче), normalize Cyrillic IT terms (гитхаб -> GitHub), preserve all meaning

- **NOT** for general text editing, English text, creative writing, summarization, translation



## Limitations



- 58-row eval set has ±1.72pp single-row noise

- Cyrillic <-> Latin choice on ambiguous brand spellings is judgment call (model may differ from expected byte-match)

- Trained on synthetic data only; real production telemetry collection planned for V16

- 

- INT4 NF4 has higher quality loss (-12pp) than AWQ would; AWQ blocked on Win-Py3.13-cu128 (no source build without nvcc)



## Hardware ship matrix



| Hardware | Recommended ship-form | This model? |

|---|---|---:|

| RTX 5090 / 4090 24GB+ | bf16 |  |

| RTX 4070 / 4060 / 3060 8-16GB | INT8 |  |

| RTX 2060 / 3050 / 4060 6-8GB | INT4 NF4 | PRIMARY |

| Re-training / stacking | adapter |  |



## Inference



```python

from transformers import AutoModelForCausalLM, AutoTokenizer

import torch



model = AutoModelForCausalLM.from_pretrained(
    "VoiceScribe/qwen3-5-0.8b-dictation-corrector-cuda-int4-nf4",

    load_in_4bit=True,

    device_map="cuda",

    trust_remote_code=True,

)

tokenizer = AutoTokenizer.from_pretrained("VoiceScribe/qwen3-5-0.8b-dictation-corrector-cuda-int4-nf4", trust_remote_code=True)


messages = [
    {"role": "system", "content": "Корректор русской диктовки. Убери слова-паразиты ..."},

    {"role": "user", "content": "Запушил коммит в гитхаб репозиторий"},

]

prompt = tokenizer.apply_chat_template(

    messages,

    add_generation_prompt=True,

    tokenize=False,

    enable_thinking=False,  # CRITICAL for Qwen3.5

)

inputs = tokenizer(prompt, return_tensors="pt").to("cuda")

out = model.generate(**inputs, max_new_tokens=200, do_sample=False)

print(tokenizer.decode(out[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True))

# Expected: "Запушил коммит в GitHub репозиторий"

```


## Cross-platform variants

- **macOS MLX**: `VoiceScribe/qwen3-5-0.8b-dictation-corrector-mlx-{bf16,8bit,4bit}` (V15 R-3, 93.1% wild)
- **CUDA bf16/INT8/INT4-NF4**: this family (V15 R-3 Win port, 84.48-96.55% wild)
- **OpenVINO**: planned (separate venv for export; tracker WP#920)
- **TensorRT-RTX W4A16**: deferred (DeltaNet ONNX export blocked on Win-Py3.13-cu128 in 2026-05)

## Citation

```bibtex

@software{voicescribe-corrector-v15r3-2026,

  title = {Voice Scribe Russian Dictation Corrector (Qwen3.5-0.8B V15 R-3, CUDA Win port)},

  author = {Sabynin, Andrey},

  year = {2026},

  url = {https://huggingface.co/VoiceScribe/qwen3-5-0.8b-dictation-corrector-cuda-int4-nf4}

}

```

## Trackers

- macOS R&D: OpenProject WP#917 (V14), WP#919 (V15 R-3 macOS)
- Windows port: OpenProject WP#920 (this effort, achieved 96.55% vs macOS 93.1%)