如何精确地计算召回率

前提描述:召回率=(结果中预测正确的数量)/(总正确数量),因此也叫查全率。在本代码中,entityres是预测的分词序列,entityall是正确的分词序列,rightpre是预测结果正确的分词序列。

计算rightpre方式:rightpre = [i for i in entityres if i in entityall]

召回率recall=rightpre/entityall

由于预测的输出比正确值粒度更细,也就是len(entityres)=258727,len(entityall)=217807,故上述方式得到的结果len(rightpre)=235134比正确值长度更大。此种方式算出召回率为1.07

因此可以看出算法rightpre = [i for i in entityres if i in entityall]存在问题,举个例子,‘的'在entityall实际只存在一次,但在entityres分词中,分到了6个'的',那么这6个'的'都会计入rightpre中,即是recall算法存在虚高,即使换成rightpre = [i for i in entityall if i in entityres],也只能保证召回率的值小于1,不能解决其值虚高的问题。

问题描述:给定两个列表a和b,且其长度不相同(a长于b),如何找出既在a也在b的元素,且保证其位置大致一样?

现在想到的办法是,由于entityres比entityall长4w个,就在entityall每个元素后4w的范围内查找entityres对应的元素。但感觉精度也不够高

 

 

 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^