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

京东电商搜索中的语义检索与商品排序

时间:2020-06-04 10:50:51  来源:  作者:

导读:本文将介绍京东搜索场景中的两块技术,语义检索与商品排序。在业界检索算法基础上,我们提出一系列更适用于电商场景的检索排序算法,在业务上取得了显著收益。其中的多篇论文已被 KDD/SIGIR 等收录。

01

背景介绍

电子商务搜索是京东等电商重要组成部分,用户通过搜索找到自己需要的商品,然后下单购买。一个典型电商搜索引擎架构,包括三个重要组成部分:query 理解、召回和排序。

京东电商搜索中的语义检索与商品排序

 

  • Query 理解:包括 query 的纠错、改写、扩展、分词等。
  • 召回阶段:给定一个查询词,从商品库中召回有效正确的商品候选集,并将结果返回给排序。召回方式有很多种,这里我们只介绍基于向量检索的召回。
  • 排序阶段:给定召回商品的候选集合,根据众多因子对这些商品进行排序,挑选出最好的候选商品展示给用户。

下面我们分别介绍,基于向量检索召回和商品排序:

02

向量召回

向量检索作为一种信息检索方式在工业界已经被广泛应用,它能解决传统倒排检索不能解决的问题。倒排通过字面匹配方式召回商品,这种方式存在一种缺陷,不能召回字面不匹配但语义层面相近的商品, 如 query='2-3周岁宝宝玩具'是无法召回 sku='托马斯小火车'的。

京东电商搜索中的语义检索与商品排序

 

通俗的讲就是训练一个模型,该模型通过将 query 和 sku 映射到统一维度空间,在该空间中,相似的商品距离近,不相近的商品距离较远。如上图例子,query=奶粉,在高纬空间里,相对鞋子、服装、手机,奶粉商品距离 query 更近。这是建模过程,生成 query 和 sku 的向量数据。

我们得到了 query 和 sku 的向量,接下来就是做检索,返回与 query 距离近的 topK 个 sku。而数据库的商品量非常多,通常是十亿级,不可能做线性遍历,考虑到时效性,会引入快速向量近似检索方法,如 KDTree、TDM、LSH、PQ、HNSW 等等,我们采用的是 PQ 算法,这里不再赘述,网上有很多材料介绍其算法。下面重点介绍我们的模型及在线检索框架

模型方面不仅要考虑 query-sku 的相关性,我们也对用户行为进行建模,同一 query 针对不同用户、同一用户不同时刻检索出更具有个性化的商品。我们使用的是 DPSR ( Deep Personalized and Semantic Retrieval ) 算法,模型融合个性化和搜索语义信息,我们的论文已被 SIGIR2020 收录。

1. 检索系统 overview

京东电商搜索中的语义检索与商品排序

 

从整体看,离线模型是一个双塔模型结构,query 和 sku 分别有一个 model tower。Query 端包括了 query 包括 query tokens、user profile、user history events 等特征。Sku 端包括 title tokens、brand、category、shopid 等特征。

离线索引 ( offline indexing ),使用的是 sku tower,导出 sku 的 embedding 构建 QP 索引。

在线服务 ( online serving ) 使用的是 query tower,模型加载在 tensorflow service,在线 predict query 的 embedding。

2. 模型详细设计

① Two tower model architecture

上面介绍了模型结构,一个 query tower Q,一个 sku tower S,对于给定的 query=q, sku=s,模型计算过程为:

f(q,s)=G(Q(q),S(s))

Q(q)∈Rd×m 表示 query 的 embedding

S(s)∈Rd×m 表示 sku 的 embedding

G 表示打分计算函数,比如 inner product、L2 distance 等

双塔模型训练完后,query 和 sku 的模型相对独立,我们可以分别计算他们。所有的 sku embedding 都在离线计算,以便快速构建向量检索索引。虽然 model 是相互独立的,但 query 和 sku 之间使用简单的点积计算,理论上 query 和 sku embedding 仍然在同一个几何空间中,具有可比性。

② Query tower with multi heads

我们看到左侧的 tower 和右侧有两点不一样:Projection layer 和 mutli heads,目的是为了丰富 query 侧的信息。如下图所示,不同的 head 可以捕获 query 不同的语义 ( query=苹果,语义可以是手机和水果 ),捕获不同的品牌属性 ( query=手机,品牌可以是华为、小米 ),捕获不同的产品属性 ( query=三星,产品属性可以是笔记本、手机 ) 等等。

京东电商搜索中的语义检索与商品排序

 

③ Attention Loss

Multi heads 让 query 可以生成多个 embedding 与 sku embedding 计算 score。我们采用 attenion loss 做模型优化。

我们标记 query 的多个 embeding 为 Q(q)={e1,e2,...,em},其中 ei∈Rd,Sku 的 embedding 为 S(s)=g,g∈Rd,Query 和 sku 的打分计算如下:

京东电商搜索中的语义检索与商品排序

 

其中 β 是 softmax heat 参数。假设 D 表示训练预料,r(qi,si+) 为正样本,r(qi,si-) 为负样本,模型优化的 loss 可表示为:

京东电商搜索中的语义检索与商品排序

 

④ Negative Sampling

我们采用的是用户点击数据,数据量在10亿级作为正样本。负样本并未使用同 session 未点击的样本,因为搜索手机,展示了小米和华为手机,不能说未点击就是不相关商品。负例分为两部分:random negatives、batch negatives。我们增加了一组超参来调整两者的比例,观察发现 random negatives 越多,召回商品的 popularity 越高,更能吸引用户点击下单,但会降低商品与检索 query 的相关性。

京东电商搜索中的语义检索与商品排序

 

模型训练算法具体如下:

京东电商搜索中的语义检索与商品排序

 

3. 训练优化

我们也尝试过更强大的神经网络,如 RNN、transform 等,得到的效果类似或稍好一些。然而一个短延时的模型更适用于工业生产建模,这样可以使用更少的服务器做有效的离线训练和在线服务。

模型系统方面,我们也做了一系列训练优化,简单描述其中的几点:

  • 实现 c++ tokenizer,以 custom operator 方式加载到 tensorflow,离线训练和在线服务共用,保证 token 的一致性。
  • 训练数据压缩,修改训练数据格式,把共用的特征数据加载内存,训练时展开从而降低数据存储。也便于训练时做负例采样。
京东电商搜索中的语义检索与商品排序

 

  • 可伸缩分布式,切分大的 embedding,并将 sum up 放到 ps 以解决 worker/ps 带宽瓶颈。
  • 模型 servable 服务,我们将向量检索和 tfs 合成一个服务,不仅减少一次网络访问,降低系统 3-5ms 的平响,而且将模型分片部署,从而可以支持上百个模型同时服务或者 A/B 实验。同时 servable 服务是 cpu 和 gpu 混合部署。
京东电商搜索中的语义检索与商品排序

 

4. 语义检索效果展示

语义检索上线后获得了很好的体验效果,不仅提升了转化,长尾流量降低了近10%的 query 改写率,也就是说用户不需要多次改写 query,就能获得想要的商品结果。

京东电商搜索中的语义检索与商品排序

 

03

商品排序

下面介绍下商品排序:

商品排序主要是根据用户的输入对商品进行打分排序。商品排序的传统方法使用 xgboost 等基于决策树的方法从数据中进行学习,但是这些模型通常有成百乃至上千的数值型人工特征,不能有效的从原始特征比如用户历史点击购买数据、商品文本和图像中直接学习。近年来,深度学习在各种应用中验证了从原始特征中学习的有效性,在业界被广泛使用,比如 wide&Deep、DIN 等。下面介绍一个我们在商品搜索排序中尝试的方法。

1. 双胞胎网络

我们的训练数据来自于用户的搜索日志,通过将同一个 session 中用户购买的商品 ( 商品a ) 和没有购买的商品 ( 商品b ) 配对起来,并把购买未购买作为最终学习的 label,从而构造了用户查询-商品对训练集。

根据训练数据,我们首先设计了双胞胎网络结构:

京东电商搜索中的语义检索与商品排序

 

双胞胎网络结构有两个共享参数的模块,每个模块分别输入用户、查询和商品特征,每个模块采用 ReLU 作为激活函数,最终层的输出一个分数,两个模块的差值和数据 label 作为交叉熵损失函数的输入。

在特征方面,我们使用以下几种不同类型的特征:

  • 数值型特征:包括商品销量、用户购买力和用户是否点过、购买过商品等。
  • 文本特征:包括用户输入的查询和商品名称等。
  • 用户历史行为:包括历史点击、购买、加购商品 list 等
  • 商品、用户 id 等

文本特征可以学习到一定的相关性信息,用户历史行为可以学习到个性化信息,id 类特征我们做了 pretrain。

2. 个性化升级

在第一版双胞胎模型中,我们简单的对用户的历史行为做 sum pooling,但是这样缺乏和搜索商品的交互,无法精准的表示用户的兴趣;为了加强用户的交互,我们升级了模型的结构,用候选商品和用户历史商品做 attention,从而将静态的 user embedding 升级为随 query 和当前商品变化的 user embedding。

我们还加入了 Graph 学习方法对 id 类特征 embedding 进行 pretrain,然后加入到模型训练中。具体方法使用用户的高质量点击行为生成商品 graph,通过 Random Walk 生成训练数据,然后利用 Skip-gram 进行训练,加入 id embedding 可以提高模型离线指标和收敛速度。

京东电商搜索中的语义检索与商品排序

 

3. 时效性优化

值得一提的是,为了增强排序捕捉变化的能力,提升排序的流动性,我们从三个方面:特征时效性、模型时效性、线上预估校准进行了优化。

  • 提升特征时效性:接入商品小时级的点击加购订单等实时信号,训练模型学习实时变化
  • 实时在线校准:根据商品全站的点击订单等实时反馈信号,对模型原来的预测分数及时校准
  • 提升模型的更新频率:优化训练数据生产流程,推动训练平台升级,提升模型训练速度

搜索排序是商品检索最重要的模块之一,我们在个性化、时效性、多目标等方向不断迭代,提升了排序体验,也提升了商品成交量。

04

总结

我们介绍了语义检索召回和商品排序,在京东搜索服务上部署并取得了良好效果。我们还在尝试一些业内其他流行的方法,比如 GNN、KG、MMoE 等方向,也获得了不错的成绩。

文章作者:

王松林、唐国瑜,京东算法工程师。

团队介绍:

京东搜索应用科学部,负责京东商城商品搜索排序算法,覆盖京东主站,京喜,微信一级入口的京东搜索。团队成员有来自国内外大厂,也有来自中清北的优秀毕业生。我们致力于用技术驱动产品,用行业前沿的先进技术落地业务场景;从实际需求出发,用技术解决实际问题,做有用并且有趣的算法,我们也乐于把实践经验通过论文分享给业界。欢迎有技术情怀、有创新活力的你加入我们!



Tags:京东   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
进入京东金融APP,点击“我”那一栏,登录自己的账号;找到白条页面,点击取现图标,不能超过最大取现额度;输入取现金额后,会自动显示日利息,和本次的手续费。 京东白条取现是京东金融针...【详细内容】
2021-12-16  Tags: 京东  点击:(5)  评论:(0)  加入收藏
想知道京东服饰内衣都有哪些类目吗?想知道如何才能入驻服饰内衣类目吗?想知道服饰内衣类目是否需要特殊资质吗?小编为您详细解析!京东内衣类目旗舰店、专卖店采取自荐品牌入驻,目...【详细内容】
2021-12-08  Tags: 京东  点击:(17)  评论:(0)  加入收藏
背景在日常工作中,我们通常需要存储一些日志,譬如用户请求的出入参、系统运行时打印的一些info、error之类的日志,从而对系统在运行时出现的问题有排查的依据。日志存储和检索...【详细内容】
2021-11-23  Tags: 京东  点击:(20)  评论:(0)  加入收藏
有很多商家在京东上面开设店铺,京东在初期的时候第三方的商家还是非常少的,主要是靠京东自营撑起了整个平台,京东开放第三方商家入驻之后,对于的三方商家而言,与阿里的平台不一样...【详细内容】
2021-10-19  Tags: 京东  点击:(37)  评论:(0)  加入收藏
近期和大家讲的都是信用卡或者银行方面的内容,今天的话就和大家分享一下京东方面的内容吧,京东金融最出名也就是京东白条了和花呗差不多是同一个道理,不管提额也好还是使用都是...【详细内容】
2021-10-15  Tags: 京东  点击:(40)  评论:(0)  加入收藏
赶在双11前夕,京东发布了全新的即时零售品牌“小时购”。消费者下单带有“小时购”标识的商品后,系统会基于LBS周边3-5公里的门店发货,从而实现1小时内配送到家。供给端,小时购...【详细内容】
2021-10-14  Tags: 京东  点击:(40)  评论:(0)  加入收藏
1 内容总概不管是数据分析还是数据运营,少不了做分析报告,通常一份简洁的分析报告总是令人眼前一亮,但是,大部分同学拿到一组数据时,不能很好的应用,没有思路、想法和头绪,这里作者...【详细内容】
2021-09-14  Tags: 京东  点击:(46)  评论:(0)  加入收藏
京东E卡分为电子卡和实体卡,其中电子卡的卡密码需要通过订单详情来获取,可选择支付密码或者短信验证码获取卡密码,那具体怎么使用京东E卡电子卡呢,下面就和小编一起来看看吧!绑定...【详细内容】
2021-09-04  Tags: 京东  点击:(100)  评论:(0)  加入收藏
为帮助各位家长在小升初过程中能够更快更准确的为孩子选择小升初理想学校,同时在志愿填报时提供重要的参考依据,简单整理东城、西城、海淀、朝阳、丰台、石景山、通州7个大区...【详细内容】
2021-04-28  Tags: 京东  点击:(237)  评论:(0)  加入收藏
一、Zuul简介Zuul相当于是第三方调用和服务提供方之间的防护门,其中最大的亮点就是可动态发布过滤器二、Zuul可以为我们提供什么1、权限控制2、预警和监控3、红绿部署、(粘...【详细内容】
2021-04-21  Tags: 京东  点击:(229)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条