pycorrector一鍵式文本糾錯工具,整合了BERT、MacBERT、ELECTRA、ERNIE等多種模型,讓您立即享受糾錯的便利和效果

pycorrector:一鍵式文本糾錯工具,整合了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer、T5等多種模型,讓您立即享受糾錯的便利和效果

pycorrector: 中文文本糾錯工具。支持中文音似、形似、語法錯誤糾正,python3開發。實現了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer等多種模型的文本糾錯,并在SigHAN數據集評估各模型的效果。

1.中文文本糾錯任務,常見錯誤類型:

當然,針對不同業務場景,這些問題并不一定全部存在,比如拼音輸入法、語音識別校對關注音似錯誤;五筆輸入法、OCR校對關注形似錯誤,
搜索引擎query糾錯關注所有錯誤類型。

本項目重點解決其中的"音似、形字、語法、專名錯誤"等類型。

2.解決方案

2.1 規則的解決思路

依據語言模型檢測錯別字位置,通過拼音音似特征、筆畫五筆編輯距離特征及語言模型困惑度特征糾正錯別字。

  1. 中文糾錯分為兩步走,第一步是錯誤檢測,第二步是錯誤糾正;
  2. 錯誤檢測部分先通過結巴中文分詞器切詞,由于句子中含有錯別字,所以切詞結果往往會有切分錯誤的情況,這樣從字粒度和詞粒度兩方面檢測錯誤, 整合這兩種粒度的疑似錯誤結果,形成疑似錯誤位置候選集;
  3. 錯誤糾正部分,是遍歷所有的疑似錯誤位置,并使用音似、形似詞典替換錯誤位置的詞,然后通過語言模型計算句子困惑度,對所有候選集結果比較并排序,得到最優糾正詞。

2.2 深度模型的解決思路

  1. 端到端的深度模型可以避免人工提取特征,減少人工工作量,RNN序列模型對文本任務擬合能力強,RNN Attn在英文文本糾錯比賽中取得第一名成績,證明應用效果不錯;
  2. CRF會計算全局最優輸出節點的條件概率,對句子中特定錯誤類型的檢測,會根據整句話判定該錯誤,阿里參賽2016中文語法糾錯任務并取得第一名,證明應用效果不錯;
  3. Seq2Seq模型是使用Encoder-Decoder結構解決序列轉換問題,目前在序列轉換任務中(如機器翻譯、對話生成、文本摘要、圖像描述)使用最廣泛、效果最好的模型之一;
  4. BERT/ELECTRA/ERNIE/MacBERT等預訓練模型強大的語言表征能力,對NLP屆帶來翻天覆地的改變,海量的訓練數據擬合的語言模型效果無與倫比,基于其MASK掩碼的特征,可以簡單改造預訓練模型用于糾錯,加上fine-tune,效果輕松達到最優。

PS:

  • 作者糾錯分享
  • 網友源碼解讀

2.2 模型推薦

  • Kenlm模型:本項目基于Kenlm統計語言模型工具訓練了中文NGram語言模型,結合規則方法、混淆集可以糾正中文拼寫錯誤,方法速度快,擴展性強,效果一般

  • MacBERT模型【推薦】:本項目基于PyTorch實現了用于中文文本糾錯的MacBERT4CSC模型,模型加入了錯誤檢測和糾正網絡,適配中文拼寫糾錯任務,效果好

  • Seq2Seq模型:本項目基于PyTorch實現了用于中文文本糾錯的Seq2Seq模型、ConvSeq2Seq模型,其中ConvSeq2Seq在NLPCC-2018的中文語法糾錯比賽中,使用單模型并取得第三名,可以并行訓練,模型收斂快,效果一般

  • T5模型:本項目基于PyTorch實現了用于中文文本糾錯的T5模型,使用Langboat/mengzi-t5-base的預訓練模型fine-tune中文糾錯數據集,模型改造的潛力較大,效果好

  • BERT模型:本項目基于PyTorch實現了基于原生BERT的fill-mask能力進行糾正錯字的方法,效果差

  • ELECTRA模型:本項目基于PyTorch實現了基于原生ELECTRA的fill-mask能力進行糾正錯字的方法,效果差

  • ERNIE_CSC模型:本項目基于PaddlePaddle實現了用于中文文本糾錯的ERNIE_CSC模型,模型在ERNIE-1.0上fine-tune,模型結構適配了中文拼寫糾錯任務,效果好

  • DeepContext模型:本項目基于PyTorch實現了用于文本糾錯的DeepContext模型,該模型結構參考Stanford University的NLC模型,2014英文糾錯比賽得第一名,效果一般

  • Transformer模型:本項目基于PyTorch的fairseq庫調研了Transformer模型用于中文文本糾錯,效果一般

  • 思考

  1. 規則的方法,在詞粒度的錯誤召回還不錯,但錯誤糾正的準確率還有待提高,更多優質的糾錯集及糾錯詞庫會有提升,我更希望算法模型上有更大的突破。
  2. 現在的文本錯誤不再局限于字詞粒度上的拼寫錯誤,需要提高中文語法錯誤檢測(CGED, Chinese Grammar Error Diagnosis)及糾正能力,列在TODO中,后續調研。

3.Demo演示

Official Demo: https://www.mulanai.com/product/corrector/

HuggingFace Demo: https://huggingface.co/spaces/shibing624/pycorrector

run example: examples/gradio_demo.py to see the demo:

python examples/gradio_demo.py

4.模型評估(sighan15評估集)

提供評估腳本examples/evaluate_models.py:

  • 使用sighan15評估集:SIGHAN2015的測試集pycorrector/data/cn/sighan_2015/test.tsv
    ,已經轉為簡體中文。
  • 評估標準:糾錯準召率,采用嚴格句子粒度(Sentence Level)計算方式,把模型糾正之后的與正確句子完成相同的視為正確,否則為錯。
  • 評估結果
    評估數據集:SIGHAN2015測試集

GPU:Tesla V100,顯存 32 GB

Model NameModel Hub LinkBackboneGPUPrecisionRecallF1QPS
Rule-kenlmCPU0.68600.15290.25009
BERT-CSC-bert-base-chineseGPU0.80290.40520.53862
BART-CSCshibing624/bart4csc-base-chinesefnlp/bart-base-chineseGPU0.69840.63540.665458
T5-CSC-byt5-smallGPU0.52200.39410.4491111
Mengzi-T5-CSCshibing624/mengzi-t5-base-chinese-correctionmengzi-t5-baseGPU0.83210.63900.7229214
ConvSeq2Seq-CSC-ConvSeq2SeqGPU0.24150.14360.18016
ChatGLM-6B-CSCshibing624/chatglm-6b-csc-zh-loraChatGLMGPU0.52630.40520.45794
MacBERT-CSCshibing624/macbert4csc-base-chinesehfl/chinese-macbert-baseGPU0.82540.73110.7754224
  • 結論
  • 中文拼寫糾錯模型效果最好的是MacBert-CSC,模型名稱是shibing624/macbert4csc-base-chinese,huggingface model:shibing624/macbert4csc-base-chinese
  • 中文語法糾錯模型效果最好的是BART-CSC,模型名稱是shibing624/bart4csc-base-chinese,huggingface model:shibing624/bart4csc-base-chinese
  • 最具潛力的模型是Mengzi-T5-CSC,模型名稱是shibing624/mengzi-t5-base-chinese-correction,huggingface model:shibing624/mengzi-t5-base-chinese-correction,未改變模型結構,僅fine-tune中文糾錯數據集,已經在SIGHAN 2015取得接近SOTA的效果
  • 基于ChatGLM-6B的糾錯微調模型效果也不錯,模型名稱是shibing624/chatglm-6b-csc-zh-lora,huggingface model:shibing624/chatglm-6b-csc-zh-lora,大模型不僅能改錯還能潤色句子,但是模型太大,推理速度慢

5.使用指南

pip install -U pycorrector

or

pip install -r requirements.txtgit clone https://github.com/shibing624/pycorrector.git
cd pycorrector
pip install --no-deps .

通過以上兩種方法的任何一種完成安裝都可以。如果不想安裝依賴包,直接使用docker拉取安裝好的部署環境即可。

  • 安裝依賴

  • docker使用

docker run -it -v ~/.pycorrector:/root/.pycorrector shibing624/pycorrector:0.0.2

后續調用python使用即可,該鏡像已經安裝好kenlm、pycorrector等包,具體參見Dockerfile。

使用示例:

  • kenlm安裝
pip install kenlm

安裝kenlm-wiki

  • 其他庫包安裝
pip install -r requirements.txt

6.應用場景

6.1 文本糾錯

example: examples/base_demo.py

import pycorrectorcorrected_sent, detail = pycorrector.correct('少先隊員因該為老人讓坐')
print(corrected_sent, detail)

output:

少先隊員應該為老人讓座 [('因該', '應該', 4, 6), ('坐', '座', 10, 11)]

規則方法默認會從路徑~/.pycorrector/datasets/zh_giga.no_cna_cmn.prune01244.klm加載kenlm語言模型文件,如果檢測沒有該文件,
則程序會自動聯網下載。當然也可以手動下載模型文件(2.8G)并放置于該位置。

6.2 錯誤檢測

example: examples/detect_demo.py

import pycorrectoridx_errors = pycorrector.detect('少先隊員因該為老人讓坐')
print(idx_errors)

output:

[['因該', 4, 6, 'word'], ['坐', 10, 11, 'char']]

返回類型是list, [error_word, begin_pos, end_pos, error_type]pos索引位置以0開始。

6.3成語、專名糾錯

example: examples/proper_correct_demo.py

import syssys.path.append("..")
from pycorrector.proper_corrector import ProperCorrectorm = ProperCorrector()
x = ['報應接中邇來','今天在拼哆哆上買了點蘋果',
]for i in x:print(i, ' -> ', m.proper_correct(i))

output:

報應接中邇來  ->  ('報應接踵而來', [('接中邇來', '接踵而來', 2, 6)])
今天在拼哆哆上買了點蘋果  ->  ('今天在拼多多上買了點蘋果', [('拼哆哆', '拼多多', 3, 6)])

6.4 自定義混淆集

通過加載自定義混淆集,支持用戶糾正已知的錯誤,包括兩方面功能:1)【提升準確率】誤殺加白;2)【提升召回率】補充召回。

example: examples/use_custom_confusion.py

import pycorrectorerror_sentences = ['買iphonex,要多少錢','共同實際控制人蕭華、霍榮銓、張旗康',
]
for line in error_sentences:print(pycorrector.correct(line))print('*' * 42)
pycorrector.set_custom_confusion_path_or_dict('./my_custom_confusion.txt')
for line in error_sentences:print(pycorrector.correct(line))

output:

('買iphonex,要多少錢', [])   # "iphonex"漏召,應該是"iphoneX"
('共同實際控制人蕭華、霍榮銓、張啟康', [['張旗康', '張啟康', 14, 17]]) # "張啟康"誤殺,應該不用糾
*****************************************************
('買iphonex,要多少錢', [['iphonex', 'iphoneX', 1, 8]])
('共同實際控制人蕭華、霍榮銓、張旗康', [])

其中./my_custom_confusion.txt的內容格式如下,以空格間隔:

iPhone差 iPhoneX
張旗康 張旗康

混淆集功能在correct方法中生效;
set_custom_confusion_dict方法的path參數為用戶自定義混淆集文件路徑(str)或混淆集字典(dict)。

6.5 自定義語言模型

默認提供下載并使用的kenlm語言模型zh_giga.no_cna_cmn.prune01244.klm文件是2.8G,內存小的電腦使用pycorrector程序可能會吃力些。

支持用戶加載自己訓練的kenlm語言模型,或使用2014版人民日報數據訓練的模型,模型小(140M),準確率稍低,模型下載地址:people2014corpus_chars.klm(密碼o5e9)。

example:examples/load_custom_language_model.py

from pycorrector import Corrector
import ospwd_path = os.path.abspath(os.path.dirname(__file__))
lm_path = os.path.join(pwd_path, './people2014corpus_chars.klm')
model = Corrector(language_model_path=lm_path)corrected_sent, detail = model.correct('少先隊員因該為老人讓坐')
print(corrected_sent, detail)

output:

少先隊員應該為老人讓座 [('因該', '應該', 4, 6), ('坐', '座', 10, 11)]

6.6 英文拼寫糾錯

支持英文單詞級別的拼寫錯誤糾正。

example:examples/en_correct_demo.py

import pycorrectorsent = "what happending? how to speling it, can you gorrect it?"
corrected_text, details = pycorrector.en_correct(sent)
print(sent, '=>', corrected_text)
print(details)

output:

what happending? how to speling it, can you gorrect it?
=> what happening? how to spelling it, can you correct it?
[('happending', 'happening', 5, 15), ('speling', 'spelling', 24, 31), ('gorrect', 'correct', 44, 51)]

6.7 中文簡繁互換

支持中文繁體到簡體的轉換,和簡體到繁體的轉換。

example:examples/traditional_simplified_chinese_demo.py

import pycorrectortraditional_sentence = '憂郁的臺灣烏龜'
simplified_sentence = pycorrector.traditional2simplified(traditional_sentence)
print(traditional_sentence, '=>', simplified_sentence)simplified_sentence = '憂郁的臺灣烏龜'
traditional_sentence = pycorrector.simplified2traditional(simplified_sentence)
print(simplified_sentence, '=>', traditional_sentence)

output:

憂郁的臺灣烏龜 => 憂郁的臺灣烏龜
憂郁的臺灣烏龜 => 憂郁的臺灣烏龜

6.8 命令行模式

支持批量文本糾錯

python -m pycorrector -h
usage: __main__.py [-h] -o OUTPUT [-n] [-d] input@description:positional arguments:input                 the input file path, file encode need utf-8.optional arguments:-h, --help            show this help message and exit-o OUTPUT, --output OUTPUTthe output file path.-n, --no_char         disable char detect mode.-d, --detail          print detail info

case:

python -m pycorrector input.txt -o out.txt -n -d

輸入文件:input.txt;輸出文件:out.txt ;關閉字粒度糾錯;打印詳細糾錯信息;糾錯結果以\t間隔

本項目的初衷之一是比對、共享各種文本糾錯方法,拋磚引玉的作用,如果對大家在文本糾錯任務上有一點小小的啟發就是我莫大的榮幸了。

主要使用了多種深度模型應用于文本糾錯任務,分別是前面模型小節介紹的macbert、seq2seq、
bert、electra、transformer
、ernie-csc、T5,各模型方法內置于pycorrector文件夾下,有README.md詳細指導,各模型可獨立運行,相互之間無依賴。

  • 安裝依賴
pip install -r requirements-dev.txt

8. 模型推薦

各模型均可獨立的預處理數據、訓練、預測。

8.1 MacBert4csc模型[推薦]

基于MacBERT改變網絡結構的中文拼寫糾錯模型,模型已經開源在HuggingFace Models:https://huggingface.co/shibing624/macbert4csc-base-chinese

模型網絡結構:

  • 本項目是 MacBERT 改變網絡結構的中文文本糾錯模型,可支持 BERT 類模型為 backbone。
  • 在原生 BERT 模型上進行了魔改,追加了一個全連接層作為錯誤檢測即 detection ,
    MacBERT4CSC 訓練時用 detection 層和 correction 層的 loss 加權得到最終的 loss。預測時用 BERT MLM 的 correction 權重即可。

詳細教程參考pycorrector/macbert/README.md

example:examples/macbert_demo.py

  • 8.1.1 使用pycorrector調用糾錯:
import syssys.path.append("..")
from pycorrector.macbert.macbert_corrector import MacBertCorrectorif __name__ == '__main__':error_sentences = ['真麻煩你了。希望你們好好的跳無','少先隊員因該為老人讓坐','機七學習是人工智能領遇最能體現智能的一個分知','一只小魚船浮在平凈的河面上','我的家鄉是有明的漁米之鄉',]m = MacBertCorrector("shibing624/macbert4csc-base-chinese")for line in error_sentences:correct_sent, err = m.macbert_correct(line)print("query:{} => {}, err:{}".format(line, correct_sent, err))

output:

query:真麻煩你了。希望你們好好的跳無 => 真麻煩你了。希望你們好好的跳舞, err:[('無', '舞', 14, 15)]
query:少先隊員因該為老人讓坐 => 少先隊員應該為老人讓坐, err:[('因', '應', 4, 5)]
query:機七學習是人工智能領遇最能體現智能的一個分知 => 機器學習是人工智能領域最能體現智能的一個分知, err:[('七', '器', 1, 2), ('遇', '域', 10, 11)]
query:一只小魚船浮在平凈的河面上 => 一只小魚船浮在平凈的河面上, err:[]
query:我的家鄉是有明的漁米之鄉 => 我的家鄉是有名的漁米之鄉, err:[('明', '名', 6, 7)]
  • 8.1.2 使用原生transformers庫調用糾錯:
import operator
import torch
from transformers import BertTokenizerFast, BertForMaskedLM
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")tokenizer = BertTokenizerFast.from_pretrained("shibing624/macbert4csc-base-chinese")
model = BertForMaskedLM.from_pretrained("shibing624/macbert4csc-base-chinese")
model.to(device)texts = ["今天新情很好", "你找到你最喜歡的工作,我也很高心。"]text_tokens = tokenizer(texts, padding=True, return_tensors='pt').to(device)
with torch.no_grad():outputs = model(**text_tokens)def get_errors(corrected_text, origin_text):sub_details = []for i, ori_char in enumerate(origin_text):if ori_char in [' ', '“', '”', '‘', '’', '\n', '…', '—', '擤']:# add unk wordcorrected_text = corrected_text[:i] + ori_char + corrected_text[i:]continueif i >= len(corrected_text):breakif ori_char != corrected_text[i]:if ori_char.lower() == corrected_text[i]:# pass english upper charcorrected_text = corrected_text[:i] + ori_char + corrected_text[i + 1:]continuesub_details.append((ori_char, corrected_text[i], i, i + 1))sub_details = sorted(sub_details, key=operator.itemgetter(2))return corrected_text, sub_detailsresult = []
for ids, (i, text) in zip(outputs.logits, enumerate(texts)):_text = tokenizer.decode((torch.argmax(ids, dim=-1) * text_tokens.attention_mask[i]),skip_special_tokens=True).replace(' ', '')corrected_text, details = get_errors(_text, text)print(text, ' => ', corrected_text, details)result.append((corrected_text, details))
print(result)

output:

今天新情很好  =>  今天心情很好 [('新', '心', 2, 3)]
你找到你最喜歡的工作,我也很高心。  =>  你找到你最喜歡的工作,我也很高興。 [('心', '興', 15, 16)]

模型文件:

macbert4csc-base-chinese├── config.json├── added_tokens.json├── pytorch_model.bin├── special_tokens_map.json├── tokenizer_config.json└── vocab.txt

8.2 ErnieCSC模型

基于ERNIE的中文拼寫糾錯模型,模型已經開源在PaddleNLP的
模型庫中https://bj.bcebos.com/paddlenlp/taskflow/text_correction/csc-ernie-1.0/csc-ernie-1.0.pdparams。

模型網絡結構:

詳細教程參考pycorrector/ernie_csc/README.md

example:examples/ernie_csc_demo.py

  • 使用pycorrector調用糾錯:

from pycorrector.ernie_csc.ernie_csc_corrector import ErnieCSCCorrectorif __name__ == '__main__':error_sentences = ['真麻煩你了。希望你們好好的跳無','少先隊員因該為老人讓坐','機七學習是人工智能領遇最能體現智能的一個分知','一只小魚船浮在平凈的河面上','我的家鄉是有明的漁米之鄉',]corrector = ErnieCSCCorrector("csc-ernie-1.0")for line in error_sentences:result = corrector.ernie_csc_correct(line)[0]print("query:{} => {}, err:{}".format(line, result['target'], result['errors']))

output:


query:真麻煩你了。希望你們好好的跳無 => 真麻煩你了。希望你們好好的跳舞, err:[{'position': 14, 'correction': {'無': '舞'}}]
query:少先隊員因該為老人讓坐 => 少先隊員應該為老人讓座, err:[{'position': 4, 'correction': {'因': '應'}}, {'position': 10, 'correction': {'坐': '座'}}]
query:機七學習是人工智能領遇最能體現智能的一個分知 => 機器學習是人工智能領域最能體現智能的一個分知, err:[{'position': 1, 'correction': {'七': '器'}}, {'position': 10, 'correction': {'遇': '域'}}]
query:一只小魚船浮在平凈的河面上 => 一只小魚船浮在平凈的河面上, err:[]
query:我的家鄉是有明的漁米之鄉 => 我的家鄉是有名的漁米之鄉, err:[{'position': 6, 'correction': {'明': '名'}}]
  • 使用PaddleNLP庫調用糾錯:

可以使用PaddleNLP提供的Taskflow工具來對輸入的文本進行一鍵糾錯,具體使用方法如下:


from paddlenlp import Taskflowtext_correction = Taskflow("text_correction")
text_correction('遇到逆竟時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。')
text_correction('人生就是如此,經過磨練才能讓自己更加拙壯,才能使自己更加樂觀。')

output:


[{'source': '遇到逆竟時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。','target': '遇到逆境時,我們必須勇于面對,而且要愈挫愈勇,這樣我們才能朝著成功之路前進。','errors': [{'position': 3, 'correction': {'竟': '境'}}]}][{'source': '人生就是如此,經過磨練才能讓自己更加拙壯,才能使自己更加樂觀。','target': '人生就是如此,經過磨練才能讓自己更加茁壯,才能使自己更加樂觀。','errors': [{'position': 18, 'correction': {'拙': '茁'}}]}]

8.3 Bart模型

from transformers import BertTokenizerFast
from textgen import BartSeq2SeqModeltokenizer = BertTokenizerFast.from_pretrained('shibing624/bart4csc-base-chinese')
model = BartSeq2SeqModel(encoder_type='bart',encoder_decoder_type='bart',encoder_decoder_name='shibing624/bart4csc-base-chinese',tokenizer=tokenizer,args={"max_length": 128, "eval_batch_size": 128})
sentences = ["少先隊員因該為老人讓坐"]
print(model.predict(sentences))

output:

['少先隊員應該為老人讓座']

如果需要訓練Bart模型,請參考 https://github.com/shibing624/textgen/blob/main/examples/seq2seq/training_bartseq2seq_zh_demo.py

  • Release models

基于SIGHAN+Wang271K中文糾錯數據集訓練的Bart模型,已經release到HuggingFace Models:

  • BART模型:模型已經開源在HuggingFace Models:https://huggingface.co/shibing624/bart4csc-base-chinese

#3 8.4 ConvSeq2Seq模型
pycorrector/seq2seq 模型使用示例:

  • 訓練
    data example:
#train.txt:
你說的是對,跟那些失業的人比起來你也算是辛運的。	你說的是對,跟那些失業的人比起來你也算是幸運的。
cd seq2seq
python train.py

convseq2seq訓練sighan數據集(2104條樣本),200個epoch,單卡P40GPU訓練耗時:3分鐘。

  • 預測
python infer.py

output:

  1. 如果訓練數據太少(不足萬條),深度模型擬合不足,會出現預測結果全為unk的情況,解決方法:增大訓練樣本集,使用下方提供的糾錯熟語料(nlpcc2018+hsk,130萬對句子)試試。
  2. 深度模型訓練耗時長,有GPU盡量用GPU,加速訓練,節省時間。
  • Release models

基于SIGHAN2015數據集訓練的convseq2seq模型,已經release到github:

  • convseq2seq model url: https://github.com/shibing624/pycorrector/releases/download/0.4.5/convseq2seq_correction.tar.gz

9.數據集

9.1 開源數據集

數據集語料下載鏈接壓縮包大小
SIGHAN+Wang271K中文糾錯數據集SIGHAN+Wang271K(27萬條)百度網盤(密碼01b9)
shibing624/CSC
106M
原始SIGHAN數據集SIGHAN13 14 15官方csc.html339K
原始Wang271K數據集Wang271KAutomatic-Corpus-Generation dimmywang提供93M
人民日報2014版語料人民日報2014版飛書(密碼cHcu)383M
NLPCC 2018 GEC官方數據集NLPCC2018-GEC官方trainingdata114M
NLPCC 2018+HSK熟語料nlpcc2018+hsk+CGED百度網盤(密碼m6fg)
飛書(密碼gl9y)
215M
NLPCC 2018+HSK原始語料HSK+Lang8百度網盤(密碼n31j)
飛書(密碼Q9LH)
81M
中文糾錯比賽數據匯總Chinese Text Correction(CTC)中文糾錯匯總數據集(天池)-

說明:

  • SIGHAN+Wang271K中文糾錯數據集(27萬條),是通過原始SIGHAN13、14、15年數據集和Wang271K數據集格式轉化后得到,json格式,帶錯誤字符位置信息,SIGHAN為test.json,
    macbert4csc模型訓練可以直接用該數據集復現paper準召結果,詳見pycorrector/macbert/README.md。
  • NLPCC 2018 GEC官方數據集NLPCC2018-GEC,
    訓練集trainingdata[解壓后114.5MB],該數據格式是原始文本,未做切詞處理。
  • 漢語水平考試(HSK)和lang8原始平行語料[HSK+Lang8]百度網盤(密碼n31j),該數據集已經切詞,可用作數據擴增。
  • NLPCC 2018 + HSK + CGED16、17、18的數據,經過以字切分,繁體轉簡體,打亂數據順序的預處理后,生成用于糾錯的熟語料(nlpcc2018+hsk)
    ,百度網盤(密碼:m6fg) [130萬對句子,215MB]

SIGHAN+Wang271K中文糾錯數據集,數據格式:

[{"id": "B2-4029-3","original_text": "晚間會聽到嗓音,白天的時候大家都不會太在意,但是在睡覺的時候這嗓音成為大家的惡夢。","wrong_ids": [5,31],"correct_text": "晚間會聽到噪音,白天的時候大家都不會太在意,但是在睡覺的時候這噪音成為大家的惡夢。"}
]

字段解釋:

  • id:唯一標識符,無意義
  • original_text: 原始錯誤文本
  • wrong_ids: 錯誤字的位置,從0開始
  • correct_text: 糾正后的文本

9.2 自有數據集

可以使用自己數據集訓練糾錯模型,把自己數據集標注好,保存為跟訓練樣本集一樣的json格式,然后加載數據訓練模型即可。

  1. 已有大量業務相關錯誤樣本,主要標注錯誤位置(wrong_ids)和糾錯后的句子(correct_text)
  2. 沒有現成的錯誤樣本,可以寫腳本生成錯誤樣本(original_text),根據音似、形似等特征把正確句子的指定位置(wrong_ids)字符改為錯字,附上
    第三方同音字生成腳本同音詞替換

10.總結

什么是語言模型?-wiki

語言模型對于糾錯步驟至關重要,當前默認使用的是從千兆中文文本訓練的中文語言模型zh_giga.no_cna_cmn.prune01244.klm(2.8G),
提供人民日報2014版語料訓練得到的輕量版語言模型people2014corpus_chars.klm(密碼o5e9)。

大家可以用中文維基(繁體轉簡體,pycorrector.utils.text_utils下有此功能)等語料數據訓練通用的語言模型,或者也可以用專業領域語料訓練更專用的語言模型。更適用的語言模型,對于糾錯效果會有比較好的提升。

  1. kenlm語言模型訓練工具的使用,請見博客:http://blog.csdn.net/mingzai624/article/details/79560063
  2. 附上訓練語料<人民日報2014版熟語料>,包括: 1)標準人工切詞及詞性數據people2014.tar.gz, 2)未切詞文本數據people2014_words.txt,
    3)kenlm訓練字粒度語言模型文件及其二進制文件people2014corpus_chars.arps/klm, 4)kenlm詞粒度語言模型文件及其二進制文件people2014corpus_words.arps/klm。
  • Todo
  • 優化形似字字典,提高形似字糾錯準確率
  • 整理中文糾錯訓練數據,使用seq2seq做深度中文糾錯模型
  • 添加中文語法錯誤檢測及糾正能力
  • 規則方法添加用戶自定義糾錯集,并將其糾錯優先度調為最高
  • seq2seq_attention 添加dropout,減少過擬合
  • 在seq2seq模型框架上,新增Pointer-generator network、Beam search、Unknown words replacement、Coverage mechanism等特性
  • 更新bert的fine-tuned使用wiki,適配transformers 2.10.0庫
  • 升級代碼,兼容TensorFlow 2.0庫
  • 升級bert糾錯邏輯,提升基于mask的糾錯效果
  • 新增基于electra模型的糾錯邏輯,參數更小,預測更快
  • 新增專用于糾錯任務深度模型,使用bert/ernie預訓練模型,加入文本音似、形似特征。
  • Reference

  • 基于文法模型的中文糾錯系統

  • Norvig’s spelling corrector

  • Chinese Spelling Error Detection and Correction Based on Language Model, Pronunciation, and Shape[Yu, 2013]

  • Chinese Spelling Checker Based on Statistical Machine Translation[Chiu, 2013]

  • Chinese Word Spelling Correction Based on Rule Induction[yeh, 2014]

  • Neural Language Correction with Character-Based Attention[Ziang Xie, 2016]

  • Chinese Spelling Check System Based on Tri-gram Model[Qiang Huang, 2014]

  • Neural Abstractive Text Summarization with Sequence-to-Sequence Models[Tian Shi, 2018]

  • 基于深度學習的中文文本自動校對研究與實現[楊宗霖, 2019]

  • A Sequence to Sequence Learning for Chinese Grammatical Error Correction[Hongkai Ren, 2018]

  • ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators

  • Revisiting Pre-trained Models for Chinese Natural Language Processing

  • Ruiqing Zhang, Chao Pang et al. “Correcting Chinese Spelling Errors with Phonetic Pre-training”, ACL, 2021

  • DingminWang et al. “A Hybrid Approach to Automatic Corpus Generation for Chinese Spelling Check”, EMNLP, 2018

參考鏈接:https://github.com/shibing624/pycorrector

如果github進入不了也可進入 https://download.csdn.net/download/sinat_39620217/88205573 免費下載相關資料

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40628.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40628.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python OpenGL環境配置

1.Python的安裝請參照 Anconda安裝_安裝anconda_lwb-nju的博客-CSDN博客anconda安裝教程_安裝ancondahttps://blog.csdn.net/lwbCUMT/article/details/125322193?spm1001.2014.3001.5501 Anconda換源虛擬環境創建及使用&#xff08;界面操作&#xff09;_anconda huanyuan_l…

徹底卸載Android Studio

永恒的愛是永遠恪守最初的諾言。 在安裝Android Studio會有很多問題導致無法正常運行&#xff0c;多次下載AS多次錯誤后了解到&#xff0c;刪除以下四個文件才能徹底卸載Android Studio。 第一個文件&#xff1a;.gradle 路徑&#xff1a;C:\Users\yao&#xff08;這里yao是本…

解密人工智能:線性回歸 | 邏輯回歸 | SVM

文章目錄 1、機器學習算法簡介1.1 機器學習算法包含的兩個步驟1.2 機器學習算法的分類 2、線性回歸算法2.1 線性回歸的假設是什么&#xff1f;2.2 如何確定線性回歸模型的擬合優度&#xff1f;2.3 如何處理線性回歸中的異常值&#xff1f; 3、邏輯回歸算法3.1 什么是邏輯函數?…

火山引擎聯合Forrester發布《中國云原生安全市場現狀及趨勢白皮書》,賦能企業構建云原生安全體系

國際權威研究咨詢公司Forrester 預測&#xff0c;2023年全球超過40%的企業將會采用云原生優先戰略。然而&#xff0c;云原生在改變企業上云及構建新一代基礎設施的同時&#xff0c;也帶來了一系列的新問題&#xff0c;針對涵蓋云原生應用、容器、鏡像、編排系統平臺以及基礎設施…

用棧解決有效的括號匹配問題

//用數組實現棧 typedef char DataType; typedef struct stack {DataType* a;//動態數組int top;//棧頂int capacity; //容量 }ST;void STInit(ST*pst);//初始化void STDestroy(ST* pst);//銷毀所有空間void STPush(ST* pst, DataType x);//插入數據到棧中void STPop(ST* pst);…

【業務功能篇65】maven加速 配置settings.xml文件 鏡像

maven加速 添加阿里鏡像倉 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additi…

Kubernetes 調度約束(親和性、污點、容忍)

目錄 一、Pod啟動典型創建過程 二、調度流程 三、指定調度節點 1.使用nodeName字段指定調度節點 2.使用nodeSelector指定調度節點 2.1給對應的node節點添加標簽 2.2修改為nodeSelector調度方式 3.通過親和性來指定調度節點 3.1節點親和性 3.2Pod親和性與反親和性 3.2…

Vue CLI創建Vue項目詳細步驟

&#x1f680; 一、安裝Node環境&#xff08;建議使用LTS版本&#xff09; 在開始之前&#xff0c;請確保您已經安裝了Node.js環境。您可以從Node.js官方網站下載LTS版本&#xff0c;以確保穩定性和兼容性。 中文官網下載 確認已安裝 Node.js。可以在終端中運行 node -v 命令…

基于STM32設計的中藥分裝系統

一、設計需求 基于STM32設計的中藥分裝系統 【1】項目背景 中藥文化是我國文化瑰寶之一,它具有療效好、副作用小的優點,而且相對于西藥,全天然的中藥還具有標本兼治的特點,不僅可以用來治病,更可以對患者身體進行調理,所以格外受到當今一直追求生活質量的人們的追捧&quo…

在Spring Boot和Vue中實現請求過濾器以驗證請求頭中的Token

在Spring Boot應用程序中創建一個過濾器類&#xff0c;用于處理請求&#xff1a; Component public class AuthenticationFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException,…

FastAPI入門

目錄 FastAPI FastAPI 是什么 為什么要用 FastAPI FastAPI 入門 安裝 用 FastAPI 寫個接口 調試接口 創建快捷請求 保存為快捷請求 發送請求 總結 FastAPI FastAPI 是什么 什么是 FastAPI 呢&#xff1f; FastAPI 是 Python 的一個框架&#xff0c;如果要類比的話…

ros編譯catkin_make/catkin build 報錯“string no output variable specified”

文章目錄 問題描述問題分析問題描述 CMake Error at /opt/ros/melodic/share/catkin/cmake/platform/lsb.cmake:8 (string):string no output variable specified Call Stack (most recent call first):/opt/ros/melodic/share/catkin/cmake/all.cmake:164 (include)/opt/ros/…

Django的簡介安裝與配置及兩大設計模式

一.Djang的介紹 1.Django是什么 Django 是使用 Python 語言開發的一款免費而且開源的 Web 應用框架。 由于 Python 語言的跨平臺性&#xff0c;所以 Django 同樣支持 Windows、Linux 和 Mac 系統。 在 Python 語言熾手可熱的當下&#xff0c;Django 也迅速的崛起&#xff0c;在…

javaScript:一分鐘看懂數組排序以及冒泡排序(重點)

目錄 一.前言 二.數組排序 sort&#xff08;&#xff09; 字符串大小的比較原則 字符編碼排序規則 如果使用sort從小到大排列 &#xff08;重點&#xff09; 函數的返回值 規則&#xff1a; 代碼 案例 數組打亂 sort相關代碼 三.冒泡排序&#xff08;重點&#xff…

【RocketMQ】NameServer總結

NameServer是一個注冊中心&#xff0c;提供服務注冊和服務發現的功能。NameServer可以集群部署&#xff0c;集群中每個節點都是對等的關系&#xff08;沒有像ZooKeeper那樣在集群中選舉出一個Master節點&#xff09;&#xff0c;節點之間互不通信。 服務注冊 Broker啟動的時候會…

【通俗易懂】如何使用GitHub上傳文件,如何用git在github上傳文件

目錄 創建 GitHub 倉庫 使用 Git 進行操作 步驟 1&#xff1a;初始化本地倉庫 步驟 2&#xff1a;切換默認分支 步驟 3&#xff1a;連接到遠程倉庫 步驟 4&#xff1a;獲取遠程更改 步驟 5&#xff1a;添加文件到暫存區 步驟 6&#xff1a;提交更改 步驟 7&#xff1a…

Chrome 手動代理設置 HTTP/Socks5

1、安裝代理插件&#xff1a;SwitchyOmega 在線安裝 從 Chrome 應用商店 安裝&#xff0c;如果您無法從該鏈接安裝&#xff0c;請使用下面的離線安裝。 離線安裝 ①、去 Github 下載 最新版安裝包 &#xff0c;或者直接 本地下載 文件進行安裝。 ②、下載安裝文件后&#xf…

[Vue warn]: Error in render: “SyntaxError: “undefined“ is not valid JSON“

[Vue warn]: Error in render: “SyntaxError: “undefined” is not valid JSON” 這說明出現了undefined這個變量類型&#xff0c;比如JSON.parse()時候會出現&#xff0c;可以先嘗試打印JSON.parse()括號中的內容是否是undefined&#xff0c;如果是&#xff0c;那問題的根源…

RenderDoc 導出Cubemap到UE

找到使用了Cubemap的模型,再Output里會顯示該模型使用的所有貼圖 ,選中Cubemap導出 選擇導出格式為HDR 導出的Cubemap是豎著的,需要再PS里逆時針旋轉&#xff19;&#xff10;度 還有&#xff0c;導出的的Cubemap方向是錯的,需要把3,4 跟1,2 對換,6旋轉180度 UE 文檔里的方向參…

Spring Boot @Validated 驗證注解的使用

1、引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非對象參數 參數如果是非對象格式&#xff0c;需要在controller類上面添…