persona icon indicating copy to clipboard operation
persona copied to clipboard

在运行evaler.py文件时,生成的都是special token

Open binshuyi opened this issue 3 years ago • 6 comments

1 2 这问题可能因为什么导致的,或者应该如何解决呢?

binshuyi avatar Dec 28 '21 05:12 binshuyi

@binshuyi 不好意思,刚看到你的问题。 先要确定是训练的问题还是数据或模型的问题,训练过程中loss是多少?下降曲线正常吗?

ghosthamlet avatar Jan 27 '22 07:01 ghosthamlet

@binshuyi不好意思,刚看到你的问题。先要确定是训练的问题还是数据或模型的问题,训练过程中loss是多少?下降曲线正常吗?

感谢您的回复。Train Loss: 3.963 ; Val. Loss: 3.953 ;Test Loss: 3.951。下降曲线正常

binshuyi avatar Jan 27 '22 13:01 binshuyi

试试在forward之前,打印一下所有输入数据,同时把输入数据decode为文本也打印出来。 如果数据都显示正常没问题,那可能是loss还太高,生成模型的loss一般在3以内效果才比较好。 不过生成的内容全是pad,这比较奇怪,如果你修改过模型或loss计算代码,那可能是模型或loss计算的问题,需要再检查调试这些代码。

ghosthamlet avatar Jan 28 '22 02:01 ghosthamlet

您好,我运行代码时也有这个问题,请问是什么情况呢,对代码未修改。并且运行时target与pred不对齐,产生报错。

Context: 在[UNK][UNK][UNK][UNK][UNK][UNK]。[UNK][UNK][UNK]都[UNK]了[UNK][SEP][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD] LM x: [BOS]是[UNK][EOS][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD] LM y: 是[UNK][EOS][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD] Pred: 骞雕[EOS][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD] Target: 是[UNK][EOS][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD] Pred: ど塞[EOS][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD][PAD] Target: [UNK][UNK]你也[UNK]吃?[EOS][PAD][PAD][PAD][PAD][PAD][PAD][PAD]

ValueError: ('The preds and target should have the same shape,', ' got preds with shape=torch.Size([11, 16]) and target with shape=torch.Size([11, 15]).')

Fang-git0 avatar Mar 25 '22 12:03 Fang-git0

@Fang-git0 不好意思,刚看到你的问题。 现在各个依赖类库都升级很快,本代码库已经两年多没有维护,可能出现各种不兼容;另外聊天AI的研究发展更快,本代码库方法早已过时,所以我不建议你再用本代码库,不如找一些最近发布的相关论文和代码研究更合适。

ghosthamlet avatar Mar 28 '22 02:03 ghosthamlet

@binshuyi @Fang-git0 我这边去除掉 package 一堆的版本问题外,大概有三个问题。 问题一,出现 [UNK] 的大概率原因是因为数据文件里出现了多个字组成的 token,但是原作者的代码无法识别这些多字组成的 token,所以出现了 [UNK]。解决方案大致是数据中只要有两个字符都不为空格就在中间加上一个空格,把这些多字的词全部拆开就行了。

问题二,我这里还出现了输出乱码(非 [UNK] 这样的特殊字符,类似于锟斤拷)的问题,原因是 python 默认是 utf-8,但是代码中却要输出 Unicode 字符,这种情况在 eval 的时候执行 PYTHONENCODING=UTF-8 python evaler.py --config_file configs/evaler.yaml 就可以解决。

问题三,忘记是 test set 还是 valid set 里面混入了只有单人说话的数据,由于处理数据的代码有一处是用了两个 persona,这里第二个处理了不存在的人因而导致了错误,特判一下不满两个人的数据直接扔掉就好。

poplpr avatar Aug 09 '22 14:08 poplpr