通用搜索引擎技术点解析:原理、组成与分类
1. 写在前面
今天打算和小伙伴们一起学习一些通用搜索引擎的技术点。
由于搜索引擎内容非常多,每个部分都足以写几篇文章,因此本文只是一个起点。深入的探索将需要专家自己去做。
通过本文,你会对一般搜索引擎的基本原理和组成有更清晰的认识,认真看完,一定会有所收获!
不用多说,各位,赶紧上车,出发!
2.搜索引擎介绍 2.1 搜索引擎的分类
搜索引擎按照使用场景和规模可以简单分为两类:
通用搜索又叫大搜索,谷歌、百度、搜狗、神马等应用都属于此类。
垂直搜索又称垂直搜索,是在特定领域内的搜索,例如在QQ音乐上搜索周杰伦的歌曲。
两类搜索引擎虽然数据规模、数据特点不同,但都是旨在填补用户与海量信息之间的空白。
2.2 搜索与推荐
搜索和推荐经常被一起提及,但两者之间存在一些区别和联系。
2.3 搜索引擎评估标准
我们每天都和搜索引擎打交道,对一个搜索引擎的评价可以简单概括为:准确度、时效性、响应速度、权威性等。
也就是说,搜索引擎知道用户真正想要查找什么,并能快速、准确地将其显示出来,还能及时收集和展示一些热点、突发的信息,从而很好地吸引用户。
这一目标需要搜索引擎多个模块的协作,是一项复杂的系统工程,并不是一件容易的事情。
3.通用搜索引擎概述 3.1搜索引擎的基本流程
大白尝试用通俗易懂的语言来表达通用搜索引擎的工作原理:
1、网络蜘蛛、爬虫每天都在不知疲倦地收集网页并存储,使得各个站点的页面都有镜像副本,规模都在数百亿/数千亿级。
2. 简单的镜像不能直接使用,需要经过加工,对每个网页进行切分,建立搜索词和网页的对应关系,这样用户搜索某个东西的时候,就会得到很多相关的网页。
3、比如搜索“隐秘的角落”,可能会搜索到100个相关网页,但是网页和搜索词之间的相关性可能强也可能弱,所以需要对网页进行排序,排序策略有很多种,最终会选出质量高的网页在最前面展示给用户。
用户看到相关结果后,点击或者跳过,搜索引擎根据用户的相关操作进行调整,实现闭环。
4、为了更好的了解用户的真实目的,需要了解搜索词的意图,对词语进行分词,替换同义词,纠正语法错误等,然后根据这些搜索词获取数据,找到用户想要的网页。
例如,搜索词“eagle”可能指自然界中的鹰,也可能指 NBA 中的一支球队:
3.2 搜索引擎的基本组成部分
我们先简单了解一下各个模块的基本组成和主要功能:
接下来我们简单介绍一下几个模块的基本内容和技术要点。
4.网络爬虫模块介绍
网页爬虫模块是通用搜索引擎非常基础的组件,一般采用分布式爬虫来实现。我们来看看这个搬运工是如何实现海量网页发现的:
网络爬虫的基本流程:
爬取过程中的遍历策略有很多种:深度优先遍历DFS、广度优先遍历BFS、部分PageRank策略、OPIC在线页面重要性计算策略、大站点优先策略等等。
在工程实践中需要根据自身的情况以及搜索引擎的特点选择某一种策略或者多种策略的组合。
网络爬虫需要遵循 Robots 协议(网络爬虫排除标准),这是网络爬虫和网站之间的一个君子协定,网站通过该协议来告诉网络爬虫哪些内容可以爬取,哪些内容不能爬取。
网络爬虫还需要考虑抓取频率,避免给网站带来过重的负担。总之,搜索引擎的网络爬虫需要做一位谦逊的绅士。
5.网页内容处理模块
爬虫模块存储完网页内容之后,网页内存处理模块就开始对网页内容进行解析,主要工作包括:数据清理、网页内容分块、建立正向索引、建立倒排索引等。
5.1 数据清理
一般来说,网页中除了具体的内容之外,还有很多不相关的东西,比如HTML标签,促销信息等等,这些东西对于实际的搜索引擎来说是毫无用处的。
内容处理模块会清理无用的数据和标签,为后续的分词做准备。
5.2 中文分词
将清洗后的内容进行分词,提取关键词,比如一个网页有1000个字,分词后大概有50个字,相当于提取了网页主体,标题、摘要、正文等不同部分的内容会进行不同的分词权重处理。
在分词过程中,会剔除停用词和虚词,如“的、得、地”等,尽可能的恢复网页的主体内容。
我们利用在线网页切分工具和真实网页来模拟这个过程:
网页分页在线工具:
抓取网页:
可见分词后可以标注词频,这是后续网页排序的重要来源。但是中文非常复杂,所以分词算法种类繁多,常见的有:
5.3 正向指数
假设我们给每个网页唯一编号docid,经过前面的分词之后,一个网页会被分成多个具有不同权重的实体词。
所谓正向索引,就是指根据docid可以得到属于该网页的所有内容,是符合我们思维的正向过程,相对而言就会有倒排索引。
我们以《隐秘的角落》剧情梗概为例,模拟分词情况,大致如下(本次分词结果纯属虚构,请以实际情况为准):
5.4 倒排索引
假设我们分出了1万个网页,其中包含一些常见的搜索词:微山湖、智取威虎山、三十而立、隐秘的角落等等,所以我们汇总之后就建立一个搜索词->网页的映射关系。
假如搜索词“隐秘的角落”有很多个网页,那么倒排索引就相当于从一个单词中拉出尽可能多的文章的过程。
就像我们提到美食,会想到火锅、烧烤、烤鸭、炒菜等等,这是一个由点到面的过程,这个逆向过程在搜索引擎中非常重要。
5.5 章节摘要
内容处理模块对抓取到的网页进行清洗,提前给爬虫模块提供新的URL,并对内容进行分词,建立正向和反向索引,是承上启下的中间环节。
特别地,正向索引和倒排索引,其含义不太直观,但原因也不难理解:
正向指数:指的是网页中关键词的多少,具体来说是属于这个网页本身的内容集合,也就是网页本身。
倒排索引:一个搜索关键词对应一定数量的相关网页,也就是一组可供选择的网页集合,是一类网页。
6. 网页排名与用户模块 6.1 网页排名的必要性
由于存储的网页数量达数千亿,一个搜索词可能返回几万个、几十万个甚至更多的相关网页。
网页排名需要综合考虑相关性、权威性、时效性、丰富性等多个方面。
搜索引擎需要向用户展示高质量、强相关的网页,并将其放在最前面的位置,否则搜索结果会很差,用户不会买账。
事实上确实如此。例如,如果搜索引擎返回10页结果,每页10项,总共100项,那么用户很可能不会点击1-3页或更多页面。因此,排名靠前的内容对于搜索引擎来说非常重要。结果很重要。
我们依然以搜索“秘密的角落”为例,百度一共返回了10个页面,其中有1-2个页面是强相关的,这是一个比较好的搜索结果:
6.2 网页排名的常见策略
网页排名策略是一个不断优化、不断完善的进化过程,我们来看一下排名策略:
这是早期搜索引擎经常采用的方法,比较简单,但很有效。
简单来说,排名就是根据关键词在网页中出现的频率和位置来进行的,因为一般认为,搜索词出现的次数越多,位置越重要,则网页的相关性就越好,排名就越高。
词频并不是简单的统计出现次数,我们需要有一个全局的视角去判断关键词的相对频率,这就是我们所说的TF-IDF逆文档频率,我们来看看百度百科的解释:
TF-IDF(词频-逆文档频率)是信息检索和数据挖掘中常用的加权技术。
TF是词频,IDF是逆文档频率。
TF-IDF是一种统计方法,用来评估某个词语对于某个文档集或者某个语料库中的某篇文档的重要性。
单词的重要性与其在文档中出现的次数成正比,但与其在语料库中出现的频率成反比。
例如:
“吃”这个词在该网页中出现了10次,虽然次数很多,但是由于“吃”这个词在很多其他网页中都出现过,所以搜索词“吃”的重要性相对降低了。
链接分析排名认为,一个网页被其他网页引用的次数越多或者被越权威的网页引用,该网页的质量就越高。
基于链接分析的排序算法有很多,其中最著名的PageRank算法被Google广泛使用,是其核心排序算法。
我们先来看一下PageRank算法的基本思想:
网页的重要性用其PageRank值来衡量,它体现在两个方面:引用该网页的其他网页数量和引用该网页的其他网页的重要性。
假设一个网页A被另一个网页B引用,那么网页B就会为被网页B引用的网页赋予PageRank值,所以引用网页A的网页越多,它的PageRank值就越高。
另外,网页B越重要,它所引用的网页所能分配的PageRank值就越大,网页A的PageRank值也就越高、越重要。
PageRank算法也存在一些问题,比如对新页面不太友好,新页面还没有被大量引用,所以PageRank值很低;另外PageRank算法更强调网页间的引用关系,可能对网页本身的主题内容关注不够,也就是所谓的主题漂移问题。
还有一些其他与PageRank算法类似的算法来弥补主题相关性问题,包括:HillTop算法,Topic-Sensitive PageRank算法,HITS算法等等,本文就不再展开。
6.3 网站反作弊和SEO
80/20法则同样适用于搜索引擎,排名靠前的网页占据了大量的点击流量,也意味着巨大的商业价值。
这里就不得不提到SEO了,我们先来看一下百度百科对SEO的定义:
搜索引擎优化(Search Engine Optimization,简称SEO)是通过分析搜索引擎的排名规则,了解各类搜索引擎如何搜索、如何抓取互联网页面以及如何确定特定关键词的搜索结果排名的技术。
搜索引擎利用易于被搜索和引用的方法,对网站进行针对性的优化,提高网站在搜索引擎的自然排名,吸引更多的用户来访问网站,增加网站的访问量,提高网站的销售能力和宣传能力,提升网站的品牌效应。
美德越高,邪恶就越强。只有魔法才能战胜魔法。
网页反作弊是搜索引擎需要解决的重要问题,常见的有内容反作弊、链接分析反作弊等。
6.4 理解用户搜索意图
用户模块直接和用户交互,接收用户的搜索词,准确理解用户的搜索意图非常重要。
事实上,用户输入内容多种多样,口语化倾向明显,甚至可能存在拼写错误;不同背景的用户对同一搜索词的需求也存在差异,使用无争议搜索词的目的也不同。
7. 总结
搜索引擎是一个非常复杂的系统工程,涉及到非常多的算法和工程实现,本文旨在简单梳理一下搜索引擎的基本组成和运行原理,也算是一篇科普文章。
做好搜索引擎的每一个模块并不是一件容易的事情,也是互联网产品技术含量的典型代表,深入挖掘某个模块会让你受益匪浅。
如有需要,请查阅过去的资源
总结
每天进步一点点
放慢速度以获得更快的速度
文章评论