您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

浅谈有赞搜索QP架构设计

时间:2022-09-07 15:36:20  来源:微信公众号  作者:有赞coder

作者:鑫强 艳萍

部门:数据中台

前言

在介绍QP前先简单介绍一下有赞搜索平台的整体设计,方便大家快速了解QP在搜索平台中的作用。下图简单展示了一个搜索请求开始到结束的全部流程。业务通过简洁的api接入los,管理员在搜索平台新建配置并下发,完成整个搜索接入,并通过A/B Test验证QP带来的优化效果。

 

文章主要分为5个章节:

  1. QP的作用
  2. QP应用整体设计
  3. QP应用分层设计
  4. QP算法插件设计
  5. 总结与展望

一、QP的作用

在NLP中,QP被称作Query理解(QueryParser),简单来说就是从词法、句法、语义三个层面对query进行结构化解析。这里query从广义上来说涉及的任务比较多,最常见的就是搜索系统中输入的查询词,也可以是FAQ问答或阅读理解中的问句,又或者可以是人机对话中用户的聊天输入。

在有赞,QP系统专注对查询内容进行结构化解析,整合了有赞NLP能力,提供统一对外接口,与业务逻辑解耦。通过配置化快速满足业务接入需求,同时将算法能力插件化,并支持人工干预插件执行结果。

以精选搜索为例,当用户输入衣服时用户往往想要搜的是衣服类商品,而不是衣服架,衣服配饰等衣服周边用品。通过将衣服类目进行加权,将衣服类的商品排在靠前的位置,优化用户搜索体验。

 

QP目前应用在新零售,微商城、精选、爱逛买手店、分销市场、帮助中心知识库、官网搜索等场景,通过类目加权,产品词识别,搜索词纠错,同近义词召回提升用户搜索效果。

二、QP应用整体设计

 

上图完整描述了QP请求流程和配置流程的执行情况。当搜索请求到达QP时,根据请求体中的场景标记获取QP配置。QP配置中包含搜索词位置标记,插件列表,dsl改写脚本等内容。

QP根据配置,按序执行相应插件。插件在执行后,可通过干预配置以及超参数对结果进行人工干预。

QP在获取到算法插件执行结果后,根据改写配置,对搜索dsl进行改写。如将纠错词放置在搜索词同一层级,将dsl改写成fuction score结构进行类目加权。

三、QP应用分层设计

 

上图按照请求流程从上到下展示了QP的分层设计,接下来将简单描述各层作用:

  • controller层:查询改写服务入口,对请求做预处理。
  • service层:根据场景获取QP改写配置,获取dsl里的搜索词,调用相应的插件返回qp结果。
  • plugin层:负责算法插件执行,调用插件对应的算法实现handler,对算法结果做干预并针对调用成功或者失败做处理。
  • handler层:算法具体实现放置在该层,该层会依赖各种算法服务(如小盒子,Milvus等)。
  • Intervener层:负责对handler结果做人工干预。
  • processor层:根据QP改写配置,调用改写插件,完成dsl的改写。

四、QP算法插件设计

‍ 01

预处理preprocess插件

按照配置规则对搜索词进行预处理,预处理方式如下:

  1. 删除特殊符号 " “ 等;
  1. 大写转小写,全角转半角;
  1. 连续英文联合切分,连续数字联合切分,其余单独切分;
  1. 默认截取list前50个字/词;
  1. 将list拼接成一个字符串。

样例

输入:"史蒂夫新款时尚套装夏修身圆领百搭钩花DWF镂空雪纺两件套套裙;"

输出:"史蒂夫新款时尚套装夏修身圆领百搭钩花dwf镂空雪纺两件套套裙"

02

纠错Correction插件

纠错插件的作用是对搜索词中错误内容进行识别,返回正确内容。

样例

输入:[上海牛黄皂]

输出:[上海硫磺皂]

当用户输入“上海牛黄皂”时,通过纠错插件能正确输出“上海硫磺皂”,其技术架构如下图所示:

 

  1. 纠错模型在bert基础上采用知识蒸馏,提升模型精度降低模型时延。
  1. 根据同音字召回候选集,使用tri-gram语言模型对候选集排序。

03

细粒度分词Tokenzier插件(基础分词)

样例

输入:[雪地靴女2020年新款皮毛一体冬季加绒加厚防滑东北厚底保暖棉鞋子]

输出:[雪地 靴 女 2020 年 新款 皮毛 一体 冬季 加绒 加厚 防滑 东北 厚底 保暖 棉 鞋子]

该分词插件由JAVA版结巴 jieba-analysis 修改而来,修改内容如下:

    • 从全网商品标题数据,有赞行业数据,开源数据中统计出词频,作为基础分词词典;
    • 解决词典中由英文单词导致英文字符串被分开的问题;
    • 限制DAG的长度,即匹配词的长度,以此控制分词粒度,目前默认是2,分出来的词除英文和数字外,长度不会超过2。

04

语义分词sementicSegment插件

样例

输入:[雪地 靴 女 2020 年 新款 皮毛 一体 冬季 加绒 加厚 防滑 东北 厚底 保暖 棉 鞋子]

输出:[雪地靴 女 2020年 新款 皮毛一体 冬季 加绒加厚 防滑 东北 厚底 保暖 棉鞋子]

该插件在细粒度分词的基础上,通过模型生成语义树将关联度大的词列表进行合并,输出语义分词结果。在样例中,雪地与靴关联度更大,所以在语义分词中将雪地与靴合并输出。

 

04

实体识别Tagging插件

样例

输入:["汽车","脚垫","刷子"]

输出:[{"word":"汽车","tag":"产品修饰词"},{"word":"脚垫","tag":"产品修饰词"},{"word":"刷子","tag":"产品词"}]

实体识别插件主要用于识别出搜索内容中的产品词。比如用户在输入“汽车脚垫刷子”时,如果没有做产品词识别,“脚垫”相关的商品会因为商品分高而排在“刷子”商品前面,影响用户搜索体验。

反之,经过命名实体识别,对“刷子”做产品词提权,刷子类商品就可以排在脚垫类商品前面,优化搜索体验。

目前有赞规划的实体类别列表如下所示:

产品词 eg:“修身连衣裙”中的“连衣裙”

产品修饰词 eg:“汽车脚垫”中的“汽车”

普通词

新词

修饰

品牌

机构实体

地点地域

材质

人名

功能功效

专有名词

影视名称

型号

文娱书文曲

系列

游戏名称

款式元素

颜色

场景

风格

营销服务

人群

时间季节

性别

类目

母婴

规格

新品

前缀

后缀

数字

符号

实体识别方法

基于正则可以识别数字、符号、规格、时间季节。

private numWordRegex = "[0-9]+";

// 符号

private String symbolWordRegex = "[\[\]\{\}【】「」\\\|、|‘'"“”’;:;:>.。》/?\?<《,,~`·!\!@#\$¥%\^…&\*(\(\))\-_—=\+\s]+";

// 规格

private String unitRegex = "(?:\d+|\d+\.\d+|[一二三四五六七八九十百千万]+)\s*(?:m|米|cm|厘米|ml|毫升|l|升|度|平米|件|块|元|片|张|本|条|瓶|部|辆|个|桶|包|盒|g|克|kg|千克|吨|寸|斤)";

// 时间季节

private String seasonRegex = "[春夏秋冬]+[季天]?";

private String yearRegex = "(?:18|19|20)\d{2}";

基于词库可以识别产品词、品牌、产品修饰词。

品牌:query->二级类目->品牌,条件:在当前类目品牌词库里且模型预测不是“产品词”,此时打“品牌”实体标。

产品词:在产品词库且模型预测是普通词。

产品修饰词:多个词出现时,除最后一个,其余打“产品修饰词”实体标。

基于模型可以识别剩余23类实体,类别如下所示:

产品词

普通词

新词

修饰

品牌

机构实体

地点地域

材质

人名

功能功效

专有名词

影视名称

型号

文娱书文曲

系列

游戏名称

款式元素

颜色

场景

风格

营销服务

人群

时间季节

模型结构如下所示:

 

04

类目预测categoryPredict插件

样例

输入:牛奶绒

输出: {

        "categoryId": "101000010001",

        "categoryName": "被套",

        "categoryChAInList": [

            "家居建材",

            "床上用品",

            "被套"

        ],

        "parentCategoryId": "10100001",

        "level": 3,

        "hasChildren": true,

        "percent": 0.9010684490203857

    }

该插件会根据用户的搜索内容输出类目结果,主要应用在类目加权上。 例如当用户在有赞精选上输入牛奶绒,期望返回牛奶绒床单。 未使用类目加权,返回的商品大多为牛奶相关产品,不符合用户的搜索期望。 使用类目加权后,将床上用品类产品提权,返回的商品牛奶绒床单,符合用户期望。

类目预测模型是在对比学习基础上实现,具体内容可看 对比学习在有赞的应用 。

04

同义词插件

样例

输入:[衬衣]

输出:[衬衫]

同近义词插件目前非常实现轻量,通过离线同义词表,搜索内容中的产品词作为输入,输出同义词。

五、总结与展望来展望

本文从QP整体设计,分层设计,插件设计较为完整的介绍了QP的架构设计。目前经过一年多的迭代,QP已经实现业务场景小时级接入,优化了零售,微商城,精选,爱逛,分销等场景搜索效果。后续将会继续丰富算法插件能力同时完成QP可视化配置能力方便业务自主接入。

作者:鑫强 艳萍

来源:微信公众号:有赞coder

出处
:https://mp.weixin.qq.com/s?__biz=MzAxOTY5MDMxNA==&mid=2455764505&idx=1&sn=6aca26e994937bd3a6b0fb3fbd61e20f



Tags:架构设计   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
京东小程序数据中心架构设计与最佳实践
一、京东小程序是什么京东小程序平台能够提供开放、安全的产品,成为品牌开发者链接京东内部核心产品的桥梁,致力于服务每一个信任我们的外部开发者,为不同开发能力的品牌商家提...【详细内容】
2024-03-27  Search: 架构设计  点击:(12)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13  Search: 架构设计  点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  Search: 架构设计  点击:(36)  评论:(0)  加入收藏
听说你会架构设计?
一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。1. 引言当我那天拿着手机,正在和朋友们的微信群里畅聊着八卦新闻和即将到来的周...【详细内容】
2023-12-15  Search: 架构设计  点击:(153)  评论:(0)  加入收藏
云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用
百度智能云团队在今年 11-12 月特别推出了四期《百度智能云数据库》系列云智公开课,为大家全面地介绍了以云原生数据库 GaiaDB 和分布式数据库 GaiaDB-X 为代表的百度智能云...【详细内容】
2023-12-13  Search: 架构设计  点击:(124)  评论:(0)  加入收藏
架构设计的目的
关于架构设计的目的,存在一些常见的误解。首先,仅仅因为架构很重要,并不意味着必须进行架构设计。重要的是理解架构为何重要。例如,有人可能认为没有架构设计,系统就无法运行,但这...【详细内容】
2023-12-06  Search: 架构设计  点击:(198)  评论:(0)  加入收藏
10个必知必会的云原生架构设计模式
在构建云原生应用程序时,采用了一些不同的软件架构方法。云原生应用程序通常采用微服务架构,以最大程度地利用云计算模型的优势。这些应用程序需要能够在动态编排和容器化环境...【详细内容】
2023-12-04  Search: 架构设计  点击:(153)  评论:(0)  加入收藏
如何做好架构设计,架构设计有章可循吗?
设计一个系统的过程,就是建造一座大厦的过程,架构设计的质量直接决定了大厦的质量。在我们进行系统的架构设计时,总是会遇到一系列的问题,比如一个大型系统的架构应该如何起步,从...【详细内容】
2023-11-24  Search: 架构设计  点击:(305)  评论:(0)  加入收藏
云计算时代下的系统技术架构设计与实践
随着云计算技术的快速发展,越来越多的企业和组织将其业务和应用迁移到云平台上。云计算为用户提供了弹性的计算资源、灵活的服务模式和高效的运维管理,成为了当今信息技术领域...【详细内容】
2023-11-16  Search: 架构设计  点击:(127)  评论:(0)  加入收藏
听说你会架构设计?来,弄一个群聊系统
群聊系统是社交应用的核心功能之一,每个社交产品几乎都有着群聊系统的身影:包括但不限于 QQ、微信、抖音、小红书等。上述介绍的技术细节可能只是群聊系统的冰山一角,像常见的...【详细内容】
2023-11-08  Search: 架构设计  点击:(213)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(12)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(18)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(118)  评论:(0)  加入收藏
站内最新
站内热门
站内头条