现代信息检索3---词汇表和倒排记录表

2024-05-13 05:48

本文主要是介绍现代信息检索3---词汇表和倒排记录表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第二节里我们了解了倒排索引的基本知识,包括构建、合并、查询等。课件里有个关于google中是否使用布尔模型?这个问题我们还是看下图吧:

让我感觉简单的布尔模型还是有用武之地的。下面是新的知识,对于我这个自学的人来说还是有点难,只能按照我自己的理解去说了。如果有误,欢迎指正。

你一定还记得这个图吧!当时只是一笔带过,现在应该去思考为什么会是这样的。先说下步骤吧:

我们构建索引的输入一般是文件或者是xml文档之类。第一步就是文档分析。包括文档格式处理(pdf/word/excel/html),文档语言识别(利用短字符子序列作为特征进行分类),文档编码识别。其实书上说了很多问题需要去考虑,但是暂时我们就这么去认为吧,细节的问题具体语言具体对待。这里面就包括一个文档包括多语言等等之类的问题。第二步就是对词处理。比如上图输入的friends,Romans,countrymen词条化后变成单个单词。其实就是分词的过程。对于英语来说就是中间的空格作为分词的标准,但是对于有’s之类的怎么处理也是个问题。书上说在既非字母也非数字的字符处进行拆分。对于中文分词,分词的标准不唯一等等的问题。但是保证查询的时候和文档分词的时候采用一致的标准还是可以解决的。对于搜索引擎上的分词又是不一样的结果,可以说要求更高。第三步就是语言分析工具。第一个说停用词。英语的the,a等等,中文的“的”“地”等等。最后得到的结论是不去掉停用词,这样查询更加准确。第二就是词性的变化,叫词性合并。词性归并意味中将单词的变形形式“适当”还原成一般词典中的单词形式。这个还是比较好理解的。后面就词干还原都是一个意思。对于英语似乎多点,对于中文似乎少点。词条的归一化,就是剔除句点和剔除连接符等等。英语的大小写问题,同义词和同音/同形异义词的处理等等。最后需要说明的是对于这个,只能尽量去做好。第四步就可以建立倒排索引了。也就是完成了这一系列的过程。

下面继续说优化问题。第一个是快速倒排表合并---跳表法。之前说,两个表长度为m和n的话,上述合并时间复杂度为 O(m+n)。我们可以做的更好吗?答案是肯定的。索引构建时为倒排记录表增加跳表指针。具体看下图:

指针数目过多过少都不合适,要有一个均衡性:
如果指针越多,跳步越短, 更容易跳转,但是需要更多的与跳表指针指向记录的比较;
如果指针越少,比较次数越少,但是跳步越长,成功跳转的次数少。

最后,得到的结论是:简单的启发式策略:对于长度为L的倒排记录表,每L的1/2次方处放一个跳表指针,即均匀放置。均匀放置方法忽略了查询词项的分布情况。

跳表方式在过去肯定是有用的,但是对于现代的硬件设备而言,如果合并的倒排记录表不能全部放入内存的话,上述方式不一定有用 (Bahle et al.2002)。

最后一个问题,短语查询。

第一种做法是双词索引。即每两个连续的词组成词对(作为短语)来索引。比如文本片段 “Friends, Romans, Countrymen” 会产生两个词对friends romans和romans countrymen。索引构建时,将每个词对看成一个词项放到词典中,这样的话,两个词组成的短语查询就能直接处理。遇到更长的就拆分成基于双词的布尔检索。例子: stanford university palo alto,变成stanford university AND university palo AND palo alto。还有个扩展的方法。这个双词索引出现的问题有:会出现伪正例子,由于词典中词项数目剧增,导致索引空间也激增。双词索引方法并不是一个标准的做法 (即倒排索引中一般不会全部采用双词索引方法),但是可以和其他方法混合使用。

第二种是带位置信息索引。即在倒排记录表中,对每个term在每篇文档中的每个位置(偏移或者单词序号)进行存储。对于输入的短语查询,需要在文档的层次上进行
迭代(不同位置上)合并。例子:

位置索引增加了位置信息,因此空间较大,但是可以采用索引压缩技术进行处理。位置索引目前是实际检索系统的标配,这是因为实际中需要处理短语(显式和隐式)和邻近式查询。位置索引的大小大概是无位置信息索引的2-4倍。

此外,我们采用这两种方法的混合。Williams et al. (2004)对一种混合的索引机制进行了评估,采用混合机制,那么对于典型的Web查询(比例)来说,相对于只使用位置索引而言,仅需要其¼ 的时间。相对于只使用位置索引,空间开销只增加了26%。

最后,小结。

觉得只是很浅的说完这些,后面需要更深层次的理解。

 

 

这篇关于现代信息检索3---词汇表和倒排记录表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984848

相关文章

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

TCP/IP协议栈详解及其在现代网络中的应用

在当今数字化时代,网络已成为我们生活中不可或缺的一部分。无论是社交、工作还是娱乐,网络都在背后发挥着至关重要的作用。而这一切的实现,都离不开TCP/IP协议栈。本文将详细介绍TCP/IP协议栈的结构、各层功能以及它在现代网络中的应用。 什么是TCP/IP协议栈? TCP/IP协议栈,全称为传输控制协议/互联网协议栈(Transmission Control Protocol/Internet

构建现代API:FastAPI中Query与Body参数的最佳搭配

在FastAPI中,Query 和 Body 是两种不同的依赖注入器,它们的应用场景取决于你的具体需求。以下是它们各自常见的使用场景: Query 参数 使用场景: 当你需要从URL中获取一些简单的参数时,例如过滤、排序、分页等。 当数据量不大,且可以作为URL的一部分安全传输时。当数据不需要复杂的结构时。 Body 参数 使用场景: 当你需要发送较为复杂的数据结构时,例如包含多个字段

Lucence倒排索引

带着问题探索: 全文检索,为什么要全文检索?什么是lucence?什么是倒排索引? 一、全文检索 要了解全文检索首先需要了解:结构化数据与非结构化数据,以及半结构化数据,这三种数据构成了我们生活中所有数据的组成形式。  结构化数据非机构化数据半结构化数据含义有固定格式的的数据无固定格式的数据有一定格式的数据举例数据库中的数据文章,邮件,博客内容XML,HTML文件查询方式sqlgoogle

bun一个现代JavaScript运行时

先上结论:官网的方法行不通 curl https://bun.sh/install | bash Bun:是一个现代JavaScript运行时,专注于性能与开发者体验。它不仅是一个快速的JavaScript执行环境,还提供了构建、测试和调试JavaScript和TypeScript代码的工具。Bun支持Windows、Linux和macOS操作系统,但在Windows桌面环境下安装时可能需

Tauri 教程之构建现代桌面应用的新选择(一)

1. 准备工作:设置开发环境 在开始使用Tauri之前,确保您的开发环境已经准备就绪。以下是您需要安装的主要工具和软件: Rust编程语言:Tauri是基于Rust构建的,因此首先需要安装Rust。您可以通过官方网站提供的安装程序进行安装,并验证安装是否成功。 Node.js和npm:Node.js和npm是构建现代Web应用的基础工具。您可以从Node.js官网下载并安装最新版本。安装完

ElasticSearch--倒排索引

1.ElasticSearch介绍              Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基 于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布, 是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快