导语 | 网页摘要计算,术语是 snippet computing/highlight computing。用户在输入框输入的关键词命中相关网页(ES 中的文档)后,需要根据关键词以及打分模型从网页内容筛选出 top N 的语句组成短文返回给前端手机用户,关键词红色高亮。笔者小组负责网页摘要高亮计算,本文将从模型优化及工程演变角度,还原 ES 在网页摘要技术中的应用实践。文章作者:魏征,CSIG 智慧零售数据中心大数据工程师。
一、项目背景
通用搜索引擎,细分模块包括网页搜索、图片搜索、视频搜索、新闻搜索等,国际化市场同时需要支持主流市场语言。笔者的项目组是网页搜索下的网页摘要高量计算,产品一期市场覆盖西欧国家,所以网页摘要计算需要支持英语、法语、德语、意大利语、西班牙语等。通用搜索引擎架构分为离线和在线两部分,离线主要是网络爬虫、属性打标、数据抽取、分词计算/索引创建等,在线包括用户意图识别、输入纠错、网页/图片/视频/召回和排序、广告投放、特效卡片(天气、股票、交通)等。如下是周明老师的一张通用搜索引擎架构图,细节请参考https://www.msra.cn/zh-cn/news/features/ming-zhou-nlp-search-engine
网页查询属于上图中的在线模块,上下流程分为:①网页基础召回,即粗排,用户输入关键词从 ES 索引中命中大量的基于 scorer 基础排序后的网页 doc IDs;②网页精排,算法团队根据网页的实时属性库再次排序取出 TOP 10 的网页/文档 ID(即上图中的 Ten Blue Links);③网页摘要高亮计算,根据 TOP 10 的网页 ID,在 ES 中查询出网页内容源数据和分词数据,使用Lucene/ES 的已有高亮计算功能(https://www.elastic.co/guide/en/elasticsearch/reference/current/highlighting.html),并结合网页场景的数据模型,计算出10个网页的摘要短文。
由于网络爬虫从互联网爬出的网页接近千亿,按网站的质量/流量,把网页分为3个等级分别存储在不同的3套 ES 集群,同时网页基础召回和摘要计算团队分开,一共6套 ES 集群。网页基础召回团队的 ES 集群存储倒排索引数据,职责对应上述的流程①;摘要计算团队 ES 集群正排存储网页源数据和对应的分词数据,源数据都是文本,字段包括:网页 title、网页 meta、网页content,职责对应上述的流程③。
网页摘要计算,术语是 snippet computing/highlight computing。用户在输入框输入的关键词命中相关网页(ES 中的文档)后,需要根据关键词以及打分模型从网页内容筛选出 top N 的语句组成短文返回给前端手机用户,关键词红色高亮。笔者小组负责网页摘要高亮计算,支持西欧主流语言、中文、阿拉伯语等,产品评测网页摘要效果需要达到9.x分,接口时延 30ms 以内。网页摘要文本拉丁语长度一般不超过160字符,中文长度一般不超过80字符。输入【天山 昆仑山】,产品效果大概如下:
二、业务痛点
ES/Lucene 原生的摘要高亮计算模块只是基础的通用功能,无法满足网页搜索摘要业务的数据特征场景和业务诉求,需要在 ES/Lucene 已有的 BM25 模型上优化:
1. 防安全攻击,特殊字符转译/反转译处理
2. 正确分句模型优化:数据源是爬虫团队从 html 抽取,包含了各种短句,各种奇怪字符,短句之间无句子符号导致数据源不是理想状态的文本,ES/Lucene 使用的 jdk 的 BreakerIterator 无法正确分句
3. 语句过滤模型:超短语句过滤、奇怪字符超过句子长度百分比过滤、句子内部高量词重复/过多过滤、句子语义混乱过滤
4. 句子重复判定过滤模型:句子之间重复度过高过滤,使用编辑距离算法 Levenshtein Distance
5. 句子打分模型优化:摘要文本由网页的 meta 和 content 组合而出,基于已有的 BM25模型,需要补充多种打分因子:meta、content 的权重因子;句子长度与语句黄金长度偏差权重因子、语句在文本先后位置的权重因子、语句是否有标点符号权重因子
6. NLP 摘要过长截断优化:句子打分模型出来的文本过长,返回给用户的摘要文本长度,文本拉丁语一般不超过160字符,中文长度一般不超过80字符,引进 NLP 句子截断模型,语句截断后语意基础完成、无词组破损、句末非半句子符号
7. 饥饿处理:句子打分模型出来的文本过短,回补语句处理。
8. 特殊同义词处理:特殊网页(比如维基百科)处理,优化专业词条(比如名人的名字)全写/缩写在语句中高亮、拆分、打分处理。
三、工程三期演变
工程一期:侵入式修改 Lecene/ES 高亮计算源代码,结合网页数据特征、业务规则,实现独有分句模型、安全特殊字符处理、打分模型、饥饿处理等手段使摘要效果用户体验评测达到9.x分。
优点:快速实现功能,满足研发进度;
缺点:
- 自研特性代码和 ES 开源耦合,后续维护升级困难;
- Lucene/ES 的摘要计算服务运行在 data node 节点,自研部分运行在 Coordinator node和 data node 节点;
- ES 查询接口是 QueryThenFetch 模型,当前业务数据只需正排存储(即 Fetch 查询),考虑业务耗时、存储模型和成本,未来使用 KV 数据库来代替 ES;
工程二期:摘要高亮计算代码独立成 ES 插件,使摘要计算完全运行在 coordinator 节点,达到计算和存储节点分离。
优点:
- 工程代码和 ES/Lucene 源代码分离,算法人员专注 NLP、相关性模型优化等高阶问题,团队人力分为大数据存储和模型算法,各司其职;
- 为后续的摘要计算微服务化场景做好铺垫;
缺点:计算无法根据流量实时动态扩缩容;
工程三期:摘要高亮计算独立为微服务,数据存储使用基于 rocksDB 的分布式 KV 存储代替 ES存储。
优点:
- 借用流行的 springBoot 框架微服务化摘要计算接口,接口无状态,并部署在云上,根据流量实时自动扩所容;
- 数据存储使用 KV 降低成本
点击文末「阅读原文」,了解腾讯云Elasticsearch Service更多信息~
腾讯云大数据
长按二维码 关注我们