10

Elasticsearch 在网页摘要计算中的优化实践

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzUzNTc0NTcyMw%3D%3D&%3Bmid=2247485482&%3Bidx=1&%3Bsn=65fdcedf702b18d773b9585a183d8453
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

导语 | 网页摘要计算,术语是 snippet computing/highlight computing。用户在输入框输入的关键词命中相关网页(ES 中的文档)后,需要根据关键词以及打分模型从网页内容筛选出 top N 的语句组成短文返回给前端手机用户,关键词红色高亮。 笔者小组负责网页摘要高亮计算, 本文将从模型优化及工程演变角度,还原 ES 在网页摘要技术中的应用实践。文章作者:魏征,CSIG 智慧零售数据中心大数据工程师。

一、项目背景

通用搜索引擎,细分模块包括网页搜索、图片搜索、视频搜索、新闻搜索等,国际化市场同时需要支持主流市场语言。笔者的项目组是网页搜索下的网页摘要高量计算,产品一期市场覆盖西欧国家,所以网页摘要计算需要支持英语、法语、德语、意大利语、西班牙语等。通用搜索引擎架构分为离线和在线两部分,离线主要是网络爬虫、属性打标、数据抽取、分词计算/索引创建等,在线包括用户意图识别、输入纠错、网页/图片/视频/召回和排序、广告投放、特效卡片(天气、股票、交通)等。如下是周明老师的一张通用搜索引擎架构图,细节请参考https://www.msra.cn/zh-cn/news/features/ming-zhou-nlp-search-engine

MNbuuyj.jpg!mobile

网页查询属于上图中的在线模块,上下流程分为: 网页基础召回,即粗排,用户输入关键词从 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个网页的摘要短文。

3ammQr7.png!mobile

由于网络爬虫从互联网爬出的网页接近千亿,按网站的质量/流量,把网页分为3个等级分别存储在不同的3套 ES 集群,同时网页基础召回和摘要计算团队分开,一共6套 ES 集群。网页基础召回团队的 ES 集群存储倒排索引数据,职责对应上述的流程 ;摘要计算团队 ES 集群正排存储网页源数据和对应的分词数据,源数据都是文本,字段包括:网页 title、网页 meta、网页content,职责对应上述的流程

网页摘要计算,术语是 snippet computing/highlight computing。用户在输入框输入的关键词命中相关网页(ES 中的文档)后,需要根据关键词以及打分模型从网页内容筛选出 top N 的语句组成短文返回给前端手机用户,关键词红色高亮。笔者小组负责网页摘要高亮计算,支持西欧主流语言、中文、阿拉伯语等,产品评测网页摘要效果需要达到9.x分,接口时延 30ms 以内。 网页摘要文本拉丁语长度一般不超过160字符,中文长度一般不超过80字符。 输入【天山 昆仑山】,产品效果大概如下:

bua6jm6.jpg!mobile

二、业务痛点

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 更多信息~

腾讯云大数据

z2QVny7.jpg!mobile

长按二维码
关注我们


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK