NLP 评测指标

328 阅读3分钟

F1 score | why softmax | loglikehood & cross-entropy

最近找工作面试涉及到了很多研一时候学习的基础知识,很多都忘记了,重新整理一下相关的问题,更侧重和NLP相关的一些知识。

F1 score

  • accuracy
  • precision
  • recall
  • f1 score

一位同学面试的时候设计被问到,机器翻译中的BLEU的计算,是以上中的哪一个? 首先,我们了解一下BLEU的计算方法(有一些改进,这里只说大概的思路): BLEU 会统计译文中n-gram在reference中出现的次数,作为分子; 译文中N-gram的个数作为分母; 其实我们来了解以上四个东西的含义:

label10
1(ground true)TPTN
0(ground false)FPFN

so, we define this:

accuracy=TP+FNTP+TN+FP+FNaccuracy = \frac{TP + FN }{TP + TN + FP + FN} 表示模型对整个样本分类正确的能力

precision=TPTP+FPprecision= \frac{ TP }{TP + FP} 表示模型认为正确的当中,有多少是真正正确的

recall=TPTP+FPrecall= \frac{TP }{TP + FP} 表示样本中正确的有多少被模型认为是正确的

那么,根据以上的定义,首先BLEU的分母,是模型认为正确的项(解码每次出来V个词,选择概率最大的,认为是正确的,但其实未必选择的是正确的!)

分子项表示的是reference和模型都认为是正确的项; 故,BLEU是precision;

why softmax

这个问题,感觉困扰了我很久。 其实模型输出的就是一个分布,最开始以为softmax就是做一个归一化,后来想想,其作用远不止于此(感慨数学的美妙啊)。 根据名字来看,soft max,就是说可以不是最大的哪一个... 比如翻译里面,其实不一定非得选择最大的哪一个,其次大的,说明语义可能相似。 那么为啥softmax可以做到这一点,其实大家自己手动推一下就会发现,如果softmax之前是0-1之间的小数,那么softmax之后,分布概率差会减少... 另外,还有一些优点:

1。 softmax做分类任务,其损失函数可以直接定义为交叉熵;

2。计算梯度比较方便,因为softmax导数是概率-1;

loglikehood & cross-entropy

关于loglikehood和cross-entropy到底是什么关系,感觉大家一直对此是模模糊糊的。先放出目前自己的结论: 在分类问题上,两者形式上是等价的,负的似然跟交叉熵一致,但是考虑的角度不同。

根据定义来看,cross-entropy公式定义的是真实概率分布(p(x)p(x))和模型预测的概率分布(q(x)q(x))之间的关系,H(p,q)=plogqH(p,q) = -\sum p*log q

直观上来看,其实表示了预测结果和真实结果的差异度;如果是0,说明百分百是正确的,所以交叉熵是越小越好。

而最大似然的出发点是从样本,如果模型的参数能拟合样本,那么predict label应该和true label的一致,也就是说predict 隐含着模型参数拟合样本的能力;

loglikehood希望能获取所有样本特征,所以是每个样本正确分类的乘积形式,取对数之后就是log累加;对每个样本的正确分类概率,假设是独立同分布的话,那么其实就是伯努利分布; 相关推导也不难,就不再写了..

从结构化预测,或者是从机器翻译(生成任务)的角度来剖析: 我们每次产生token的时候,其实做了一个假设,就是真实分布是一个词表大小的one-hot的分布,模型预测的其实是一个softmax的分布,然后交叉熵计算的其实是这两个分布的差距。 这里其实就有点...嗯就是损失定义有些无法解释。

本文同步在个人博客开启掘金成长之旅!这是我参与 「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情