BLEU定义: 其中lenlabellenlabel表示标签序列中的词元数和lenpredlenpred表示预测序列中的词元数,kk是用于匹配的最长的n元语法。另外,用pnpn表示nn元语法的精确度,它是两个数量的比值:第一个是预测序列与标签序列中匹配的n元语法的数量,第⼆个是预测序列中n元语法的数量的比率。 例如:给定标签序列A、B、C、...
len_{label}和len_{pred}代表标签序列和预测序列中的词元数,即句子长度。第一项指数项用来惩罚过短的预测序列。比如label长度5,预测长度2,那么第一项就是exp(-1.5),小于完美预测的exp(0)。 第二项中的pn代表n-gram精确度,比如标签序列ABCDE,预测序列是ABCCD。 预测序列中一元语法匹配了A,B,C,D四个项,标...
设 lenlabel和lenpredlen_{label}和len_{pred}lenlabel和lenpred 分别为标签序列和预测序列的词数,那么,BLEU的定义为: exp(min(0,1−lenlabellenpred))∏n=1kpn12nexp(min(0,1-\frac{len_{label}}{len_{pred}}))\prod_{n=1}^{k}p_n^{\frac{1}{2^n}}exp(min(0,1−lenpred...
def bleu(pred_seq, label_seq, k): #@save """计算BLEU""" pred_tokens, label_tokens = pred_seq.split(' '), label_seq.split(' ') len_pred, len_label = len(pred_tokens), len(label_tokens) score = math.exp(min(0, 1 - len_label / len_pred)) for n in range(1, k + 1)...
如果label很短,但是pred很长,这样会命中很多,所以要进行惩罚min(0,1−lenlabellenpred)min(0,1−lenlabellenpred) 代码 QA encoder输出和decoder输入,concat和按位相加起来有什么区别吗? 它们可能长度不一样,所以是不能相加的,这里只要保证他们的隐藏单元数量相同(列宽相同),就可以进行拼接操作。
# `label` 的形状:(`batch_size`, `seq_length_tgt`) # `valid_len` 的形状:(`batch_size`,) defforward(self, pred, label, valid_len): weights=torch.ones_like(label)#按照label的shape进行单位矩阵初始化 weights=seque...
len的形状:(batch_size,)defforward(self,pred,label,valid_len):weights=torch.ones_like(label)...
# `valid_len` shape: (`batch_size`,) # `pred` 的形状:(`batch_size`, `num_steps`, `vocab_size`) # `label` 的形状:(`batch_size`, `num_steps`) # `valid_len` 的形状:(`batch_size`,) def forward(self, pred, label, valid_len): ...
eos_pred=max_caption_len-1 eos=cap_len[i]-1 forjinrange(0,max_caption_len): ifpred[i][j]==special_tokens['<EOS>']: eos_pred=j break myid=id_batch[i] pre=list(map(lambdax:idx2word[x] ,pred[i][0:eos_pred]) ) lab=list(map(lambdax:idx2word[x] ,la...
classMaskedSoftmaxCELoss(nn.CrossEntropyLoss):defforward(self,pred,label,valid_len):weights=torch.ones_like(label)weights=sequence_mask(weights,valid_len)self.reduction='none'unweighted_loss=super().forward(pred.permute(0,2,1),label)weighted_loss=(unweighted_loss*weights).mean(dim=1)returnweight...