python - Python中precision、recall、f-score、AP、MAP的信息检索评价

标签 python information-retrieval information-extraction

我写了一个程序来执行信息检索。
用户在搜索栏中输入查询,程序可以显示相关的文本结果,例如相关的句子和由该句子组成的文章。

我对如何评估结果做了一些研究。我可能需要计算 precision, recall, AP, MAP...

如何计算结果?

Since my dataset is not labeled and I did not do the classification. The dataset I used was the article from BBC news. there were 200 articles. I named it as 001.txt, 002.txt ... 200.txt

有没有人对如何在 python 中进行评估有任何想法。谢谢。

最佳答案

由于您是新手,我将简要介绍如何在信息检索系统中计算精度、召回率、fscore、AP 和 MAP。

准确率和召回率

“在我们检索到的所有相关文档中,有多少是真正相关的?”的精确度测量。

Precision = No. of relevant documents retrieved / No. of total documents retrieved

召回措施“在所有实际相关文档中,我们检索到多少是相关的?”。

Recall = No. of relevant documents retrieved / No. of total relevant documents

假设,当一个查询“q”被提交给一个信息检索系统(例如,搜索引擎)时,它有 100 个相关文档 w.r.t。查询“q”,系统从 600 份文档中检索出 68 份文档。在检索到的 68 份文件中,有 40 份文件是相关的。所以,在这种情况下:

Precision = 40/68 = 58.8%Recall = 40/100 = 40%

F-Score/F-measure 是准确率和召回率的加权调和平均值。传统的 F-measure 或平衡 F-score 是:

F-Score = 2 * Precision * Recall / Precision + Recall

平均精度

您可以这样想:您在 Google 中输入内容,它会显示 10 个结果。如果所有这些都是相关的,那可能是最好的。如果只有一些是相关的,比如其中五个,那么最好首先显示相关的。如果前五名无关紧要而好的只从第六名开始,那就太糟糕了,不是吗? AP 分数反射(reflect)了这一点。

举个例子:

enter image description here

AvgPrec of the two rankings:

排名#1:(1.0 + 0.67 + 0.75 + 0.8 + 0.83 + 0.6)/6 = 0.78

排名 #2:(0.5 + 0.4 + 0.5 + 0.57 + 0.56 + 0.6)/6 = 0.52

平均精度 (MAP)

MAP 是跨多个查询/排名的平均精度的平均值。举例说明。

enter image description here

Mean average precision for the two queries:

对于查询 1,AvgPrec: (1.0+0.67+0.5+0.44+0.5)/5 = 0.62

对于查询 2,AvgPrec: (0.5+0.4+0.43)/3 = 0.44

因此,MAP = (0.62 + 0.44)/2 = 0.53

有时,人们使用precision@krecall@k 作为检索系统的性能度量。做实验,可以使用知名数据集AOL Search Query Logs构建一个基于检索的系统(你只需要另外一个检索功能)然后用它做实验。我举一个文档排名函数的例子。

文档排序/检索功能

Okapi BM25(BM 代表最佳匹配)是搜索引擎用来根据匹配文档与给定搜索查询的相关性对匹配文档进行排名的排名函数。它基于概率检索框架。 BM25 是 bag-of-words检索功能,它根据每个文档中出现的查询词对一组文档进行排名,而不管文档中查询词之间的相互关系(例如,它们的相对接近度)。查看Wikipedia页面了解更多详情。

关于python - Python中precision、recall、f-score、AP、MAP的信息检索评价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40457331/

相关文章:

python - 打开文件夹中的所有文档并将它们放入列表中

python - 带有 q 列表的多级列 MultiIndex groupby 对象上的 Pandas 分位数

python - 处理 PDF 以进行信息提取

java - 如何使用 GATE 的 ANNIE 插件从文档中提取电子邮件 ID?

python-3.x - 使用 Spacy 训练 NER 从 Resume 中提取技能。过渡中的 U-entity_name 是什么意思

python - 如何对元组列表执行搜索

python - 如何在 Anaconda 中安装 binstar 包?

indexing - 快速内存倒排索引

java - vector 空间是多少?

python - 自定义信息提取 (NER) 的最佳方法