dd9*_*90p 1 evaluation information-retrieval information-extraction
我有关于如何评估信息检索结果是否良好的问题,如计算
相关文件排名,召回,精确度,AP,MAP .....
目前,一旦用户输入查询,系统就能够从数据库中检索文档.问题是我不知道如何进行评估.
我得到了一些公共数据集,例如 它包含的"Cranfield collection" 数据集链接
1.document 2.query 3.relevance asments
DOCS QRYS SIZE*
Cranfield 1,400 225 1.6
Run Code Online (Sandbox Code Playgroud)
我可以通过使用"Cranfield collection"来计算相关的文档排名,召回率,精度,AP,MAP .....
我可能需要一些想法和方向.不要求如何编写程序代码.
文件排名
Okapi BM25(BM代表最佳匹配)是搜索引擎根据其与给定搜索查询的相关性对匹配文档进行排名的排名函数.它基于概率检索框架.BM25是一种词袋检索功能,其基于出现在每个文档中的查询词来对一组文档进行排序,而不管文档内的查询词之间的相互关系(例如,它们的相对接近度).有关详细信息,请参阅Wikipedia页面.
精确和召回
精确度量"我们检索的所有文件中的相关数量实际相关多少?".
Precision = No. of relevant documents retrieved / No. of total documents retrieved
Run Code Online (Sandbox Code Playgroud)
召回措施"在所有实际相关文件中,我们检索了多少相关的文件?".
Recall = No. of relevant documents retrieved / No. of total relevant documents
Run Code Online (Sandbox Code Playgroud)
假设当查询"q"被提交给具有100个相关文档的信息检索系统(例如,搜索引擎)和查询"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
Run Code Online (Sandbox Code Playgroud)
平均精度
你可以这样想:你输入内容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作为检索系统的性能测量.您应该为此类测试构建检索系统.如果要用Java编写程序,则应考虑使用Apache Lucene来构建索引.