)
人工智能大模型預(yù)訓(xùn)練微調(diào)LoRARLHF強化學(xué)習(xí)分布式訓(xùn)練【免費下載鏈接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.項目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP點擊查看免費下載導(dǎo)讀本文圍繞 PaddleNLP 的Taskflow(text_correction)文本糾錯能力展開系統(tǒng)講解其背后的 ERNIE-CSC 模型架構(gòu)拼音特征融合的端到端中文拼寫糾錯模型、調(diào)用方式、返回結(jié)果結(jié)構(gòu)與可配置參數(shù)并結(jié)合 text_correction.py 與 text_correction_model.py 源碼剖析檢錯-糾錯雙模塊的推理流程與超長文本自動切分機制。讀完本文你將能直接使用 PaddleNLP Taskflow 完成單條與批量中文文本的拼寫糾錯理解模型內(nèi)部檢測網(wǎng)絡(luò) 拼音特征融合 校正網(wǎng)絡(luò)的工作原理并掌握batch_size、max_seq_len、split_sentence等關(guān)鍵參數(shù)的調(diào)優(yōu)方法。一、任務(wù)定位什么是 PaddleNLP 的 text_correctionPaddleNLP Taskflow 是倉庫提供的一站式 NLP 預(yù)置任務(wù)入口見 taskflow.py。其中text_correction任務(wù)專注于中文拼寫糾錯Chinese Spelling Correction, CSC即自動識別并修正文本中由于同音字、形近字導(dǎo)致的錯別字。在 taskflow.py 中該任務(wù)被注冊為text_correction: { models: { ernie-csc: { task_class: CSCTask, task_flag: text_correction-ernie-csc, }, }, default: {model: ernie-csc}, },也就是說默認且唯一內(nèi)置的模型是ERNIE-CSC任務(wù)類為 CSCTask。根據(jù) taskflow.md 的說明這是帶拼音特征的端到端文本糾錯模型End-to-End Text Correction Model with Pinyin Features其核心思路是利用拼音信息彌補字形信息的不足——因為中文錯別字大量為同音字僅看字形難以判斷對錯引入拼音特征后模型可以同時利用字義/字音兩個信號進行糾錯。二、快速上手單條與批量糾錯2.1 安裝與導(dǎo)入使用前確保已安裝 PaddleNLP 及其依賴。文本糾錯任務(wù)在推理時需要pypinyin庫生成拼音特征源碼 text_correction.py 會在初始化時強制檢查try: import pypinyin except ImportError: raise ImportError(Please install the dependencies first, pip install pypinyin --upgrade)因此如果缺少依賴請先執(zhí)行pip install pypinyin --upgrade2.2 單條糾錯直接創(chuàng)建Taskflow(text_correction)實例并傳入待糾錯文本模塊內(nèi)置的usage文檔text_correction.py給出了最簡用法from paddlenlp import Taskflow text_correction Taskflow(text_correction) text_correction(遇到逆竟時我們必須勇于面對而且要愈挫愈勇這樣我們才能朝著成功之路前進。)返回結(jié)果為[{source: 遇到逆竟時我們必須勇于面對而且要愈挫愈勇這樣我們才能朝著成功之路前進。, target: 遇到逆境時我們必須勇于面對而且要愈挫愈勇這樣我們才能朝著成功之路前進。, errors: [{position: 3, correction: {竟: 境}}]}]從結(jié)果可以看到模型正確識別了逆竟→逆境這一處同音錯別字其余內(nèi)容保持不變。2.3 批量糾錯傳入字符串列表即可一次處理多條文本text_correction([遇到逆竟時我們必須勇于面對而且要愈挫愈勇這樣我們才能朝著成功之路前進。, 人生就是如此經(jīng)過磨練才能讓自己更加拙壯才能使自己更加樂觀。])返回結(jié)果[{source: 遇到逆竟時我們必須勇于面對而且要愈挫愈勇這樣我們才能朝著成功之路前進。, target: 遇到逆境時我們必須勇于面對而且要愈挫愈勇這樣我們才能朝著成功之路前進。, errors: [{position: 3, correction: {竟: 境}}]}, {source: 人生就是如此經(jīng)過磨練才能讓自己更加拙壯才能使自己更加樂觀。, target: 人生就是如此經(jīng)過磨練才能讓自己更加茁壯才能使自己更加樂觀。, errors: [{position: 18, correction: {拙: 茁}}]}]2.4 返回結(jié)果結(jié)構(gòu)說明每條糾錯結(jié)果都是一個字典包含三個字段字段類型含義sourcestr輸入的原始文本targetstr糾錯后的文本未出錯部分原樣保留errorslist[dict]檢出的錯誤明細每個元素包含position從 0 開始的字符位置與correction形如{錯字: 正確字}的映射errors的生成邏輯在 text_correction.py 中逐一對比source與target的每個字符凡是不一致的字符即記為一次糾錯并記錄其下標位置。三、ERNIE-CSC 模型原理拼音特征融合的雙模塊架構(gòu)模型實現(xiàn)位于 text_correction_model.py 中的ErnieForCSC類text_correction_model.py。它基于 ERNIE 預(yù)訓(xùn)練模型額外引入了兩個關(guān)鍵模塊3.1 模型組成self.pinyin_embeddings nn.Embedding(self.pinyin_vocab_size, emb_size, padding_idxpad_pinyin_id) self.detection_layer nn.Linear(hidden_size, 2) self.correction_layer nn.Linear(hidden_size, vocab_size) self.softmax nn.Softmax()拼音嵌入層pinyin_embeddings將每個漢字的拼音映射為與字嵌入同維度的向量檢測層detection_layer輸出維度為 2對應(yīng)該字無錯/有錯二分類校正層correction_layer輸出維度為詞表大小對每個位置在詞表上預(yù)測正確字。3.2 前向計算流程forwardtext_correction_model.py的執(zhí)行過程分兩步第一步——檢測Detection將字嵌入embedding_output送入 ERNIE 編碼器得到上下文表征后經(jīng)detection_layer與 softmax 得到每個 token 的出錯概率detection_outputs self.ernie.encoder(embedding_output, attention_mask) detection_error_probs self.softmax(self.detection_layer(detection_outputs))第二步——校正Correction以檢測概率為權(quán)重將原始字嵌入與拼音嵌入按位加權(quán)融合再送入 ERNIE 編碼器得到校正輸出word_pinyin_embedding_output ( detection_error_probs[:, :, 0:1] * embedding_output detection_error_probs[:, :, 1:2] * pinyin_embedding_output ) correction_outputs self.ernie.encoder(word_pinyin_embedding_output, attention_mask) correction_logits self.correction_layer(correction_outputs)其設(shè)計動機是當模型認為某個字可能出錯檢測概率指向 1時加大拼音嵌入的權(quán)重從而借助同音信息推斷正確字當認為無錯時以字嵌入為主避免破壞原本正確的字形語義。最終返回det_preds detection_error_probs.argmax(axis-1) # 每個位置是否有錯 char_preds correction_logits.argmax(axis-1) # 每個位置預(yù)測的字符 id3.3 拼音特征如何生成拼音輸入由 CSCTask._convert_example 在預(yù)處理階段生成使用pypinyin的lazy_pinyin將漢字轉(zhuǎn)為帶聲調(diào)TONE3風(fēng)格、輕聲用 5 標記的拼音串再查拼音詞表得到pinyin_ids并保證與input_ids逐位置對齊pinyins self._pypinyin.lazy_pinyin(source, styleself._pypinyin.Style.TONE3, neutral_tone_with_fiveTrue)拼音詞表pinyin_vocab.txt與模型權(quán)重一同隨任務(wù)下載見 text_correction.py 中定義的resource_files_names與resource_files_urls加載時以[UNK]與[PAD]作為未知與填充標記self._pinyin_vocab Vocab.load_vocabulary(pinyin_vocab_path, unk_token[UNK], pad_token[PAD])四、CSCTask 的完整推理流水線從調(diào)用text_correction(text)到輸出結(jié)果CSCTask依次執(zhí)行預(yù)處理、模型推理、后處理三個階段分別對應(yīng)_preprocess、_run_model、_postprocess定義于 text_correction.py。4.1 預(yù)處理_preprocess通過基類Task._check_input_texttask.py校驗輸入僅接受非空字符串或字符串列表否則拋出類型/取值異常調(diào)用_auto_splitter按max_seq_len與split_sentence對超長文本自動切分將每條短文本轉(zhuǎn)換為(input_ids, token_type_ids, pinyin_ids, length)四元組按batch_size分組成多個 batch。_convert_example中還會在文本前后添加[CLS]/[SEP][CLS]與[SEP]位置的拼音用 0對應(yīng)[PAD]的拼音 id占位保證長度嚴格一致源碼中以斷言強制校驗。4.2 推理_run_model在static_mode_guard()見 utils.py上下文內(nèi)將token_ids與pinyin_ids拷貝進靜態(tài)圖 predictor 的輸入句柄并執(zhí)行predictor.run()取回檢測輸出det_preds與校正輸出char_preds。推理使用靜態(tài)圖預(yù)測器由基類Task._get_inference_modeltask.py在初始化時通過paddle.jit.to_static完成動轉(zhuǎn)靜。4.3 后處理_postprocess_parse_decodetext_correction.py將模型輸出的 token id 解碼回漢字并遵循以下規(guī)則決定最終字符僅當原始字符是中文is_chinese_char判定且檢測結(jié)果為有錯時才采納校正結(jié)果若校正候選是[UNK]、[PAD]或非中文字符則保留原字避免引入二次錯誤超長文本被切分的片段其結(jié)果通過_auto_joinertask.py按input_mapping重新拼接回與用戶輸入一一對應(yīng)的完整結(jié)果。五、可配置參數(shù)詳解CSCTask.__init__text_correction.py從kwargs中讀取以下參數(shù)參數(shù)默認值說明batch_size1推理批大小按機器顯存/內(nèi)存調(diào)整max_seq_len128最大序列長度含 [CLS]/[SEP]超過部分會被切分處理split_sentenceFalse是否按中文句子切分后再送入模型lazy_loadFalse是否啟用惰性加載num_workers0數(shù)據(jù)加載線程數(shù)task_pathNone自定義任務(wù)資源路徑由基類 Task 支持典型使用方式from paddlenlp import Taskflow text_correction Taskflow( text_correction, batch_size4, # 批量推理提高吞吐 max_seq_len256, # 支持更長的單段文本 split_sentenceTrue, # 長文本按句切分提升糾錯質(zhì)量 )5.1 max_seq_len 與 split_sentence 的實際影響預(yù)處理中max_predict_len self._max_seq_len - 2扣除 [CLS]/[SEP]_auto_splittertask.py的邏輯為當split_sentenceFalse時將整段文本按max_predict_len做定長切塊當split_sentenceTrue時先用cut_chinese_sent按中文句號等標點切句再對超長句定長切塊。切分后的短文本逐段送入模型結(jié)果由_auto_joiner按映射關(guān)系拼回原序。因此對于長文本糾錯建議開啟split_sentenceTrue讓模型在語義完整的句子上做判斷通常能獲得比硬切塊更穩(wěn)定的結(jié)果。六、模型資源與加載機制任務(wù)資源通過resource_files_names/resource_files_urlstext_correction.py管理model_state.pdparamsERNIE-CSC 微調(diào)后的模型權(quán)重MD5:cdc53e7e3985ffc78fedcdf8e6dca6d2pinyin_vocab.txt拼音詞表MD5:5599a8116b6016af573d08f8e686b4b2。模型權(quán)重與拼音詞表會在首次使用時自動下載到任務(wù)目錄。TASK_MODEL_MAP {ernie-csc: ernie-1.0}text_correction.py表明糾錯模型基于 ERNIE 1.0 預(yù)訓(xùn)練權(quán)重初始化ErnieModel.from_pretrained在其上疊加拼音嵌入、檢測層與校正層再加載 CSC 微調(diào)權(quán)重構(gòu)成完整的ErnieForCSC推理模型分詞器則復(fù)用ErnieTokenizer.from_pretrained。若需離線部署可指定task_path指向本地已下載的資源目錄。七、適用場景與注意事項7.1 典型應(yīng)用場景搜索 Query 糾錯用戶輸入含同音錯別字時先用 text_correction 糾正再檢索提升召回文本校對流水線對 OCR 文本、UGC 內(nèi)容做錯別字清洗中文寫作輔助結(jié)合 taskflow.md 中的用法作為端到端工具集成進業(yè)務(wù)代碼。7.2 注意事項該任務(wù)面向中文拼寫錯誤非中文或中英混雜文本中的錯誤檢測能力有限errors中的position是基于字符而非 token的下標與原始source一一對應(yīng)模型對超出max_seq_len的文本采用切分-拼接策略跨句邊界附近的錯誤可能受影響長文場景建議開啟split_sentence部署時請確保pypinyin與 PaddleNLP 依賴就緒并留意首次運行時自動下載模型資源。八、源碼地圖速查任務(wù)入口與注冊taskflow.py任務(wù)實現(xiàn)類CSCTasktext_correction.py模型實現(xiàn)ErnieForCSCtext_correction_model.py基類工具輸入校驗、自動切分/拼接、動轉(zhuǎn)靜task.py、task.py、task.py官方使用文檔taskflow.md任務(wù) API 文檔自動生成自模塊 docstringtext_correction.rst通過以上內(nèi)容你可以直接基于Taskflow(text_correction)構(gòu)建中文錯別字檢測與糾正能力并在需要時深入 ErnieForCSC 源碼定制自己的檢測/校正模塊。贊分享人工智能大模型預(yù)訓(xùn)練微調(diào)LoRARLHF強化學(xué)習(xí)分布式訓(xùn)練【免費下載鏈接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.項目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP點擊查看免費下載相關(guān)推薦如何構(gòu)建下一代AI原生API網(wǎng)關(guān)Higress云原生網(wǎng)關(guān)實戰(zhàn)深度指南如何構(gòu)建下一代AI原生API網(wǎng)關(guān)Higress云原生網(wǎng)關(guān)實戰(zhàn)深度指南 Higress作為下一代云原生API網(wǎng)關(guān)將AI原生能力與傳統(tǒng)的API網(wǎng)關(guān)功能深度融合API網(wǎng)關(guān)后端云原生LLM 網(wǎng)關(guān)人工智能MCP 服務(wù)基于 PaddleHub 的 ERNIE-CSC 中文錯別字糾錯模型安裝、預(yù)測與在線服務(wù)部署實戰(zhàn)指南基于 PaddleHub 的 ERNIE CSC 中文錯別字糾錯模型安裝、預(yù)測與在線服務(wù)部署實戰(zhàn)指南 導(dǎo)讀 本指南以 PaddleFormers 倉庫中的 e人工智能大模型微調(diào)模型推理服務(wù)上一篇Path of Building終極指南5步掌握《流放之路》最強Build規(guī)劃工具下一篇如何5分鐘免費搭建你的專屬手繪白板Excalidraw完整配置指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考