1.4k likes | 1.7k Views
搜索引擎简介. 王晶晶 2012/10/19. 主要内容. 搜索引擎的由来 倒排索引 检索模型 排序 评价. 1 、搜索引擎的由来. 信息过载. 数据爆炸性的增长,而人的处理能力有限 网站 社会化媒体. 信息过载. 数据爆炸性的增长,而人的处理能力有限 视频 图片. 信息检索的历史. 计算机出现以前: 约 4000 年前,人类就开始有目的地组织信息,一个典型的例子就是图书中的目录。 随后,逐渐出现索引的概念,即从一些词和概念指向相关信息或者文档的指针。 计算机问世以前,人们主要通过手工方式来建立索引。
E N D
搜索引擎简介 王晶晶 2012/10/19
主要内容 • 搜索引擎的由来 • 倒排索引 • 检索模型 • 排序 • 评价
信息过载 • 数据爆炸性的增长,而人的处理能力有限 • 网站 • 社会化媒体
信息过载 • 数据爆炸性的增长,而人的处理能力有限 • 视频 • 图片
信息检索的历史 • 计算机出现以前: • 约4000年前,人类就开始有目的地组织信息,一个典型的例子就是图书中的目录。 • 随后,逐渐出现索引的概念,即从一些词和概念指向相关信息或者文档的指针。 • 计算机问世以前,人们主要通过手工方式来建立索引。 • 例子:词典(拼音检字、部首笔画检字等)
信息检索的历史 • 1948: • C. N. Mooers在其MIT的硕士论文中第一次创造了“Information Retrieval”这个术语。 • 1960-70年代: • 人们开始使用计算机为一些小规模科技和商业文献的摘要建立文本检索系统。 • 产生了布尔模型(Boolean Model)、向量空间模型(Vector Space Model)和概率检索模型(Probabilistic Model)。康奈尔大学的Salton领导的研究小组是该领域研究的佼佼者。 • 伦敦城市大学的Robertson及剑桥大学的Sparck Jones是概率模型的倡导者。
信息检索的历史 • 1980年代: • 出现了一些商用的较大规模数据库检索系统 • Lexis-Nexis • Dialog • MEDLINE
信息检索的历史 • 1986:Internet正式形成 • 1990’s: • 第一个网络搜索工具:1990年加拿大蒙特利尔麦吉尔(McGill)大学开发的FTP搜索工具Archie • 第一个WEB搜索引擎:1994年美国CMU开发的Lycos • 1995:斯坦福大学博士生开发的Yahoo • 1998:斯坦福大学博士生开发的Google,提出PageRank计算公式。 • 1998:基于语言模型的IR模型提出。
信息检索的历史 • 1990年代的其他重要事件: • 评测会议 • NIST TREC • 推荐系统的出现 • Ringo • Amazon • NetPerceptions • 文本分类和聚类的使用
信息检索的历史 • 2000’s • 信息抽取 • Whizbang • Fetch • Burning Glass • 问答系统 • TREC Q/A track
信息检索的历史 • 2000以来的其他重要事件: • 多媒体 IR • Image • Video • Audio and music • 跨语言 IR • DARPA Tides • 文本摘要 • DUC评测
信息检索在工业界的发展 1995年yahoo!作为一个目录导航系统发布,网站收录/更新都要靠人工维护,所以在信息量剧增的条件下,就不是非常实用
信息检索在工业界的发展(续) 1995年Google诞生,凭借独特的PageRank技术,使它很快后来居上,成为当前全球最受欢迎的搜索引擎;2000年Baidu诞生,国内垄断的搜索引擎
信息检索在工业界的发展(续) 2002年开始很多公司受搜索市场前景和Google神话的吸引,积极进入搜索引擎市场,谋求一席之地。但是大都难以撼动Google的地位。
IR系统的组成框架 信息检索系统的基本组成 User Interface Text query Text operations Logical View User feedback Indexing Query Operations Collection Manager Query R Text R Searching Text Collection Ranked Docs Retrieved Docs Ranking
信息检索系统的基本组成 • 用户接口(User Interface):用户和IR系统的人机接口 • 输入查询(Query) • 返回排序后的结果文档(Ranked Docs)并对其进行可视化(Visualization) • 支持用户进行相关反馈(Feedback) • 用户的两种任务:retrieval 或者 browsing • IR的两种模式: pull (ad hoc) 或者 push (filtering) • Pull: 用户是主动的发起请求,在一个相对稳定的数据集合上进行查询 • Push:用户事先定义自己的兴趣,系统在不断到来的流动数据上进行操作,将满足用户兴趣的数据推送给用户
信息检索系统的基本组成 • 文本处理(Text Operations):对查询和文本进行的预处理操作 • 中文分词(Chinese Word Segmentation) • 词干还原(Stemming) • 停用词消除(Stopword removal) • 查询处理(Query operations):对经过文本处理后的查询进行进一步处理,得到查询的内部表示(Query Representation) • 查询扩展(Query Expansion):利用同义词或者近义词对查询进行扩展 • 查询重构(Query Reconstruction):利用用户的相关反馈信息对查询进行修改 • 文本索引(Indexing):对经过文本处理后的文本进行进一步处理, 得到文本的内部表示(Text Representation),通常基于索引项(Term)来表示 • 向量化、概率计算 • 组成成倒排表进行存储
信息检索系统的基本组成 • 搜索(Searching):从文本中查找包含查询中索引项的文本 • 排序(Ranking):对搜索出的文本按照某种方式来计算其相关度 • Logical View:指的是查询或者文本的表示,通常采用一些关键词或者索引项(index term)来表示一段查询或者文本。
Sec. 7.2.4 搜索系统组成
Term-document incidence 如果文档(这里就是剧本)包含某个词,则对应的项为1,否则为0
1 2 4 11 31 45 173 1 2 4 5 6 16 57 132 词项词典 倒排记录表 倒排索引 • 应当使用可变长度的记录列表 倒排记录 Brutus 174 Caesar Calpurnia 2 31 54 101 Dictionary Postings List 24
词条化模块 Tokenizer Friends Romans Countrymen 词条化 语言学预处理模块 Linguistic modules friend friend roman countryman 语言学预处理 roman 索引器 Indexer 2 4 countryman 1 2 倒排记录表 16 13 建立词项(Term)词典过程 待建索引文档集合
短语查询( Phrase Query ) • 用户希望将类似“stanford university”的查询中的二个词看成是一个整体。 • 类似“I want to university at stanford”这样的文档是不会被匹配的。 • 大部分的搜索引擎都支持双引号的短语查询,这种语法很容易理解并被用户成功使用。 • 有很多查询在输入时 没有加双引号,其实都是隐式的短语查询(如人名)。 • 要支持短语查询,只记录<term : docs> 这样的条目是不能满足用户需要的。
第一种方法:二元词索引(Biword indexes ) • 将文档中每个连续词对看成一个短语 • 例如,文本“Friends, Romans, Countrymen”将生成如下的二元连续词对: • friends romans • romanscountrymen • 其中的每一个二元词对都将作为词典中的词项 • 经过上述的处理,此时可以处理二个词构成的短语查询
更长的短语查询 • 更长的短语查询可以分成多个短查询来处理 • 例如,文本“stanforduniversity paloalto ”将分解成如下的二元词对布尔查询: • stanforduniversity ANDuniversity paloANDpaloalto • 对于该布尔查询返回的文档,我们不能确定其中是否真正包含最原始的四词短语。
第二种方法:位置信息索引(Positional indexes) • 在这种索引中,对每个词项,采取以下方式存储倒排表记录: <词项,词项频率; 文档1:位置1,位置2……; 文档2:位置1,位置2……; ……> <be: 993427; 1: 7, 18, 33, 72, 86, 231; 2: 3, 149; 4: 17, 191, 291, 430, 434; 5: 363, 367, …>
经验法则(English-like) • 位置索引大概是非位置索引大小的2—4倍 • 位置索引的大小大约是原始文档的30%--50%
混合索引机制 • 二元词索引和位置索引二种策略可以进行有效的合并 • 对于高频查询词可以采用二元次索引,例如“Michael Jackson”, • Williams等人(2004)评估了更复杂的混合索引机制,(引入后续词索引方法)。 • 对于一个典型的web短语混合查询,其完成时间大概是只使用位置索引的1/4 • 比只使用位置索引增加26%的空间
词典大小、倒排记录大小 • M=400,000 219>N>216词项ID需32bit • 词典大小:M*32bits=1,600,000Bytes=1.6MBytes • N=800,000 220>N>216文档ID需32bit • L*N=160,000,000 220+8>N>220+7 • 倒排记录:约L*N*32bits=640,000,000Bytes=0.64GBytes
瓶颈 • 依次对文档进行分析并建立倒排记录项。 • 根据词项对所有倒排记录项进行排序(然后在词项内再根据文档进行二次排序)。 • 由于需要随机的磁盘寻道,在硬盘中进行排序非常慢——必须排序T=100M条记录。 假如每次比较需要2次的磁盘寻道,对N条记录进行排序需要N log2N 次 比较,我们需要花费多少的时间?
基于块的排序索引算法BSBI: Blocked sort-based Indexing 合并后的 倒排记录表 • 该算法的基本思想: • 对每一个块都生成倒排记录,并排序,写入硬盘中。 • 然后将这些块合并成一个长的排序好的倒排记录。 合并后的 倒排记录表 待合并的 倒排记录表
BSBI(基于块的排序索引算法)(需要较少的磁盘寻道次数)BSBI(基于块的排序索引算法)(需要较少的磁盘寻道次数) • 每条数据占用12字节(4+4+4)(词项,文档,频数) • 这些数据是在我们分析文档时生成。 • 我们需要对100M条这样12字节的数据进行排序。 • 定义一个块~10M大小的数据 • 可以很容易地加载数个这样的块数据到内存中。 • 我们开始加载10个这样的块数据。 • 100M数据的排序排序10块10M的数据 • 必须在硬盘上直接排序在内存中排序 • 带来的问题:需要合并10个排序后的结果
1 3 2 4 如何合并排序结果? • 可以进行二分合并,可以产生一个log210 , 4层的合并树。 • 在每一层中,读入对应的块文件到内存中,合并倒排记录表,合并结果写回磁盘中。 2 1 合并结果. 3 4 正被合并的文件 Disk
分布式索引构建Map-Reduce 主控节点 分配 分配 倒排记录表 a-f g-p q-z 分析器 倒排器 a-f 分析器 a-f g-p q-z 倒排器 g-p 裂片 倒排器 q-z 分析器 a-f g-p q-z 分区文件 Segment File Map阶段 Reduce阶段
动态索引构建方法 • 迄今为止,我们都假设文档集是静态的。 • 但文档集通常不是静态的: • 文档会不断的加入进来 • 文档也会被删除或者修改 • 这就意味着词典和倒排记录表需要修改: • 对于已在词典中的词项更新倒排记录 • 新的词项加入到词典中
最简单的方法 • 维护一个大的主索引 • 新文档信息存储在一个小的辅助索引中 • 检索可以同时遍历两个索引并将结果合并 • 删除 • 文档的删除记录在一个无效位向量(invalidation bit vector)中 • 在返回结果前利用它过滤掉已删除文档 • 定期地,将辅助索引合并到主索引中
对数合并 • 维护一系列的索引,每个都是前一个的两倍大小。 • 将最小的Z0存储在内存中 • 将较大的那些(I0,I1,…)存储在磁盘中 • 当Z0达到上限n时,将它写入磁盘I0中 • 当Z0下一次达到上限时,它会和IO合并,生成Z1 • 此时,如果I1不存在,存储到I1中 • 如果I1已存在,则Z1与I1合并成Z2 • 以此类推…
搜索引擎中的动态索引 • 现在所有的大型搜索引擎都采用动态索引 • 它们的索引经常增加和改变 • 新的产品、博客,新的专题Web网页 • 但是他们也会周期性地构建一个全新的索引 • 查询处理将会转到新索引上去,同时将旧的索引删除
3、检索模型 • 布尔模型 • 向量模型 • 概率模型 • 基于语言模型
Ka Kb (1,1,0) (1,0,0) (1,1,1) Kc 布尔模型: • 文档表示 • 一个文档被表示为关键词的集合 • 查询表示 • 查询式(Queries)被表示为关键词的布尔组合,用“与、或、非”连接起来(主析取范式DNF) • 相关度计算 • 一个文档当且仅当它能够满足布尔查询式时,才将其检索出来 • 检索策略是二值匹配
布尔模型:优缺点 • 优点 • 由于查询简单,因此容易理解 • 通过使用复杂的布尔表达式,可方便地控制查询结果 • 相当有效的实现方法 • 经过某种训练的用户可以容易地写出布尔查询式 • 布尔模型可以通过扩展来包含排序的功能 • 缺点 • 弱。不支持部分匹配,完全匹配会导致结果太多或太少 • 非常刚性: “与”意味着全部; “或”意味着任何一个 • 原则上讲,所有被匹配的文档都将被返回 • 不考虑索引词的权重,所有文档都以相同的方式和查询相匹配 • 很难进行自动的相关反馈 • 如果一篇文档被用户确认为相关或者不相关,怎样相应地修改查询式呢?
向量空间模型:定义 • 文档表示 • 一个文档被表示为关键词构成的向量。 • 一个文档D就可以表示为D(t1,t2,…,tn),其中n就代表了关键字的数量。 • 特征项权重Wk(Term Weight):指特征项tn能够代表文档D能力的大小,体现了特征项在文档中的重要程度。 • 查询表示 • 一个查询被表示为关键词构成的向量Q(t1,t2,…,tn) 。 • 相关度计算 • 向量间的距离: D(t1,t2,…,tn), Q(t1,t2,…,tn)
T3 5 D1 = 2T1+ 3T2 + 5T3 Q = 0T1 + 0T2 + 2T3 2 3 T1 D2= 3T1 + 7T2 + T3 7 T2 向量空间模型:距离图示 举例: D1 = 2T1 + 3T2 + 5T3 D2 = 3T1 + 7T2 + T3 Q = 0T1 + 0T2 + 2T3
向量空间模型:特点 • 特点 • 基于关键词(一个文本由一个关键词列表组成) • 根据关键词的出现频率计算相似度 • 例如:文档的统计特性 • 用户规定一个词项(term)集合,可以给每个词项附加权重 • 未加权的词项: Q = < database; text; information > • 加权的词项: Q = <database 0.5; text 0.8; information 0.2 > • 查询式中没有布尔条件 • 根据相似度对输出结果进行排序 • 支持自动的相关反馈 • 有用的词项被添加到原始的查询式中 • 例如:Q = <database; text; information; document > • 三个关键问题 • 怎样确定文档中哪些词是重要的词?(索引项) • 怎样确定一个词在某个文档中或在整个文档集中的重要程度?(权重) • 怎样确定一个文档和一个查询式之间的相似度?(相关度)
词项-文档计数矩阵 • 考虑词项在文档中出现的次数 • 将每个文档看成是一个计数向量 :矩阵中的一列