当前位置:首页 > 燃气灶 > 文章正文

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

编辑:[db:作者] 时间:2024-08-25 01:09:27

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)∈Rdm 表示 query 的 embedding

S(s)∈Rdm 表示 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 等方向,也得到了不错的成绩。

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

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除,如需转载请保留原文地址:http://www.baanla.com/rqz/56690.html

XML地图 | 自定链接

Copyright 2005-20203 www.baidu.com 版权所有 | 琼ICP备2023011765号-4 | 统计代码

声明:本站所有内容均只可用于学习参考,信息与图片素材来源于互联网,如内容侵权与违规,请与本站联系,将在三个工作日内处理,联系邮箱:123456789@qq.com