我编写了一个程序来进行信息检索和提取。用户在搜索栏中输入查询,程序可以显示相关的txt结果,例如相关的句子和包含该句子的文章。
我做了一些关于如何评估结果的研究。我可能需要计算精度,召回率,AP,MAP...。
但是,我是新来的。如何计算结果。由于我的数据集未标记,因此我没有进行分类。我使用的数据集是BBC新闻中的文章。有200篇文章。我将其命名为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分数/ F度量是精度和查全率的加权谐波平均值。传统的F度量或平衡F分数是:
F-Score = 2 * Precision * Recall / Precision + Recall
平均精度
您可以这样想:在
Google
中键入内容,它会显示10条结果。如果所有这些都相关,那可能是最好的。如果只有一些相关,例如说五个,那么最好先显示相关的。如果前五个无关紧要而好的仅从第六个开始,那将是不好的,不是吗? AP分数反映了这一点。下面举一个例子:
AvgPrec的两个排名:
排名第一:
(1.0 + 0.67 + 0.75 + 0.8 + 0.83 + 0.6) / 6 = 0.78
排名第二:
(0.5 + 0.4 + 0.5 + 0.57 + 0.56 + 0.6) / 6 = 0.52
平均平均精度(MAP)
MAP是多个查询/排名中平均精度的平均值。举例说明。
这两个查询的平均平均精度:
对于查询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@k
,recall@k
作为检索系统的性能指标。为了进行实验,可以使用众所周知的AOL Search Query Logs数据集构建基于检索的系统(您仅需要一个检索功能),然后进行实验。我举一个文件排名功能的例子。文件排名/检索功能
Okapi BM25(BM代表最佳匹配)是搜索引擎用来根据匹配文档与给定搜索查询的相关性对其进行排名的排名功能。它基于概率检索框架。 BM25是bag-of-words检索功能,它基于每个文档中出现的查询词对一组文档进行排名,而不管文档中查询词之间的相互关系(例如,它们的相对接近度)。有关更多详细信息,请参见Wikipedia页。