SozKZ GEC: Kazakh Grammar Error Correction
Collection
Grammar error correction models and datasets for Kazakh — Llama GEC (300M, 600M), mT5 GEC, morphology models • 10 items • Updated
A grammar error correction model for Kazakh language, fine-tuned from sozkz-core-llama-300m-kk-base-v1 on 200K+ synthetic GEC examples with 14 error-type tags.
The model uses special tags to identify the type of grammar error:
<сингармонизм> Қабырғаларде ұлттық өрнектер бейнеленген.
→ Қабырғаларда ұлттық өрнектер бейнеленген.
| Tag | Description | Kazakh Term | Example |
|---|---|---|---|
<сингармонизм> |
Vowel harmony | Дауысты дыбыс үндестігі | де→да, сінда→сында |
<септік> |
Case suffixes | Септік жалғаулары | жека→жеке |
<жіктік> |
Personal endings | Жіктік жалғаулары | қолданыламыз→қолданылады |
<болымсыз> |
Negation | Болымсыз түрі | remove extra емес |
<шақ> |
Verb tense | Етістік шақтары | жатаады→жатады |
<сөз_тәртібі> |
Word order | Сөз тәртібі | reorder words |
<құрмалас> |
Complex sentences | Құрмалас сөйлемдер | join/reorder clauses |
<тәуелдік> |
Possessive | Тәуелдік жалғаулары | түпкы→түпкі |
<шылау> |
Postpositions | Шылаулар | турелі→туралы, ушін→үшін |
<көптік> |
Plural | Көптік жалғаулары | Студенттар→Студенттер |
<жалғау> |
General suffixes | Жалғаулар | достарым→достарыммен |
<қате> |
Typos/noise | Қателер | Қазақстнаның→Қазақстанның |
<грамматика> |
General grammar | Жалпы грамматика | боліседі→бөліседі |
<таза> |
Clean (no errors) | Таза мәтін | returns unchanged |
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "stukenov/sozkz-core-llama-300m-kk-gec-v1"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16)
def correct(tag, text):
prompt = f"<{tag}> {text}\n\u2192 "
inputs = tokenizer(prompt, return_tensors="pt")
with torch.no_grad():
out = model.generate(**inputs, max_new_tokens=150, temperature=0.3, top_p=0.9, do_sample=True)
result = tokenizer.decode(out[0], skip_special_tokens=True)
if "\u2192 " in result:
result = result.split("\u2192 ", 1)[1]
return result.split("\n")[0].strip()
# Fix vowel harmony
print(correct("сингармонизм", "Мектептің кітапханасінда көптеген кітаптар бар."))
# Мектептің кітапханасында көптеген кітаптар бар.
# Fix typos
print(correct("қате", "Қазақстнаның астанасы Астна қаласы."))
# Қазақстанның астанасы - Астана қаласы.
# Fix postposition
print(correct("шылау", "Тіл турелі толғаныс жазды."))
# Тіл туралы толғаныс жазды.
# General grammar
print(correct("грамматика", "Мен кеше дүкенге барды."))
# Мен кеше дүкенге бардым.
| Tag | Test | Input | Output | Result |
|---|---|---|---|---|
| шылау | турелі→туралы | Тіл турелі толғаныс жазды | Тіл туралы толғаныс жазды | PASS |
| шылау | ушін→үшін | Ол мектеп ушін көп жұмыс істеді | Ол мектеп үшін көп жұмыс істеді | PASS |
| қате | typo fix | Қазақстнаның астанасы Астна | Қазақстанның астанасы Астана | PASS |
| болымсыз | extra negation | Бұл кітап қызықты емес кітап | Бұл кітап қызықты кітап | PASS |
| көптік | тар→тер | Студенттар университетте | Студенттер университетте | PASS |
| сингармонизм | сінда→сында | кітапханасінда | кітапханасында | PASS |
| жіктік | ламыз→лады | қолданыламыз | қолданылады | PASS |
| таза | no change | Қазақстан Орталық Азиядағы ең ірі мемлекет | (unchanged) | PASS |
| Detail | Value |
|---|---|
| Base model | sozkz-core-llama-300m-kk-base-v1 |
| Dataset | sozkz-corpus-synthetic-kk-gec-v1 (~200K balanced) |
| Epochs | 1 |
| Hardware | 4x RTX 4090 |
| Training time | ~18 minutes |
| Final loss | 0.22 |
| Cost | ~$0.30 |
<TAG> input text with errors
→
The model generates the corrected text after the arrow.
Apache 2.0
Base model
stukenov/sozkz-core-llama-300m-kk-base-v1