信息检索与数据挖掘 | (三)容错式检索

news2024/12/26 11:19:25

文章目录

  • 📚通配符查询
    • 🐇单个通配符查询
    • 🐇一般的通配符查询
    • 🐇k-gram 索引
  • 📚拼写校正
    • 🐇词项独立的校正方法
      • 🥕编辑距离方法
      • 🥕k-gram重合度法
    • 🐇上下文敏感的校正方法

📚通配符查询

  • 大爷想查找一个姑娘叫马*梅,但他确实不记得了,只能采用模糊查询
  • 这里的*可以代替任何字符,这种查询叫做通配符查询

🐇单个通配符查询

  • 一个诸如mon*的查询称为尾通配符查询,可以构建一个正向的搜索树,依次按照字符m、o、n从上到下遍历搜索树,直到能列举词典中所有以mon开头的词项集合W为止。
  • 推广尾通配符查询,考虑诸如*mon首通配符查询,此时可以引入词典的反向B树结构。
  • 基于以上,要查找马*梅,可以构造两棵二叉搜索树,一棵存储正向的词项(A),另一棵存储反向的词项(B)。那么我们只需要在A中检索以“马”为前缀的词项集合以及在B中检索以“梅”为前缀的词项集合,然后对这两者取并集即得“马*梅”所对应的所有词项。

🐇一般的通配符查询

  • 如果用户查询的包含多个通配符,基于单个通配符的查询方法就不能完全适用了。这里引入轮排索引

  • 轮排索引:首先,我们在字符集中引入一个新的符号$,用于标识词项结束。因此,词项hello在这里表示成扩展的词项hello$。然后,构建一个轮排索引,其中对扩展词项的每个旋转结果都构造一个指针来指向原始词项
    在这里插入图片描述
  • 我们将词项旋转后得到的集合称为轮排词汇表(permuterm vocabulary)。考虑通配符查询 m*n,这里的关键是将查询进行旋转让*号出现在字符串末尾,即得到 n$m* 。下一步,在轮排索引中查找该字符串(可通过搜索树方式查找),实际上等价于查找某些词项(如 man 和 moron)的旋转结果。
  • 正是因为我们需要将查询进行旋转让*号出现在字符串末尾,所以构建轮排词汇表相当于罗列了所有的旋转后的可能性,让不管是哪个字母模糊都有对应的可查找字符串形式。

  • 轮排索引的应用:如果查询中存在多个通配符(如 fi*mo*er),那么我们应该如何处理?
    • 首先返回轮排索引中 er$fi*对应的词项集合,然后通过穷举法检查该集合中的每个元素,过滤掉其中不包含 mo 的词项。
    • 最后,再利用剩下的词项去查普通倒排索引,从而得到最后的结果。
  • 轮排索引的缺点:其词典会变得非常大,因为它保存了每个词项的所有旋转结果

🐇k-gram 索引

  • 一个 k-gram 代表由k 个字符组成的序列。
  • 对于词项castle来说,casaststl 都是 3-gram。我们用一个特殊的字符$来标识词项的开始或者结束,因此对于castle来说,所有的 3-gram包括$cacasaststltlele$
  • 在k-gram索引结构中,其词典由词汇表中所有词项的所有k-gram形式构成,而每个倒排记录表则由包含该k-gram的词项组成。
    在这里插入图片描述
  • 考虑查询 re*ve
    • 我们的目标是返回所有前缀是re且后缀是ve的词项。
    • 为此,我们构造布尔查询 $re AND ve$,这个查询可以在 3-gram 索引中进行查找处理,返回诸如 relive、remove 及 retrieve 的词项。
    • 然后我们可以在普通倒排索引中查找这些返回的词项,从而得到与查询匹配的文档。

  • 使用k-gram索引时往往还需要进行进一步的处理——后过滤(postfiltering)
    • 考虑 3-gram索引结构的情况,对于查询red*,按照上面的处理步骤我们就会将原始查询转换为布尔查询$re AND red,这时可能会返回诸如retired的词项,因为它同时包含$rered,但这个结果显然并不满足原始的查询red*也就是说采用k-gram索引会导致非预期的结果
    • 为了解决以上问题,我们引入后过滤,即利用原始的查询red*对上述布尔查询产生的结果进行逐一过滤。过滤时只需要做简单的字符串匹配操作即可。
    • 和前面一样,我们会在普通倒排索引中查找上述过滤得到的结果词项,从而得到最后的文档集合。

    这里是引用

📚拼写校正

在这里插入图片描述

  • 对于大多数拼写校正算法而言,存在以下两个基本的原则
    • 对于一个拼写错误的查询,在其可能的正确拼写中,选择距离“ 最近” 的一个。这就要求在查询之间有距离或者邻近度的概念。
    • 当两个正确拼写查询邻近度相等(或相近)时,选择更常见的那个。
      • 例如,grunt 和 grant都是查询 grnt 的可能的正确拼写。算法将会从它们之中选择更常见的那个作为最后的拼写结果。最简单的情况下,“ 更常见” 可以通过统计各词项在文档集中出现的次数来获得。因此,如果grunt 在文档集中比 grant 出现得更多,则选择 grunt 作为校正结果。
      • 在很多搜索引擎中使用了另一种“ 更常见” 的概念,其基本思路是,使用所有其他用户输入的查询中出现最频繁的拼写形式作为最后的选择。也就是说,如果用户输入 grunt 作为查询的次数相比 grant 更多的话,那么用户输入 grnt 更有可能是想要查询 grunt。

🐇词项独立的校正方法

  1. 输入查询 carot,系统往往在返回包含 carot 的文档的同时,也返回包含 carot 多种可能拼写校正结果(如 carrot 和 tarot)的文档。
  2. 当 carot 不在词典中时,采用第 1 种做法。
  3. 当原始查询返回的文档结果数目少于预定值(比如少于 5 篇文档)时,采用第 1 种做法。
  4. 当原始查询返回的文档数目少于预定值时,搜索界面中会给用户提供一个拼写建议,建议中会包含拼写校正之后的结果。因此,这实际上相当于搜索引擎和用户进行交互:“ 你是在找 carrot 吗” ?
  • 在词项独立的校正方法中,不管查询中包含多少个查询词项,其每次只考虑一个词项的校正,也就说在校正时词项之间是相互独立的。
  • 上面给出的 carot 的例子就属于这一类做法。
  • 利用这种词项独立校正的方法,很难检测到查询 flew form Heathrow 中实际上包含一个错误的词项 form(正确的形式应该是 from),这是因为在校正时每个词项之间是相互独立的。

🥕编辑距离方法

  • 给定两个字符串s1及s2,两者的编辑距离(edit distance)定义为将s1转换成s2的最小编辑操作数
  • 通常,这些编辑操作包括:
    • 将一个字符插入字符串;
    • 从字符串中删除一个字符;
    • 将字符串中的一个字符替换成另外一个字符。
      在这里插入图片描述

  • 实际上,编辑距离的概念可以进一步推广,比如允许不同的编辑操作具有不同的权重
  • 例如,将字符s替换成字符p的权重会比将s换成a的权重大(这是因为在键盘上a离s更近,因此花费的代价更
    小)。
    在这里插入图片描述

  • 编辑距离的使用:对于给定的可能拼错的查询,首先枚举预设一定编辑距离内的所有字符序列作为建议。当然,查找所有可能修正很慢,我们可以直接运行一个最正确的,这在一定程度上剥夺了用户的权利,但依然保留了一轮交互。
    在这里插入图片描述

🥕k-gram重合度法

  • 为了进一步限制计算编辑距离后得到的词汇表大小,以下介绍如何通过使用k-gram 索引来辅助返回与查询 q 具有较小编辑距离的词项。
  • 将词项拆解为k-gram之后,比较正确词汇和错误词汇的公共k-gram的数量,公共数量越多,则说明两个词汇距离越近。
    在这里插入图片描述
  • 标准化度量——雅可比系数,以上图为例,November和December的系数为3/9,小于0.8,不认为是一个合适的匹配。
    在这里插入图片描述

🐇上下文敏感的校正方法

在这里插入图片描述

  • 暴力处理:将短语中的每个词进行替换。比如对于上面 flew form Heathrow,我们可能会返回如下短语 fled from Heathrow 和 flew fore Heathrow。穷举过程的开销会非常大,最后我们就会面对非常多的拼写组合。
  • 为了节省空间,我们只保留文档集合或查询日志中的高频组合结果。比如,我们很可能会保留 flew from 而不是 fled fore 或 flea form,这是因为 fled fore 很可能比 flew from 出现的次数少。接下来,我们仅仅根据高频双词(如 flew from)来获得 Heathrow的可能的正确拼写。

参考博客
【信息检索导论】第三章 容错式检索

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1045453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Excel实现只针对某项字符第一次出现的位置分列

取第一次出现左边数值 B1LEFT(A1,SEARCH(".",A1)-1) 取第一次出现右边数值 C1RIGHT(A1,LEN(A1)-SEARCH(".",A1)) 公式如图:

MySQL(7) Innodb 原理和日志

一、MySQL结构 客户端 server层 查询缓存(5.7) 连接器 分析器 优化器 执行器 引擎层 二、一条update操作mysql的流程 三、MySQL的日志 (1)redo log 保证MySQL 持久性的关键,如果MySQL宕机,buffer pool…

学会这一招,轻松玩转 app 中混合应用自动化测试

♥ 前 言 现在的 app 中越来越多的页面通过 H5 来做了,理由很简单,不需要升级 app 就能让用户使用新的功能。这就苦了我们测试工程师了,混合应用自动化不会玩。今天咱们来聊一聊 app 中混合应用自动化怎么做。 一、环境准备 appium1.21.0…

虹科案例 | 虹科PLC助力纯水冷却机实现精准温度控制

文章来源:虹科工业控制事业部 点击阅读原文:https://mp.weixin.qq.com/s/3gv4M82YhDHCo_cq78EanA 案例概况 客户:Efficient Energy 应用:纯水冷却机 (一)应用背景 制冷技术在许多不同行业中得到广泛应用&…

仿射变换案例

1.什么是仿射变换 仿射变换(Affine Transformation)其实是另外两种简单变换的叠加:一个是线性变换,一个是平移变换 仿射变换变化包括缩放(Scale、平移(transform)、旋转(rotate)、反射(reflection,对图形照镜子)、错切(shear mapping,感觉像是一个图形的倒影),原来的…

深入理解 pytest.main():Python 测试框架的核心功能解析

前言 笔者平常运行pytest用例时,通常使用命令行方式,像这样 pytest -v pxl/test_dir/test_demo.py::TestDemo::test_my_var,执行某一条case,但每次命令行敲也挺麻烦的。那如何在python代码中调用pytest呢?带着疑问一…

github搜索技巧

指定语言 language:java 比如我要找用java写的含有blog的内容 搜索项目名称包含关键词的内容 vue in:name 其他如项目描述跟项目文档,如下 组合使用 vue in:name,description,readme 根据Star 或者fork的数量来查找 总结 springboot vue stars:>1000 p…

记录使用iText7查找PDF内容关键字坐标,加盖电子签名、印章

一、前言 项目以前签字都是由C端那边进行合成操作,最近项目要求把那块功能,由后端进行实现,其中包含坐标、关键字、任意位置进行签字操作,坐标是最容易实现的,曾经也写过类似的功能在(添加图片印章到PDF&a…

解锁工业 4.0 元宇宙:AR/VR、AI 和 3D 技术如何为下一次工业革命提供动力

原创 | 文 BFT机器人 沉浸式混合现实和由虚拟现实(VR)和增强现实(AR)组成的扩展现实技术仍然是业务创新和扩张的关键驱动因素。通过改变公司的运营、与客户互动和实现目标的方式,这一技术解决方案集已在多个行业产生了…

认证-authentication 和授权-authorization

就好比你可以刷卡进去xxx大厦(认证是本公司职员),但无法刷卡进入金融部门,或 实验部门(因为没有授权)

无线通信——Mesh自组网特点

Mesh,它的中文叫作无线网格状网络。作为当下最为灵活、高效、便捷的扩大信号覆盖的通信解决方案之一,Mesh组网得到了极大推广。其主要应用于:(无人机/车/船、特种机器人、巡检、应急安防(如城市应急、抢险救援、城区覆…

蜜雪冰城涨价怒赞无数 雪王张红超卷出一条阳道

作者:积溪 简评:最近雪王涨价一元登上了热搜,但评论区却是一片和谐,雪王的魅力究竟是如何养成的?#蜜雪冰城 #雪王 #张红超 #奶茶 别的品牌涨价,只有吐槽声一片;但它涨价,却是网友们…

如何在前端项目中管理依赖关系?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用包管理工具⭐ 使用版本控制系统⭐ 使用依赖管理工具⭐ 使用CDN⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对W…

MyBatis Generator 代码自动生成器

一、什么是逆向工程 Mybatis的逆向工程就是由代码生成器生成我们需要的代码和映射文件。我们在编写Mybatis程序时,基本都是围绕着pojo类,Mapper接口,Mapper.xml文件等文件来进行的。如果实际开发中数据库的表特别多,那么我们需要手…

超全超详细的Redis笔记-数据类型及其使用、主从复制、哨兵模式、缓存穿透、击穿、雪崩

文章目录 狂神聊Redis1、Nosql概述1.1、为什么要用Nosql1.2、什么是NoSQL1.3、NoSQL的四大分类 2、Redis 入门2.1、概述2.2、Windows 安装2.3、Linux安装2.4、测试性能2.5、Redis基础知识 3、五大基本数据类型3.1、Redis-Key3.2、String3.3、List3.4、Set3.5、Hash(…

基于SSM的实习管理系统

基于SSM的实习管理系统、前后端分离 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 管理员界面 教师 学生 研究背景 基于SSM的实习管理系统是一个基于Spring、Spring…

【计算机网络】网络层和数据链路层

文章目录 IP协议网段划分分类划分法CIDR 方案路由NAT网络地址转换技术IP报文的另外三个参数mac帧ARP协议交换机ICMP代理服务器 IP协议 TCP有将数据 可靠、高效 发给对方的 策略,而IP具有发送的能力,即将数据从A主机送到B主机的 能力 。 用户要的是100%…

GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全)

GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全) 一、概要二、整体架构流程三、完整代码 一、概要 这段代码是使用GeoPandas和Matplotlib库在Python中绘制世界地图的一个例子,它突出了与中国建交的国家(部分&#x…

​数据库查询进阶--多表查询

目录 目录 1. 概述 2. 内连接(Inner Join) 2.1 语法 2.2 示例 3. 左连接(Left Join) 3.1 语法 3.2 示例 4. 右连接(Right Join) 4.1 语法 4.2 示例 5. 全外连接(Full Outer Join&am…

vue实现进度条+背景定位

最近在做一个数字孪生项目,用于展示地铁车辆的进场动画及部件,使用的vueunity,但是 unity模型在加载完成之前会有个加载进度条,页面背景色是黑色,中间只有个一进度条框 可以看到很单调很丑,并且客户也不满…