Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

en2zh的实验,在decode阶段,出现空行 #70

Open
wwy510553871 opened this issue Aug 15, 2019 · 18 comments
Open

en2zh的实验,在decode阶段,出现空行 #70

wwy510553871 opened this issue Aug 15, 2019 · 18 comments

Comments

@wwy510553871
Copy link

我利用thumt的训练transformer模型和一个自己实现的改进模型,但在decode阶段,en翻译成zh会出现大量空行,暂时无法确定问题的原因,而在zh-en方向并没有出现这个问题,请问各位,有出现过类似的情况吗,或者有可能造成这种情况的原因呢
麻烦各位啦

@GrittyChen
Copy link
Member

@wwy510553871 请问这种情况是出现在thumt训出来的模型中还是出现在您自己改进的模型中?

@wwy510553871
Copy link
Author

@GrittyChen 普通的transformer还是我自己的改进模型都出现了这种情况,在en-zh方向出现大量空输出

@GrittyChen
Copy link
Member

@wwy510553871 我们自己用中英数据测试没有出现过这种情况,建议您打印一下模型输出的id,即未用词表解析之前的结果看一下。

@wwy510553871
Copy link
Author

@wwy510553871 我们自己用中英数据测试没有出现过这种情况,建议您打印一下模型输出的id,即未用词表解析之前的结果看一下。

我把那些输出空行的句子,组成了一个一个新的小测试集,并输出了一下输入id和输出id,发现输入id是正常的,但是模型输出的id都是一个UNK然后PAD,即[1,0,0,......]
image

@wwy510553871
Copy link
Author

@GrittyChen 这种情况下,是由于模型的因素造成的吗,即模型就把这些句子翻译成了这个答案吗

@GrittyChen
Copy link
Member

@wwy510553871 我看你这情况挺奇怪的,第一个就是EOS,一般来说只要训练数据正常不可能将模型训练成这个样子,你用的多大的数据训的模型?可以尝试一下增加数据重训模型或者将模型多训几轮,看看还有没有这个现象。

@wwy510553871
Copy link
Author

@GrittyChen 嗯嗯,谢谢你的回答,我考虑重新训练一下,我的数据量大概有3000万,这是训练了20万step后的结果。我还想咨询一下这个训练速度正常吗,大概用了一个星期时间,才训练了20万step

@wwy510553871
Copy link
Author

我的机器是单卡P40, 参数基本和UserManual.pdf中一致
image

@Glaceon31
Copy link
Collaborator

请问你训练英中的时候,loss的变化正常么?你可以尝试就拿数据集的几十句话训练,再在相同的几十句话上进行解码看看是否正常,如果仍然不正常可能是数据处理的问题。另外可以把测试用的命令也给我们发一下。

@GrittyChen
Copy link
Member

@wwy510553871 这个训练速度是正常的,而且你的训练数据量也够大,建议在重新训练之前检查一下数据,词表以及参数等等。

@wwy510553871
Copy link
Author

@Glaceon31 loss看起来是比较正常的,如下图
image
测试脚本如下
image
可以尝试一下您说的方法验证一下,谢谢

@wwy510553871
Copy link
Author

@GrittyChen 嗯嗯,我现在重新走一遍,检查一下,谢谢你们的帮助

@Glaceon31
Copy link
Collaborator

训练脚本中--parameter这一行双引号嵌套了,双引号都可以去掉
--parameter train_steps=1000000,...,position_info_type=absolute,...
另外测试脚本中--checkpoint应使用${model_storage_path}\eval。eval里存的是在开发集上最好的几个模型点,不过这个应该不会导致完全翻不出东西。

@wwy510553871
Copy link
Author

@Glaceon31 双引号那个,我不太确定原因,我不加双引号,我这边会报错,无法识别--parameter这个参数,测试脚本那里,我原来用的是${model_storage_path}\eval,我想试试是不是这个checkpoint有问题,就换成${model_storage_path}中最新的checkpoint了,发现仍有空输出,但是空输出的行和之前eval里的checkpoint空输出的行不同

@wwy510553871
Copy link
Author

@Glaceon31 按照您说的方法验证了一下,用1000条训练集训练模型,测试集也采用这1000条进行测试,训练到2000step,loss已经非常低了,但测试集的输出中仍有少量空行

@Glaceon31
Copy link
Collaborator

空行是随机出现的还是固定几句话就是空?如果是后者单独检查下那几句话。

@wwy510553871
Copy link
Author

@Glaceon31 不同的checkpoint会有不同的空行输出

@Glaceon31
Copy link
Collaborator

可以试试看把训练数据的id打出来,问题应该是很多输入正常的时候输出的第一个token id是1,对应句尾符,可能训练数据里面存在一部分数据就是这样的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants