CoolFace
Modelpublic

melsmm/Spell-Corrector-RU-4B

sourceHugging Faceapache-2.0updated 4mo agoView on Hugging Face
3likes911downloads
Model Card

Spell-Corrector-RU-4B

Spell-Corrector-RU-4B — языковая модель для автоматического исправления орфографических, пунктуационных и регистровых ошибок в русскоязычных текстах.

Модель дообучена на базе `RefalMachine/RuadaptQwen3-4B-Instruct` (адаптированная под русский язык версия `Qwen/Qwen3-4B-Instruct-2507`) методом LoRA в фреймворке LLaMA-Factory. LoRA-адаптер уже смержен с базовой моделью — её можно использовать напрямую.

📦 Код, ноутбуки и полное описание проекта: github.com/melsmm/llm-spell-corrector 📚 Датасеты для обучения: `melsmm/spell-correction-ru`

Для чего модель

Модель принимает текст с ошибками и возвращает его исправленную версию. Она умеет:

  • —🔤 исправлять орфографические ошибки и опечатки;
  • —❓ восстанавливать и исправлять пунктуацию;
  • —🔠 восстанавливать регистр букв (заглавные/строчные) и букву «ё».

Основное преимущество перед существующими решениями (например, SAGE на архитектуре T5) — высокая скорость инференса (через vLLM, ~в 6 раз быстрее), простота внедрения в продакшен через OpenAI-совместимый API и лёгкость дообучения под новые домены с помощью LoRA.

На чём обучалась

Обучение проходило в две стадии:

СтадияДатасетОбъёмОписание
Stage 1synth_spell_correction_1m~1 млнСинтетические ошибки, внесённые в чистые корпусы (nerus, gazeta, wikipedia) с помощью SAGE (SBSC, CharAug, WordAug) и собственного алгоритма пунктуационной порчи.
Stage 2spell_correction_30k~30 тыс.Объединение готовых пар «ошибка → исправление» из открытых датасетов (RUSpellRU, MultidomainGold, GEC).

Сначала модель учится на большом объёме разнообразных синтетических ошибок, затем «дошлифовывается» на меньшем, но более качественном наборе реальных пар. Оба датасета доступны в репозитории `melsmm/spell-correction-ru`.

Гиперпараметры LoRA: rank=32, alpha=64, dropout=0, bf16, cutoff length=4000.

Использование

Промпт

Модель ожидает следующий формат запроса:

Исходный текст:
{текст с ошибками}

Отредактируй исходный текст, исправив ошибки.

Рекомендуемые параметры генерации: temperature=0.1, top_p=0.7.

Через transformers

python
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "melsmm/Spell-Corrector-RU-4B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", device_map="auto")

text = "привет как дила, что делаеш севодня"
prompt = f"Исходный текст:\n{text}\n\nОтредактируй исходный текст, исправив ошибки."

messages = [{"role": "user", "content": prompt}]
inputs = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True, return_tensors="pt"
).to(model.device)

outputs = model.generate(inputs, max_new_tokens=512, temperature=0.1, top_p=0.7, do_sample=True)
print(tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True))

Через vLLM (рекомендуется для продакшена)

Запуск OpenAI-совместимого сервера:

bash
vllm serve melsmm/Spell-Corrector-RU-4B \
    --gpu-memory-utilization 0.95 \
    --host 0.0.0.0 \
    --port 9900 \
    --served-model-name spell_correction \
    --max-model-len 4096

Обращение к серверу:

python
from openai import OpenAI

client = OpenAI(base_url="http://localhost:9900/v1", api_key="EMPTY")

text = "привет как дила"
resp = client.chat.completions.create(
    model="spell_correction",
    messages=[{"role": "user", "content":
        f"Исходный текст:\n{text}\n\nОтредактируй исходный текст, исправив ошибки."}],
    temperature=0.1,
    top_p=0.7,
)
print(resp.choices[0].message.content)

Качество

Оценка на бенчмарке `ai-forever/spellcheck_punctuation_benchmark` (F1 по орфографии / пунктуации / регистру):

RUSpellRU

ModelF1 (spell)F1 (punc)F1 (case)
Spell-Corrector-RU-4B64.784.594.2
sage-fredt5-large84.586.894.7
gpt-464.083.290.9
gpt-3.5-turbo42.773.779.0

MultidomainGold

ModelF1 (spell)F1 (punc)F1 (case)
Spell-Corrector-RU-4B62.666.580.0
sage-fredt5-large77.667.779.3
gpt-437.056.060.0
gpt-3.5-turbo27.136.249.1

MedSpellchecker

ModelF1 (spell)F1 (punc)F1 (case)
Spell-Corrector-RU-4B42.870.476.3
sage-fredt5-large72.370.382.1
gpt-449.671.967.1
gpt-3.5-turbo22.359.832.3

GitHubTypoCorpusRu

ModelF1 (spell)F1 (punc)F1 (case)
Spell-Corrector-RU-4B49.734.845.8
sage-fredt5-large59.542.642.7
gpt-435.738.230.2
gpt-3.5-turbo29.428.725.3
Полные таблицы (Precision / Recall / F1 + сравнение со Stage 1) — в репозитории проекта.

Скорость инференса

На RUSpellRU (2008 примеров) через vLLM: 45 с (0.022 с/пример) против 284 с (0.141 с/пример) у sage-fredt5-large — ~в 6 раз быстрее.

Ограничения

  • —Модель уступает SAGE по орфографии на ряде доменов, но конкурентна по пунктуации и регистру.
  • —Качество может снижаться на узкоспециализированных доменах (например, медицина) — там рекомендуется дообучение под домен с помощью LoRA.
  • —Модель работает с русским языком; для других языков не предназначена.

Ссылки

  • —🔗 Проект на GitHub: https://github.com/melsmm/llm-spell-corrector
  • —🤗 Датасеты: https://huggingface.co/datasets/melsmm/spell-correction-ru
  • —🧩 Базовая модель: https://huggingface.co/RefalMachine/RuadaptQwen3-4B-Instruct