中文文本糾錯

Chinese Text Correction (DEMO)

適用於針對輸入文本(對話),特別是語音識別同音異字等進行改錯

POC (Proof of Concept) Contact: TonTon ( at ) TWMAN.ORG

本文由 Ian Wang 撰寫初稿後再進行編修,且持續更新中

先點一下對話框再輸入想進行糾錯的文本;僅暫開放人、店、地點等糾錯

pycorrector

  • 使用jieba進行斷詞後,再基於kenlm進行錯別字判斷的簡易文本糾錯方法

    • 優點

      • 方便安裝與使用

      • 速度快

      • 基礎錯字處理上有一定效果

    • 缺點

      • 準確率不佳

      • 無法經過重新訓練以符合情境

      • 在專有名詞或是斷詞錯誤情況下容易出錯

    • Source Code: https://github.com/shibing624/pycorrector


Deep Learning

  • RNN + Attention (by Stanford University, 2016) (Tensorflow)

    • 英文版本在CoNLL 2014比賽中排名第一

    • 論文網址:https://arxiv.org/pdf/1603.09727.pdf

  • Seq2Seq + Attention (Keras)

    • 模型容易收斂,但容易過overfitting

    • 針對長文本較為有效,較不符合豹小密等機器人使用情況

    • 無參加比賽或論文等輔助數據,但有留言說使用後效果不如預期

  • ConvSeq2Seq (by 北京語言大學, 2018) (Pytorch)

  • BERT:現有提供已透過中文文本糾錯數據fine-tune的BERT模型

    • https://pan.baidu.com/s/1QCRe5fXSinXSY1lfm7BaQg (pass: m4mg)

    • Fine-tune data

      • 人名日報2014版數據 (101MB)

      • CGED三年比賽數據 (2.8MB)

      • 部分中文維基百科數據 (50MB)

    • 訓練過程

      • 使用3張P40 GPU訓練3個世代,總時長超過24小時;成本不划算

    • 改良方向:將pre-trained BERT用實際應用場景數據進行Fine-tune後,使用蒸餾法進行模型上的縮減;或是先使用蒸餾法產出一個比較小的模型後再用我們的數據進行fine-tune,如此一來模型會變得更小且具有更快的推論速度,更適合應用在實時性的機器人服務場景上

    • 方法總結:

      • 目前已有許多可用套件與模型,但皆與實際使用情況有少許出入,必須取得實際應用場景數據並針對其進行調整,才能達到較好結果

      • 資料明確不足情況下,相對套件仍然確實有著較高分數

      • 套件無法處理專有名詞,ex. 麥當勞、海底撈,模型可藉由數據習得

      • 模型可解決糾錯前後長度不一的 case,ex. 肯肯肯肯德基 -> 肯德基,套件則限一個字換一個字

      • 套件用一般字詞情況做修正,模型則是依據訓練數據,刻意使用諧音的場合套件容易發生錯誤

      • 模型可因應不同訓練數據適應不同使用場景,套件則為單一改法

      • 模型有著改善空間,套件則無