快手、孩子王、华为等专家分享大模型在电商运营、母婴消费、翻译等行业场景的实际应用 了解详情
写点什么

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

  • 2020-06-09
  • 本文字数:3720 字

    阅读完需:约 12 分钟

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

导读: 本文将介绍京东搜索场景中的两块技术, 语义检索与商品排序 。在业界检索算法基础上,我们提出一系列更适用于电商场景的检索排序算法,在业务上取得了显著收益。其中的多篇论文已被 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 等方向,也获得了不错的成绩。


作者介绍


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


本文来自 DataFunTalk


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247501196&idx=1&sn=978b373e1278c709fc53036614a240ab&chksm=fbd777e0cca0fef630da6ed55518775e22afba1e74cd2e09701e055533146f29c71876ba77c4&scene=27#wechat_redirect


2020-06-09 14:046280

评论

发布
暂无评论
发现更多内容

两个小时手写了个Zookeeper分布式服务注册中心

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

架构实战营 模块五

felix

#架构实战营

阿里蚂蚁花呗团队面试题:spring+分布式+jvm+session+redis

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

一周信创舆情观察(11.15~11.21)

统小信uos

硬科技起飞,这家成立仅三年的AI研究院已颇具国际风范

硬科技星球

JS函数的this

Jeannette

应急响应入门之Linux分析排查

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

字节跳动如何系统性治理 iOS 稳定性问题

字节跳动终端技术

ios 字节跳动 APM APP稳定性

2021年26家大厂Java面试题整理了360道(分布式+微服务+高并发)

热爱java的分享家

Java 架构 面试 程序人生 经验分享

SAP ERP classification 和 SAP Cloud for Customer 的同步

汪子熙

中间件 SAP ERP C4C 11月日更

Python代码阅读(第63篇):数字奇偶性

Felix

Python 编程 Code 阅读代码 Python初学者

回顾“低代码”历史发展,是技术进步了还是倒退了?

优秀

低代码

JS柯里化和反柯里化

Jeannette

闭包与内存泄露

Jeannette

回顾我两个月面试阿里,携程,小红书,美团,网易等等(Java岗)

热爱java的分享家

Java 架构 面试 程序人生 经验分享

CSS布局(五)之圣杯布局和双飞翼布局

Augus

CSS 11月日更

先到先得!Alibaba甩出第四次更新的JDK源码高级笔记(终极版)

热爱java的分享家

Java 源码 jdk 面试 经验分享

恒源云(GPUSHARE)_训练一个专门捣乱的模型

恒源云

人工智能 深度学习 算力

微信 ClickHouse 实时数仓的最佳实践

科技热闻

元宇宙最缺的是内容,而云计算能帮上忙

百度开发者中心

云计算 元宇宙

SAP 公有云和私有云解决方案概述

汪子熙

公有云 云平台 SAP 11月日更 公有云私有云

跨端分布式计算技术初探|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

HarmonyOS低代码开发介绍|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

TDengine在理想汽车物联网业务场景的落地实践

TDengine

tdengine 时序数据库

async/await 优雅永不过时

CRMEB

【Pandas学习笔记01】强大的分析结构化数据的工具集

恒生LIGHT云社区

Python 大数据 数据分析 pandas

行业分析| 大势所趋:元宇宙

anyRTC开发者

音视频 视频通话 虚拟现实 元宇宙

分布式软时钟有多重要?|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

尝试 Promise A+

Jeannette

Javascript的内存管理

Jeannette

广发证券携手HarmonyOS打造智慧金融服务|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

京东电商搜索中的语义检索与商品排序_数据库_DataFunTalk_InfoQ精选文章