项目介绍
简介
数据:ClueWeb09 dataset,共 553,202 篇文档,用 Lucene 建立的索引。
部分框架是现成的,有 api 文档
我们要做的是实现部分 operator 以及 ranking algorithm。
实现一个个性化的搜索引擎,具有以下能力:
- diversification
- query expansion
- learning to rank
支持的 operator:
支持的 fields:
支持的 ranking algorithm
Unranked/Ranked boolean, Okapi BM25, Indri, Le2R(use SVM), diversification algorithm(xQuAD & PM25), and etc.
输入
程序输入: one parameter (name of parameter file)
parameter file 必须包括以下参数:
可选参数
用于 “BM25” / “Indri” 模型。
用于 query expansion。
用于 Le2R:(解释待修正)
用于 diversification:(解释待修正)
输出
程序输出:
在 trecEvalOutputPath 指定的文件中:
如果有 query expansion,在 fbExpansionQueryFile 指定的文件中:
基本策略
要求
- 从 query file 中逐条读取 query
- 将 query parse 为 query tree,internal nodes 是 operators,leaves 是 index terms
- 如果一个 query 没有 explicit operator,默认为 #OR
- 如果一个 query 没有 explicit field,默认为 body
- 对 query term 进行 stemming 和 stopwords 处理
- 评估 query,用 DAAT 策略,对 leaf node 的 evaluation 就是如果这个 term 的 inverted list 存在,就获取它,注意有些 query term 是没有 inverted list 的。
- 对所有文档按文档分数降序排序,如果分数相同,按 external document id 升序排序。
Operator
不同模型支持的 operator 各有不同
系统需要支持的 Operator 有 #OR, #AND, #SYN, #NEAR/n, #WINDOW/n, 对 BM25 模型来说,还需要支持 #SUM,对 Indri 模型来说,还需要支持 #AND, #WAND, #WSUM, #WINDOW
Fields
系统支持的 fields 有 ‘url’, ‘keywords’ (from the html ‘meta’ tag), ‘title’, ‘body’, 和 ‘inlink’ 5 种,query 形式为 apple.title。
Query
|
|
排序模型
Exact-match
Boolean retrieval 需要支持的 Operator 有 #OR, #AND, #SYN, #NEAR/n, #WINDOW/n
- #OR 只要有一个 query term 在文档中出现,就算 match,在 ranked boolean retrieval 中分数为所有匹配的 query term 的 tf 的最大值。
- #AND 只有在所有 query term 都在文档中出现时,才算 match,在 ranked boolean retrieval 中分数为所有 query term 的 tf 的最小值。
- #NEAR/n 如果每对相邻两个 query term 之间的距离小于 n,才算 match,在 ranked boolean retrieval 中分数为 match 的次数。(For example, #NEAR/2(a b c) matches “a b c”, “a x b c”, “a b x c”, and “a x b x c”, but not “a x x b c”)。
- #WINDOW/n 和 #NEAR/n 类似,但是不要求顺序。
Search Engines笔记 - Exact-match retrieval
Unranked boolean retrieval
对每个文档来说,如果 match,分数为 1,不 match 就为 0。
Ranked boolean retrieval
每个文档的分数是 query term 在该文档中的 term frequency。
Best-match
BM25
需要支持的 Operator 有 #SYN, #NEAR/n, #SUM
Indri
需要支持的 Operator 有 #AND(Indri #and), #WAND, #WSUM, #WINDOW。默认的 operator 是 #AND,注意这里的 #AND 和 boolean retrieval 中的算法不一样。
Query expansion
基本逻辑是把 initial query 当做 classifier,用它来 label 部分 data,得到 top-ranked documents,然后用 labeled data 来产生更优的 classifier。基本过程:
- 用原始 query 检索文档
- 取结果的前 N 篇文档作为训练集,这些文档相关度可能不高,然而我们的目的是学习 vocabulary pattern。
- 应用 relevance feedback algorithm 选取 term 和 term weight
- 组成新的 query 来检索文档
见 Search Engines笔记 - Pseudo Relevance Feedback