PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
22.07k stars 5.54k forks source link

无法计算BELU #66652

Open 2232293826 opened 1 month ago

2232293826 commented 1 month ago

请提出你的问题 Please ask your question

日志如下:

sort: multi-character tab ‘$/t’ WARNING: 07-27 00:09:40: register.py:25 140311556190400 Key WordsegTokenizer already in registry tokenizer. ERROR: 07-27 00:12:04: custom_static_generation_trainer.py:113 140311556190400 traceback.format_exc():Traceback (most recent call last): File "/mnt/ernie-gen/applications/tasks/text_generation/trainer/custom_static_generation_trainer.py", line 94, in do_train self.do_evaluate(self.data_set_reader.dev_reader, InstanceName.EVALUATE, steps) File "/mnt/ernie-gen/applications/tasks/text_generation/trainer/custom_static_generation_trainer.py", line 157, in do_evaluate self.model_class.get_metrics(fetch_output_dict, meta_info, phase, reader) File "/mnt/ernie-gen/applications/tasks/text_generation/model/ernie_infilling_generation.py", line 496, in get_metrics eval_res = self.eval.eval(outfile, phase, reader.features[phase]) File "/mnt/ernie-gen/erniekit/metrics/gen_eval.py", line 62, in eval eval_res[mertric] = eval_func(refs, preds) File "/mnt/ernie-gen/erniekit/metrics/gen_eval.py", line 75, in bleu return _compute_bleu(refs, preds, max_order=4)[0] File "/mnt/ernie-gen/erniekit/metrics/gen_eval.py", line 126, in _compute_bleu ratio = float(translation_length) / reference_length ZeroDivisionError: float division by zero

无法计算BELU,但是最后能够得到预测模型的文件,请问是哪里出现了问题,

luyao-cv commented 1 month ago

你好,报错信息和相关文件脚本请提供完整一些。

2232293826 commented 1 month ago

run_trainer_ernie_gen.py文件: ernie-gen.txt

在执行ernie-gen的问题生成的训练文件run_trainer_ernie_gen.py时,中间的eval过程无法正确计算出BLEU指标,报错reference长度为0,导致的除数为零错误。 环境配置境为 镜像:PaddlePaddle 2.2.0 Python 3.8(ubuntu18.04) Cuda 11.2 GPU:V100-32GB(32GB) * 1 CPU:6 vCPU Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz

luyao-cv commented 1 month ago

可是试下排查这些原因和解决。

  1. 检查数据集 确保 self.data_set_reader.dev_reader 中的验证数据集确实包含数据。 以及验证集是否正确加载,可以在 do_train 函数开始时打印验证集的大小来确认。

  2. 检查数据集格式 确认数据集格式是否正确,尤其是参考翻译文本和生成的翻译文本是否匹配。 以及确保 refspredsbleu 函数中传入的确实是正确的参考和预测值。

  3. 检查BLEU计算逻辑: 在 gen_eval.py 文件中的 _compute_bleu 函数中添加调试日志,检查 translation_lengthreference_length 的值。