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

ASR中文文本纠错 #358

Closed wnntju closed 1 year ago

wnntju commented 1 year ago

最近在做ASR中文文本纠错,手里有大概30万条数据,尝试了各种开源的方法,都没有好的效果,想请教作者一些问题。 1、ASR待纠错文本是一些偏口语化的文本,有些是重复字,并且带有较多的【额、呃、呢、啊、哎、哦】等,还有一些句式是不完整的【可能是模型识别的原因或者讲话者本身的问题】。这些我自己没办法修正,因为讲话者本身就是这样说的。我使用了macbert和T5效果都不好,误纠的数据量远大于纠正确的数据量,想听听作者有没有什么建议,关于ASR文本纠错方面的? 补充:我看了下badcase,主要有a)【额、呃、呢、啊、哎、哦】等这些词被替换成有意义的词; b)【她、他、它、的、得、地】等改错;c) 句式不完整得也会被改成尽量完整得话,一般末尾那个词会被改掉;d)也有一些纯纯是模型改错了。

2、我使用了一些规则的方法是有效的,但是要无限扩充词典,收益很低,不过也算有点效果。

shibing624 commented 1 year ago
  1. 【额、呃】等词从模型角度看是不常见的词,被认为是错字而替换可以理解,可以训练时把这类语气词、副词、实体词、人称代词等用special token替换了,模型不处理即可;
  2. 人称代词同上;
  3. 是指末尾词误纠了吗?末尾是标点符号吧,可以用规则过滤了这种误纠;
  4. 模型本身误纠,可以调低纠错阈值,只纠正置信度高的;
  5. 规则词典或者混淆集是这样的,本身是体力活。
wnntju commented 1 year ago

作者太给力了,回复很及时了,非常感谢。 1、1和2那部分我使用规则直接过滤掉了,已解决。 2、我使用的asr文本没有标点,只是语句不完整被模型修正了。如:这个女生跑步很--->这个女生跑步狠。类似这种错误 3、macbert4csc将纠错置概率作为loss加权到总loss中了,我修改阈值的话需要重新训练不,我做一下对比实验看看。 4、基于规则的方法,我是用了people_chars_lm.klm语言模型,确实很轻量只有20M左右,但是效果不太好.... 5、[我还没试3的方案]我用macbert4csc纠错后,再用一个7G左右的ngram模型的PPL过滤,效果会好一点,但是两个模型加一起太大啦.... 6、macbert4csc模型有点大,作者有蒸馏或者其他压缩模型的尝试吗,这么大的模型落地有点耗费资源了...

shibing624 commented 1 year ago

3、修改阈值不需要重新训练,卡一个比较高的阈值可以提准,但会降低召回; 6、我没模型蒸馏,可以自行实验,建议方案:1)albert-tiny作为预训练模型重跑训练;2)bert层数student模型layers减少为4层,保障精度下加速预测。

wnntju commented 1 year ago

@shibing624 3、我通过设置阈值,确实可以减少模型纠错的概率。目前CER降低了[从6.343->6.340],虽然很小的提升,但是感谢作者啦~ 6、后面方案确定了,我i会进行蒸馏尝试,感谢建议~

1、我用的30万条数据【都是一句话,以逗号和句号等进行分割了。和你提供的训练数据有区别】进行训练,作者在做纠错时,有没有发现模型性能与训练数据量有关,作者有尝试扩充数据吗?并且有效吗?

shibing624 commented 1 year ago

与训练数据量有关,扩充数据有效。

wnntju commented 1 year ago

@shibing624 非常感谢~

wnntju commented 1 year ago

@shibing624 作者有没有试讯飞的文本纠错产品,我测试了几个例子,感觉很强大啊,错误类型分了好几种。但是代码好像不开源~

shibing624 commented 1 year ago

不开源不研究

stale[bot] commented 1 year 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.(由于长期不活动,机器人自动关闭此问题,如果需要欢迎提问)