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

博主的macbert 以及 T5 模型的后处理算法存在缺陷,导致后续模型预测不准确 #513

Closed s19293949 closed 2 months ago

s19293949 commented 2 months ago

Describe the bug

Please provide a clear and concise description of what the bug is. If applicable, add screenshots to help explain your problem, especially for visualization related problems. 本人使用博主的训练代码训练自己的数据,在测试过程发现,调用博主写的预测代码,在模型输出后为了输出格式为(sentences, new_corrected_sentences, corrected_details)编写的后处理代码,与模型实际输出结果不对,目前我使用的是 macbert 以及 T5 模型,均有这个问题,后续我只拿模型的输出代码后自己编写了后处理代码,若有其他人遇到训练的模型预测不准确的情况,可以解析博主预测代码,看看实际模型的输出是否是想要的结果。

s19293949 commented 2 months ago

image 出错的代码应该在这一块

shibing624 commented 2 months ago

啥错?

s19293949 commented 2 months ago

啥错?

具体错误问题在哪里我还没细看,只是做了一些测试,例如: 模型输入:左肺部分切切术后改变 请结合临床\n必要时CTCT进一步进一步检查检查。\n 正确的标签 :左肺部分切术后改变 请结合临床\n必要时CT进一步检查。\n 模型输出:左肺部分切术后改变 请结合临床\n必要时CT进一步检查。 代码后处理输出:{'source': '左肺部分切切术后改变 请结合临床\n必要时CTCT进一步进一步检查检查。\n', 'target': '左肺部分切术后改变请结合临床n必\nT进一CTCT', 'errors': [('切', '术', 5), ('术', '后', 6), ('后', '改', 7), ('改', '变', 8), ('变', '请', 9), ('傑', '结', 10), ('请', '合', 11), ('结', '临', 12), ('合', '床', 13), ('床', '必', 15), ('要', '进', 19), ('时', '一', 20)]} 可以看到在经过后处理算法后改变了模型的输出

loopback00 commented 2 months ago

这个函数确实会修改模型的输出,我根据任务特点,自己重写了这个函数。作者的这个函数,对于source和target句子长度不相等的情况处理的不好。只是拼写纠错,这个函数没啥问题。

s19293949 commented 2 months ago

这个函数确实会修改模型的输出,我根据任务特点,自己重写了这个函数。作者的这个函数,对于source和target句子长度不相等的情况处理的不好。只是拼写纠错,这个函数没啥问题。

是的,我也是在处理文本不对齐的任务发现的这一问题,我也把这个函数重写了。

shibing624 commented 2 months ago

不对齐的错误处理方法是: get_errors_for_diff_length(xxx) https://github.com/shibing624/pycorrector/blob/f1d2f000e833ddc7fafbb1d596e168015e5beaee/pycorrector/utils/error_utils.py#L12