xurong123/ChineseErrorDetectorElectra

Model

2

stars

13

commits

1

linked in READMEs

Aug 17, 2026

updated

electra
endpoints_compatible
safetensors
token-classification
transformers

README

中文检错前筛模型:背景、训练、改造与结果摘要

This model is a character-level Chinese error detector presented in the paper CSRP: Chain-of-Thought Reasoning for Chinese Text Correction via Reinforcement Learning with Efficiency-Aware Rewards.

The official code is available in the ChineseErrorCorrector repository.

本文档概括本仓库在「纠错前筛」方向上的字级检测目标、数据与上游来源、训练与改造过程,以及阶段性评测与性能结论。操作级命令仍以 UPLOAD_AND_TRAIN.txtCHAR_PIPELINE.txt 为准。


1. 背景

工业里完整纠错往往依赖大模型,成本高、延迟大。常见做法是先用轻量模型判断「哪些字在对齐意义上可能有问题」,再决定是否送下游纠错。本仓库主线为 字级 TokenClassification:输入为带错误的 source 与参考 target 对,子词对齐到字后学习 0/1 标签;推理侧用 pipeline_char 等,按字级概率与阈值决定是否触发纠错链路。

任务与 TW-NLP 开源的 ChineseErrorCorrector 生态在数据谱系上一致:覆盖拼写、语法等多类现象;本仓库检测头为 判别式微调,不直接复现其生成式纠错大模型。


2. 参考的上游项目与预训练模型

2.1 GitHub(方法、数据谱系与评测语境)

说明链接
ChineseErrorCorrector(中文拼写+语法纠错平台、论文与模型索引)https://github.com/TW-NLP/ChineseErrorCorrector

README 中列出 CSC(拼写)CGC(语法)Lang8+HSK(混合) 等数据来源;本仓库分层验证集构造与上述谱系对齐(见下文)。

数据集用途
twnlp/ChinseseErrorCorrectData约 200 万条对话格式数据;经 prepare_chinsese_errorcorrectdata_jsonl.py 转为 source/target JSONL(本仓库常称 CEC),traintrain_stage1+train_stage2validation 对应 val.json
twnlp/csc_data拼写类语料(如 train.txt 等),用于分层验证中 spelling 桶抽样。
twnlp/cgc_data语法类语料(CGED / FCGEC / MuCGEC 及 nacgec_all_type.json 等),用于 grammar 桶抽样。
twnlp/lang8_hsk官方 README 中的混合语料;当前部分环境下 datasets 无法直接加载,脚本中已做 回退(见改造说明)。

2.3 预训练基座(Hugging Face)

本仓库对外说明与发布用的字级模型,均基于 Chinese ELECTRA 判别器 微调:

模型Hugging Face ID
Chinese ELECTRA(判别器)hfl/chinese-electra-180g-base-discriminator

Fast tokenizerreturn_offsets_mapping=True)。预下载示例:

python download_base_model.py --model_id hfl/chinese-electra-180g-base-discriminator --local_dir pretrained/hfl_chinese-electra-180g-base-discriminator

3. 数据与标签

  • 训练/验证主 JSONL:由 CEC 转换而来,每行 {"source","target"};本地常见文件名 data/cec_train.jsonldata/cec_validation.jsonl
  • 字级标签char_align.py 对归一化后的 source/targetdifflib.SequenceMatcherreplace/delete 在 source 上标 1,其余 0;纯 insert 在 target 侧时 source 可能全 0,属规则定义而非实现错误。
  • 分层验证集 data/val_task_stratified.jsonl:由 prepare_task_validation_jsonl.pycsc / cgc 等抽样,字段含 taskspelling / grammar / mixed)与 corpusmixed 在 Lang8 不可用时自动回退为 cec_validation.jsonl 抽样,并在 corpus 中标注 mixed_fallback:cec_validation.jsonl

4. 训练过程(字级,ELECTRA)

  • 脚本:train_char.py;基座 --model_name_or_path 指向 hfl/chinese-electra-180g-base-discriminator(本地目录或 Hub id 均可)。
  • 任务:TokenClassificationFast tokenizer + offset_mapping 对齐到字。
  • 类别不平衡:类权重、可选 class_weight_cap;损失可选 加权 CEFocalCharTokenTrainer);可选 neg_subsample_keeperr_weight_mult
  • 选优:trainer_metrics.py 与 Trainer 的 eval_* 对齐(如 metric_for_best recall)。
  • 评测:evaluate_char.py;上线:pipeline_char.py(整句是否送纠错由 max(p_ERR)sentence_threshold 决定,见 evaluate_char --sweep_sentence)。
  • 命令备忘:见 TRAIN_CHAR_ELECTRA.txt

4.1 验证集用法

  • 随机划分:默认 train_char.pytrain_test_split
  • 固定分层验证--val_jsonl data/val_task_stratified.jsonl,训练仍用全量 cec_train.jsonl
  • 按 task 分层划分:训练 JSONL 含 task 列时 --stratify_val_by_task(与 --val_jsonl 互斥)。

5. 改造过程(相对「仅 CEC + 单验证集」的基线)

方向内容
验证与任务prepare_task_validation_jsonl.py:按 spelling/grammar/mixed 分层抽样;evaluate_char.py --by_task 分任务报表。
门控阈值扫描evaluate_char.py --sweep_sentence:对每句 max(p_ERR) 扫阈值,推荐 pipeline_char --sentence_threshold;曾修复 sent_max_p 未定义的 NameError
损失与目标Focal、err_weight_multneg_subsample_keep 等,便于拉高错字 recall,需与阈值/业务容忍度一起调。
推理吞吐char_inference.forward_char_preds_batchpadding batch 前向;benchmark_char_inference.pypipeline_char.pyevaluate_char.py 均支持 batch_size
Lang8 回退lang8_hsk 加载失败时自动用 cec_validation.jsonlmixed 桶,保证分层验证可跑通。

6. 结果摘要(阶段性,非最终产品指标)

以下数值来自实际跑通的分任务验证与测速,仅作阶段记录;换数据、随机种子、checkpoint 会变,另外项目仅开放上传了ELECTRA训练出来的结果。

6.1 字级整体(全 task 混合,TokenClassification argmax)

指标ELECTRAMacBERT更优
n_tokens360006360006-
accuracy0.9080.913MacBERT
precision0.2560.264MacBERT
recall0.8220.797ELECTRA
F10.3910.396MacBERT(差距很小)

6.2 字级按 task(更清晰对照)

6.2.1 spelling(99500 tokens)

指标ELECTRAMacBERT更优
accuracy0.9810.977ELECTRA
precision0.6110.568ELECTRA
recall0.9860.984ELECTRA
F10.7540.720ELECTRA

6.2.2 grammar(128877 tokens)

指标ELECTRAMacBERT更优
accuracy0.8890.894MacBERT
precision0.2140.225MacBERT
recall0.8230.838MacBERT
F10.3390.355MacBERT

6.2.3 mixed(131629 tokens)

指标ELECTRAMacBERT更优
accuracy0.8720.883MacBERT
precision0.2060.210MacBERT
recall0.7320.662ELECTRA
F10.3220.319ELECTRA(差距很小)

解读spelling 子集(ELECTRA 在 F1/precision 上更高);grammar MacBERT 略高;mixed 上 ELECTRA 召回更高。全混合 F1 不宜单独代表拼写能力。

6.3 句级 max(p_ERR) 分布(按金标是否含错字)

金标nmean(E)mean(M)p50(E)p50(M)p90(E)p90(M)
无错句22000.7100.6860.8050.7820.9800.973
有错句53000.9390.9230.9860.9830.99970.9999

6.4 门控阈值扫(need_correct := max_p_err >= thrtarget_recall_used=0.9

规则threshold(E)precision(E)recall(E)F1(E)threshold(M)precision(M)recall(M)F1(M)
best F10.700.7870.9460.8590.700.7940.9230.854
recall≥0.9 下 precision 尽量高0.800.8110.9080.8570.750.8030.9040.850

6.5 推理速度(示例:ELECTRA 字级、A100、batch 推理)

  • batch_size=1024max_length=256、约 1.4 万句 的基准下,曾测得约 108 句/秒、约 9.3 ms/句(纯 GPU 推理循环,不含线上 I/O)。
  • 小样本、非 batch 测得的吞吐 不能代表稳态;应以 大批量 + 合理 warmup 为准(见 benchmark_char_inference.py)。


7. 仓库内文档与入口

文件作用
UPLOAD_AND_TRAIN.txt打包、环境、命令总览
CHAR_PIPELINE.txt字级流水线、测速、batch 说明
TRAIN_CHAR_ELECTRA.txtELECTRA 字级训练示例
PIPELINE_AND_RESULTS.md阈值、指标解读、文件速查
PROJECT_OVERVIEW.md本文:背景、参考、字级训练/改造/结果总览
HUGGINGFACE_PUBLISH.md将微调权重与模型卡片发布到 Hugging Face Hub 的步骤与 README 模板

若要把服务器上的 char_detector_electra.tar.gz(或解压后的 save_pretrained 目录)做成 新的 HF Model 项目,按 HUGGINGFACE_PUBLISH.md 操作即可;模型页 README.md 可与本文指标、基座说明保持一致。


8. 引用与致谢

方法与数据谱系主要参考 TW-NLPChineseErrorCorrector 项目及其公开的 Hugging Face 数据集与模型卡片;预训练骨干为 哈工大 HFL 发布的 Chinese ELECTRA(discriminator)。具体论文与引用格式见上游与 ELECTRA 模型页 相关说明。

@misc{tian2026csrpchainofthoughtreasoningchinese,
      title={CSRP: Chain-of-Thought Reasoning for Chinese Text Correction via Reinforcement Learning with Efficiency-Aware Rewards}, 
      author={Wei Tian and Yuhao Zhou and Man Lan},
      year={2026},
      eprint={2606.00020},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2606.00020}, 
}

Contributors

xurong123

12 commits

nielsr

1 commits

xurong123/ChineseErrorDetectorElectra

Model

2

stars

13

commits

1

linked in READMEs

Aug 17, 2026

updated

electra
endpoints_compatible
safetensors
token-classification
transformers

README

中文检错前筛模型:背景、训练、改造与结果摘要

This model is a character-level Chinese error detector presented in the paper CSRP: Chain-of-Thought Reasoning for Chinese Text Correction via Reinforcement Learning with Efficiency-Aware Rewards.

The official code is available in the ChineseErrorCorrector repository.

本文档概括本仓库在「纠错前筛」方向上的字级检测目标、数据与上游来源、训练与改造过程,以及阶段性评测与性能结论。操作级命令仍以 UPLOAD_AND_TRAIN.txtCHAR_PIPELINE.txt 为准。


1. 背景

工业里完整纠错往往依赖大模型,成本高、延迟大。常见做法是先用轻量模型判断「哪些字在对齐意义上可能有问题」,再决定是否送下游纠错。本仓库主线为 字级 TokenClassification:输入为带错误的 source 与参考 target 对,子词对齐到字后学习 0/1 标签;推理侧用 pipeline_char 等,按字级概率与阈值决定是否触发纠错链路。

任务与 TW-NLP 开源的 ChineseErrorCorrector 生态在数据谱系上一致:覆盖拼写、语法等多类现象;本仓库检测头为 判别式微调,不直接复现其生成式纠错大模型。


2. 参考的上游项目与预训练模型

2.1 GitHub(方法、数据谱系与评测语境)

说明链接
ChineseErrorCorrector(中文拼写+语法纠错平台、论文与模型索引)https://github.com/TW-NLP/ChineseErrorCorrector

README 中列出 CSC(拼写)CGC(语法)Lang8+HSK(混合) 等数据来源;本仓库分层验证集构造与上述谱系对齐(见下文)。

数据集用途
twnlp/ChinseseErrorCorrectData约 200 万条对话格式数据;经 prepare_chinsese_errorcorrectdata_jsonl.py 转为 source/target JSONL(本仓库常称 CEC),traintrain_stage1+train_stage2validation 对应 val.json
twnlp/csc_data拼写类语料(如 train.txt 等),用于分层验证中 spelling 桶抽样。
twnlp/cgc_data语法类语料(CGED / FCGEC / MuCGEC 及 nacgec_all_type.json 等),用于 grammar 桶抽样。
twnlp/lang8_hsk官方 README 中的混合语料;当前部分环境下 datasets 无法直接加载,脚本中已做 回退(见改造说明)。

2.3 预训练基座(Hugging Face)

本仓库对外说明与发布用的字级模型,均基于 Chinese ELECTRA 判别器 微调:

模型Hugging Face ID
Chinese ELECTRA(判别器)hfl/chinese-electra-180g-base-discriminator

Fast tokenizerreturn_offsets_mapping=True)。预下载示例:

python download_base_model.py --model_id hfl/chinese-electra-180g-base-discriminator --local_dir pretrained/hfl_chinese-electra-180g-base-discriminator

3. 数据与标签

  • 训练/验证主 JSONL:由 CEC 转换而来,每行 {"source","target"};本地常见文件名 data/cec_train.jsonldata/cec_validation.jsonl
  • 字级标签char_align.py 对归一化后的 source/targetdifflib.SequenceMatcherreplace/delete 在 source 上标 1,其余 0;纯 insert 在 target 侧时 source 可能全 0,属规则定义而非实现错误。
  • 分层验证集 data/val_task_stratified.jsonl:由 prepare_task_validation_jsonl.pycsc / cgc 等抽样,字段含 taskspelling / grammar / mixed)与 corpusmixed 在 Lang8 不可用时自动回退为 cec_validation.jsonl 抽样,并在 corpus 中标注 mixed_fallback:cec_validation.jsonl

4. 训练过程(字级,ELECTRA)

  • 脚本:train_char.py;基座 --model_name_or_path 指向 hfl/chinese-electra-180g-base-discriminator(本地目录或 Hub id 均可)。
  • 任务:TokenClassificationFast tokenizer + offset_mapping 对齐到字。
  • 类别不平衡:类权重、可选 class_weight_cap;损失可选 加权 CEFocalCharTokenTrainer);可选 neg_subsample_keeperr_weight_mult
  • 选优:trainer_metrics.py 与 Trainer 的 eval_* 对齐(如 metric_for_best recall)。
  • 评测:evaluate_char.py;上线:pipeline_char.py(整句是否送纠错由 max(p_ERR)sentence_threshold 决定,见 evaluate_char --sweep_sentence)。
  • 命令备忘:见 TRAIN_CHAR_ELECTRA.txt

4.1 验证集用法

  • 随机划分:默认 train_char.pytrain_test_split
  • 固定分层验证--val_jsonl data/val_task_stratified.jsonl,训练仍用全量 cec_train.jsonl
  • 按 task 分层划分:训练 JSONL 含 task 列时 --stratify_val_by_task(与 --val_jsonl 互斥)。

5. 改造过程(相对「仅 CEC + 单验证集」的基线)

方向内容
验证与任务prepare_task_validation_jsonl.py:按 spelling/grammar/mixed 分层抽样;evaluate_char.py --by_task 分任务报表。
门控阈值扫描evaluate_char.py --sweep_sentence:对每句 max(p_ERR) 扫阈值,推荐 pipeline_char --sentence_threshold;曾修复 sent_max_p 未定义的 NameError
损失与目标Focal、err_weight_multneg_subsample_keep 等,便于拉高错字 recall,需与阈值/业务容忍度一起调。
推理吞吐char_inference.forward_char_preds_batchpadding batch 前向;benchmark_char_inference.pypipeline_char.pyevaluate_char.py 均支持 batch_size
Lang8 回退lang8_hsk 加载失败时自动用 cec_validation.jsonlmixed 桶,保证分层验证可跑通。

6. 结果摘要(阶段性,非最终产品指标)

以下数值来自实际跑通的分任务验证与测速,仅作阶段记录;换数据、随机种子、checkpoint 会变,另外项目仅开放上传了ELECTRA训练出来的结果。

6.1 字级整体(全 task 混合,TokenClassification argmax)

指标ELECTRAMacBERT更优
n_tokens360006360006-
accuracy0.9080.913MacBERT
precision0.2560.264MacBERT
recall0.8220.797ELECTRA
F10.3910.396MacBERT(差距很小)

6.2 字级按 task(更清晰对照)

6.2.1 spelling(99500 tokens)

指标ELECTRAMacBERT更优
accuracy0.9810.977ELECTRA
precision0.6110.568ELECTRA
recall0.9860.984ELECTRA
F10.7540.720ELECTRA

6.2.2 grammar(128877 tokens)

指标ELECTRAMacBERT更优
accuracy0.8890.894MacBERT
precision0.2140.225MacBERT
recall0.8230.838MacBERT
F10.3390.355MacBERT

6.2.3 mixed(131629 tokens)

指标ELECTRAMacBERT更优
accuracy0.8720.883MacBERT
precision0.2060.210MacBERT
recall0.7320.662ELECTRA
F10.3220.319ELECTRA(差距很小)

解读spelling 子集(ELECTRA 在 F1/precision 上更高);grammar MacBERT 略高;mixed 上 ELECTRA 召回更高。全混合 F1 不宜单独代表拼写能力。

6.3 句级 max(p_ERR) 分布(按金标是否含错字)

金标nmean(E)mean(M)p50(E)p50(M)p90(E)p90(M)
无错句22000.7100.6860.8050.7820.9800.973
有错句53000.9390.9230.9860.9830.99970.9999

6.4 门控阈值扫(need_correct := max_p_err >= thrtarget_recall_used=0.9

规则threshold(E)precision(E)recall(E)F1(E)threshold(M)precision(M)recall(M)F1(M)
best F10.700.7870.9460.8590.700.7940.9230.854
recall≥0.9 下 precision 尽量高0.800.8110.9080.8570.750.8030.9040.850

6.5 推理速度(示例:ELECTRA 字级、A100、batch 推理)

  • batch_size=1024max_length=256、约 1.4 万句 的基准下,曾测得约 108 句/秒、约 9.3 ms/句(纯 GPU 推理循环,不含线上 I/O)。
  • 小样本、非 batch 测得的吞吐 不能代表稳态;应以 大批量 + 合理 warmup 为准(见 benchmark_char_inference.py)。


7. 仓库内文档与入口

文件作用
UPLOAD_AND_TRAIN.txt打包、环境、命令总览
CHAR_PIPELINE.txt字级流水线、测速、batch 说明
TRAIN_CHAR_ELECTRA.txtELECTRA 字级训练示例
PIPELINE_AND_RESULTS.md阈值、指标解读、文件速查
PROJECT_OVERVIEW.md本文:背景、参考、字级训练/改造/结果总览
HUGGINGFACE_PUBLISH.md将微调权重与模型卡片发布到 Hugging Face Hub 的步骤与 README 模板

若要把服务器上的 char_detector_electra.tar.gz(或解压后的 save_pretrained 目录)做成 新的 HF Model 项目,按 HUGGINGFACE_PUBLISH.md 操作即可;模型页 README.md 可与本文指标、基座说明保持一致。


8. 引用与致谢

方法与数据谱系主要参考 TW-NLPChineseErrorCorrector 项目及其公开的 Hugging Face 数据集与模型卡片;预训练骨干为 哈工大 HFL 发布的 Chinese ELECTRA(discriminator)。具体论文与引用格式见上游与 ELECTRA 模型页 相关说明。

@misc{tian2026csrpchainofthoughtreasoningchinese,
      title={CSRP: Chain-of-Thought Reasoning for Chinese Text Correction via Reinforcement Learning with Efficiency-Aware Rewards}, 
      author={Wei Tian and Yuhao Zhou and Man Lan},
      year={2026},
      eprint={2606.00020},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2606.00020}, 
}

Contributors

xurong123

12 commits

nielsr

1 commits