构建一个文本搜索系统

说明:文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译,是我对课程的理解。


1 TR的主要构成

 在文章中文本检索系统=全文检索系统=TR System
 从图中看到(红色的方框)TR的主要过程有:分词(Tokenizer)、索引(Indexer)、打分(Scorer)、反馈(Feedback) 四个部分。
 如果把用户发起搜索操作得到检索结果这一过程称为线上(Online),其他时间称为线下(Offline),那么这四个步骤的时间段分布分别为:

操作时段
分词线上、线下
索引线下
打分线上
反馈线上、线下

 接下来的内容会介绍这四个方面。

2 分词

 分词的时候需要把有相近意思的词合并在同一个索引项中。关于这一点在工作中实际上是查询的时候合并的同义词。这个之后可以测试一下。
 提取词干。将所有变形的词变为同一个词。例如:computer->compute;computation->compute;computing->compute。
 分词算法:不同语言分词算法不同,分词难度也不同。

3 索引

 索引是把文档变为一种便于快速查找的数据结构。其中最主要的一种思想是倒排索引(Inverted index)。倒排索引是以词作为关键词,记录词出现的文档编号,以及在文档中的词频、位置等信息。

词的经验分布

 无论哪种语言,都会有些词分布特别频繁,而有些词很少用。在一项调查中显示,以词出现次数从多到少排序。最前面的4个词的出现次数,占比10%-15%;最前面的50个词的出现次数,占比35-40%。
 Zipf’s Law很好的描述了这种现象。
 rankfrequencyconstant 词出现的位置与词频乘积几乎等于一个常数。
 

创建索引

数据量大的问题

 数据量大的问题:mapreduce 分布式索引

索引压缩

 词频压缩:词频多是小数字。java中int原本占用相同的字节数,经过压缩后小数字占用较少的字节,大数字占用较多的字节。总体上占用较少的字节。
 Doc ID 压缩:文档id是连续的数字,例如:2、3、4….. 使用”d-gap”压缩。存储形式是:d1、d2-d1、d3-d2。这种方法比较适合序列读取。
 具体的压缩算法有:Binary code, unary code, γ-code, δ-code…可以通过wiki学习。

索引解压缩

 压缩后的数字在搜索过程中是一定要通过解压缩步骤,才能读到的。不同的压缩算法,对应不同的解压步骤。
 

4 搜索之打分

 打分是搜索中很重要的一部分。其实这部分的内容是快速搜索,包含打分和优化查询速度两个部分。

打分Score

 一个通用的打分模型:f(q,d)=fa(h(g(t1,q,d),...,g(tk,q,d)),fd(d),fq(q))
 1fd(d)是关于文档的打分,提前计算好的。
 2fq(q)是关于查询的打分,也是提前计算好的。
 3g(ti,q,d)是关于其中一项命中词的打分。
 4h是所有命中词打分的累加和。
5fafd,fq,h三个值的函数,是最终得到的函数。
 这里就具体用到了某一种计算相关度的算法。其中一种就是之前文章提到的VSM。

优化查询速度

 策略1:缓存。把搜索结果、倒排索引表缓存起来。
 策略2:并行搜索。在数据量大的时候使用并行搜索。

5 反馈

 这部分内容会比较多,单独一篇文章讲。

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

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

相关文章

[Linux][Ubuntu]Linux实习常用操作/Debug总结

一、 Win下装Jupter 1.安装anaconda 配置环境变量 打开jupyter 2.切换目录 装软件 二、 移动复制粘贴上锁文件 sudo nautilus 三、 视频播放 sudo nano /etc/environment 添加QT_X11_NO_MITSHM1 四、 修改阿里源 提高下载速度 1.1打开software&updates 1.2 打…

第二十六期:100 个网络基础知识普及,看完成半个网络高手

本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看。 作者:佚名来源 本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看。 1)什么是链接? 链接是指两个设备之间…

团队冲刺第一天

今天要做什么:每个人都在网上学习Android软件开发的知识,完成简单的操作,实现简单功能。 明天要做什么:学习各种控件的作用,用法 站立会议照片: 任务看板照片: 燃尽图: 转载于:https…

[Leetcode][第679题][JAVA][24点游戏][回溯][暴力]

【问题描述】[困难] 【解答思路】 回溯 时间复杂度:O(1) 空间复杂度:O(1) class Solution {static final int TARGET 24;static final double EPSILON 1e-6;static final int ADD 0,MULTIPLY1,SUBTRACT 2,DIVIDE 3;public boolean judgePoint24(int…

第二十七期:网络爬虫程序员被抓,我们还敢爬虫吗?细数那些Java爬虫技术

最近,某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息,公司被查封,负责编写抓取程序的程序员也将面临坐牢。 作者:架构之路来源 最近,某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息&#xff…

文本搜索系统的评估

说明:文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译,是我对课程的理解。  这部分本应该继续说反馈(FeedBack)的。但是课程中安排的是评估(Evaluation)。评估是用于衡量搜索引擎质量的。反馈是为了提高搜索引擎质量而进行的…

UE3客户端服务器GamePlay框架

客户端(当前玩家)与服务器对应关系图: 整体上看,UE3的GamePlay框架使用的是MVC架构 ① 橙色的Actor对象及橙色箭头相连的成员变量只会被同步给Owner客户端 Controller:控制器,包括PlayerController和AIController InventoryManage…

[Leetcode][第201题][JAVA][数字范围按位与][位运算][Brian Kernighan]

【问题描述】[中等] 【解答思路】 1. 暴力 逐位与 ,只需要判断i 0 或 i 2147483647 的话,就跳出 for 循环即可。 时间复杂度:O(N) 空间复杂度:O(1) public int rangeBitwiseAnd(int m, int n) {//m 要赋值给 i,所…

文档排序模型--查询似然Query Likelihood

在概率模型中,我们定义排序函数是基于文档与查询之间的相关度、可能性来做的。f(d,q) p(R1|d,q), R ∈{0,1}。概率模型有几个小分类:   经典概率模型——>BM25   语言模型Language Model —–>Query Likelihood   Divergence from rando…

第五十二期:甲骨文遭遇“中年危机”:继阿里后,再被亚马逊永久抛弃

42岁的甲骨文迎来“中年危机”。10月15日,亚马逊AWS技术布道者Jeff Barr在AWS官网宣布亚马逊消费者业务永久弃用甲骨文(Oracle)数据库。 作者:温暖来源:镁客网 42岁的甲骨文迎来“中年危机”。 10月15日,亚马逊AWS技术布道者Jef…

[Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]

【问题描述】[简单] 【解答思路】 1. 内置位计数功能 时间复杂度:O(1) 空间复杂度:O(1) class Solution {public int hammingDistance(int x, int y) {return Integer.bitCount(x ^ y); } }2. 移位 时间复杂度:O(1) 空间复杂度&#xff1…

第二十八期:Notepad++ 新 Logo 出炉,官网全新改版采用自适应设计

Notepad 的推特帐号发布了关于 notepad 的消息。与旧版 Logo 相比,新 Logo 整体的变化不大,不过官方则表示新版 Logo 比旧版的更吸引人,也更加简洁且更具意义。 新旧 Logo 对比如下(左边为旧版 Logo): 除了…

React Navigation 导航栏样式调整+底部角标消息提示

五一佳节匆匆而过,有人选择在外面看人山人海,有人选择宅在家中度过五一,也有人依然坚守在第一线,致敬! 这是坚持学习react-native的第二篇文章,可能会迟到,但是绝不会缺席,这篇要涉及…

反馈(Feedback)

说明:文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译,是我对课程的理解。  终于到了第四部分了。之前提到过的,一个文本检索系统分词索引打分反馈。前面三部分都已经在前面的文档中介绍了。现在看反馈。反馈是根…

【数据结构与算法】堆

一:如何理解“堆” 1,堆是一个完全二叉树; 完全二叉树要求除了最后一层,其他层的节点都是满的,最后一层的节点都靠左排列。 2,堆中每个节点都必须大于等于(或小于等于)其子树中每个…

第五十三期:资深技术Leader肺腑忠告:如何成为技术大牛?

这篇文章,对于每一个想成为技术大牛的人来说都值得仔细阅读好几遍。 作者:曹乐来源:再成长一次 图片来自 Pexels 双生说:曹乐是典型学霸,清华本硕,多年互联网大厂研发经验,所以“资深”。我刚…

互联网搜索引擎

说明:文章内容来源于课程视频和课程ppt。我只学习了课程没有做习题。文章不是翻译,是我对课程的理解。 1 挑战 互联网搜索引擎与一般搜索引擎的区别主要在以下问题。  第一是数据量(scalability)。互联网搜索需要处理的数据量大,如何保证能…

第五十四期:Libra盟友纷纷“跳船”,联盟链还有戏吗?

曾经被诺贝尔奖得主斯蒂格利茨评价为“傻子才信”的Facebook数字加密货币项目Libra,自从出世开始就负面不断。最近在其首届理事会议前夕,PayPal、Visa、万事达、Stripe和eBay等全球型金融巨头“盟友”的相继退出,更使其遭遇了不少“看空”。 …

python time模块

时间戳、结构化时间、字符串时间 import time#时间戳 ,大多时候用于计算 #从1970年0点0分0秒开始计算的秒数 print(time.time())#结构化时间------当地时间(东8区) #返回一个时间对象 print(time.localtime())#time.localtime()中默认参数为…

第五十五期:区块链将在2020年实现的重大改变

科技界的每家公司都已经拥有区块链战略。如果他们现在没有,他们就有可能错过了这个时代的一个机会。在过去几年中,许多企业已经对整体采用区块链技术的好处和相关风险进行了估算,分析和讨论。 科技界的每家公司都已经拥有区块链战略。如果他们…