2.3 技术概要
搜索引擎中的各大服务模块构成了搜索引擎的工作流程,但是每个服务模块要想正常运作,还需要强大的技术支撑,这些技术主要包括自然语言处理、知识图谱、海量数据存储、分布式计算及搜索排序等,其中的每项技术都会对搜索引擎的搜索结果产生非常重要的影响。
2.3.1 自然语言处理
自然语言处理(Natural Language Processing, NLP)是人工智能领域与语言学的交叉学科,目的在于让计算机能够认知人类语言。在搜索引擎技术中,自然语言处理主要用于海量互联网数据的文本挖掘。
在搜索引擎获得海量互联网数据之后,利用大数据分析原理及自然语言处理对数据进行文本挖掘,以发现更多具有价值的信息。文本挖掘主要分为文本分析及特征分析。文本分析包括分词技术、词性分析、语义分析、依存句法分析和句子相似度等。特征分析包括语种检测、核心句提取、关键词提取、情感分析及文本聚类和分类等。文本挖掘流程如图2-5所示。
图2-5 文本挖掘流程
文本挖掘中采用的各大自然语言处理模块的具体含义如表2-2所示。
表2-2 文本挖掘中采用的各大自然语言处理模块的具体含义
在搜索引擎的基本模块结构中,网络爬虫服务从互联网中采集大量数据信息,在通过自然语言处理框架处理之后,将文本信息逐步分解为结构化数据及价值性数据,从而构建知识图谱及数据索引。在搜索服务中也会使用自然语言处理去深入理解用户的搜索意图。
2.3.2 知识图谱
知识图谱目前已经成为现代搜索引擎的标配,但是在大数据时代之前,很多公司不愿涉足此领域,原因在于研发成本较高,而现在情况已经截然不同。知识图谱是为搜索引擎提供精准答案的技术基础,目前几乎所有的搜索引擎公司都非常重视知识图谱的研发工作。知识图谱作为一种图结构,实质上是对结构化数据的形式化表达,它是通过大数据不断分析各类知识信息及知识之间的关系最终构成的。
知识图谱中有三个非常重要的概念:实体、实体标签和实体关系,它们是知识图谱中基本的组成元素。
(1)实体。实体表示具有分析价值的具体对象,包括人、物、时间、地理位置等,如“马云”“打印机”“1949年”“北京”“颐和园”等。
(2)实体标签。实体标签是在实体中具有标识意义的标签信息,能够对实体起到一定的区分作用。例如,“中国艺人梁朝伟”,其中“梁朝伟”作为人名,被视为实体,“中国艺人”即实体“梁朝伟”的实体标签。
(3)实体关系。顾名思义,实体关系是指实体与实体之间存在的关系。例如“北京是中国的首都”,其中“北京”和“中国”分别代表两个实体,而“首都”表示两者之间的关系,即实体关系。
下面通过具体的例子分析实体及实体关系。如表2-3所示,对“唐朝”与“李白”相关的两个句子进行实体及实体关系分析。
表2-3 对句子进行实体及实体关系分析
表2-3完成了对实体及实体关系的分析,但是还需要通过上述信息构建知识图谱。如图2-6所示为依据表2-3构建的知识图谱,充分表现出实体、实体标签和实体关系的相关元素。
图2-6 实体“唐朝”与“李白”知识图谱构建示例
对于图2-6所示的效果,在默认情况下,句子中不会显示实体标签信息,需要根据实际情况获取。整个知识图谱的构建不仅要依赖自然语言处理技术,文本中的实体识别、实体关系提取及实体标签自动化标注、实体对齐去重等,都是构建过程中必须解决的问题。
2.3.3 海量数据存储
现代的搜索引擎在数据层面已经发生了巨大的变化,无论是传统的PC互联网,还是移动互联网,每天都在产生新的数据。搜索引擎中的海量数据主要来自原始数据、索引数据和日志数据三个方面。
(1)原始数据。这些原始数据是网络爬虫服务夜以继日地在互联网中不间断下载的互联网数据,包括文档、图片、视频等。
(2)索引数据。索引服务会对网络爬虫服务下载的庞大数据进行分析,并建立索引,而索引数据的大小在一般情况下均会超过原始数据的大小。
(3)日志数据。每天都有数以亿计的用户请求源源不断地产生,为了达到较好的搜索效果,日志服务记录下了所有的用户请求信息,而这些日志数据也在日益增大。
面对海量的原始数据、索引数据及日志数据,其存储不得不依靠大规模分布式存储技术。一般的分布式存储逻辑结构如图2-7所示。
图2-7 一般的分布式存储逻辑结构
在海量数据的分布式存储中,不同的数据可能会被存储到各个不同的存储节点中。分布式存储也面临着非常重要的数据压缩、负载均衡、容灾还原等问题。
(1)数据压缩。虽然庞大的数据被分布式存储到各个存储节点中,但是由于庞大的数据存储会导致企业硬件成本偏高,所以一般情况下各个节点在存储数据时也会考虑对数据进行压缩。而压缩就要权衡压缩比和解压缩性能,如果压缩比过高,则会导致解压缩性能变差,对数据访问会造成一定的影响。
(2)负载均衡。在数据存储过程中,分布式集群中的每个数据节点都有可能导致数据倾向现象,即少量数据存储节点中存储的数据量极大或者极小。需要采用各种方法来协调数据存储中的负载均衡问题。
(3)容灾还原。任何存储节点都可能出现故障,一旦某一部分数据出现故障,将导致该存储节点中的数据不可读。因此,整个分布式存储系统需要具备发生故障后进行数据恢复的能力,并保证整个分布式存储系统的稳定性一直处于可控范围内。
上述问题都是海量数据存储中必须解决的问题。
2.3.4 分布式计算
在海量数据面前,搜索引擎需要挖掘其中的数据价值,仅仅通过普通的数据库分析很难达到理想效果,即使采用编程分析也是比较难的,因此需要一个计算平台协助搜索引擎进行数据分析。所以,对于大数据的处理,需要引入分布式计算。分布式计算是指采用多台服务器分散处理的方式,将由于数据量过大而导致计算时间过长的任务拆解为多个子任务,将这些子任务分别交给更多的服务器去处理,各台服务器处理完毕之后,将最终结果合并。在整个过程中,从处理方式上可以分为批量计算和流计算,批量计算是先存储后计算的,而流计算是直接计算的。
从搜索引擎的角度来看,对于这些海量数据的分析,不得不依赖分布式计算平台。但是部分信息采用的是离线批处理运算,而对于部分信息的处理实时性越高越好,例如,针对数据抓取需要采用离线批处理运算,而对于结果排序需要采用实时运算。分布式计算成为大数据处理分析的重要工具的原因在于如下两个方面。
(1)高性能服务器也能进行复杂运算,但是高性能服务器不仅价格昂贵,而且一旦出现故障,将导致众多问题。相反,将廉价的普通计算机组成一个分布式计算网络,不仅可以进行复杂运算,还可以避免因单机故障导致的系统瘫痪,具备高容错性。
(2)采用分布式计算可以有效地对资源进行汇总、灵活扩展计算性能,其维护成本较低,并且可以让不同的分布式应用运行在分布式计算集群中,这意味着任何开发者都可以向分布式计算平台发起执行应用的命令。
分布式计算可使搜索引擎在尽可能短的时间内处理海量数据,并分析出数据的价值,例如,在极短的时间内分析出当前实事热点新闻、为用户推荐最相关的广告、在最短的时间内为用户反馈搜索结果等。分布式计算和分布式存储作为搜索引擎的基础平台,是开展后续一切工作的基础。
2.3.5 搜索排序
在搜索服务中,搜索服务接口通过搜索服务后台获得搜索结果,而在搜索服务后台向搜索服务接口返回结果之前,搜索服务后台有一项非常重要的工作,即对结果进行排序,在通俗意义上是指对搜索结果中的文档集合进行排序。文档集合排序是搜索引擎中核心的组成部分之一,是用户直观地感受搜索引擎质量优劣的重要标准。时至今日,各互联网公司依然在持续深入研究搜索引擎排序策略。
目前,主流的搜索引擎主要从利用搜索词、文档质量及用户信息三个方面对搜索结果中的文档集合进行排序。
(1)利用搜索词进行排序。该过程又称为相关性排序,是指根据用户的搜索词与文档本身的相关程度进行排序,整个过程只考虑用户搜索词与文档的匹配程度。
(2)利用文档质量进行排序。文档质量是一个多方面的评价标准,它包括对文档链接权值、文档链接质量的分析,对文档内容真实性、权威性等方面计算一个合理的参考值,给予文档基于质量的评分。
(3)利用用户信息进行排序。该过程又称为个性化排序,是指根据用户搜索的历史记录、个性喜好、身份特征等方面为用户定制搜索结果,可能会导致不同用户使用相同搜索词看到的搜索结果不一致。
对于用户搜索文档的最终排序结果是上述三类排序的综合排序。例如,有三个文档:文档A、文档B、文档C,在上述三类排序中均存在不同的排序序列,通过将三个方面进行综合,给予一个最终排序序列,如图2-8所示。
图2-8 搜索文档最终排序与三类排序的综合关系
换一个角度看搜索排序,除对搜索排序结果质量有很高的要求之外,对排序完成的时间也有极高的要求,在极短的时间内完成排序也是搜索体验的重要影响因素之一。在上述三类排序中,利用搜索词和用户信息进行排序采用分布式实时计算,而利用文档质量进行排序在数据分析过程中已经完成,并不需要在用户搜索过程中进行文档质量评分。