我编写了一个程序来进行信息检索和提取。用户在搜索栏中输入查询,程序可以显示相关的txt结果,如相关句子和构成句子的文章。
我做了一些关于如何评估结果的研究。我可能需要计算精度,召回率,AP,MAP ....
然而,我是新手。如何计算结果。由于我的数据集未标记,我没有进行分类。我使用的数据集是BBC新闻的文章。有200篇文章。我把它命名为001.txt,002.txt ...... 200.txt
如果你有任何想法如何在python中进行评估,那将是很好的。感谢。
答案 0 :(得分:3)
由于您是新手,我将简要介绍如何在信息检索系统中计算精度,召回率,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得分反映了这一点。
举一个例子:
AvgPrec的两个排名:
排名#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是多个查询/排名的平均精度的平均值。举例说明。
两个查询的平均平均精度:
对于查询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页面。
答案 1 :(得分:0)
评估有两个基本要点。第一个是测试资源,其中包含特定查询的文档或相关性标记(相关或不相关)的排名,这是通过实验(如用户点击等)进行的,主要用于运行IR系统时),或通过众包获得。评估的第二个重要部分是用于评估具有测试集合的IR系统的公式。 因此,根据您的说法,如果您没有标记的测试集合,则无法评估您的系统。