內容一覽:中文文字錯誤的種類之一為拼寫錯誤,本篇文章為利用 BART 預訓練方法實現中文文字糾錯功能的模型部署教程。
關鍵詞:BART 中文拼寫糾錯 NLP
本文首發自微信公眾號:HyperAI超神經
中文文字錯誤3大障礙:拼寫、語法、語義
中文文字糾錯是當前自然語言處理領域的一個重要分支,旨在針對中文文字錯誤等進行檢測與糾正。常見的中文文字錯誤包括拼寫錯誤、語法錯誤以及語義錯誤。
1. 拼寫錯誤:
指由於輸入法、語音轉文字軟體等原因導致的用字或用詞錯誤,主要表現為錯誤使用了同音字、形近字、混消音等,如「天氣晴郎--天氣晴朗」「時侯--時候」。
2. 語法錯誤:
指由於輸入法、手寫疏忽、OCR 識別亂序等導致的字詞缺失、冗餘、亂序或搭配不當等,如「虛心使使人進步--虛心使人進步」。
3. 語義錯誤:
由於對某些知識不瞭解,或語言組織能力欠缺導致的知識及邏輯錯誤,如「一年有 3 個季度--一年有 4 個季度」。
本文中,我們將以最常見的拼寫錯誤為例,演示如何藉助 BART 模型,進行中文文字糾錯模型部署。
直接執行教程請訪問:
https://openbayes.com/console/open-tutorials/containers/YvkMjHySdef
BART:「採眾長」的 SOTA 模型
BART 全稱 Bidirectional and Auto-Regressive Transformers,是一個為預訓練 seq2seq 模型而設計的去噪自編碼器, 適用於自然語言生成、翻譯及理解任務,由 Meta(原 Facebook)在 2019 年提出。
論文詳見:
https://arxiv.org/pdf/1910.13...
BART 模型吸納借鑑了 BERT 和 GPT 的優點,使用標準的 Transformer 結構作為基礎:
- 解碼器模組參考 GPT: 將 ReLU 啟用函式替換為 GeLU 啟用函式
- 編碼器模組區別於 BERT: 捨棄了前饋神經網路模組,精簡了模型引數
- 編解碼器銜接部分參考了 Transformer: 解碼器的每一層都要對編碼器最後一層的輸出資訊進行交叉注意力計算(也就是編解碼注意力機制)
本教程中,我們藉助 nlp_bart_text-error-correction_chinese 模型進行模型部署。
更多資訊可訪問:
https://modelscope.cn/models/damo/nlp_bart_text-error-correction_chinese/summary
教程詳解:建立一個線上文字糾錯Demo
環境準備
在 jupyter 終端中執行以下命令安裝依賴:
pip install "modelscope[nlp]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
pip install fairseq
模型下載
在終端中執行以下命令下載模型:
git clone http://www.modelscope.cn/damo/nlp_bart_text-error-correction_chinese.git
模型下載需要較長時間,此容器中已有下載好的模型,可直接使用,位於 nlp_bart_text-error-correction_chinese
目錄下。
快速使用
模型部署
Serving 服務編寫
編寫 predictor.py
檔案:
- 匯入依賴庫:除了業務中用到的庫之外,需要額外依賴 openbayes-serving。
import openbayes_serving as serv
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
- Predictor 類:無需繼承其他類,至少提供 init 和 predict 兩個介面。
- 在
__init__
中指定模型路徑,載入模型 在
predict
中進行推理,返回結果class Predictor: def __init__(self): self.model_path = './nlp_bart_text-error-correction_chinese' self.corrector = pipeline(Tasks.text_error_correction, model=self.model_path) def predict(self, json): text = json["input"].lower() result = self.corrector(text) return result
- 執行:啟動服務
if __name__ == '__main__':
serv.run(Predictor)
測試
在終端中執行 python predictor.py
,成功開啟服務後,在此 Notebook 中執行下列程式碼進行測試。
注意:在容器中進行測試時,flask 版本大於 2.1 可能出現重複註冊報錯,降低版本即可執行。
import requests
text = {"input": "這洋的話,下一年的福氣來到自己身上。"}
result = requests.post('http://localhost:8080', json=text)
result.json()
{'output': '這樣的話,下一年的福氣就會來到自己身上。'}
除了透過本地訪問地址 http://localhost:8080
,還可以透過終端中提示的外部可訪問的 URL 進行測試。
注意:對於不同的 OpenBayes 算力容器,外部可訪問的 URL 各不相同,直接使用本教程中的連結是無效的,需用終端中提示的連結進行替換。
result = requests.post('https://openbayes.com/jobs-auxiliary/open-tutorials/t23g93jjm95d', json=text)
result.json()
部署
測試成功後,停止此算力容器,等待同步資料完成。
在「算力容器--模型部署」中點選「建立新部署」,選擇與開發時相同的映象,繫結此算力容器,點選「部署」,即可進行線上測試。
更多模型部署相關資訊可參考:
https://openbayes.com/docs/serving/
至此,一個支援線上測試的中文文字糾錯模型就訓練+部署完成啦!
檢視並執行完整教程,訪問以下連結:
https://openbayes.com/console/open-tutorials/containers/YvkMjHySdef
快來試試你的中文糾錯模型吧!
—— 完 ——
參考連結: