一、 无论如何调参训练,loss都无法下降,而且训练后的loss与开始时相比仅仅小了一到两个数量级?
再次仔细认真查看语料,分以下几个方面:
1. 查看语料格式是否完整统一,前后是否需要空格,每个字之间是否有空格都需要仔细检查。
2. 检查语料内容,是否同一语句在label语料中对应不同。自然语料与label语料应该是一对多的关系,即一条label语料应该有很多种自然语言说法,但是每条自然语料对应label中的一种。
3. 检查label语料中每一行的关键字是否完整
语料的好坏是训练模型的基础,很重要!
二、train完成后infer出现现象为某些输出增多,比如
期望输出:sms $object cond type = number & trans-info = $trans-info
,
实际输出:sms $object cond type = number & trans-info = $trans-info & trans-info = $trans-info
,
期望输出:sms object
实际输出:sms object trans-info = $trans-info
这个问题是由于在预料中采样的时候,由于较长的字符串长度可能为20多,较短的字符串长度为1或者2,那么将长短不一的字符串在同一次batch训练中都采集到,就需要对较短字符串进行补位,在这个补位的过程中就有可能出现这样的问题。
解决思路:
1. 将语料按照长短放进不同的bucket中,长度相近的放进同一个bucket中。
2. 每次采样训练的时候在一个bucket中进行采样,这样就保证了不会出现长短差较大的字符串。注意:batch_size 不能大于最小bucket的容量。
通过这种方法解决了上述问题
网友评论