1 / 179

步入索引殿堂 挑战索引极限 畅想索引未来

步入索引殿堂 挑战索引极限 畅想索引未来. 报告人:龚才春 Email:gongcaichun@software.ict.ac.cn 2005.11.04. 第一篇:步入索引殿堂 第二篇:挑战索引极限 第三篇:畅想索引未来. 第一篇:步入索引殿堂 本篇讨论索引的基本常识,面向于从未接触过索引的人,希望能够通过本篇让大家对索引有一个大致了解。. 海量信息检索系统的大致框架. 倒排文件索引. 文档1: b d a b b c b a d c 文档2: a b c d a c d b d a b. 索引的任务.

gari
Download Presentation

步入索引殿堂 挑战索引极限 畅想索引未来

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 步入索引殿堂挑战索引极限畅想索引未来 报告人:龚才春 Email:gongcaichun@software.ict.ac.cn 2005.11.04

  2. 第一篇:步入索引殿堂 • 第二篇:挑战索引极限 • 第三篇:畅想索引未来

  3. 第一篇:步入索引殿堂 本篇讨论索引的基本常识,面向于从未接触过索引的人,希望能够通过本篇让大家对索引有一个大致了解。

  4. 海量信息检索系统的大致框架

  5. 倒排文件索引 • 文档1:b d ab bcba d c • 文档2:a b c d a c d b d ab

  6. 索引的任务 • 就是针对海量数据,高效建立倒排文件索引

  7. 索引的大致框架 索引源 预处理 分词 写临时索引文件 排序 合并临时索引文件 索引压缩 写索引文件

  8. 一.预处理 • 一般完成待索引文档的导入及规范化 • 从文档中抽取文字部分 • 完成编码转换 • 将字符串映射到整数流 • 其他操作

  9. 预处理举例(1) • 哈希函式從上世紀八十年代開始就有暸相關研究。Knuth的研究結果錶明,對最常用的31個英文單詞建立哈希函式包括1043種可能擻索空間,對39個Pascal預定義標識符擻索空間為2039個節點。

  10. 预处理举例(2) • 哈希函数从上世纪八十年代开始就有了相关研究。Knuth的研究结果表明,对最常用的31个英文单词建立哈希函数就包括1043种可能搜索空间,对39个Pascal预定义标识符搜索空间为2039个节点。

  11. 二.分词 • 一般来说,英文文档不需要分词 • 中文分词就是将词语之间没有边界的中文句子分解为一个中文词语ID序列 • 分词是索引中速度最慢的环节

  12. 分词主要方法(1) • 基于字符串匹配的分词方法 • 1)正向最大匹配法 • 2)逆向最大匹配法 • 3) 双向最大匹配法 • 4)最少切分 • 基于理解的分词方法 • 基于统计的分词方法

  13. 正向最大匹配分词(2) • 就是从左至右尽可能查找最长的单词,直到当前字符与已经处理的字符串不构成单词,输出已经识别的单词,并从识别出来的单词后面接着查找单词。 • 分词速度比较快 • 但是分词错误率比较高

  14. 分词主要难点(歧义)(3) • 交叉歧义 • 发展中国家电产业,振兴民族经济。 发展中国家 / 电 / 产业 /,振兴 / 民族 / 经济 /。 • 中国人民政治协会制度是一项好制度。 中国人 / 民政 / 治 /协会 /制度 /是 /一项 /好 /制度/。 • 组合歧义 • 请把手拿开 • 这个门把手坏了

  15. 分词主要难点(未登录词)(4) • 龚才春出生于湖南省益阳市李昌港乡向家堤村老屋组。 • 龚/才/春/出生/于/湖南省/益阳市/李/昌/港/乡/向/家/堤/村/老/屋/组/。

  16. 快速检索词典的意义 • 分词是索引的瓶颈 • 分词的速度决定了索引的速度 • 分词就是循环的词典查找过程 • 词典的查找速度决定索引的速度

  17. 三.常用的内存词典结构 • 整词二分 • Trie树 • 双数组结构 • 哈希函数

  18. 3.1 整词二分(1) • 词典结构分为词典正文、词索引表、首字散列表等三级。 • 词典正文是以词为单位的有序表,词索引表是指向词典正文中每个词的指针表。 • 通过首字散列表的哈希定位和词索引表很容易确定指定词在词典正文中的可能位置范围,进而在词典正文中通过整词二分进行定位。

  19. 整词二分(2)

  20. 整词二分点评(3) • 检索速度慢 • 插入删除容易实现但是速度慢 • 基本上是一种应放入博物馆的算法

  21. 3.2 Trie树(1) • Trie树是一棵多重链表键树 • Trie树的检索速度快,插入删除方便 • Trie树的空间大量浪费

  22. Trie树(2) • 假设有词典如下: • { 啊啊 , 啊呀, 啊哟, 阿巴鸟, 阿坝, 阿爸, 阿比让, 阿比让市,阿波罗,阿波罗号, 大红鹰, 大后方,大后天, 大呼小叫,大话, 大灰狼, 大会, 大会堂,大伙}

  23. 啊啊 啊呀 啊哟, 阿巴鸟 阿坝 阿爸 阿比让 阿比让市 阿波罗 阿波罗号 大红鹰 大后方 大后天, 大呼小叫 大话 大灰狼, 大会 大会堂 大伙 Trie树(3)

  24. Trie树的变种(4) • 精简Trie树(Reduced Trie) • 链式Trie树(list Trie)

  25. Trie树的点评(5) • Trie树是一种高度动态结构 • 词典的插入删除非常方便 • 占用空间小和检索时间短不能兼得

  26. 3.3 双数组Trie • 双数组结构是一棵扁平的Trie树 • 将Trie树压扁到两个一维数组BASE和CHECK。BASE数组用于状态的转移,CHECK用于检验转移的正确性 • TAIL队列保存各单词的尾部

  27. 双数组Trie检索举例(1) bachelor badge jar 假设要检索单词badge

  28. 双数组Trie检索举例(2) bachelor badge jar 检索字母b并用CHECK数组检查

  29. 双数组Trie检索举例(3) bachelor badge jar 检索字母a并用CHECK数组检查

  30. 双数组Trie检索举例(4) bachelor badge jar 检索字母d并用CHECK数组检查

  31. 双数组Trie检索举例(5) bachelor badge jar 检索结束,比较TAIL队列

  32. 双数组Trie的构造(1) bachelor badge baby jar 假设对下面词典构造双数组Trie: {bachelor, badge, baby, jar } 字母ID:‘#’=1 ‘a’=2 ‘b’=3 ‘c’=4…..

  33. 双数组Trie的构造(2) bachelor badge baby jar 初始双数组Trie

  34. 双数组Trie的构造(3) bachelor badge baby jar 加入单词bachelor,赋CHECK值,处理TAIL队列

  35. 双数组Trie的构造(4) bachelor badge baby jar 加入单词jar,赋CHECK值,处理TAIL队列

  36. 双数组Trie的构造(5) bachelor badge baby jar 加入单词badge,赋CHECK值,处理TAIL队列

  37. 双数组Trie的构造(6) bachelor badge baby jar 加入单词baby,出现冲突,对双数组中已有单词重新分配空间,加入baby,赋CHECK值,处理TAIL队列

  38. 双数组Trie点评(7) • 通过加法指令和比较指令完成单词的查找过程,因此速度非常快 • 构造速度慢 • 是一种半静态结构,插入删除速度慢,实现麻烦

  39. 四.排序 • 排序就是对分词产生的(文档号,单词号,出现位置)三元组按照单词号排序,单词号相同的项再按照文档号排序,单词号和文档号都相同的再按照出现位置排序。 • 排序是为了方便写入临时索引文件。

  40. 排序举例(1) • 文档1 • b d a b b c b a d c • 文档2 • a b c d a c d b d a b

  41. 排序举例(2) • 对文档1分析产生的三元组如下: • b d a b b c b a d c • (文档号,单词号,位置) (1,b,1) (1,d,2) (1,a,3) (1,b,4) (1,b,5) (1,c,6) (1,b,7) (1,a,8) (1,d,9) (1,c,10)

  42. 排序举例(3) • 对文档2分析产生的三元组如下: • a b c d a c d b d a b • (文档号,单词号,位置) (2,a,1) (2,b,2) (2,c,3) (2,d,4) (2,a,5) (2,c,6) (2,d,7) (2,b,8) (2,d,9) (2,a,10) (2,b,11)

  43. 排序举例(4) (2,a,1) (2,b,2) (2,c,3) (2,d,4) (2,a,5) (2,c,6) (2,d,7) (2,b,8) (2,d,9) (2,a,10) (2,b,11) (1,a,3) (1,a,8) (2,a,1) (2,a,5) (2,a,10) (1,b,1) (1,b,4) (1,b,5) (1,b,7) (2,b,2) (2,b,8) (2,b,11) (1,c,6) (1,c,10) (2,c,6) (1,d,2) (1,d,9) (2,d,4) (2,d,7) (2,d,9) (1,b,1) (1,d,2) (1,a,3) (1,b,4) (1,b,5) (1,c,6) (1,b,7) (1,a,8) (1,d,9) (1,c,10)

  44. 五.写入临时索引文件 (1,a,3) (1,a,8) (2,a,1) (2,a,5) (2,a,10) (1,b,1) (1,b,4) (1,b,5) (1,b,7) (2,b,2) (2,b,8) (2,b,11) (1,c,6) (1,c,10) (2,c,6) (1,d,2) (1,d,9) (2,d,4) (2,d,7) (2,d,9)

  45. 参考文献 • 1. Sergey Melnik等. Building a Distributed full-text index for the web. • 2.Arvind Arasn等. Searching the web. • 3.Kazuhiro Morita等. Implementation of update algorithms for a double-array structure. • 4.Junichi Aoe等. An efficient implementation of Trie structures. • 5. Junichi Aoe. An efficient digital search algorithm by using a double-array structure. • 6. 李庆虎等。一种中文分词词典新机制———双字哈希机制 • 7.孙茂松等. 汉语自动分词词典机制的实验与研究。 • 8。米嘉硕士毕业论文。大规模中文文本检索中的高性能索引研究 • 9。赵江华硕士毕业论文。天网高性能分布式检索系统设计与实现

  46. 第二篇:挑战索引极限 本篇讲述本人对索引的一些不成熟的看法,不一定行,不一定好,不一定对,在这里希望抛砖引玉,恳请大家指点。

  47. 挑战索引极限之 步步为营

  48. 《三國演義.第七一回》 正欲回時,背後夏侯淵引兵突出,陳式不能抵當,被夏侯淵生擒回寨。部卒多降。有敗軍逃得性命,回報黃忠,說陳式被擒。忠慌與法正商議,正曰:「淵為人輕躁 ,恃勇少謀。可激勸士卒,拔寨前進,步步為營,誘淵來戰而擒之。此乃『反客為主』之法。」忠用其謀,將應有之物,盡賞三軍,歡聲滿谷,願效死戰。黃忠即日拔寨而進,步步為營﹔每營住數日,又進。淵聞知,欲出戰。張郃曰:「此乃『反客為主』之計,不可出戰,戰則有失。」淵不從,令夏侯尚引數千兵出戰,直到黃忠寨前。忠上馬提刀出迎,與夏侯尚交馬,只一合,生擒夏侯尚歸寨。

  49. 双数组结构的缺陷 • 传统双数组结构的鸡肋 • 构造需要耗费大量时间 • 插入删除麻烦,速度慢,是一种半静态结构 • 更新操作会导致空间利用率降低 • 传统双数组结构的阑尾 • 一个TAIL队列长得实在太像周杰伦

  50. 双数组结构的阑尾切除手术 • 使双数组空间利用率相对稳定,不随更新操作变化。 • 使检索操作容易实现,代码紧凑,提高检索速度。 • 加速双数组的构造过程。

More Related