melsmm commited on
Commit
c388d55
·
verified ·
1 Parent(s): ca3ac52

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +171 -5
README.md CHANGED
@@ -1,11 +1,177 @@
1
  ---
2
- license: mit
3
- language: ru
4
- pipeline_tag: text-generation
5
- base_model: RefalMachine/RuadaptQwen3-4B-Instruct
 
6
  datasets:
7
  - melsmm/spell-correction-ru
 
 
 
8
  tags:
9
  - spell-correction
 
 
 
10
  - russian
11
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ license: apache-2.0
3
+ language:
4
+ - ru
5
+ base_model:
6
+ - RefalMachine/RuadaptQwen3-4B-Instruct
7
  datasets:
8
  - melsmm/spell-correction-ru
9
+ - ai-forever/spellcheck_punctuation_benchmark
10
+ pipeline_tag: text-generation
11
+ library_name: transformers
12
  tags:
13
  - spell-correction
14
+ - spelling-correction
15
+ - punctuation-restoration
16
+ - grammatical-error-correction
17
  - russian
18
+ - qwen3
19
+ - lora
20
+ ---
21
+
22
+ # Spell-Corrector-RU-4B
23
+
24
+ **Spell-Corrector-RU-4B** — языковая модель для **автоматического исправления орфографических, пунктуационных и регистровых ошибок** в русскоязычных текстах.
25
+
26
+ Модель дообучена на базе [`RefalMachine/RuadaptQwen3-4B-Instruct`](https://huggingface.co/RefalMachine/RuadaptQwen3-4B-Instruct) (адаптированная под русский язык версия [`Qwen/Qwen3-4B-Instruct-2507`](https://huggingface.co/Qwen/Qwen3-4B-Instruct-2507)) методом **LoRA** в фреймворке [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory). LoRA-адаптер уже **смержен** с базовой моделью — её можно использовать напрямую.
27
+
28
+ 📦 **Код, ноутбуки и полное описание проекта:** [github.com/melsmm/llm-spell-corrector](https://github.com/melsmm/llm-spell-corrector)
29
+ 📚 **Датасеты для обучения:** [`melsmm/spell-correction-ru`](https://huggingface.co/datasets/melsmm/spell-correction-ru)
30
+
31
+ ## Для чего модель
32
+
33
+ Модель принимает текст с ошибками и возвращает его исправленную версию. Она умеет:
34
+
35
+ - 🔤 исправлять **орфографические** ошибки и опечатки;
36
+ - ❓ восстанавливать и исправлять **пунктуацию**;
37
+ - 🔠 восстанавливать **регистр** букв (заглавные/строчные) и букву «ё».
38
+
39
+ Основное преимущество перед существующими решениями (например, [SAGE](https://github.com/ai-forever/sage) на архитектуре T5) — **высокая скорость инференса** (через [vLLM](https://github.com/vllm-project/vllm), ~в 6 раз быстрее), простота внедрения в продакшен через OpenAI-совместимый API и лёгкость дообучения под новые домены с помощью LoRA.
40
+
41
+ ## На чём обучалась
42
+
43
+ Обучение проходило в **две стадии**:
44
+
45
+ | Стадия | Датасет | Объём | Описание |
46
+ | --- | --- | --- | --- |
47
+ | **Stage 1** | `synth_spell_correction_1m` | ~1 млн | Синтетические ошибки, внесённые в чистые корпусы (`nerus`, `gazeta`, `wikipedia`) с помощью [SAGE](https://github.com/ai-forever/sage) (`SBSC`, `CharAug`, `WordAug`) и собственного алгоритма пунктуационной порчи. |
48
+ | **Stage 2** | `spell_correction_30k` | ~30 тыс. | Объединение готовых пар «ошибка → исправление» из открытых датасетов (RUSpellRU, MultidomainGold, GEC). |
49
+
50
+ Сначала модель учится на большом объёме разнообразных синтетических ошибок, затем «дошлифовывается» на меньшем, но более качественном наборе реальных пар. Оба датасета доступны в репозитории [`melsmm/spell-correction-ru`](https://huggingface.co/datasets/melsmm/spell-correction-ru).
51
+
52
+ **Гиперпараметры LoRA:** rank=32, alpha=64, dropout=0, bf16, cutoff length=4000.
53
+
54
+ ## Использование
55
+
56
+ ### Промпт
57
+
58
+ Модель ожидает следующий формат запроса:
59
+
60
+ ```
61
+ Исходный текст:
62
+ {текст с ошибками}
63
+
64
+ Отредактируй исходный текст, исправив ошибки.
65
+ ```
66
+
67
+ Рекомендуемые параметры генерации: `temperature=0.1`, `top_p=0.7`.
68
+
69
+ ### Через `transformers`
70
+
71
+ ```python
72
+ from transformers import AutoModelForCausalLM, AutoTokenizer
73
+
74
+ model_name = "melsmm/Spell-Corrector-RU-4B"
75
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
76
+ model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", device_map="auto")
77
+
78
+ text = "привет как дила, что делаеш севодня"
79
+ prompt = f"Исходный текст:\n{text}\n\nОтредактируй исходный текст, исправив ошибки."
80
+
81
+ messages = [{"role": "user", "content": prompt}]
82
+ inputs = tokenizer.apply_chat_template(
83
+ messages, add_generation_prompt=True, return_tensors="pt"
84
+ ).to(model.device)
85
+
86
+ outputs = model.generate(inputs, max_new_tokens=512, temperature=0.1, top_p=0.7, do_sample=True)
87
+ print(tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True))
88
+ ```
89
+
90
+ ### Через vLLM (рекомендуется для продакшена)
91
+
92
+ Запуск OpenAI-совместимого сервера:
93
+
94
+ ```bash
95
+ vllm serve melsmm/Spell-Corrector-RU-4B \
96
+ --gpu-memory-utilization 0.95 \
97
+ --host 0.0.0.0 \
98
+ --port 9900 \
99
+ --served-model-name spell_correction \
100
+ --max-model-len 4096
101
+ ```
102
+
103
+ Обращение к серверу:
104
+
105
+ ```python
106
+ from openai import OpenAI
107
+
108
+ client = OpenAI(base_url="http://localhost:9900/v1", api_key="EMPTY")
109
+
110
+ text = "привет как дила"
111
+ resp = client.chat.completions.create(
112
+ model="spell_correction",
113
+ messages=[{"role": "user", "content":
114
+ f"Исходный текст:\n{text}\n\nОтредактируй исходный текст, исправив ошибки."}],
115
+ temperature=0.1,
116
+ top_p=0.7,
117
+ )
118
+ print(resp.choices[0].message.content)
119
+ ```
120
+
121
+ ## Качество
122
+
123
+ Оценка на бенчмарке [`ai-forever/spellcheck_punctuation_benchmark`](https://huggingface.co/datasets/ai-forever/spellcheck_punctuation_benchmark) (F1 по орфографии / пунктуации / регистру):
124
+
125
+ ### RUSpellRU
126
+
127
+ | Model | F1 (spell) | F1 (punc) | F1 (case) |
128
+ | --- | --: | --: | --: |
129
+ | **Spell-Corrector-RU-4B** | 64.7 | 84.5 | 94.2 |
130
+ | sage-fredt5-large | 84.5 | 86.8 | 94.7 |
131
+ | gpt-4 | 64.0 | 83.2 | 90.9 |
132
+ | gpt-3.5-turbo | 42.7 | 73.7 | 79.0 |
133
+
134
+ ### MultidomainGold
135
+
136
+ | Model | F1 (spell) | F1 (punc) | F1 (case) |
137
+ | --- | --: | --: | --: |
138
+ | **Spell-Corrector-RU-4B** | 62.6 | 66.5 | 80.0 |
139
+ | sage-fredt5-large | 77.6 | 67.7 | 79.3 |
140
+ | gpt-4 | 37.0 | 56.0 | 60.0 |
141
+ | gpt-3.5-turbo | 27.1 | 36.2 | 49.1 |
142
+
143
+ ### MedSpellchecker
144
+
145
+ | Model | F1 (spell) | F1 (punc) | F1 (case) |
146
+ | --- | --: | --: | --: |
147
+ | **Spell-Corrector-RU-4B** | 42.8 | 70.4 | 76.3 |
148
+ | sage-fredt5-large | 72.3 | 70.3 | 82.1 |
149
+ | gpt-4 | 49.6 | 71.9 | 67.1 |
150
+ | gpt-3.5-turbo | 22.3 | 59.8 | 32.3 |
151
+
152
+ ### GitHubTypoCorpusRu
153
+
154
+ | Model | F1 (spell) | F1 (punc) | F1 (case) |
155
+ | --- | --: | --: | --: |
156
+ | **Spell-Corrector-RU-4B** | 49.7 | 34.8 | 45.8 |
157
+ | sage-fredt5-large | 59.5 | 42.6 | 42.7 |
158
+ | gpt-4 | 35.7 | 38.2 | 30.2 |
159
+ | gpt-3.5-turbo | 29.4 | 28.7 | 25.3 |
160
+
161
+ > Полные таблицы (Precision / Recall / F1 + сравнение со Stage 1) — в [репозитории проекта](https://github.com/melsmm/llm-spell-corrector#-результаты).
162
+
163
+ ### Скорость инференса
164
+
165
+ На RUSpellRU (2008 примеров) через vLLM: **45 с** (0.022 с/пример) против **284 с** (0.141 с/пример) у sage-fredt5-large — **~в 6 раз быстрее**.
166
+
167
+ ## Ограничения
168
+
169
+ - Модель уступает SAGE по орфографии на ряде доменов, но конкурентна по пунктуации и регистру.
170
+ - Качество может снижаться на узкоспециализированных доменах (например, медицина) — там рекомендуется дообучение под домен с помощью LoRA.
171
+ - Модель работает с русским языком; для других языков не предназначена.
172
+
173
+ ## Ссылки
174
+
175
+ - 🔗 **Проект на GitHub:** https://github.com/melsmm/llm-spell-corrector
176
+ - 🤗 **Датасеты:** https://huggingface.co/datasets/melsmm/spell-correction-ru
177
+ - 🧩 **Базовая модель:** https://huggingface.co/RefalMachine/RuadaptQwen3-4B-Instruct