QiDeBERTa for Chinese Spelling Correction (CSC)
Model Name: QiDeBERTa-CSC
Language: Chinese
任务方向: 中文拼写纠错(Chinese Spelling Correction, CSC)
Architecture: DeBERTa V3 (modified)
Author: Morton Li
License: Apache-2.0
Tags: deberta
, mlm
, chinese
, language-modeling
, robust-nlp
, general-purpose
, pretraining
, spelling-correction
, csc
, fine-tuning
, masked-language-modeling
Model Description
QiDeBERTa-CSC 是专为中文拼写纠错任务优化的语言模型,基于预训练模型 QiDeBERTa-base
进行多阶段精调,具备高鲁棒性与纠错精度。该模型支持纠正真实文本中的错别字,适用于内容审核、教育批改等场景。
本模型在多个主流拼写纠错评测基准(如 SIGHAN15、CSCD-NS)中显著优于现有主流拼写纠错模型,并通过 Token-Level
评估指标体系精准度量模型改错能力,避免常规评估体系算法与实际使用体验存在较大偏差的问题。
Model Architecture
- 基础架构:DeBERTa V3
- 编码器层数:12层
- 隐藏维度:768
- 注意力头数:12
- 任务头:
- MaskedLanguageModelingHead
Tokenizer
QiDeBERTa-CSC 沿用上游模型 SentencePiece 分词器,对《通用规范汉字表》一级、二级、三级汉字实现 100% 字符覆盖率。
分词器可通过 HuggingFace Tokenizer API 直接加载,无需额外训练。
Pretraining Objectives
QiDeBERTa-CSC 使用 Masked Language Modeling 作为核心训练目标,配合3.8M 条高质量样本 ,辅以合成数据样本以提高模型泛化能力。通过不同类型的任务头进行混合建模,模型具备良好的语义鲁棒性与改错精度。
此外,引入目标导向的训练损失调控机制,强化模型在错字与原始输出接近场景下的学习效果,进一步提升其泛用性能。
所有语料均为公开来源或基于合规机制采集经清洗与筛选,确保数据多样性与覆盖性。
Evaluation
本模型评估采用 Token-Level 评估标准,强调精准、严谨、一致,避免常规评估指标算法与实际使用体验存在较大偏差的问题。该指标体系更贴近工业实际使用场景中的错误感知与容错要求,更能体现模型实际部署表现情况。
在该体系下进行 zero-shot 评估:
Task | Dataset | Accuracy | F1 | Precision | Recall |
---|---|---|---|---|---|
CSC | SIGHAN15 | 98.79% | 68.86% | 69.41% | 68.32% |
CSC | CSCD-NS | 99.39% | 63.71% | 64.67% | 63.84% |
在相同任务、相同平台、相同评分标准下,当前主流 SOTA 模型在 CSCD-NS zero-shot 测试中 F1 得分普遍低于 20%,QiDeBERTa 在鲁棒性与建模性能方面已具备优势。
Training Details
- Optimizer: AdamW (
weight_decay=0.01
, LayerNorm & bias权重例外) - Learning Rate:
3e-4
(任务头)warmup + 线性衰减,1.5e-5
(编码器)warmup + 线性衰减 - Batch Size: 32 (平摊至每张显卡后)
- Mixed Precision: ✅ 支持 (fp16)
- Gradient Checkpointing: ✅ 支持
- Hardware: NVIDIA L40s GPU cluster
How to Use
以下代码展示了如何使用模型进行推理并返回错别字位置与修正建议:
from transformers import AutoTokenizer, AutoModel, AutoModelForMaskedLM
tokenizer = AutoTokenizer.from_pretrained("Morton-Li/QiDeBERTa-CSC", trust_remote_code=True)
model = AutoModelForMaskedLM.from_pretrained("Morton-Li/QiDeBERTa-CSC", trust_remote_code=True)
# model = AutoModel.from_pretrained("Morton-Li/QiDeBERTa-CSC", trust_remote_code=True)
texts = [
"编码器模型不涉及自回归或迭代解码所以速度很快。",
"吸烟由害健康。" # 包含错字
]
outputs = model(**tokenizer(texts, padding=True)) # MaskedLMOutput[logits, hidden_states, attentions]
pred_list = tokenizer.decode(outputs.logits.argmax(dim=-1).cpu().numpy().tolist())
# 组装推理结果
results = []
for pred, orig in zip(pred_list, texts):
pred = pred[:len(orig)].replace(' ', '') # 对齐推理结果
diffs = [
{'index': i, 'input_character': o, 'correct_character': p}
for i, (o, p) in enumerate(zip(orig, pred)) if o != p
]
results.append({
'original': orig, # 原始文本
'correct': pred, # 纠正文本
'correction': diffs # 错别字列表
})
print(results)
"""
[{
'original': '编码器模型不涉及自回归或迭代解码所以速度很快。',
'correct': '编码器模型不涉及自回归或迭代解码所以速度很快。',
'correction': []
},
{
'original': '吸烟由害健康。',
'correct': '吸烟有害健康。',
'correction': [{
'index': 2,
'input_character': '由',
'correct_character': '有'
}]
}]
"""
Citation
If you find this project useful in your research, publications, software development, or any other work, please cite it as follows:
@misc{QiDeBERTa-CSC,
author = {Morton Li},
title = {QiDeBERTa-CSC: A Chinese Spelling Correction Model Based on QiDeBERTa},
year = {2025},
}
License
Apache License 2.0
- Downloads last month
- 2
Model tree for Morton-Li/QiDeBERTa-CSC
Base model
Morton-Li/QiDeBERTa-base