WWW 23 | Facebook Marketplace的意图理解:用双塔模型处理结构化的产品目录

news2024/10/7 4:27:47

f144ce3e24b65dd8a526bea02e3435b6.gif

©PaperWeekly 原创 · 作者 | 何允中

单位 | Meta

研究方向 | Information Retrieval

de359d5104b7ab6f5d0bee5ffa357726.png

摘要

本文介绍了 Facebook Marketplace 团队提出的 HierCat 构架,以解决电商搜索中的意图理解难题。HierCat 利用线上产品交互挖掘弱监督数据,并通过基于 Transformer 的双塔模型以及概率重整化算法,帮助模型更好地泛化。该方案在线上 A/B 测试中显著提高了 Facebook Marketplace 用户参与度和搜索结果的 NDCG 指标,成为系统中的核心组件。

c53a59dc26e773cbc2e336e6335e275e.png

引言

意图理解系统在电商搜索中扮演着重要角色,为召回和排序模型提供信号,并构成产品体验的核心部分。然而,像 Facebook Marketplace 这样的平台面临着一系列意图理解的挑战,包括模糊意图、训练数据获取困难和在线推断延迟等。本文将介绍 HierCat 构架,它通过充分利用线上产品交互数据和双塔模型来解决这些问题。

b013a6ad5699afe95cffa6d1e541f22f.png

难题及挑战

  1. 模糊意图:电商搜索中经常出现探索性查询,例如“我附近的二手家具”,难以简单归类到具体的产品目录,如“沙发”或“椅子”。

  2. 训练数据:不同电商平台的产品目录不同,且动态变化频繁。传统手工标注无法获取足够的训练数据,尤其涉及全球多语种支持的平台如 Facebook Marketplace。

  3. 在线推断开销:Facebook Marketplace 每天处理上亿级别的查询,复杂模型带来了巨大推断开销和产品延迟。


c6d251d2175412475abb621a7a4a29df.png

解决方案


4.1 使用完整的层级产品目录

使用完整的层级产品目录:与传统意图理解模型不同,HierCat 不仅预测产品目录的叶节点(如“沙发”、“椅子”),还预测产品的大类(如“家具”)以及整个分类树上的路径。这样能更好地捕获模糊意图。

6afef778e59b9a60a151525c9c8ea533.png

4.2 通过线上交互挖掘训练数据

HierCat 直接从用户的查询和产品交互中获取训练数据。例如,当用户搜索“苹果手机壳”并购买了一件“手机壳”的商品,认为<“苹果手机”,“电子产品/智能手机/手机配件/手机壳”>是该查询的分类树路径。这种方法能有效获取训练数据并预测整条路径。

注意此处产品的分类由商家提供的信息(或者 Facebook Marketplace 的产品分类算法)获得。与意图理解不同,产品的分类永远在叶节点上,HierCat 的一个亮点在于提供了从叶节点的训练数据得到可以预测整条路径的建模方案。

4.3 基于Transformer的双塔模型架构

HierCat 首先直接对分类树上的节点进行建模。由于训练数据都在叶节点,为了泛化能力,采用双塔召回模型而非传统的分类模型。双塔模型通过对分类树路径名称的编码来实现对非叶节点以及新增节的 zero-shot 泛化能力。对于查询端,HierCat 使用了和团队前作 Que2Search 一样的混合粒度编码。

c0520e66bad91c2a54bf60b5ebeca576.png

与双塔召回模型不同,HierCat 采用的是 full softmax 训练而非 batch negative,作者表示发现 full softmax 比起 batch negative 略强。

d6e35a96edf8940b0f8460bf6a1947cb.png

4.4 预训练任务

为了平衡线上推断开销和延迟,HierCat 使用了来自 Meta 的 2 层 XLM 预训练模型。除此之外该团队发现通过商品召回任务进一步预训练查询端模型可以获得更细致的 embedding 表征,并提高准确度。

d4c28e6a4b426812402e350d540be2bc.png

▲ 商品召回任务带来的效果提升

4.5 重整化概率分布

HierCat 团队发现尽管在一些探索性强的搜索场景中,训练数据会有较大噪音,但是这些噪音在分类树的层级结构下扔存在一定规律。比如当用户搜索“苹果手机”,可能会同时购买苹果手机和手机配件,导致出现不同的标签,但是这些路径标签的父节点仍然会保留部分一致性(“电子产品/手机/手机配件”,“电子产品/手机/智能手机”)。基于这个观测,团队提出了如下概率重整化算法。

118660a2090038f9531ee6125f792fe8.png

该步骤通过自叶节点向父节点的概率传播保证了 P(电子产品/手机)是其子节点 (P(电子产品/手机/智能手机),P(电子产品/手机/手机配件))之和。在推断阶段,通过自上而下的 beam search 来找到最佳路径。

4.6 线上性能优化

除了常规的缓存之外,HierCat 通过预处理所有的标签 embedding 并存储在 PyTorch 的 tensor 当中,避免了反复计算标签的 embedding。在推断阶段只需计算搜索关键词的 embedding 以及 embedding 相似度即可。

df681fc5dce5aa40c9059ededb5b6a73.png

线下&线上指标

b37e20d04da0467641544d1d7d177e10.png

消融实验表面了 HierCat 方案显著强于常用的 FastText multi-label 方案,并且双塔模型相对于同样 transformer 架构的分类模型效果也有所提高。在所有场景之下,加上概率重整化的步骤都可以显著提高准确率。

6a468e3b1d624cef598d9cf049cb26be.png

除此之外,团队通过对于意图层级的分布分析发现 HierCat 起到了对训练数据降噪的效果。

ae9a425b998a839af8ebafa1da3408fd.png

HierCat 的线上 A/B 测试表示该系统通过对 retrieval boost 的提升显著增加了 Facebook Marketplace 的用户参与度以及搜索结果的 NDCG 指标。该系统目前已经是 Facebook Marketplace 系统中的核心组件,为上下游各种模型提供意图理解的信号。

更多阅读

78e52753ed527aa81e5baac6da0b17c3.png

f803d0b03e194364b7dd7b1a3f44f17d.png

7de6770ee760a39996e2b84c4570406f.png

b87543ab01174df2fcb25723f7d7d0cd.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

155bb70033c59604098b4198e0497e67.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

66ec9c4f51f7acd25d6597ec283b9273.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/851526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqlserver 数据库显示 正在还原

问题描述之前不太会搞差异备份的恢复&#xff0c;然后恢复发生了失败之后这个数据库一直处于(正在还原……状态 并且出现数据库无法访问的情况 尝试解决1执行查询Restore Database 数据库名称 with Recovery然后不太能行 2执行查询Restore Database 数据库名称 with NoRecovery…

10个最流行的免费3D模型下载网站

作为一名独立游戏开发者&#xff0c;自己创建图形、配乐、动画和更多东西是相当具有挑战性的。 创建资产所需的成本和时间有时是许多游戏开发商无法承受的。 这就是他们选择在互联网上搜索免费内容的原因。 现在&#xff0c;在浩瀚的内容海洋中获得如此免费的东西有点困难。 本…

uniapp 微信小程序 使用高德地图 定制气泡

前言 我们常说的uniapp或者原生微信小程序框架使用高德地图&#xff0c;并不是ui就是高德地图&#xff0c;而是api用的高德地图&#xff0c;ui仍然是框架内置的地图&#xff0c;也就是说&#xff0c;地图和api是分开&#xff0c;微信小程序的内置地图自然是腾讯地图。 高德地…

SpringBoot第34讲:SpringBoot集成ShardingJDBC - 基于JPA的DB隔离多租户方案

SpringBoot第34讲&#xff1a;SpringBoot集成ShardingJDBC - 基于JPA的DB隔离多租户方案 本文是SpringBoot第34讲&#xff0c;主要介绍ShardingJDBC的分片算法和分片策略&#xff0c;并在此基础上通过SpringBoot集成ShardingJDBC的几种策略&#xff08;标准分片策略&#xff0c…

DevOps最佳实践和工具在本地环境中的概述

引言 最近&#xff0c;我进行了一次网上搜索&#xff0c;以寻找DevOps的概述&#xff0c;尽管有大量的DevOps工具和实践&#xff0c;但我无法找到一个综合的概述。因此&#xff0c;我开始了对DevOps生态系统和最佳实践的梳理&#xff0c;以创建一个整体视图,方便后续研究实践 C…

Fabric系列 - 知识点整理

知识点 源码编译 主机编译 容器编译 手动部署(docker-compose) 单peer 多peer 中途加peer 多主机多peer 链码 语法, 接口 (go版) 命令行调用 ca server 在DApp中使用SDK调用 (js版) 部署的几个阶段 部署1排序和1节点, 1组织1通道 光部署能Dapp 带ca server (每个组织一个)…

SQL SERVER 2019 数据库还原测试库的方法

1、备份正式库数据 2、在其它电脑上还原备份的数据库 不需要覆盖其它数据库&#xff0c;直接还原出数据库 还原时修改文件名和数据库名称&#xff1a; 修改文件名称 还原成功

【数学建模】--时间序列分析

时间序列分析概念与时间序列分解模型 定义&#xff1a;时间序列也称动态序列&#xff0c;是指将某种现象的指标数值按照时间顺序排列而成的数值序列。时间序列分析大致可分成三大部分&#xff0c;分别是描述过去&#xff0c;分线规律和预测未来&#xff0c;本讲将主要介绍时间序…

心理咨询预约管理系统javaweb医院挂号jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 心理咨询预约管理系统javaweb MVC模式&#xff0c;普…

PCIe VSC、VSEC、DVSEC

&#x1f525;点击查看精选 PCIe 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0…

[LeetCode - Python] 11.乘最多水的容器(Medium);26. 删除有序数组中的重复项(Easy)

1.题目&#xff1a; 11.乘最多水的容器&#xff08;Medium&#xff09; 1.代码 1.普通双指针对撞 贪心算法 class Solution:def maxArea(self, height: List[int]) -> int:# 对撞双指针# 对比记录最大面积&#xff0c;并移动短板&#xff0c;重新计算&#xff1b;left,…

人工智能(AIGC)在多领域的应用

文章目录 内容创作领域艺术创作领域媒体与广告领域教育与培训领域科研与创新领域总结 人工智能&#xff08;AI&#xff09;的快速发展正在为各行各业带来深刻的变革&#xff0c;其中人工智能生成内容&#xff08;AIGC&#xff09;技术的应用尤为引人瞩目。AIGC利用深度学习等技…

编码技巧——Sentinel的blockHandler与fallback

本文介绍Sentinel的blockHandler与fallback的区别&#xff0c;背景是&#xff1a;发生限流时&#xff0c;配置的sentinel的blockhandler没有生效而fallback生效了&#xff1b;排查原因&#xff0c;从而给出Sentinel配置异常降级和限流降级的代码写法&#xff1b; 在查看源码前…

“尚硅谷”Mysql数据库DDL补充

数据类型 原则&#xff1a;所选择的类型越简单越好&#xff0c;能保存数值的类型越小越好&#xff0c;节省空间。 数值型 整型 特点 1、如果不设置无符号还是有符号&#xff0c;默认是有符号&#xff0c;如果(ˇ?ˇ) 想设置无符号我&#xff0c;需要添加unsigned关键字。 2…

Netty框架自带类DefaultEventExecutorGroup的作用,用来做业务的并发

一、DefaultEventExecutorGroup的用途 DefaultEventExecutorGroup 是 Netty 框架中的一个类&#xff0c;用于管理和调度事件处理器&#xff08;EventExecutor&#xff09;的组。在 Netty 中&#xff0c;事件处理是通过多线程来完成的&#xff0c;EventExecutor 是处理事件的基…

【Fegin技术专题】「原生态」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(中)

你可以使用 Jersey 和 CXF 这些来写一个 Rest 或 SOAP 服务的java客服端。 你也可以直接使用 Apache HttpClient 来实现。但是 Feign 的目的是尽量的减少资源和代码来实现和 HTTP API 的连接。 *通过自定义的编码解码器以及错误处理&#xff0c;你可以编写任何基于文本的 HTT…

day22-513.找树左下角的值

513.找树左下角的值 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路 迭代 迭代的思路最简单&#xff0c;只需层序记录每一层的第一个结点即可&#xff0c;代码如下&#xff1a; class Solution { publi…

HR专家:未来零代码开发将成求职热门,你准备好了吗?

一名五十五岁的农民&#xff0c;毫无程式设计经验&#xff0c;靠著自己自学零码开发&#xff0c;竟为他的家乡建起了六个数位资讯系统&#xff0c;其中一个更是带动了乡村“厕所革命”。阿里云说&#xff0c;“也许10-15年以前&#xff0c;公司的招聘会要求员工能够使用 WORD, …

【沁恒蓝牙mesh】CH58x USB功能开发记录(三)

本博文主要记录 &#xff0c;【沁恒蓝牙mesh】CH58x USB功能开发记录&#xff08;三&#xff09;&#xff0c;数据收发基于寄存器级别解释 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#x1f4dd; 个人主页&#xf…

阿秀思考了很久,最后还是决定啦!

作者&#xff1a;阿秀 校招八股文学习网站&#xff1a;https://interviewguide.cn 小伙伴们大家好&#xff0c;我是阿秀。 经常看我文章的应该知道今年我过得很是颠簸&#xff0c;从今年二月份到现在我经历了很多事。 从《关于我组长跑路我被顶上来了这件事》、《天啦撸&#x…