信息检索复习
导论
结构化数据与非结构化数据
信息检索是从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户信息需求的资料
非结构化数据是指那些没有清晰或明显的语义结构的数据,而计算机不易处理这类数据。
数据挖掘流程
为什么需要搜索技术:
信息过载———数据爆炸性的增长,而人的处理能力有限
信息检索的基本知识
布尔检索
词项文档矩阵
关联向量
A and B and C
不成功的原因
(1)占空间,存储大
(2)查找速度慢
(3)多是稀疏矩阵
倒排索引
存储
(1)variable-size postings lists
(2)磁盘上,最好是连续空间
(3)内存上,链表或者是可变长的数组
结构
文本处理的几个步骤
分词
归一化:将看起来不完全一致 的多个词条归为一个词条等价类,以便他们之间进行匹配的过程。最常规的做法就是建立隐式的等价类。
去除字符等,anti-discriminatory 和antidiscriminatory
另一种方法是维持多个归一化词条之间的关联关系。 automible-car
词干还原和词形合并:
词干还原:粗略的去除单词两端词缀的启发式过程,派生词缀。词元
词性合并,saw-see或saw 同一词元的不同形式进行合并。
去除停用词
使用倒排索引的查询过程
AND
查询处理优化
(1)按照词列表长度从低到高的顺序处理
结构
哈希或者是树结构、
hashtables
每个词汇表项散列为一个整数
•优点:
–查找比查找树快:O(1)
•缺点:
–找不到小的变体:judgment/judgement
–无前缀搜索
–如果词汇量持续增长,需要偶尔进行重新洗刷一切
tree:
最简单的:二叉树
•更常见的:B树
•树需要标准的字符和字符串顺序…但我们通常有一个吗
•优点:
–解决前缀问题(以hyp开头的术语)
•缺点:
–较慢:O(logm)[这需要平衡树]
–重新平衡二叉树代价高昂
•但B树缓解了再平衡问题
短语查询和位置索引
双字索引: 用两个单词作为一个索引
双字索引问题
•假阳性,如前所述
•由于字典更大,索引膨胀
–不可能超过两个字,即使对他们来说也很大
双字索引不是标准解决方案(适用于所有双字)
可能是复合策略的一部分
位置索引:
term——>(docID,pisiton)
在文档级别递归得使用合并算法
位置索引可以表示临近查询,但是双字索引不行
位置索引的空间是不加位置索引的2-4倍
跳表
合并的时候直接看下一个的位置,如果下一个跳到的位置比应该的位置还小,直接跳过。
放调表指针的位置需要权衡:
更多的指针——> 更小的跨度——> 可能跳跃更多
更少的指针——>更少的比较——> 可能不能顺利跳过去
根号下的位置放置:如果是静态的会比较方便,但是如果L 一直变化会比较麻烦。
通配符查询
轮排索引
支持通配符查询的 K-gram 索引
拼写更正
Two principal uses
- Correcting document(s) being indexed
- Correcting user queries to retrieve “right” answers
Two main flavors:
- Isolated word 基于单个单词的
- Check each word on its own for misspelling
Will not catch typos resulting in correctly spelled words 基于上下文的
编辑距离
e.g., from form
- Context-sensitive
Look at surrounding words,
e.g., I flew form Heathrow to Narita.
文件更正
索引构建
硬件基础
硬件基础
▪ 访问内存中的数据比访问磁盘上的数据快得多。
▪ 磁盘寻道:当磁盘磁头正在运行时,没有数据从磁盘传输定位。
▪ 因此:将一大块数据从磁盘传输到内存是非常困难的
比传送许多小块的东西要快。
▪ 磁盘I/O是基于块的:读取和写入整个块(如
而不是更小的块)。
IR系统中使用的服务器现在通常有几GB的主服务器
内存,有时几十GB。
▪ 可用磁盘空间比
主存储器。
▪ 容错性非常昂贵:使用许多常规的
机器而不是一台容错机器
BSBI
不能使用在内存中用的方法在磁盘上排序:原因磁盘太慢了
1、将文档中的词进行id的映射,这里可以用hash的方法去构造
2、将文档分割成大小相等的部分。
3、将每部分按照词ID对上文档ID的方式进行排序
4、将每部分排序好后的结果进行合并,最后写出到磁盘中。
5、然后递归的执行,直到文档内容全部完成这一系列操作。
SPIMI
不需要对文档进行排序。
1、对每个块构造一个独立的倒排索引。
2、最后将所有独立的倒排索引进行合并就OK了。
外部排序算法
分布式索引
向量空间模型
binary——>term——>tfidf
使用余弦计算距离
文档评分
检索评价
f1-score——recall——precision
binary relevance (只有相关和不相关)
precision@K(p@K)
MAP
MRR
multiple levels of revlance(对重要性程度进行评级)
检索模型
几种基于概率的模型
基于logistic 回归的检索模型
经典的二值独立概率检索模型
公式+例题
经典的BM25模型
简单的自然语言处理模型
语言模型
SLM(统计语言模型)
查询似然模型:
把相关度看成是每篇文档对应的语言下生成该查询的可能性
翻译模型
假设查询经过某个噪声信道变形成某篇文章,则由文档还原成该查询的概率(翻译模型)可以视为相关度
KL 距离模型
查询对应某种语言,每篇文档对应某种语言,查询语言与文档语言的KL 距离作为相关度量
信息检索/知识发现/机器学习/数据挖掘中的经典算法
分类
聚类
基于分层的聚类:
基于划分的聚类:Kmeans
基于密度的聚类:DBSCAN
基于网格的聚类:
基于模型的聚类:
kmeans
算法过程: 迭代轮数k,每次计算的点的个数n,O(kn)
算法复杂度:
算法优缺点:
优点
简单、快速、经典
处理大数据集时,保持可伸缩性和高效率
当簇近似高斯分布时,它的效果较好
缺点
簇的平均值可被定义才能使用,不适合某些应用
必须事先定K值,对初值敏感
只能发现球状cluster,不适合非凸形状的簇,或者大小差别很大的簇
对噪声和孤立点数据敏感,导致均值偏离严重(K-mediods改善这个问题,修改均值为中位数)
kemans++: 离当前选取的聚类中心更大的点更有概率被选择当下一个聚类中心
min-batch kmeans:
DBSCAN
簇是高密度区域,噪声点在低密度区域
算法步骤;
(1) 随机选择一个点A,设置ε \varepsilonε区域为半径区域,对象个数m为4,A点的区域有4个,所以A作为核心对象创建新簇,其他点标记为边缘点。
(2) 在边缘点上选取一个重复上面的步骤,寻找并合并核心对象直接密度可达的对象。反复上面过程,直到没有新的点可以更新簇,算法结束。形成以A为初始的一个簇,包括红点和黄点。
(3) 如果发现还有一些数据点未处理,再次产生一个类别来重启这个算法,遍历所有数据,若此点不是边缘点也不是中心点,标记为噪音。
简而言之:画圈聚类
优点
无需确定聚类个数
可以发现任何形状的聚类
对噪声有鲁棒性,可有效处理噪声
只需要两个参数,对数据输入顺序不敏感
加快区查询
参数可由领域专家设置
缺点
边界点不完全确定性
维度灾难导致Euclidean距离度量失效
不能处理密度差异过大(密度不均匀)的聚类
参数选择在数据与规模不能很好理解的情况下,很难选择,选取不当容易导致聚类质量下降
层次聚类
总体:类似于霍夫曼,最近的俩先连,最后生成层次
single-linkage
为了合并两组,只需要一对接近的点,而不考虑所有其他点。
因此,集群可能过于分散,而且不够紧凑
complete linkage
完整的链接避免了链接,但会受到拥挤的影响。
因为它的分数是基于对之间最坏情况的不相似性,所以一个点可以更接近另一个点其他群集,而不是指向其自身群集中的点。集群很紧凑,但距离apar还不够远
average linkage
它使用平均成对不相似性,所以集群趋向于相对紧凑和相对远离
Lance-Williams 算法
kmeans 和 hierarchical clustering
kmeans
O内存使用率低
O(n)计算时间
O结果对随机初始化非常敏感
O集群数量是预定义的
层次聚类:
确定性算法
O树状图显示了K的各种选择的聚类
一个矩阵与另一个矩阵之间的距离有多大
我们可以使用相异性度量来优雅地处理分类变量、缺失值等
O内存大,比K-means计算密集