wenyu332 / daguan_bert_ner

30 stars 13 forks source link

请教,更改max_seq_len之后还需要改哪些地方 #16

Open dh12306 opened 5 years ago

dh12306 commented 5 years ago

如题,训练了5个epoch,生成submit时,发现第79行的预测有问题,因为max_seq_len=200,当文本长度大于200时,预测结果只有198个,submit的样本最大长度436,当改了max_seq_len的时候,就会报错,大概是维度不匹配的错,如下图,想请教下@wenyu332 大神这个max_seq_len 改了之后还需要改哪里: gpu 报错如下: image

cpu 报错如下:

image

lizhzh8 commented 5 years ago

max_seq_len 直接改就行。你用生成的predict.txt 去做submit.txt。卡住的地方,自己人工看原因,解决就行了。没有几条的,有可能是模型还是有点小问题。

dh12306 commented 5 years ago

max_seq_len 直接改就行。你用生成的predict.txt 去做submit.txt。卡住的地方,自己人工看原因,解决就行了。没有几条的,有可能是模型还是有点小问题。

改了报错啊,二楼

lizhzh8 commented 5 years ago

我改成过300,没有报错.可能是别的参数不太对吧. 我猜是5个epoch的问题.你得增加增加

wenyu332 commented 5 years ago

关于句子长度问题:语料库、训练集、测试集中的句子长度在200以下的占比在96%-98%之间。与训练所需时间相比,这个长度我觉得是比较合理的。所以在训练模型的时候我把句子长度定为200。当然,对于长度大于200的句子,超过200之后的实体肯定是被丢弃掉了,但这个在最后的成绩中并不会是占主导因素。如果你有更好的机器,那你句子长度可以更大,我之前统计的是如果你设置为512,可以覆盖所有的训练和测试集。

第二个问题:由于设置的学习率比较小,lstm的学习速度会比较慢,如果迭代次数比较小的话会出现大量的错误标签,而我写的标签转换方法只考虑了生成的标签符合规则。出现不符合规则的标签样式肯定是不能自动转换,这个时候就需要你手动去改为正常的样式。

比如,在正常规则下,a-B 后面只能跟a-E a-M 这两种标签,如果出现其它的标签你可以大概判断一下后面接哪个,改为正确的就行。

dh12306 commented 5 years ago

关于句子长度问题:语料库、训练集、测试集中的句子长度在200以下的占比在96%-98%之间。与训练所需时间相比,这个长度我觉得是比较合理的。所以在训练模型的时候我把句子长度定为200。当然,对于长度大于200的句子,超过200之后的实体肯定是被丢弃掉了,但这个在最后的成绩中并不会是占主导因素。如果你有更好的机器,那你句子长度可以更大,我之前统计的是如果你设置为512,可以覆盖所有的训练和测试集。

第二个问题:由于设置的学习率比较小,lstm的学习速度会比较慢,如果迭代次数比较小的话会出现大量的错误标签,而我写的标签转换方法只考虑了生成的标签符合规则。出现不符合规则的标签样式肯定是不能自动转换,这个时候就需要你手动去改为正常的样式。

比如,在正常规则下,a-B 后面只能跟a-E a-M 这两种标签,如果出现其它的标签你可以大概判断一下后面接哪个,改为正确的就行。

get~,谢谢