CBART
CBART copied to clipboard
关于replace label
训练阶段构造的数据有0,1,2的分类,其中1表示替换,而论文中说推理阶段不需要替换,但是在推理时构造indicate_labels += [1] + [0] * (len(ids) - 1)这里添加进很多1,是为什么呢
indicate_labels 是为了记录每个词语的开始位置。和论文中encoder labels 中0, 1, 2的含义不同。 假如给定的某个词语被切分以后得到了三个子词a,b,c, 那么对应的labels 就是[1,0,0]。为了保证原来的词语完整,那么就不允许在a, b, c之间插入新的子词,而只允许在原来词语的首个子词(即a)前面插入词语。这里的1指得是当前子词前面可以插入新词。 很抱歉代码的细节我记不太清了,细节你可以参考代码。
好的。那么训练时为什么要定义成3分类而不是2分类呢,如果推理阶段只需要插入新词的话,为什么需要替换操作。我看到构造合成数据时,专门构造了一些只含有替换操作的数据(比如create_replaced_samples)