shibing624 / pycorrector

pycorrector is a toolkit for text error correction. 文本纠错,实现了Kenlm,T5,MacBERT,ChatGLM3,Qwen2.5等模型应用在纠错场景,开箱即用。
https://www.mulanai.com/product/corrector/
Apache License 2.0
5.61k stars 1.1k forks source link

kenlm 訓練自定義語言模型後似乎在糾錯及校正錯字上沒有效果 #385

Closed johnchienbronci closed 8 months ago

johnchienbronci commented 1 year ago

我目前測試是針對特定句子做訓練 text: .... 讓座 今天 應該 ...

訓練資訊

image

model = pycorrector.Corrector(language_model_path='corpus/lm.klm') correct_sent, detailect_sent = model.correct("少先隊員因該為老人讓坐")

結果沒有找出任何錯字

想請教是因為什麼原因導致校正錯字上沒效果

shibing624 commented 1 year ago

训练集都是繁体字吗?

建议:

  1. 以字切分做kenlm语言模型训练;
  2. 训练集用没错别字的通用语料,5万条以上;
johnchienbronci commented 1 year ago

對。是繁體中文, 以 char 來訓練語言模型

  1. 想請教為何會跟訓練筆數多寡有關? 看了一下arpa檔案, 內容應該是字的機率, 想說如果將辨識的關鍵字放入訓練應該會有效果才對🤔

  2. 假設今天有一個字辨識錯誤 "讓坐" 我能夠從現有的文本(已有基礎辨識能力的文本)中將入只加入 讓座, 這樣校正會有效果? 還是要有許多"讓座"的相關句子

  3. 訓練的通用語料除了筆數外, 有其他格式上的限制?如 每筆長度限制 , 短句子 或是不能有空白..... ?

  4. 假設有個文本 "全球新能源經濟迅速崛起,電動車作為成長主力之一,替全球汽車製造產業帶來重大變革....." 是建議將此文本拆成3筆語料如下 ["全球新能源經濟迅速崛起", "電動車作為成長主力之一", "替全球汽車製造產業帶來重大變革",....] 還是一筆語料 ["全球新能源經濟迅速崛起,電動車作為成長主力之一,替全球汽車製造產業帶來重大變革....."]

shibing624 commented 1 year ago
  1. 越多越好;
  2. 要有許多"讓座"的相關句子,原因是基于上下文判断错字出现的似然概率;
  3. 没其他限制;
  4. 一筆
johnchienbronci commented 1 year ago

ok, 謝謝你的回覆

johnchienbronci commented 1 year ago

我嘗試把訓練筆數增加到30萬筆, 看起來還是沒效果 order 設定 5 我是以char 來訓練, 如下圖

image

以下是arpa 內容中的一部分資料

...
-0.25336936     5 年 利 率      -0.10724029
-0.23248479     3 年 利 率      -0.10724029
-0.17525549     4 年 利 率      -0.10724029
-0.23248479     9 年 利 率      -0.10724029
-0.6774262      額 度 利 率     -0.10724029
-0.30436122     專 案 利 率     -0.10724029
-0.67732006     方 案 利 率     -0.10724029
-0.103242785    本 週 利 率     -0.5795152
-0.20670225     下 週 利 率     -0.10724029
-0.20670225     這 週 利 率     -0.10724029
-0.34270355     注 意 利 率     -0.10724029
-0.7033872      n 或 利 率      -0.10724029
-0.6536909      引 導 利 率     -0.10724029
-0.856038       轉 向 利 率     -0.10724029
-0.4741059      一 一 利 率     -0.17200503
-0.4741059      單 一 利 率     -0.10724029
-0.20146398     這 一 利 率     -0.10724029
-0.38725317     一 般 利 率     -0.17200503
-0.9424369      當 地 利 率     -0.10724029
-0.59914494     所 報 利 率     -0.10724029
-0.06081805     牌 告 利 率     -0.42885736
-0.007633579    宣 告 利 率     -0.6272935
-1.2542363      <s> 等 利 率    -0.10724029
-0.7199068      款 等 利 率     -0.10724029
-0.7199068      售 等 利 率     -0.10724029
-0.7199068      房 等 利 率     -0.10724029
-0.71963954     一 點 利 率     -0.10724029
-0.022258826    終 點 利 率     -0.3140645
-1.2389853      高 額 利 率     -0.10724029
-0.18652745     美 國 利 率     -0.3293576
-0.7225426      英 國 利 率     -0.17200503
-0.56559026     該 國 利 率     -0.10724029
-0.8939988      各 國 利 率     -0.10724029
-0.7225426      韓 國 利 率     -0.10724029
-0.12896672     實 際 利 率     -0.12666856
-0.91500527     行 業 利 率     -0.10724029
-1.3073027      商 業 利 率     -0.10724029
-0.57017404     同 業 利 率     -0.10724029
-2.0221794      營 業 利 率     -0.10724029
-1.4882978      企 業 利 率     -0.27848518
-1.0633577      部 分 利 率     -0.10724029
...

這是糾錯結果, "率率" 應該要校正成 "利率" (沒找到錯誤 或是找的校正的字不正確)

image
shibing624 commented 1 year ago

模型能处理的范围:

  1. 搞不定"率率"
  2. 例率 -》 利率

所以纠错逻辑,限定在音似、形似错误的结果纠正,具体可以参考规则纠错方法和代码。

johnchienbronci commented 1 year ago

有找到糾錯跟校正效果差的原因

  1. default 設定檔要改成繁體中文
  2. same_pinyin 增加相似音即可
  3. token 只要存在 word_freq.txt 就會有機會誤判
stale[bot] commented 10 months ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.(由于长期不活动,机器人自动关闭此问题,如果需要欢迎提问)