搜索引擎设计实用教程(4)-以百度为例

Web搜索引擎设计和实现分析 胡朝晖(浙江大学计算机系) 王海瑛(宁波海峰塑化有限公司)---- 一、引言 ---- 随着Internet的飞速发展,人们越来越依靠网络来查找他们所需要的信息,但是,由于网上的信息源多不胜数,也就是我们经常所说的"Rich Data, Poor Information"。所以如何有效的去发现我们所需要的信息,就成了一个很关键的问题。为了解决这个问题,搜索引擎就随之诞生。 ---- 现在在网上的搜 阅读详情

/*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/

搜索引擎设计实用教程(4)-以百度为例

                           之四:相关提示功能

 

                           中科院软件所 malefactor

200511

 

   相关提示也是几乎所有搜索引擎提供的一个附加功能,所谓相关提示,就是对于用户提交的查询进行分析,然后根据其它用户相似的查询给予用户提示,比如我输入查询大长今”,检索系统会提示其它象大长今主题曲”,”大长今下载等等相关的一些其它用户查询.

   那么搜索引擎是根据什么原则对于其它用户的查询进行选择来提示用户相关查询呢?我们还是以百度为例子来看看怎么实现这个功能.要实现这个功能主要解决如下三个问题:

  问题一.从哪里获得其它用户的查询信息?这个问题对于搜索引擎来说不是难事,因为搜索引擎都有用户查询LOG的功能,在一段时间内每一个用户提交给搜索引擎的查询都被记录在LOG文件里面,所以从这个文件里面可以获得其它用户的查询信息.这个LOG还可以用作其它功能的基本素材,比如搜索排行榜或者搜索风云榜,就是根据这个LOG文件,对用户查询归类,相同的归为一类,然后统计一段时间内这个类别的出现次数,按照降序排列,选择前列K个作为输出即可.

   问题二.搜索引擎拿到用户的查询比如大长今”,用户查询LOG里面有成千上万的不同查询,那么选择哪些作为提示呢?这里面牵涉到一个字符串相似性计算的过程.

   问题三.假设已经从查询LOG里面选择了一批用户相关查询信息,按照什么顺序输出呢?为什么大长今主题曲排列在大长今下载前面呢?这里面牵涉到排序原则的问题.

   我们一步步分析看看百度是如何解决上面的第二和第三个问题的.

   首先,百度在计算字符串相似性的计算过程是首先对于用户查询进行分词,然后对于分词后的结果来进行相似性计算的.怎么证明这一点? 第一个证明:首先用新闻作为查询,看看百度提示的相关词汇是什么,然后将查询修改为新闻新闻新闻”,再看看提示的相关词汇是什么,提示是完全一样的,基本说明是分词后进行计算的. 第二个证明: 首先用娱乐新闻报道作为查询,看看百度提示的相关查询是什么,然后人工分好词娱乐 新闻 报道”,再看看提示的相关查询是什么.,提示仍然是完全一样的,我们再颠倒一下词汇顺序,新闻娱乐报道作为查询,再看看相关查询是什么,完全没有变化.所以得出结论:百度在计算字符串相似性之前首先要对用户查询进行分词,当然查询LOG里面的查询也要首先进行分词.

第二步,怎么计算相似性并排序输出呢? 如果用户输入查询只有一个单词,那么处理起来好像比较简单,只要用户查询LOG里面包含这个单词的字符串都被纠出来,然后根据用户总共查询这个字符串的次数进行排序,选择前列K个作为相关提示就可以了. 好像很简单,但是问题真的这么简单就被解决了么? 并非如此.

    如果用户输入的查询比较长,问题就出来了,比如我们用“清脆的鸟叫声”作为查询,百度返回的相关提示中,前列135个相关查询包含“鸟”和“叫声”,这几个查询排序原则是按照用户查询次数多少排列的,在3640的相关查询仅仅包含“清脆”一个单词,排列顺序和用“清脆”查询时候顺序相同,说明也是按照用户查询次数多少排列的;41100的相关查询仅仅包含“叫声”,第41个查询动物的叫声”是所有100个查询用户查询次数最多的一个. 为什么包含清脆的查询排列在包含叫声的查询前面而不是反过来呢?

   在给个例子,用“咆哮小老鼠”作为查询,排在最前面的是匹配了“咆哮,小,老鼠”三个词汇的相关查询,次之是匹配了“咆哮,老鼠”的相关查询,再次是匹配“咆哮,小”的相关查询,最次是匹配“小,老鼠”的相关查询,总共输出92个相关查询,对于只有一个匹配的查询没有输出。那么为什么是“咆哮,老鼠”》“咆哮,小”》“小,老鼠”呢?原则是什么呢?

   多次实验后,发现里面其实有一个匹配单词的权重设置问题,咆哮小老鼠做例子,切分后是<咆哮,,老鼠>, 假设用户查询LOG里面有两个查询,一个是咆哮老鼠论坛”,切分后是<咆哮,老鼠,论坛>.匹配的有两个单词(咆哮,老鼠), 另一个查询是咆哮小”,切分后是<咆哮,>,匹配的也有两个单词(咆哮,),怎么给这两个查询排序呢? 假设每个单词都有一个权重设置,比如 Weight(咆哮)=a  Weight()=b  Weight(老鼠)=c . 我们计算咆哮小老鼠咆哮老鼠论坛的相似性等于重复单词权重之和,也就是等于a+c,而另外一个查询的相似性等于a+b,然后按照顺序输出就行了.所以这里面关键是如何设置单词的权重.

那么单词权重怎么衡量呢,作为搜索引擎很容易获得的一个单词权重评价因素是IDF,所谓IDF,就是说如果一个单词如果在很多文档中都出现,那么这个单词重要性就很低,比如说”,几乎在每个中文网页都出现,那么这个单词的IDF值就非常低.具体计算IDF的公式是

IDF(word)log(N/DF(word)),

这里,DF(word)指的是包含单词word的文档数目个数,N指的是文档集合的总的文件个数,我们假设百度索引了6亿个网页,那么这里N=600000000.

我们用IDF来解释百度的相关查询排序因子.首先来解释“清脆的鸟叫声”这个查询的相关查询排序,我们分别用“清脆”“鸟”“叫声”来作为查询,看看有多少网页包含这些词,百度返回结果是:

    清脆:找到相关网页约2,390,000      

    鸟: 找到相关网页约14,000,000

    叫声:到相关网页约3,370,000

   把这些数值带入上面的公式计算得出IDF权重 IDF(清脆)2.39975335 IDF(叫声)=2.25052135 IDF()=1.63202321. 所以前列匹配了“鸟”和“叫声”的权重最大,都包含这两个查询按照用户查询数目多少输出,其他的按照包含清脆或者叫声的顺序输出.

    对于查询“咆哮小老鼠”来说,我们看看是否成立:

    百度返回结果:

     咆哮:找到相关网页约2,090,000

     小:找到相关网页约29,600,000

     老鼠:找到相关网页约11,900,000

 

     IDF(咆哮)=2.45800496

     IDF()=1.30685954

     IDF(老鼠)=1.70260429

   所以权重是 咆哮>老鼠>

   我们看到前面分析输出顺序是: <咆哮,老鼠> > <咆哮,小> > <小,老鼠>

   我们根据上面单词的权重可以看出:<咆哮,老鼠>IDF(咆哮)IDF(老鼠)4.15

                                   <咆哮,小>=IDF(咆哮)+IDF()=3.75

                                   <小,老鼠>=IDF()+IDF(老鼠)=3.01

  所以百度的顺序按照这个顺序输出。

  再看个例子:查询“娱乐新闻报道”百度返回结果:

     娱乐:找到相关网页约31,600,000

     新闻:找到相关网页约93,500,000

     报道:找到相关网页约17,000,000

 

     IDF(娱乐)=1.27846417 

     IDF(新闻)= 0.80733964 

     IDF(报道)=1.54770233

    我们可以预测:

     包含《娱乐,新闻,报道》的相关查询排名最高,次之是《娱乐,报道>,再次是《新闻,报道》,可以看出百度的排序果然是如此。所以我们的推理基本上是正确的.

最后归纳一下相关查询的算法流程:

(1)    用户输入查询,分词;

(2)    计算用户查询和历史用户查询的相似性,相似性计算是通过计算两者重复单词的权重之和来计算的

(3)    每个单词的权重用单词的IDF来计算,大的排序原则根据这个权重进行排序输出,如果两个历史查询包含相同的重复词汇集合,那么查询权重相同,则按照用户查询次数有高到低排序输出。

 

   后台作业:为了加快查询反映速度,搜索引擎不会每次用户查询都重新计算相关查询,可以在后台算好以后存储在数据库里面,用户查询的时候直接查找数据库输出,那么后台如何处理呢?

   1)对于最近一段时间(比如一个月或者一个星期)用户查询LOG进行统计分析,选择列在前列比如1千万条最频繁的用户查询,

    2)然后对于每个查询分词,按照倒排文档进行存储,比如“新闻报道 10000”,则在索引里面登录   “新闻--》新闻报道  10000 “报道-->新闻报道 10000”,其他查询都是如此处理进入索引。

    3)对于用户查询,在索引里面查找最相似的历史查询,并按照上面介绍的方法计算权重,按照权重输出;

     4)当然,为了更加加快查询速度,第三步骤的工作也可以预先算好,存储在数据库里面,用户查询直接在数据库里面存取。这个数据库可以每隔一段时间更新一次以反映最新的情况。

       

 

非root用户如何在CentOS7集群上编译安装OpenFOAM6 本文详细介绍了在CentOS7集群上以非root用户身份编译安装OpenFOAM6的完整流程。通过环境准备、依赖包离线获取、源码编译安装等步骤,解决了集群环境下权限和依赖问题,特别针对OpenMPI和Boost库提供了优化配置建议,帮助用户高效完成安装并优化性能。 阅读详情

相关推荐

【ArcGIS微课1000】0118:一文讲清楚tif(geotiff)栅格数据格式

TIFF(Tagged Image File Format)是一种常见的图像文件格式,它被广泛用于存储和传输各种类型的图像数据。图像存储:TIFF格式可以存储多通道的位图图像,包括灰度图、彩色图和透明度图等。它支持不同的像素深度,可以是8位、16位、24位或32位等。因此,TIFF格式非常适合存储高质量的图像数据,包括照片、卫星图像、医学影像等。无损压缩:TIFF格式支持无损压缩,这意味着图像可以被压缩而无需损失任何像素信息。这种压缩方式可以减小文件大小,而不会降低图像的质量。

智慧空间实验室 2746

咆哮小老鼠图标下载

……………………该文档为咆哮小老鼠图标下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看

加特兰毫米波雷达芯片使用说明-快速上手1

也可参阅官网中的教学视频:加特兰微电子 - 培训视频资料 (calterah.com)专业版本开发工具-Metaware 相关教学视频可查看:加特兰微电子 -

咆哮论坛

软件简介: 修正发贴的时候用户名密码错误问题 修正分论坛在线用户编码错误 修正删除用户错误 完善隐身登陆功能 添加快速回复功能 图标更酷! 共享版仍然提供免费下载, 个人版报价,提供技术支持和升级支持,但不得用于商业用途!一经发现立刻取消支持!同时为了信息共享的必要,朋友们也可凭收藏的源代码来交换个人版,要求必须超过5000行代码的VB/VC/JAVA/ASP/PHP完整系统!必须有收藏价值! 商业版提供全部技术支持和SQL脚本,以及邮件组件!同时赠送一套下载系统!数量不多,请多惠顾!

搜索引擎查询相关提示功能(搜索建议)

[color=red] 相关提示也是几乎所有搜索引擎提供的一个附加功能,所谓相关提示,就是对于用户提交的查询进行分析,然后根据其它用户相似的查询给予用户提示,比如我输入查询”大长今”,检索系统会提示其它象”大长今主题曲”,”大长今下载”等等相关的一些其它用户查询. 那么搜索引擎是根据什么原则对于其它用户的查询进行选择来提示用户相关查询呢?我们还是以百度子来看看怎么实现这个功能.要实...

lucene_guy 819

搜索引擎设计实用教程(3)-百度

                        /*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/                 搜索引擎设计实用教程(3)-百度                            之三:对百度分词算法的进一步分析                                                           

张俊林的博客 7254

搜索引擎和mysql_【20201005】做个搜索引擎(2)——MySQL数据库设计

介绍介绍昨天我们已经设计好了搜索引擎的模型,搜索引擎包括两个基本模型即:网站和网页。那么接下来我们就要针对这两个模型进行数据库设计了。设计数据库要考虑的问题很多,包括数据的大小、字段的数量、读取场景,写入场景等等。除此之外还要考虑使用什么数据库引擎,因为不同的数据库引擎的特长是不一样的,我们要充分利用它们的这些特长之处,来将我们的项目的效率调整到最优状态。这个搜索引擎福哥会使用两个数据库引擎,即...

weixin_35260789的博客 561

西南交大互联网搜索引擎课程设计(二)--建立搜索引擎

1、项目介绍 1.1 项目需求分析 1.2 技术可行性分析 1.2.1 建立并实现搜索引擎功能 1.2.2 比较文档之间的相似度 1.2.3 对下载的文档,利用K-Means聚类算法进行聚类 1.3 项目环境介绍 1.3.1 运行环境 1.3.2 第三方工具包 1.3.3 数据来源 2、 项目实现 2.1 建立索引 2.1.1 新建文件工具类 2.1.2 对中英文预处理文...

阿懵 2687

[code]el表达式不运作

tomcat5.5默认是关el要用下面的句 6.0就不用

janckywong963的专栏 143

【JavaWeb学习 | 第20篇】EL表达式与JSTL标签

本文介绍了EL表达式与JSTL标签在JSP开发中的重要作用:EL表达式简化了数据访问,JSTL标签库弥补了EL的逻辑处理不足。

在代码与逻辑的星河里,捡拾技术的微光 1216

java el表达式 空_JavaWeb 之 EL表达式

一、简介1、概念EL 表达式的全称:Expression Language 表达式语言。EL 是 JSP 内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象,取得对象属性的值,或执行简单的运算或判断操作。2、作用EL表达式主要是替换和简化 jsp 页面中表达式脚本在jsp页面中进行数据的输出。EL 表达式仅仅用来读取数据,而不能第数据进行修改。3、特点EL 在得到某个数据时,会自动进行数...

weixin_42117224的博客 672

jsp页面用el表达式获取枚举的code

jsp页面用el表达式获取枚举的code "/> otherType="${D_BUSINESS.code}"

qq993461639的专栏 6796

EL表达式调用函数

http://blog.csdn.net/it_man/article/details/7657691 首先说一下ognl调用方式 s:setname="albumImg"value="@com.iss.portal.base.util.FileTools@getImgByWH(#oneAlbum.cover,'100X100')">s:set> 其次 EL表达式调用自定义函数 1

学习之路 3844

EL表达式与JSTL标签库(了解)

EL简介 1.EL是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。 2.EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作。 3.EL表达式仅仅用来读取数据,而不能对数据进行修改。 4.使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不...

成长,编程,生活 783

工作流EL表达式,实现灵活节点配置

1.pom架包引用 <dependency> <groupId>juel</groupId> <artifactId>juel</artifactId> <version>2.1.0</version> 2.pom下载地址 http://www.java2s.com/Code...

leoningCool的博客 992

el表达式

1.EL的.或[]运输符 :默认是调用属性对应的get方法,底层原理为javaBean eg:${customer.age} 实际调用的是customer中的getAge()方法 没查找范围默认依次从 pageScope requestScope sessionScope applicationScope 中找对应的属性 //输出放在session中的customer的age属性...

lunaticCode1的博客 253

快速学会在JSP中使用EL表达式

  在没有学会EL表达式之前,我们想在JSP文件中获取servlet或者其他JSP页面传来的值,通常都是在JSP页面中编写java代码来实现。而在jsp页面编写Java 代码,这种做法时不规范的,将会产生许多的弊端,如:   1、代码的可维护性差,给人员的分工带来了许多麻烦;   2、降低了代码的可读性;   3、降低了程序的安全性;   而在JSP中,有另一种语法,代替了java代码来获...

weixin_30723433的博客 856

el表达式和jstl标签库

el表达式和jstl标签库 一:el表达式:表达式语言,jsp页面获取数据比较简单 1、el表达式的语法(掌握) el表达式通常取值是获取作用域对象中的属性值:属性名=&gt;是el表达式的简写的形式跟jquery不一样,{属性名}=&gt;是el表达式的简写的形式 跟jquery不一样,属性名=>是el表达式的简写的形式跟jquery不一样,(选择器)jquery对象,代码...

qq_36369332的博客 291

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 基础语法:从脚本片段到 EL 表达式

JSP这玩意儿,说白了就是个“披着 HTML 外衣的 Java”...

FoyoDesigner的博客 1263
上一篇: 搜索引擎设计实用教程(3)-以百度为例
下一篇: 爱你就是爱自己
张俊林博客
张俊林博客 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄22年 6030粉丝 116原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值