首页 > 编程知识 正文

信息检索的应用,信息检索实验报告

时间:2023-05-04 10:05:58 阅读:162137 作者:933

informationretrievalinterrieraglossaryindexingretrieval指定topic指定模型查询扩展其他设置Evaluation

Terrier是英国格拉斯哥大学信息检索组开发的工具,但相关文档非常少。 看了官方的document,做了一些实验。 为了今后参考,我会记录下来。

informationretrievalinterrier:aglossary在terrier的所有文件中,只需关注以下几个文件夹:

hxdlr/:存储正在运行的脚本

存储重要文件,如etc//collection.spec和terrier.properties

存储var//index,result

存储share//stopword-list.txt等文件

在Terrier的hxdlr中,准备了可以索引、检索的脚本

分为以下步骤。

`

//编制索引

设置data路径后,etc/将生成collection.spec以用于indexing

hxd lr/trec _ setup.sh absolute-path-to-collection-files

//编制索引。 如果不想得到direct index的话,加上自变量-j就可以了。 这样,建立索引的方法是single pass index,不会产生direct index,速度会变快,但是无法进行query expansion

hxdlr/trec_terrier.sh -i

查看索引统计数据

hdlr/trec _ terrier.shprint stats

//查询

现在可以在command line中输入参数来搜索各个查询

hxdlr/interactive_terrier.sh

//搜索()批次) )。

如果指定了topic的位置,则会在var/results位置生成. res文件

hdlr/trec _ terrier.sh-r-dt rec.topics=share/vasw ani _ NPL/query-text.trec

//评价

指定qrel文件的位置后,将在var/results位置生成. eval文件

hdlr/trec _ terrier.sh-e-dt rec.QR els=share/vasw ani _ NPL/QR els

//交互式搜索

//在浏览器中生成搜索窗口http://localhost:8080

hxdlr/http_terrier.sh

`

Indexing By default,Terrier使用的Collection是TRECCollection,文本格式如下

DOC

DOCNO doc1 /DOCNO

Content of the document does here

/DOC

DOC

DOC是文件的标记,DOCNO是文件的标识符,是唯一的标记,content是正文。

如果要使用不同的collection,则必须修改property的配置trec.collection.class

此外,还有以下配置:

TrecDocTags.DOCtag :文件标记,这是doc

TrecDocTags.idtag :文件identifier :这里是DOCNO

TrecDocTags.skip :指定要跳过的tag,例如DOCHDR

所有这些对大小写都很敏感,可以通过trecdoctags.case sensitive=false将其关闭。

Terrier也支持元信息的记录,这些在DOC、DOCNO等tag之后,向TrecDocTags.propertytags添加这些tag即可。 您还必须在indexer.meta.forward.keys中添加这些标签,并在indexer.meta.forward.keylens中指定最大的key length。

Terrier还支持域索引。 如果指定FieldTags.process=TITLE,H1,则会压缩TITLE,H1的域。 terrier将没有tag的域称为ELSE

此外,要创建向前索引并记录位置信息,还必须设置block.indexing=true。 这样,Terrier将使用BlockIndexer而不是BasicIndexer。

从4.2版开始,Terrier还支持多线程索引。 只有在索引的时候

候加上-P 参数。

Retrieval 指定topic

有两种topic文本格式, SGML topic files和Single-line topic files。
// SGML
<TOP>
<NUM>123<NUM>
<TITLE>title
<DESC>description
<NARR>narrative
</TOP>

指定配置文件, 与index有点类似, 可以指定要的域以及跳过的域。

trec.topics= < absolute-path-to-topic-file >
TrecQueryTags.doctag=TOP
TrecQueryTags.process=TOP,NUM,TITLE
TrecQueryTags.idtag=NUM
TrecQueryTags.skip=DESC,NARR

与index不同,TrecQueryTags 对大小写不敏感, 但可以设置TrecQueryTags.casesensitive=false 来使得大小写敏感

// Single line
1 a few query terms
2 some different query terms

必须先设置trec.topics.parser=SingleLineTRECQuery

指定模型

Terrier预先指定了很多模型,可以指定trec.model= 来设置检索的模型。
如hxdlr/trec_terrier.sh -r -Dtrec.model=DLH13
Terrier同样支持按域检索, 但必须指定权重。如
hxdlr/trec_terrier.sh -r -Dtrec.model=PL2F -Dc.0=1.0 -Dc.1=2.3 -Dc.3=40 -Dw.0=4 -Dw.1=2 -Dw.3=25

查询扩展

可指定

trec.qe.model=Bo1
expansion.terms=10
expansion.documents=3

然后
hxdlr/trec_terrier.sh -r -q -c 1.0
同样支持从relevance feedback中获得查询扩展:
hxdlr/trec_terrier.sh -r -q -Dqe.feedback.selector=RelevantOnlyFeedbackDocuments,RelevanceFeedbackSelector -Dqe.feedback.filename=/path/to/feedback/qrels

其它设定


matching.retrieved_set_size=
ignore.low.idf.terms= terrier 4.2之后设为false了,增加precision

Evaluation

设定了trec.qrels= 用默认的trec_eval评价
hxdlr/trec_terrier.sh -e ./var/results/InL2c1.0_0.res
以上的评价是averaged over a batch of queries., 也可以单个query
hxdlr/trec_terrier.sh -e PL2c1.0_0.res -p
用提供的文件评价
hxdlr/trec_eval.sh qrels var/results/PL2c1.0_0.res

# 交互式IR
`
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import org.terrier.indexing.Collection;
import org.terrier.indexing.SimpleFileCollection;
import org.terrier.matching.ResultSet;
import org.terrier.querying.Manager;
import org.terrier.querying.SearchRequest;
import org.terrier.structures.indexing.classical.BasicIndexer;

public class IndexingAndRetrievalExample {

public static void main(String[] args) throws Exception { // Directory containing files to index String aDirectoryToIndex = "/my/directory/containing/files/"; // Configure Terrier ApplicationSetup.setProperty("indexer.meta.forward.keys", "filename"); ApplicationSetup.setProperty("indexer.meta.forward.keylens", "200"); Indexer indexer = new BasicIndexer("/path/to/my/index", "data"); Collection coll = new SimpleFileCollection(Arrays.asList(aDirectoryToIndex), true); indexer.index(new Collection[]{coll}); indexer.close(); Index index = Index.createIndex("/path/to/my/index", "data");// Enable the decorate enhancementApplicationSetup.setProperty("querying.postfilters.order", "org.terrier.querying.SimpleDecorate"); ApplicationSetup.setProperty("querying.postfilters.controls", "decorate:org.terrier.querying.SimpleDecorate");// Create a new manager run queries Manager queryingManager = new Manager(index);// Create a search request SearchRequest srq = queryingManager.newSearchRequestFromQuery("search for document");// Specify the model to use when searching srq.addMatchingModel("Matching","BM25");// Turn on decoration for this search request srq.setControl("decorate", "on");// Run the search queryingManager.runSearchRequest(srq);// Get the result set ResultSet results = srq.getResultSet();// Print the results System.out.println(results.getExactResultSize()+" documents were scored"); System.out.println("The top "+results.getResultSize()+" of those documents were returned"); System.out.println("Document Ranking"); for (int i =0; i< results.getResultSize(); i++) { int docid = results.getDocids()[i]; double score = results.getScores()[i]; System.out.println(" Rank "+i+": "+docid+" "+results.getMetaItem("filename", i)+" "+score); }

}
}

对于getMetaItem(“filename”, i), 原文是getMetaItem(“filename”, docid)` 是错误的写法。(基于Terrier 4.1, 不清楚Terrier 4.2的情况, 因为官方提供的文档是基于4.2版本的)

Conference
http://terrier.org/docs/v4.2/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。