File size: 6,805 Bytes
957f43f
a30e544
86d212a
a30e544
 
 
ec19d2d
51c1ba2
 
 
 
 
 
 
 
 
 
 
 
 
957f43f
a30e544
51c1ba2
 
8ff74dc
51c1ba2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e2df296
51c1ba2
 
 
 
 
 
 
 
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
---
library_name: transformers
license: mit
license_link: https://huggingface.co/Qwen/Qwen3.5-0.8B/blob/main/LICENSE
pipeline_tag: image-text-to-text
base_model:
- Qwen/Qwen3.5-0.8B
language:
- en
- fr
- de
- es
- it
- pl
- nl
- ro
- hu
- el
tags:
- text-generation-inference
---

# Qwen3.5-0.8B-Trimmed

A vocabulary-trimmed version of Qwen3.5-0.8B with **41.3% fewer tokens**, keeping only Latin (EN, FR, DE, ES, IT, PT, NL, PL, RO, HU) and Greek scripts while preserving all original capabilities in those languages.

---

## πŸ“Š Trimming Statistics

| Metric | Original | Trimmed | Gain |
|--------|----------|---------|------|
| Vocabulary size | 248,077 tokens | 145,572 tokens | βˆ’41.3% |
| File size | 3,876.2 MB | 3,475.8 MB | βˆ’400.4 MB (10.33%) |
| Parameters | 2,032.2 M | 2,032.2 M | unchanged |
| Architecture | Dense | Dense | unchanged |

### Original vocabulary distribution by script

| Script / Language | Tokens | % of vocabulary | Status |
|-------------------|--------|------------------|--------|
| Latin (EN, FR, DE, ES, IT, PT, NL, PL, RO, HU) | 144,029 | 58.1% | βœ… Kept |
| Chinese / Japanese / Korean | 65,722 | 26.5% | ❌ Removed |
| Cyrillic (RU, UK, BG, SR, MK) | 18,580 | 7.5% | ❌ Removed |
| Arabic | 8,817 | 3.6% | ❌ Removed |
| Thai | 5,741 | 2.3% | ❌ Removed |
| Greek | 1,543 | 0.6% | βœ… Kept |
| Devanagari (Hindi, Nepali, Marathi) | 959 | 0.4% | ❌ Removed |
| Bengali | 531 | 0.2% | ❌ Removed |
| Hebrew | 520 | 0.2% | ❌ Removed |
| Tamil | 268 | 0.1% | ❌ Removed |
| Malayalam | 205 | 0.1% | ❌ Removed |
| Telugu | 188 | 0.1% | ❌ Removed |
| Georgian | 186 | 0.1% | ❌ Removed |
| Burmese | 147 | 0.1% | ❌ Removed |
| Kannada | 144 | 0.1% | ❌ Removed |
| Gujarati | 116 | 0.0% | ❌ Removed |
| Armenian | 88 | 0.0% | ❌ Removed |
| Khmer | 79 | 0.0% | ❌ Removed |
| Sinhala | 77 | 0.0% | ❌ Removed |
| Gurmukhi (Punjabi) | 65 | 0.0% | ❌ Removed |
| Lao | 37 | 0.0% | ❌ Removed |
| Ethiopic (Ge'ez) | 25 | 0.0% | ❌ Removed |
| Tibetan | 10 | 0.0% | ❌ Removed |

---

## 🎯 Why Trim?

### Eliminating random Asian characters

One of the most common issues with general multilingual models is the sporadic appearance of Chinese, Japanese, or Korean characters in outputs meant for Latin-script languages β€” even when the prompt has nothing to do with those languages. This happens because the model occasionally explores parts of the vocabulary that are never actively used for the target task. By permanently removing those tokens, this issue is **resolved at a structural level**: the model simply cannot generate them anymore, as they no longer exist in its output space.

### Faster generation and prompt processing

Reducing the vocabulary size has a direct and measurable impact on speed:

- **Prompt processing (prefill)** β€” The embedding matrix is smaller, which reduces load time and memory access during the prefill phase.
- **Token-by-token generation (decoding)** β€” The search for the best token in the output distribution (softmax + argmax) operates over a **41.3% smaller space**. This translates into faster decoding, especially on hardware where the softmax computation is the bottleneck.

### Reduced memory footprint

- **Storage** β€” The model file is **400.4 MB smaller** (10.33% reduction).
- **RAM / VRAM** β€” The embedding matrix (`lm_head` + `embed_tokens`) occupies proportionally less memory. On systems with tight memory constraints, this reduction can make it possible to run the model where it previously wouldn't fit, or free up memory for other processes.

### Potential performance improvement (1–3%)

Trimming the vocabulary may lead to a slight improvement in overall model performance on the retained languages. The hypothesis is that reducing the output space concentrates probability mass more effectively on relevant tokens, reducing the statistical noise introduced by thousands of tokens that are never used in the task context. Gains in the range of **1–3%** may be observed on Latin-language benchmarks (perplexity, answer accuracy, coherence).

---

## πŸ”§ Methodology

Trimming was performed using the [vocab-trimmer] (release soon) tool, which follows this pipeline:

1. **Vocabulary analysis** β€” Each token in the original tokenizer is classified by Unicode script (Latin, CJK, Cyrillic, Arabic, etc.).
2. **Selective filtering** β€” Only Latin and Greek scripts are kept. Special tokens (EOS, BOS, PAD, etc.) and multimodal tokens are always preserved.
3. **ID remapping** β€” A continuous `old_id β†’ new_id` mapping is built to compact the vocabulary with no gaps.
4. **Weight slicing** β€” Only the rows of the embedding matrices corresponding to retained tokens are extracted. The `lm_head` and `embed_tokens` layers are recalibrated.
5. **Configuration reconstruction** β€” `tokenizer_config.json`, `tokenizer.json`, `config.json`, and the vocabulary are rebuilt with the new IDs. Chat templates and special tokens are preserved verbatim.
6. **Verification** β€” Consistency between tokenizer and weights is validated (special token IDs < vocab_size, functional chat template, etc.).

---

## ⚠️ Limitations

- **Unsupported languages** β€” This model **cannot** generate text in Chinese, Japanese, Korean, Russian, Arabic, Thai, Hindi, Bengali, Hebrew, or any other language whose tokens were removed. Prompts in these languages will not be understood correctly.
- **Supported languages** β€” Functional languages include English, French, German, Spanish, Italian, Portuguese, Dutch, Polish, Romanian, Hungarian, and Greek.
- **Code & Math** β€” Programming and mathematical tokens are preserved (they primarily use Latin encoding). No loss of capability is expected in these domains.
- **Emojis & Symbols** β€” Common Unicode symbols and emojis are retained if they fall within the selected scripts.

---


## πŸ’‘ Usage

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "your-namespace/Qwen3.5-0.8B-Trimmed"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")

inputs = tokenizer("Explain quantum computing in simple terms.", return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
```

---

## πŸ“ License

This model is derived from [Qwen/Qwen3.5-0.8B](https://huggingface.co/Qwen/Qwen3.5-0.8B) and follows its original license. The trimming tool [vocab-trimmer]release soon is available under the MIT License.

---

## πŸ”— References

- **Original model** : [Qwen/Qwen3.5-0.8B](https://huggingface.co/Qwen/Qwen3.5-0.8B)
- **Trimming tool** : [vocab-trimmer] soon
- **Qwen Team** : [Alibaba Cloud – Qwen Team](https://qwenlm.github.io/)