信息检索概论总结

一个复习笔记。

WEB搜索

更注重准确性和全面性,相关性度量有多方面考虑因素(时效、广告等)

基础

【重复文档处理】
相似性计算:搭叠集合;Jaccard系数;素描
素描:把文档的所有搭叠映射到2^m空间,随机置换洗牌,取最小值的搭叠,比较两个文档是否相等

WEB采集

爬虫,bfs,队列存放目标,集合存放路径
过程:采集,解析文档,重复性判断,url处理和保存

链接分析

web图,出度入度,邻接表,
锚文本是对Url的描述,指出的链接是对page的认可。锚文本能用来描述url。
pagerank,为web图每一个节点赋值0-1,根据出入度,定义为访问概率,随机游走,deadend时跳转。
Markov链,转移概率矩阵,从状态i到j的条件转移概率,所有I的出链概率和为1
hub和Authority

文档处理

倒排索引

【词典】存于内存,按字母排序
文档解析:预处理,文档编码的处理,文档单位的处理
词条化:给文档分词,生成词条-文档对
去除停用词:比如文档频率很高但没什么意思的词。建立停用词表。实际不用
归一化:语言学预处理,使多个词条归纳为等价类
词形归并,词干还原
排序:按首字母排序,合并词项-文档对,生成词典,记录文档频率df(倒排表长度)
【倒排表】存于磁盘,按ID排序
使用单链表或可变长数组存储
使用跳表的快速合并算法,加速合并多个倒排记录,只对AND查询有用
二元词索引:扩展二元词NXXXN,用于处理短语。不实用
位置信息索引:记录包括文档ID+位置信息
混合索引:对有些短语使用二元词,对有些短语使用位置索引

索引构建

硬件基础:访问内存快,磁盘寻道慢,按块访问快。
【外部排序算法】:词条化后词项文档对太大,无法在内存中排序,需把临时文件存于硬盘,但是全存的话磁盘寻道很多,排序的效率太慢。
BSBI基于块的排序索引算法:把文档的一部分词条化直到占满一个块,对块排序,建立索引,之后存于硬盘。最后合并所有的分块索引。
SPIMI内存式单遍扫描索引算法:初始对块建立一个空的索引,每次处理一个词条文档对,直接修改块里的倒排表,不排序词项。占满块后再排序词典并写入磁盘。最后合并。
【分布式索引构建算法】:MAPREDUCE
把文档集分割出多个子集数据片,主要基于文档分割,也可基于词项。
Map阶段,分析器:把数据片分析为索引(类似于把一个块进行外部排序之后存储)
把索引按照词项分成j个段,即词项分区。
Reduce阶段,倒排器:把同一个词项分区的索引汇总给一个倒排器进行合并,计算每个文档的词频tf。
【动态索引构建算法】:文档集新增和删改的处理
周期性索引重构:大工程
使用主索引和辅助索引:辅助索引放在内存,检索时合并主索引和辅助索引的检索结果。删除的文档用无效位向量过滤。修改的文档视为先删除后添加。定期合并。
对数合并:辅助索引Z0,大小为n,于内存。主索引I0=n,I1=2n,I2=4n,…于硬盘。

索引压缩

节省磁盘空间,增加缓存利用率,加快读写速度。
分为词典压缩和倒排表压缩。
有损压缩:大小写转换、词干还原、停用词去除等。
Heaps定律:词项数M=kT^b,k=30-100,b=0.5。说明随着文档数增加,词汇数依然也在增加;大规模文档集的词汇量会非常大。证明了词典压缩的重要性。
Zipf定律:文档集中频率第i高的词项频率和1/i成正比。说明一个文档集里随着出现次数排名下降,它出现的频率也下降。
【词典压缩】:
(1)把所有词项存成一个字符串,给每个词加一个定位指针,减少定长存储的浪费。
(2)同上,把几个词分成一个块,给每个块加一个定位指针。每个块内词前存一个长度的指数。
(3)前端编码,提取几个词的公共前缀
【倒排记录表压缩】
GAP
把存储ID变为存储间距
可变字节码VB

检索算法

按q和d相关性排序返回结果,一般返回TopK结果。

布尔查询

与或非
空间为二值关联矩阵
优化:按照文档频率从高到低来搜索索引
【重叠度】:Jaccard(q,d)=qd的交集/qd的并集,范围在0-1之间
只考虑出现与否,不考虑出现次数的权重。

词项权重计算

考虑到不同词项的重要性不同。
【词袋模型】:不考虑文档和查询中的词的顺序,各个词相互独立
tf词项频率:词项在文档出现的次数,空间为词频关联矩阵
对数词频,w(t,d)=1+logtf
score(t,d)=∑w(t,d),t为q和d里同时都有的词项
idf逆文档频率:df为t在几个文档中出现过。df<=N
idf=log10(N/df)
tf-idf:w(t,d)=(1+logtf)xidf
score(t,d)=∑w(t,d)

向量空间模型

词项集合V,词项总数|V|,|V|维向量空间,每个文档都是一个向量,一个查询也是一个向量。根据q和d的相似度排序。
相似度的取用:欧氏距离,对长度敏感,不合适。
使用余弦相似度cos(q,d)=q.d/|q|.|d|
向量的长度归一化后,cos(q,d)=q.d

检索系统的评分计算

加快评分和排序。
tfidf的存储:
词典(term,idf)倒排表(d1,tf,

概率检索模型

随机变量R=0or1
相关度的度量为条件概率P(R=1|Q=q,D=d)
【PRP概率排序原理】:按照条件概率的高低排序
0/1:当且仅当P(R=1|q,d)>P(R=0|q,d)时,认为q\d是相关的。能够最小化期望损失。
基于检索代价:C1为相关文档未返回,C0为不相关文档被返回的代价
当C0.P(R=1|q,d)-C1.P(R=0|q,d)<其他的d,那么这个d就是可返回的文档
【二值独立模型BIM】:Q、D为布尔向量,每一维表示词项出现与否。假设词项之间和文档之间的相关性独立。
pt=P(xt=1|R=1,q)词项出现在相关文档的概率
ut=P(xt=1|R=0,q)词项出现在不相关文档的概率
ct= log(p(1-u)/u(1-p))
RSV检索状态值=∑ct,用于排序
【Okapi BM25】

检索评价

无序检索的结果评价

文档集合划分:召回相关RR,召回不相关RN,未召回相关NR,未召回不相关NN
【正确率P】
【召回率R】
缓冲池:召回率无法计算,使用pooling方法,对几个系统的topk结果人工进行相关性判定,标出的相关文档集合作为整个相关文档集合。
精确率:RR+NN/RR+NR+RN+NN,存在假阳率问题
【F值】:P和R的调和平均值,F1=2PR/(P+R)

有序检索的结果评价

前k个文档的P-R曲线,呈现锯齿状,因为随着k增加,如果返回不相关文档,则正确率下降,召回率不变;返回相关文档,则正确率提升,召回率提升。
【插值正确率p(r)】:在某个召回率水平r上,插值正确率为该召回率之后的最大正确率。
对不存在的召回率点插值:取r到r+0.1上的最大正确率
【11点插值平均正确率】:插值的正确率定义在0-1的11个召回率水平r上,对每个r,计算该点上p(r)的算术平均。
AP平均正确率:
未插值AP:所有相关文档(包括召回和未召回)的正确率的平均值
插值AP:11点的正确率的平均值
只对RR计算AP:所有返回的相关文档的正确率的平均

多个查询的评价

【宏平均】:对每个q求指标,最后求平均
MAP:平均正确率均值,多个q的未插值AP(分母为RR+NR)的宏平均
【微平均】:把所有q汇总视为一个总查询,求出指标

面向用户的评价

GMAP:几何AP,多个AP的乘积再开根号
NDCG

摘要

静态:文档内容简介
动态:反映与q的关系

相关反馈和查询扩展

修改用户的查询,与用户交互,提高最终的检索效果。

Rocchio算法

向量空间文档质心μ(C)
最优查询q,离相关文档质心最近,离不相关文档质心最远。
qopt=argmax(sim(q,Cr)-sim(q,Cnr))
算法:qm=αq0+βμ(Dr)-γμ(Dnr),从初始向量开始,靠近相关质心,远离不相关质心。正反馈的作用更大,γ可取0

伪相关反馈

假设topK相关,进行查询优化

查询扩展

同义词词典,历史查询日志

文本分类

有监督机器学习
文档空间X,类别集合C,训练集D,分类器γ

NB

遵守词袋模型:条件独立性,位置独立性
P(c|d)=P(c)P(d|c)/P(d)正比于P(c)πP(t|c)
所以d的目标分类c=argmaxP(c|d)=argmax(logP(c)+∑logP(t|c)),使用对数防止浮点溢出
参数估计:
P(c)=Nc/N,Nc为类c的文档数
P(t|c)=T/∑T,T为t在类c的所有文档中重复出现的次数之和,∑T为类c的所有词数(不去重)
平滑防止零概率,P(t|c)=T+1/∑T+|B|,B=类c的所有词数(去重)
特征选择:选择可用的词项作为文档空间的维。提升效率,去除噪音。
算法:对类c的每个t,计算效用指标A(t,c)
A(t,c)计算方法:高频词;互信息;卡方
分类的评价:P,R,F1值
宏平均:在类别间求均值,微平均:??

向量空间模型

邻近假设:同类文档构成邻近区域,不同类区域互不重叠。找到分类面的决策边界。
Rocchio方法:用质心决定边界,把d分到离它最近的质心的类
kNN方法:考虑d的k个近邻,分到k个近邻里数量最多的类
改进:计算k近邻每个类的文档和d的cosine之和。
线性分类器:二元分类

SVM

文本聚类

无监督机器学习

k-means

你可能感兴趣的:(信息检索概论总结)