pycorrector icon indicating copy to clipboard operation
pycorrector copied to clipboard

macbert微调

Open ZTurboX opened this issue 3 years ago • 10 comments

macbert微调,大概迭代到几轮达到了指标

ZTurboX avatar Mar 03 '22 06:03 ZTurboX

macbert方法的预测,为什么infer.py和macbert_corrector.py加载的模型不一样。infer.py使用MacBert4Csc,而macbert_corrector.py使用BertForMaskedLM。

ZTurboX avatar Mar 03 '22 08:03 ZTurboX

本质是一样,backbone都是BertForMaskedLM

shibing624 avatar Mar 03 '22 12:03 shibing624

@zhentaoCoding 我这边跑 5 轮 (SIGHAN13-15 除去 SIGHAN15_test;Wang271K)作为训练集,我在模型网络上有加一些其它的东西,可以在第 3 个 epoch 收敛。结论是我这个训练可以达到 repo 里相应指标的高度,也许可以作参考。

@shibing624 老师您好,关于评估指标有个小问题: 我用同一个模型的 predict 结果来跑 evaluation.py 里的句子级别评价指标 F1 和我用 iqiyi 的 FASPELL 的句子级别评价指标脚本算出来的会有些不同(FASPELL 的计算方式 F1 总是会低一些)。pycorrector 这里的指标计算看起来更加直观简单一些,所以想了解一下在指标对比计算上,这两种的哪一种会更加常用一些呢?

okcd00 avatar Mar 04 '22 12:03 okcd00

iqiyi的计算也放这里了的:https://github.com/shibing624/pycorrector/blob/master/pycorrector/macbert/evaluate_util.py 字和句子粒度的放一起统计的。

我常用句子粒度的F1计算,比较简单。

shibing624 avatar Mar 04 '22 12:03 shibing624

哈哈,这个 iqiyi 的评测指标函数应该是我写的,不过是在 BBCM 那个 repo 里写的。

那确实两种计算方法得出的结果会不一样呢…… 我好好研究一下区别,谢谢~

(Updated Mar 5th) 破案了,因为 pycorrector 有一个处理 UNK 的操作,evaluation 在这个操作之后,而我调用 FASPELL 的 evaluation 方法是在模型的 outputs 后直接接上的。所以在包含有 UNK 字符的句子中会产生不同。 谢谢 @shibing624 的指点~

okcd00 avatar Mar 04 '22 12:03 okcd00

@zhentaoCoding 我这边跑 5 轮 (SIGHAN13-15 除去 SIGHAN15_test;Wang271K)作为训练集,我在模型网络上有加一些其它的东西,可以在第 3 个 epoch 收敛。结论是我这个训练可以达到 repo 里相应指标的高度,也许可以作参考。

@shibing624 老师您好,关于评估指标有个小问题: 我用同一个模型的 predict 结果来跑 evaluation.py 里的句子级别评价指标 F1 和我用 iqiyi 的 FASPELL 的句子级别评价指标脚本算出来的会有些不同(FASPELL 的计算方式 F1 总是会低一些)。pycorrector 这里的指标计算看起来更加直观简单一些,所以想了解一下在指标对比计算上,这两种的哪一种会更加常用一些呢?

我用paddle改写了macbert方法,用Wang271K训练,效果远没达到指标,感觉是我有地方写的有问题

ZTurboX avatar Mar 05 '22 05:03 ZTurboX

@zhentaoCoding 我的做法是上面我说的训练集按9:1分训练集和验证集。用验证集loss最低时的模型参数来做评估。使用pycorrector 这边的评测方法可以达到差不多的效果。一个想法是你仅在Wang271k上(看起来你是没有加入其他的sighan数据)拟合好了之后,和SIGHAN15的错误类型分布有较大不同?

但我在网络基础上有加一些额外的结构和loss,没有做过原版网络的实验,所以也说只能是仅作参考啦。

okcd00 avatar Mar 05 '22 05:03 okcd00

@zhentaoCoding 我的做法是上面我说的训练集按9:1分训练集和验证集。用验证集loss最低时的模型参数来做评估。使用pycorrector 这边的评测方法可以达到差不多的效果。一个想法是你仅在Wang271k上(看起来你是没有加入其他的sighan数据)拟合好了之后,和SIGHAN15的错误类型分布有较大不同?

但我在网络基础上有加一些额外的结构和loss,没有做过原版网络的实验,所以也说只能是仅作参考啦。

我加入SIGHAN15训练数据试试

ZTurboX avatar Mar 05 '22 06:03 ZTurboX

@zhentaoCoding 我的做法是上面我说的训练集按9:1分训练集和验证集。用验证集loss最低时的模型参数来做评估。使用pycorrector 这边的评测方法可以达到差不多的效果。一个想法是你仅在Wang271k上(看起来你是没有加入其他的sighan数据)拟合好了之后,和SIGHAN15的错误类型分布有较大不同?

但我在网络基础上有加一些额外的结构和loss,没有做过原版网络的实验,所以也说只能是仅作参考啦。

加了SIGHAN15训练数据,指标就上去了

ZTurboX avatar Mar 07 '22 01:03 ZTurboX

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

stale[bot] avatar Aug 13 '22 08:08 stale[bot]