检索问题可以分为两类:
- ad hoc:数据库基本不变,query会发生变化
- routing:query不怎么变化,数据库和热点在实时更新
搜索方式的进化:线性扫描(太慢)->词项-文档关联矩阵(太大)->倒排索引
建立倒排索引的过程:收集文档->确定文档的格式、编码方式、语种进行识别、确立文档单位->tokenization(英语:词干还原(单复数)、词形归并(时态)、大小写转换等/汉语:分词,去掉停止词)->normalization(同义词)->建立倒排表和词典(词典有哈希表方式(小一点的词典)和搜索树方式两种实现方式,为了可以进行通配符查询,需要建立k-gram 索引、轮排索引)
Query的处理过程:输入的原始query->纠错->tokenization(英语:词干还原(单复数)、词形归并(时态)、大小写转换等/汉语:分词,去掉停止词)->normalization(同义词,拼写校正(基于发音的和书写的),query改写)->查询(由词典找到相应的倒排表,根据逻辑合并倒排表,优化方法是从短的往长的合并,建立跳跃表、n-gram表、短语表)
文档的摘要:静态摘要,动态摘要(为基于关键词上下文(keyword-in-context,简称 KWIC)的结果片段)
进行排序的特征:
- 参数化索引:文档的作者、标题以及出版日期等等
- tf-idf权重计算:tf*idf(亚线性尺度变换、基于最大值的 tf 归一化、回转归一化)
- 余弦相似度
- BM25
快速评分及排序
- 索引去除技术(只考虑那些词项的 idf 值超过一定阈值的文档;只考虑包含多个查询词项(一个特例是包含全部查询词项)的文档)【减少要查询的索引数量】
- 胜者表(对于词典中的每个词项 t,预先计算出 r 个最高权重的文档)【减少要查询的索引数量】
- 静态得分(每篇文档 d 往往都有 一个与查询无关的静态得分 g(d))【减少要查询的索引数量】
- 簇剪枝方法(cluster pruning)(先随机取KaTeX parse error: Expected '}', got 'EOF' at end of input: \sqrt{N)个先导者,再对他们聚类每个由若干个追随者,给定查询先计算与先导者的相似度,在计算最近的相似度的先导者的追随者的相似度)【减少要查询的索引长度】
无序检索结果的评价:正确率,召回率,F 值
有序检索结果的评价方法:
- 插值正确率(interpolated precision)(在某个召回率水平r上的插值正确率定义为对于任意不小于r的召回率水平 r′ 所对应的最大正确率 )
- MAP(mean average precision)
- 前 k 个结果的正确率(precision at k,可简写成 P@k,缺点是不太稳定)
- R-precision (对于共有|Rel| 篇相关文档查询,而在前|Rel|个返回结果中有 r 篇相关文档,此时的正确率和召回率都为r/|Rel|,定义R-Precision为r/|Rel|)
- ROC
- CG(cumulative gain,累积增益),一个具体的指标为NDCG(normalized discounted cumulative gain,归一化折损累积增益)。
在线测试:A/B 测试
RF(relevance feedback,相关反馈)的主要思想是,在信息检索的过程中通过用户交互(点击率等)来提高最终的检索效果 。
LTR(learning to rank):
- NB:线性分类器
- Svm
- Rocchio:kmean类似,线性分类器
- kNN:非线性
- 在基于语言模型(简记为 LM)的检索(关键词生成文章的概率)