錯字修改 | 佈署1箇中文文文字拼蟹糾錯模型

超神經HyperAI發表於2022-11-22
內容一覽:中文文字錯誤的種類之一為拼寫錯誤,本篇文章為利用 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: 解碼器的每一層都要對編碼器最後一層的輸出資訊進行交叉注意力計算(也就是編解碼注意力機制)

BART 與 BERT 對比示意圖

本教程中,我們藉助 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()

部署

測試成功後,停止此算力容器,等待同步資料完成。

在「算力容器--模型部署」中點選「建立新部署」,選擇與開發時相同的映象,繫結此算力容器,點選「部署」,即可進行線上測試。

部署完成後輸入 JSON 資料進行線上測試

更多模型部署相關資訊可參考:

https://openbayes.com/docs/serving/

至此,一個支援線上測試的中文文字糾錯模型就訓練+部署完成啦!

檢視並執行完整教程,訪問以下連結:

https://openbayes.com/console/open-tutorials/containers/YvkMjHySdef

快來試試你的中文糾錯模型吧!

—— 完 ——

參考連結:

[1] https://www.51cto.com/article...

[2] https://arxiv.org/pdf/1910.1346

相關文章