用于读取和分析trec结果的python工具包。

trectools的Python项目详细描述


#trec tools是一个开源的python库,用于帮助信息检索(ir)从业者进行类似trec的活动。

如果这个软件包对您的研究有所帮助,请参考我们的论文:

````
@inproceedings{palotti2019,
author={palotti,joao and scells,harrisen and zuccon,guido},
title={trectools:a open source python library for information retrieval perfectives involds in trec like campaims},
series={sigir'19},
年份{2019},
地点{法国巴黎},
出版商{acm}
}
````

求助于使用许多不同的软件工具和脚本,每个工具和脚本执行一个单独的功能,有时他们甚至不得不实现自己的特别脚本。Trectools旨在为执行这些常见活动提供一个统一的环境。



评估活动的每个关键组件都映射到一个类:运行类(trecrun)、主题/查询(trectopic)、评估池(trecpools)、相关性评估(trecqrel)和评估结果(trecres)。[请参阅下面每个对象的文件格式](https://github.com/joaopalotti/trec_tools file formats)。
评估结果可以由trectools本身使用该工具中实现的评估度量生成,也可以从trec豸u eval和导数的输出文件导入。目前在trectools中实现的功能有:

-**查询ir系统:**可以直接从集成在trectools中的ir工具包中获取基准运行。支持向[indri](https://www.lemurproject.org/indri/)和[terrier](http://terrier.org/)工具包发出全文查询。未来的版本将包括其他工具包(例如,[弹性搜索]),[安塞里尼](https://dl.acm.org/citation.cfm?)id=3239571),等等)并支持特定的查询语言(indri的查询语言,布尔查询)。请参阅[示例1]中的代码snipets(https://github.com/joaopalotti/trec_tools_example-1)。

-**池技术:**实现了从运行集创建评估池的以下技术:[depth@k](https://sigir.org/files/museum/pub-14/pub_14.pdf),[梳[最小/最大/医疗/总和/澳新银行/mnz](http://citeserx.ist.psu.edu/viewdoc/download?doi=10.1.1.100.9316&rep=rep1&type=pdf),[take@n](https://link.springer.com/chapter/10.1007/978-3-319-56608-5_28),[rrftake@n](http://citeserx.ist.psu.edu/viewdoc/download?doi=10.1.1.150.2291&rep=rep1&type=pdf),[rbptake@n](https://people.eng.unimelb.edu.au/jzobel/fulltext/acmtois08.pdf)。[见示例2](https://github.com/joaopalotti/trec_tools example-2)。

-**评估措施:**目前实施和验证的措施包括:深度k处的精确性、深度k处的回忆、地图、ndcg、bpref、[ubpref](http://zuccon.net/publications/sigir2016_l2r_u readability.pdf)、[rbp]((https://people.eng.unimelb.edu.au/jzobel/fulltext)/acmtois08.pdf),[城市规划](https://link.springer.com/chapter/10.1007/978-3-319-30671-1_21)。在trectools中实现的选项是使用文档分数(即类似于trec_eval)或文档排名(即类似于[rbp]的原始实现(https://people.eng.unimelb.edu.au/ammoffat/abstracts/mz08acmtois.html
)来打破联系。此外,trectools还允许计算评估度量的残差,并分析未评估文档的相对存在性。[见示例3](https://github.com/joaopalotti/trec_tools_example-3)。

-**相关性和协议分析:**可以计算系统排名之间的纵火、斯皮尔曼、肯德尔和τ-ap相关性[(见示例4)](https://github.com/joaopalotti/trec_tools_example-4)。相关性评估集之间的一致性度量可以使用kappa或jaccard[见示例5](https://github.com/joaopalotti/trec_u tools example-5)获得。

-**融合技术。**运行可以使用以下技术进行融合:comb[max/min/sum/mnz/anz/med]-两者都使用分数并记录排名、rbpfusion、rrffusion或bordacountfusion。融合技术可用于荟萃分析。[请参阅示例6](https://github.com/joaopalotti/trec_u tools_example-6)。




**trecrun format**


其中:
-**qid**是查询号
-**q0**是文本q0
-**docno**是返回给qid的文档的id
-**rank**(1-999)是此qid的此响应的排名
-**score**是系统-响应质量的相关指示
-**标记**是系统的标识符

示例:
1 q0 nhslo3844_12_012186 1 1.73315273652 mysystem
1 q0 nhslo1393_12_003292 1.72581054377 mysystem
1 q0 nhslo3844_12_002212 1.725227817 mysystem
1 q0 nhslo3844_12_012182 4 1.72522727817 mysystem
1 q0 nhslo1393_12_003296 5 1.71374426875 mysystem

**trecqrel format**


其中:
-**qid**是查询号
-**0**是文本0
-**docno**是您收藏中文档的ID在
-**上,相关性**是关于qid的docno的相关性如何


例如:
>1 0 aldf.1864 12 12 12 12 12 12 12
>1 0 aller1867 12 12 12 12 12
>1 0 aller1867 12 12 12 12 12 12
>1 0 aller1868 12 12 12 12 0
>1 0 aller1871 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
>1 0 arthr0949 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
>1 0 arthr0949 12 9 9 9 9 9 12 12 12 12 12 12 12 12
>1 0 arthr0949 9 9 9 9 9 9 9 9 9 9 9 9 9格式**

label qid value

,其中:
-**label**是任何字符串,通常表示一个度量值
-**qid**是一个查询号,或者"all"表示一个聚合值
-**value**是一个度量值的数字结果

示例:
num rel\u ret 7 77
map7 0.4653
p_.9000
num戋ret all 1180
map all 0.1323
gm戋map all 0.0504




`` python
从trectools导入trecqrel,过程

qrels_file="./qrel/robust03_qrels.txt"
qrels=trecqrel(qrels_file)

(path_to_runs,"*.gz")


results=procedures.evaluate_runs(runs,qrels,per_query=true)
p10=procedures.extract_metric_from_results(results,"p_10")
procedures.plot_system_rank(p10,display_metric="p@10")
robust03中每个参与团队一次运行的示例输出:
'BR/>![(robust03/robust03.png)

s.txt)
"
<;topics>;
<;topic number="201"type="single">;
<;query>;amazon raspberry pi<;/query>;
<;description>;您已经听到了很多关于廉价计算是未来发展方向的说法,
包括一种叫做raspberry pi的最新型号。你开始考虑买一个,并想知道它们的价格。
<;/description>;
<;/topic>;
<;/topics>;
"
topics=trectopics()。从"fi"中阅读"topics"或者…从python字典中加载主题
topics=trectopics(topics={'201':u'amazon覆盆子皮})
topics.printfile(fileformformat="terrier")
<;topics>;
<;top>;
>;
>;lt;lt;num>;201<;lt;gt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt比尔/>#>;

<;





>topics.printfile(fileformat="indri")
<;参数>;
<;trecfformat>;lt;trecfformat>;true;lt;trecfformat>;
>;
>;
<;
>;
>;
>;
>;
>;
>;
;lt;lt;lt;gt;
;lt;lt;lt;gt;
;lt;lt;lt;lt;gt;lt;gt;lt;gt;>;
;lt;lt;lt亚马逊覆盆子皮)<;/text>;
<;/query>;
<;/




>topics.printfile(fileformat="indribaseline"
<;参数>;
<;trecfformat>;真的;lt;trecfformat>;真的;lt;trecfformat>;
<;查询>;
>;
>;
<;id>;201<;lt;id>;
>;
>;亚马逊树莓皮<;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt/查询>;
<;/参数>;

tt=trectrier(bin掼path="<;path>;/terrier/bin/")掼trec掼terrier.sh所在位置
掼从terrier运行pl2模型,查询扩展
tr=tt.run(index="<;path>;/terrier/var/index",topics="topics.xml.gz",qexp=true,
model="pl2",result掼file="terrier.baseline",expterms=5,expdocs=3,expmodel="bo1")

ti=trec indri(bin-path="~/<;path>;/indri/bin/")indrirunquery所在的位置
ti.run(index="<;path>;/indriindex",topics,model="dirichlet",parameters={"mu":2500},
result\file="trec\u indri.run",ndocs=1000,qexp=true,expterms=5,expdocs=3)
```

示例2


用于使用不同池策略生成和导出文档池的代码段。

``python
from trectools import trecpool,trecrun

r1=trecrun("./robust03/runs/input.aplrob03a.gz")
r2=trecrun("./robust03/runs/input.uiu"c03rd1.gz"

len(r1.topics())\100 topics


\TS.

策略2:使用Gordon、Clake和Buettcher的对等排名策略创建一个包含2000个文档(每个主题20个)的池:
pool2=trecpool.创建一个包含2000个唯一文档的池([r1,r2],strategy="rrf",topx=20,rrf="den=60")。

更好地运行r1
pool1.检查覆盖率(r1,topx=10)10.0
pool2.检查覆盖率(r1,topx=10)8.35

可视化评估系统
pool1.export_document_list(filename="mypool.txt",with_format="relevation")
`````

````````````示例3


显示trectools中可用案例评估选项的代码片段。
``python
从trectools导入trecqrel、trecrun、treceval

pical评估工作流
r1=trecrun("/robust03/runs/input.aplrob03a.gz")
r1.topics()[:5];显示前5个主题:601、602、603、604、605


te=treceval(r1,qrels)
rbp,residuals=te.getrbp().rbp:0.474,残差:0.001
p100=te.getprecisionatdepth(100)p@100:0.186

'参与Robust03,1000个文档中有480个被判定。

64

使用双尾学生t-test对p_10进行两次运行之间的p_10进行两次运行之间的p_10测试
pvalue=result_r1。与(result_r2,metric="p_10")pvalue:0.0167
```` `

<
` br/>
le="../robust03/qrel/robust03/robust03-qrells.txt"
path-u-to_-runs="../robust03/runs/"



qrells=trecqrel(qrells_文件)




















检查p@p@runs=u-path路径(path-to_-runs,".gz,".gz.gz,"




;检查p@10和地图使用Kendall's Tau参与活动的所有系统
Misc.get_correlation(Misc.sort_system s_by(results,"p_10"),
Misc.sort_systems_by(results,"map"),correlation="kendall")correlation:0.7647

对于参与活动的所有系统,使用tau's ap检查p@10和map之间的系统相关性
Misc.get_相关性(misc.sort戋u systems戋by(results,"p戋10"),
misc.sort戋u systems戋by(results,"map"),correlation="tauap")戋相关性:0.77413
`````

n两组相关性评估(例如,由不同队列进行-由医生进行的评估与众包评估)
来自Trectools import trecqrel




>原始的_qrells=trecqrel(原始的_qrells_qrells_qrell文件)
>修改的_qrells=trecqrel(修改的_qrells_qrells_文件)

>整体协议
>原始的_qrells.check_qrells协议(修改的qrells)0.99
fleiss'kappa协议
>原始的qrells.check _kappa(修改的qrells)p:1.00,pe-qrels=trecqrell(修改的qrel(修改的qrells qrell=0.90
提花相似系数
原始值最后一个是最后一个。检查一张按摩卡(改良的0.99
3x3混淆矩阵(标签0、1或2)
原始的检查混淆矩阵(改良的矩阵)
[122712 10 0 0]
[0 5667 0 0 0 0 407]
````



//示例6

在这里所示)

``python
python
from trectools import trecrun,treceval,fusion

r1=trecrun(/robust03/runs/runs/input.aprobrob03a.gz)r2=trecrun(/robust03/runs/input.uiuc03rd1.gz)r2=trecrun(/robust03/runs/input.uiuc03rd1.guiuc03rd1.gz)


python通过融合现有的运行来创建新基线的简单方法:
fusserun fusserun=fusion.fusion,倒数秩融合([r1,r2])<(r1,qrels)。p@25:0.3392
treceval(r2,qrells)和getprecisionatdepth(25)p@25:0.2872
treceval(熔合运行,qrells)和getprecisionatdepth(25)p@25:0.2872
>treceval(熔合运行,qrells)和getprecisionatdept深度(25)p@25:0.3436

;将运行到磁盘的所有主题与运行到磁盘的所有主题一起保存
熔合运行。打印到磁盘子集(My\u熔合运行,run.txt,topicpics=熔合运行到磁盘的运行。topics())

p@25:>```



\todos
-[X]使用著名的trec campaing(例如robust3)上载示例
-[]解释其他文件格式,例如trecpool

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java计数字符串中的符号数   如何将(Android)应用程序上下文传递给Java类?   arraylist中的java查找索引始终位于1   java如何在Grpc中通过MethodDescriptor的InputStream调用服务器?   java Netbeans、Glassfish部署问题   java在安卓上拖放一个按钮。。帮助   java Hibernate不从映射表填充数据   数组用户定义的文件读取函数导致NullPointerException Java   java组织。冬眠ErrorClassException:对象[id=null]不属于指定的子类   java中迭代破坏二叉树的算法   openssl如何通过java确保使用哪个私钥创建服务器证书   伏地魔项目的java对象映射   java这是JSlider中的一个bug吗?   java Spring究竟如何使用JDK代理?   java跨JVM分发订阅者   java Mockito void方法如何检查私有变量?   java如何在安卓 Studio中启用httpclient?   java软件设计原则:将您的收藏与处理对象分开?   java Exe包装的JavaFX应用程序(使用Launch4J)不会打开其他阶段   读取Java中可能被其他进程修改的文件