信息检索: 从非结构化的文档集中找出与用户需求相关的信息。
和其它相关技术的区别:
和数据库的区别:数据库是结构化数据
和情报检索的区别:情报检索介绍如何利用信息检索工具
处理的对象:
典型的IR任务
IR系统
基于内容的图像查询:
基本指标:precision、recall、F-measure
TREC评测
TREC的查询形式
Pooling技术
MAP(算术平均精度)
11-point AP(11点平均精度)
通过评估可以评价不同技术的优劣,不同因素对系统的影响,从而促进本领域研究水平的不断提高。
信息检索的目标: 在较少消耗情况下尽快、全面返回准确的结果。
precision, recall, F-measure
precision = 检出的相关文档数/检出文档数,也称查准率
recall = 检出的相关文档数/相关文档总数,也称查全率
两个极端情况:
返回1篇,P=100%,但R极低;全部返回,R=1,但P极低。
一个例子:
查询Q,本应该有100篇相关文档,某个系统返回200篇文档,其中80篇是真正相关的文档
recall = 80/100 = 0.8
precision = 80/200 = 0.4
结论:召回率较高但是精准率较低
召回率和精准率的关系:
F m e a s u r e = { 0 , P = R = 0 2 P R P + R , P 和 R 不 同 时 为 0 F_{measure} = \begin{cases} 0, &P =R=0 \\ \dfrac{2PR}{P+R}, &P和R不同时为0 \end{cases} Fmeasure=⎩⎨⎧0,P+R2PR,P=R=0P和R不同时为0
信息检索的模型,就是运用数学的语言和工具,对信息检索系统中的信息及其处理过程加以描述和抽象,表述为某种数学公式,再经过演绎、推断、解释和实际检验,反过来指导信息检索实践。
信息检索模型的形式化表示
[D, Q, F, R(qi, dj)]
D: 是一个文档集合,通常由文档逻辑视图来表示。可以是一组索引词或关键词。既可以自动提取,也可以是由人主观指定。
Q:是一个查询集合,用户任务的表达
目前主要是关键词
也可能是自然语言句子、文档的样本、图像、草图
F:是一个框架,用以构建文档、查询表示以及它们之间关系的模型 检索系统的理论框架,包括预处理、中间处理(分类、聚类、索引)
文档和查询的表示方法
R(qi, dj):是一个排序函数,它给查询qi和文档 dj 之间的相似度赋予一个排序值
如目前往往按与关键词匹配的数量和Google的pageRank的值。
用户可以不断地提出新的检索需求或新组合,检索系统中的文献不变 ;
比如:Google, Baidu, bing
用户的检索需求描述是固定不变的,当得到新的文档后,把与用户需求相关的文档留下,并分类和排序后提交给用户。
比如:股票,新闻,天气,航班
一种简单的检索模型,它建立在经典的集合论和布尔代数的基础上。
遵循的基本规则:
每个索引词在文档或查询中只有两种状态:出现或不出现,对应权值为1或0。
查询: 由三种布尔逻辑运算符 and, or, not 连接索引词组成的布尔表达式。
匹配: 一个文档当且仅当它能够满足布尔查询式时,才将其检索出来。
若干独立的词项被选作索引项(index terms) or 词表vocabulary.
索引项代表了一个应用中的重要词项
计算机科学图书馆中的索引项应该是哪些呢?
索引项的假设:
这些索引项是不相关的 (或者说是正交的) ,形成一个向量空间vector space.
实际上,这些词项是相互关联的
当你在一个文档中看到“计算机”, 非常有可能同时看到“科学”
当你在一个文档中看到“计算机”, 有中等的可能性同时看到“商务”
当你在一个文档中看到“商务”,只有很少的机会同时看到“科学”
索引项到向量:
n 个索引项构成 n 维空间
一个文档或查询式可以表示为 n 个元素的线性组合
2个索引项构成一个二维空间,一个文档可能包含0, 1 或2个索引项
di = (0, 0) (一个索引项也不包含)
dj = (0, 0.7) (包含其中一个索引项)
dk = (1, 2) (包含两个索引项)
类似的,3个索引项构成一个三维空间
相似度概念: 是一个函数,它给出两个向量之间的相似程度。
相似度存在的地方:
- 可以根据预定的重要程度对检索出来的文档进行排序
- 通过强制设定某个阈值,控制被检索出来的文档的数量
- 检索结果可以被用于相关反馈中,以便对原始的查询式进行修正。(例如:将文档向量和查询式向量进行结合)
注:查询式和文档都是向量
文档: tf
文档集:idf
t f i j = 词 项 j 在 文 档 i 中 的 频 率 d f j = 词 项 j 的 文 档 频 率 = 包 含 词 项 j 的 文 档 数 量 i d f j = 词 项 j 的 反 文 档 频 率 = l o g 2 ( N / d f j ) ( 其 中 , N 为 文 档 集 中 文 档 总 数 , 反 文 档 频 率 用 词 项 区 别 文 档 ) tf_{ij} = 词项j在文档i中的频率 \\ df_{j} = 词项j的文档频率 = 包含词项j的文档数量 \\ idf_{j} = 词项j的反文档频率 = log_2(N/df_j) \\ (其中,N为文档集中文档总数,\\反文档频率用词项区别文档) tfij=词项j在文档i中的频率dfj=词项j的文档频率=包含词项j的文档数量idfj=词项j的反文档频率=log2(N/dfj)(其中,N为文档集中文档总数,反文档频率用词项区别文档)
w i j = ( t f i j / max l { t f l j } ) ⋅ i d f j w_{ij} = (tf_{ij}/ \mathop{\max}_l\{tf_{lj}\}) \cdot idf_j wij=(tfij/maxl{tflj})⋅idfj
其中 max l { t f l j } \mathop{\max}_l\{tf_{lj}\} maxl{tflj}表示文档 j j j中最高频率的词频的频率。
思路:
比如对每段程序建立一个<函数个数,变量个数,常量个数,…>向量,然后进行向量相似度计算。如果相似度大于某个阈值,则认为可能抄袭
目标: 查得全
理想情况:遍历互联网上所有的网页
遍历方式: 深度优先、广度优先
遍历的问题: 要抓取互联网上所有的网页几乎是不可能的
原因:
(1)技术瓶颈
- 无法遍历所有网页,许多网页无法从其他网页的链接中找
(2)存储技术和处理技术的问题
- 如果按照每个页面的平均大小为2M计算,xx亿网页的容量是多少?
- 即使能够存储,下载也存在问题(时间开销太大)。
- 同时,由于数据量太大,在提供搜索时也会有效率方面的影响。
如果要在一个月内采集20,000,000,000个页面. . .
. . . 那么必须要在一秒内大概采集 8000个网页!
由于我们采集的网页可能重复、不可下载或者是作弊网
页,实际上可能需要更快的采集速度才能达到上述指标
运行多个采集线程,这些线程可以分布在不同节点上
这些节点往往在地理上分散在不同位置
将采集的主机分配到不同节点上
作弊方法:
背景文字、超小号文字
链接重定向
故意制作大量的链接指向一个网址
使用程序机在web2.0等网站大量的群发指向您某网站的链接
通过扫描网站漏洞在高质量站点中加入隐藏链接
不具推荐意义的交换链接等等
任意一个Spider应该做到:
(1)能够进行分布式处理
(2)支持规模的扩展:能够通过增加机器支持更高的采集速度
(3)优先采集高质量网页
(4)能够持续运行:不断进行更新
用户有明确的查询目的,但是用户不知道如何构造好的查询,因此,初始查询往往不能很好地表达其查询需求
用户没有经验
查询的表达方式很多
对检索系统不熟悉
对目标文档分布不熟悉
用户不知道要具体查询什么,需要查看结果以后才逐渐细化
优化目标:提高召回率
提高召回率的方法:
概念: 用户相关反馈或显式相关反馈(User Feedback or Explicit Feedback): 用户显式参加交互过程
概念: 系统跟踪用户的行为来推测返回文档的相关性,从而进行反馈。
用户行为种类:
鼠标键盘操作
点击链接、加入收藏夹、拷贝粘贴、停留、翻页等等
用户眼球动作
Eye tracking可以跟踪用户的眼球动作
拉近、拉远、瞟、凝视、往某个方向转
隐式相关反馈的优缺点:
(1)优点
(2)缺点
概念: 没有用户参与,系统直接假设返回文档的前k篇是相关的,然后进行反馈。
(1)优点
(2)缺点
根据相关反馈修改查询条件的方法,判断哪些词应该加入到查询条件中。
基于簇的查询扩展 —— 簇的相关概念介绍:
簇中的不同term互称为邻居(neighborhood),或者搜索同义项(searchonym),有别于语法意义上的同义词。
局部聚类的缺点:
计算的是 q 中每个 term和所有 term 之间的相似度,而不是计算 q 和所有 term 的相似度。
核心思想:
在局部文档中计算出和查询 q 最相近的 term 进行扩展。
三个步骤:
我们使用 “全局查询扩展” 来指那些 “查询重构(query reformulation)的全局方法”。
主要使用的信息: 同义词或近义词
在全局扩展查询中,查询基于一些全局的资源进行修改,这些资源与查询无关。
同义词或近义词词典的构建方法: 【人工构建】 和 【自动构建】
基于基于同(近)义词词典的查询扩展:
人工编辑人员维护的词典
比如,基于词语的共现统计信息
通过分析文档集中的词项分布来自动生成同(近)义词词典
基本想法:计算词语之间的【相似度】
N:文档数目
t:整个文档集中的term数目
t j t_j tj :文档 d_j 中的不同 term 数目
i t f j = l o g t t j itf_j = log \dfrac{t}{t_j} itfj=logtjt,为文档 d j d_j dj的逆term频率
每个 w i , j w_{i,j} wi,j表示的是 [ k i , d j ] [k_i, d_j] [ki,dj]对应的权重(term k i k_i ki在文档 d j d_j dj中的权重);
f i , j f_{i,j} fi,j为term k i k_i ki在文档 d j d_j dj中的频度
term之间的相似度计算
将上述矩阵的地 i i i行看成term k i k_i ki的一个向量表示 k i ⃗ \vec{k_i} ki
计算 term k u k_u ku和 k v k_v kv之间的相似度,可以采用内积计算方法,至此,可以得到term相似度矩阵。
至此,可以得到term相似度矩阵。其中的u行v列为:
c u , v = k u ⃗ ⋅ k v ⃗ = ∑ ∀ d j w u , j × w v , j c_{u,v} = \vec{k_u} \cdot \vec{k_v} = \sum_{\forall d_j}w_{u,j} \times w_{v,j} cu,v=ku⋅kv=∀dj∑wu,j×wv,j
查询q和term之间的相似度计算
将q向量化,对于q总的每个term k i k_i ki,可以利用前面计算 [ k i , d j ] [k_i, d_j] [ki,dj]权重的公式计算权重 w i , q w_{i,q} wi,q,从而得到q的向两边表示:
q ⃗ = ∑ ∀ k i ∈ q w i , q k i ⃗ \vec{q} = \sum_{\forall k_i \in q}w_{i,q}\vec{k_i} q=∑∀ki∈qwi,qki
q和任意term k v k_v kv之间的相似度 sim :
s i m ( q , k v ) = q ⃗ ⋅ k v ⃗ = ∑ k u ∈ q w u , q × k u ⋅ k v = ∑ k u ∈ q w u , q × c u , v sim(q,k_v) = \vec{q} \cdot \vec{k_v} \\ =\sum_{k_u \in q}w_{u,q} \times k_u \cdot k_v \\ =\sum_{k_u\in q} w_{u,q} \times c_{u,v} sim(q,kv)=q⋅kv=ku∈q∑wu,q×ku⋅kv=ku∈q∑wu,q×cu,v
利用 sim 进行查询扩展
搜索引擎进行查询扩展主要依赖的资源: 查询日志(query log)
在初始检索结果的基础上,通过用户交互指定哪些文档相关或不相关,然后改进检索的结果
最著名的相关反馈算法:Rocchio算法
查询扩展:
通过在查询中加入同义词或者相关的词项来提高检索结果
- 相关词项的来源:人工编辑的同义词词典,自动构造的同义词词典,查询日志等
前提假设:不返回已经浏览过的页面
模型:给定一个随机页面,按照页面提供的链接向前浏览的概率为q,在浏览厌烦之后随机跳到其它页面的概率为1-q
PageRank值:浏览每个页面的概率分配
r ⃗ : = ( q A + 1 − q N I ) r ⃗ \vec{r} := (qA + \frac{1-q}{N}I)\vec{r} r:=(qA+N1−qI)r
(1)定义链接矩阵 A A A
(2)定义迭代过程
(3)公式2和公式1的对比
公式1:将从某一个页面链接到的其他页面的页面PageRank都当成了1;
公式2:还原了被链接页面的PageRank值;
锚文本能够描述链向网页的内容
Google炸弹
指的是这样一种情况:
(1)数目众多的网页链接指向某一个URL
(2)这些链接都使用特定锚文本做链接文字
(3)被链接的URL中一般并不包含这个锚文本,内容与
其也基本无关
(4)达到效果就是这个被链接的URL在这个特定锚文本
下,搜索引擎排名急剧上升,很多时候都排到第一
目标: 找到有关某个特定主题的权威页面(authorities)
思想: 在Web上存在 hubs 和 authorities页面,它们彼此之间是互相增强的关系
文本的表示: 不论是文档还是查询,都要表示成索引词(index term)的某种形式(布尔表达式、向量、概率等)
问题:
抽取什么样的词语作为 index term ?
如何索引?
功能:将文档的字符串序列变成词序列
选择更有意义的词或者概念来表示文档
(1)选择名词
(2)选择短语
(3)选择一组组的名词
(每个组内的名词比较相似,一个组可以称为一个概念)
检索效率问题:
定义: 给定一个子串q,在字符串d中查找q所有出现的位置(有时只要判断是否出现即可)。q的长度假设为m,d的长度假设为n。
优点:
方法简单易行
很方便地支持文档更新(增加和删除)
缺点:
效率不高
问题提出: 对文本进行预处理,防止对一篇文档直接进行费时费力的扫描。
核心思想: 将每篇文档表示成 DocID 及其文本内容组成的类向量模式。
仍然是依次扫描每个文档,但是对于一个字符串的多次出现不需要一一扫描,而且对同一文档内的字符串查找可以采用二分查找的方式,加快匹配过程。也就是说通过预处理的方式加快对每篇文档的匹配速度。
问题提出: 使用前向索引,仍然需要一篇篇扫描每个文档,如果文档数目较多,那么就非常费时费力。【有没有一种方法能够直接从查询词定位到文档?—— 倒排索引】