中文文本糾錯
Chinese Text Correction
適用於針對輸入文本(對話),特別是語音識別同音異字等進行改錯
本文由 Ian Wang 撰寫初稿後再進行編修,未來持續努力更新
那些自然語言處理 (Natural Language Processing, NLP) 踩的坑
中文文本分類、中文文本相似度、中文實體識別、中文機器閱讀理解
Meeting & Minutes Master | TW Deep Master
Call for Partner or POC (Proof of Concept) Contact: TonTon ( at ) TWMAN.ORG
#naturallanguageprocessing_deeplearning101
投入約100天,早期上線成本資源頗高,現在就沒這問題;這個項目堪稱是在NLP這個坑裡投入第二多的,記得當時的場景是機器人在商場裡回答問題所顯示出來的文字會有一些ASR的錯字,但是問題一樣卡在數據集,還因此讓小夥伴們花了好長時間辛苦去標註 XD,但看看現在效果,我想這是值得的 ! 記得一開始是先依賴 pycorrector,然後再換 ConvSeq2Seq,當然 bert 也做了相關優化實驗,中間一度被那三番二次很愛嗆我多讀書,從RD轉職覺得自己很懂做產品的PM拿跟百度對幹,從一開始的看實驗結果輸,到後來贏了,卻又自己亂測說還是不夠好之類的叭啦叭啦,說實話,你最後不也人設垮了然後閃人 ~ 攤手 ~
現在看看這截圖效果,不是蠻勵害的嗎 ? 真的想說這社會真的充滿一堆人設嚇死人的人,無敵愛嘴砲 ! 搞的為了滿足那位人設比天高的需求,真的是想了像是用拼音還兼NER來整合的好幾種方法 ! 那文本糾錯會有什麼坑呢?:數據啊、格式啊 !!! 還有幾個套件所要處理的目標不太一樣,有的可以處理疊字有的可以處理連錯三個字,還有最麻煩的就是斷字了,因為現有公開大家最愛用的仍舊是Jieba,即便它是有繁中版,當然也能試試 pkuseg,但就是差了點感覺。
pycorrector
使用jieba進行斷詞後,再基於kenlm進行錯別字判斷的簡易文本糾錯方法
優點
方便安裝與使用
速度快
基礎錯字處理上有一定效果
缺點
準確率不佳
無法經過重新訓練以符合情境
在專有名詞或是斷詞錯誤情況下容易出錯
Source Code: https://github.com/shibing624/pycorrector
Bert
效果範例
我因該不會在來了 => 我应該不會再來了
爸爸去樓尚買電視 => 爸爸去樓上买電視
昨天正想高訴你 => 昨天正想告訴你
優點
效果較佳,在不考慮簡體情形下糾錯正確。(簡體情況在後續實驗改良)
糾錯後更改為簡體字的部分,可用技巧性的轉回繁體解決。
簡繁效果相近,但簡體環境效果仍然稍微略好。
缺點
BERT 模型較大,預測速度相對較慢。
即使輸出可為繁體,但計算過程仍有簡體字存在,可能遭受質疑。
錯誤檢測模型大,且因為該統計模型為基於簡體,需帶一些簡體文本檔案。
Electra
效果範例
我因該不會在來了 => 我因該不會在來了
爸爸去樓尚買電視 => 爸爸去樓上買電視
昨天正想高訴你 => 昨天正想高訴你
優點
檢測與糾正同一模型可達成,可能也正是繁體效果較差的原因。
模型最小,預測速度最快。
缺點
簡體與繁體的預測效果差距較大。
即使輸出可為繁體,但計算過程仍有簡體字存在,可能遭受質疑。
要做重新訓練還需再花時間研究架構與作法,之前不曾做過 Electra 的相關訓練與研究。
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)
基於Facebook的fairseq,由北京語言大學團隊改進ConvS2S模型用於中文糾錯
Facebook論文網址:https://arxiv.org/pdf/1904.01038.pdf
北京語言大學論文網址:https://link.springer.com/chapter/10.1007/978-3-319-99501-4_36
2018 NLPCC Chinese Grammatical Error Correction Result
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. 肯肯肯肯德基 -> 肯德基,套件則限一個字換一個字
套件用一般字詞情況做修正,模型則是依據訓練數據,刻意使用諧音的場合套件容易發生錯誤
模型可因應不同訓練數據適應不同使用場景,套件則為單一改法
模型有著改善空間,套件則無