多场景建模:阿里MARIA

Multi-scenario ranking framework with adaptmulti-scenario ranking framework with adaptive feature learning

背景

多模态搜索场景支持用户通过不同模态的Query来表达多样的搜索需求。

  1. 拍照搜索(Visual Search):实拍图作为query
  2. 相似商品搜索(Similar Search):商品作为query
  3. 发生在外部媒体的兴趣搜索(Interest Search)商品作为query

在这里插入图片描述

问题&动机

多场景建模的主要问题是建模场景之间的共性及差异性,现有解决方案都是专注网络上层优化,认为底层Embedding是共享、一致的,但在实际场景中无法很好提取场景之间的差异。
在这里插入图片描述

解决方案

聚焦底层特征表示,提出自适应特征学习的多场景排序框架 MARIA Multi-scenario ranking framework with adaptmulti-scenario ranking framework with adaptive feature learning

引入Feature Scaling(FS)根据场景来缩放特征,放大重要特征,缩小不重要特征(类似SeNet)
引入Feature Refinement(FR)每个特征域设置一组特征微调器(Refiner),然后基于场景感知的gate网络(Selector)来进行选择 (类似于MoE)
引入Feature Correlation Modeling(FCM)对每个特征域进行显示交叉(类似PNN)
在这里插入图片描述

方案详情

将序列特征、用户特征、物品特征、trigger特征、context特征Embedding拼接起来,作为底层的共享特征Embedding,常规操作
Q = [ h b ∣ ∣ u ∣ ∣ x i ∣ ∣ t ∣ ∣ c ] \mathbf Q = [\mathbf h_b || \mathbf u || \mathbf x_i || \mathbf t || \mathbf c] Q=[hb∣∣u∣∣xi∣∣t∣∣c]
这里用户特征 u \mathbf u u由用户ID Embedding及用户其他属性的Embedding拼接得到
用户属性集合 A u = { a u 1 , . . . , a u L } \mathcal{A_u} = \{a_u^1, ..., a_u^L\} Au={au1,...,auL}
u = [ e u ∣ ∣ a u 1 ∣ ∣ . . . ∣ ∣ a u L ] \mathbf u = [\mathbf e_u || \mathbf a_u^1 || ... || \mathbf a_u^L] u=[eu∣∣au1∣∣...∣∣auL]
这里物品特征 i \mathbf i i由物品ID Embedding及物品其他属性的Embedding拼接得到
用户属性集合 A i = { a i 1 , . . . , a i P } \mathcal{A_i} = \{a_i^1, ..., a_i^P\} Ai={ai1,...,aiP}
u = [ e i ∣ ∣ a i 1 ∣ ∣ . . . ∣ ∣ a i P ] \mathbf u = [\mathbf e_i || \mathbf a_i^1 || ... || \mathbf a_i^P] u=[ei∣∣ai1∣∣...∣∣aiP]
context特征集合 A c = { a c 1 , . . . , a c N c } \mathcal{A_c} = \{a_c^1, ..., a_c^{N_c}\} Ac={ac1,...,acNc}
trigger特征(因为是搜索场景,所有有个query,但是是多模态的,不同场景的query不一样,论文中可能是图片、文字等类型,这种query称为trigger)
trigger集合 A t = { a t 1 , . . . , a t O } \mathcal{A_t} = \{a_t^1, ..., a_t^O\} At={at1,...,atO}
t = [ a t 1 ∣ ∣ . . . ∣ ∣ a t P ] \mathbf t = [\mathbf a_t^1 || ... || \mathbf a_t^P] t=[at1∣∣...∣∣atP]
序列特征的Embedding矩阵 B u = { s e q 1 , s e q 2 , . . . , s e q m } \mathbf B_u = \{\mathbf seq_1,\mathbf seq_2, ..., \mathbf seq_m\} Bu={seq1,seq2,...,seqm}
经过target attention之后,得到
H u = { h 1 , h 2 , . . . , h m } \mathbf H_u = \{\mathbf h_1, \mathbf h_2, ... , \mathbf h_m\} Hu={h1,h2,...,hm}
h i = ∑ j = 1 m a j h j \mathbf h_i = \sum_{j=1}^m a_j \mathbf h_j hi=j=1majhj
attention分数 a i a_i ai计算如下
a i = e x p ( s i m ( t , h i ) ) ∑ j = 1 m e x p ( t , h j ) a_i = \frac {exp(sim(\mathbf t , \mathbf h_i))} { \sum_{j=1}^m exp(\mathbf t, \mathbf h_j)} ai=j=1mexp(t,hj)exp(sim(t,hi))

最终拼接起来得到底层的Embedding
Q = [ h ∣ ∣ u ∣ ∣ i ∣ ∣ t ∣ ∣ c ] \mathbf Q = [\mathbf h || \mathbf u || \mathbf i || \mathbf t || \mathbf c] Q=[h∣∣u∣∣i∣∣t∣∣c]

Feature Scaling

其实就是将用户id、物品id、场景id三者的Embedding以及底层Embedding作为输入,经过FCN后sigmoid得到特征的重要度,但是这个FCN的梯度不对底层Embedding做后向传播,避免梯度冲突
特征重要度
α = λ ∗ S i g m o i d ( F C N ( f r e e z e ( Q ) ∣ ∣ e u ∣ ∣ e i ∣ ∣ e s ) ) \mathbf \alpha = \lambda * Sigmoid( \mathrm{FCN}(\mathrm{freeze}(\mathbf Q) || \mathbf e_u || \mathbf e_i || \mathbf e_s) ) α=λSigmoid(FCN(freeze(Q)∣∣eu∣∣ei∣∣es))

重要度乘到底层Embedding上面
Q S = [ Q 1 α 1 , . . . , Q N Q α N Q ] \mathbf Q_S = [Q_1 \alpha_1, ..., Q_{N_Q} \alpha_{N_Q}] QS=[Q1α1,...,QNQαNQ]
= [ h ^ , u ^ , i ^ , t ^ , c ^ ] [ \mathbf {\hat h}, \mathbf {\hat u}, \mathbf {\hat i}, \mathbf {\hat t}, \mathbf {\hat c}] [h^,u^,i^,t^,c^]

Feature Refinement

特征微调模块,将场景特征和各个特征域特征拼接起来作为输入,经过FCN,输出各个特征微调器(Refiner)的权重,每个特征域有一组Refiner(就是个FCN),每个Refiner其实就是MMoE里面的expert,对特征域进行学习
以序列特征域为例,序列特征域Embedding为 h ^ \mathbf {\hat h} h^,场景ID的Embedding为 e s \mathbf e_s es

β = S o f t m a x ( S i g m o i d ( F C N [ h ^ ∣ ∣ e s ] ) \mathbf \beta = \mathrm{Softmax}(\mathrm{Sigmoid}(\mathrm{FCN}[\mathbf {\hat h} || \mathbf e_s]) β=Softmax(Sigmoid(FCN[h^∣∣es])
假设序列特征域有 k k k个Refiner,那么经过FR后序列特征为
h ~ = [ β 1 F C N 1 ( h ^ ) ∣ ∣ . . . ∣ ∣ β k F C N k ( h ^ ) ] \mathbf {\widetilde h} = [\mathbf {\beta_1} \mathrm {FCN_1} (\mathbf {\hat h}) || ... || \mathbf {\beta_k} \mathrm {FCN_k} ( \mathbf {\hat h})] h =[β1FCN1(h^)∣∣...∣∣βkFCNk(h^)]

其他特征同理
最后得到的Embedding拼接到一起
Q R = [    h ~    ∣ ∣    u ~    ∣ ∣    i ~    ∣ ∣    t ~    ∣ ∣    c ~    ] \mathbf {Q_R} = [ \ \ \mathbf {\widetilde h} \ \ || \ \ \mathbf {\widetilde u} \ \ || \ \ \mathbf {\widetilde i} \ \ || \ \ \mathbf {\widetilde t} \ \ || \ \ \mathbf {\widetilde c} \ \ ] QR=[  h   ∣∣  u   ∣∣  i   ∣∣  t   ∣∣  c   ]

Feature Correlation Modeling

这个就是处理各个特征域的交叉的,将 h ~ \mathbf {\widetilde h} h u ~ \mathbf {\widetilde u} u i ~ \mathbf {\widetilde i} i t ~ \mathbf {\widetilde t} t c ~ \mathbf {\widetilde c} c 映射成相同的维度
得到 h ‾ \mathbf {\overline h} h u ‾ \mathbf {\overline u} u i ‾ \mathbf {\overline i} i t ‾ \mathbf {\overline t} t c ‾ \mathbf {\overline c} c

然后两两点积交叉
Q C = [   h ‾ ⋅ u ‾    ∣ ∣ . . . ∣ ∣    t ‾ ⋅ c ‾    ] \mathbf {Q_C} = [ \ \mathbf {\overline h} \cdot \mathbf {\overline u} \ \ || ... || \ \ \mathbf {\overline t} \cdot \mathbf {\overline c} \ \ ] QC=[ hu  ∣∣...∣∣  tc  ]

经过Feature Refinement和Feature Correlation Modeling后的embedding拼接起来得到最终的输入embedding
Q f = [ Q R ∣ ∣ Q C ] \mathbf Q_f = [\mathbf Q_R || \mathbf Q_C] Qf=[QR∣∣QC]

然后后面的结构就和MMoE类似,每个场景按不同权重选择专家的输出,同时这里有个共享的场景,
最终用于预测的Embedding由各个场景塔的embedding和共享场景塔输出的embedding加权求和,共享场景塔的权重应该设置较小,防止场景不相关的冲突

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

实验

Visual Search (VS)
Similar Search (SS)
Interest Search (IS)
在这里插入图片描述

消融分析

各个组件都有作用
Feature Scaling (FS)
Feature Refinement (FR)
Feature Correlation Modeling module (FCM)
Network Layer (NL)
the shared tower (ST) in the prediction layer
Gumbel Softmax (GS)
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

05.Elasticsearch应用(五)

Elasticsearch应用(五) 1.Mapping介绍 Mapping是对索引库中文档的约束,类似于数据表结构,作用如下: 定义索引中的字段的名称定义字段的数据类型,例如字符串,数字,布尔等字段&…

antdesignvue中使用VNode写法

1、使用场景 如图:消息提示框中,将数据中的数据单独一行显示 2、代码 let errorList res.result; //后端返回的数据例: ["1. 数据格式不正确","2. 数据已存在"]if(errorList&&errorList.length!0){this.$notif…

IDE server has started, listening on http://127.0.0.1:61945已解决

看了网上很多网上博主写的,总结出来了两个主要方法,以我的为准,很多博客都是错误的! 1.打开微信开发者工具的安全权限 设置-安全设置-服务端口 2.必须把appid改为自己的才能打开微信小程序,只能在mainfest里面改&…

【工具使用-Everything】everything只能搜到文件夹,无法搜到文件

一,问题现象 everything搜索时,只能搜索到文件夹,无法搜索到文件夹下的文件。 二,问题原因 everything搜索设置问题,设置为"文件夹"导致 三,解决方法 将搜索选项设置为“所有”即可&#x…

第3章 接口和API设计

第15条:用前缀避免命名空间冲突 OC没有其他语言那种内置的命名空间机制。因此,我们在起名时要设法避免潜在的命名冲突,否则很容易就重名了。若是发生重名冲突,那么应用程序相应的链接过程就会出错。例如: 错误原因在…

ORBSLAM3 运行流程,以rgbd_tum.cc函数为例进行分析

一、运行 使用的是D435i相机自己录制的数据。 运行命令: ./Examples/RGB-D/rgbd_tum /opt/vslam/ORB_SLAM3_detailed_comments-dense_map_new/Vocabulary/ORBvoc.txt /opt/vslam/ORB_SLAM3_detailed_comments-dense_map_new/Examples/RGB-D/TUM1.yaml /opt/vsl…

Modern C++ std::bind的实现原理

1. 前言 前面写过《std::function从实践到原理》,管中规豹了std::function的一点点原理,不过还有一个与std::function密切相关的函数std::bind, 允许编程者绑定几个参数,本文着重介绍它的实现原理。不介绍一下它,有点吃肉不吃蒜味…

【C++干货基地】C++入门篇:输入输出流 | 缺省函数 | 函数重载(文末送书)

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…

JVM-初始JVM

什么是JVM JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 Java源代码执行流程如下: JVM的功能 1 - 解释和运行 2 - 内存管理 3 - 即时编译 解释和运行 解释…

如何配置Tomcat服务环境并实现无公网ip访问本地站点

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#xff0…

重塑网络安全格局:零信任安全架构的崛起与革新

零信任安全架构是一种现代安全模式,其设计原则是“绝不信任,始终验证”。它要求所有设备和用户,无论他们是在组织网络内部还是外部,都必须经过身份验证、授权和定期验证,才能被授予访问权限。简而言之,“零…

(2024,MLLM,扩散,中文数据集扩散预训练,多模态提示引导微调)UNIMO-G:通过多模态条件扩散进行统一图像生成

UNIMO-G: Unified Image Generation through Multimodal Conditional Diffusion 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 1. 摘要 2. 方法 3. 结果 1. 摘要 现有的文本到图像…

GraphQL的力量:简化复杂数据查询

1. GraphQL GraphQL 是一种由 Facebook 开发并于 2015 年公开发布的数据查询和操作语言,也是运行在服务端的运行时(runtime)用于处理 API 查询的一种规范。不同于传统的 REST API,GraphQL 允许客户端明确指定它们需要哪些数据&am…

java以SSL方式连ES

先做准备工作,浏览器方式访问 ES7.X url https://127.0.0.1:8027 弹出用户名和密码 输入后在浏览器得到 { “name” : “DTCNPEMS04”, “cluster_name” : “cnp-es-cluster”, “cluster_uuid” : “wb0So_FqQBOKqtXnsqofTg”, “version” : { “number” : “7.…

力扣hot100 两数相加 链表 思维

Problem: 2. 两数相加 Code ⏰ 时间复杂度: O ( n ) O(n) O(n) 🌎 空间复杂度: O ( n ) O(n) O(n) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.…

prometheus监控RabbitMQ策略

一般用官方的rabbitmq_exporter采取数据即可,然后在普米配置。但如果rabbitmq节点的队列数超过了5000,往往rabbitmq_exporter就会瘫痪,因为rabbitmq_exporter采集的信息太多,尤其是那些队列的细节,所以队列多了&#x…

android camera的使用以及输出的图像格式

一、Camera 1.1、结合SurfaceView实现预览 1.1.1、布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-au…

SpringBoot项目多数据源配置与MyBatis拦截器生效问题解析

在日常项目开发中&#xff0c;由于某些原因&#xff0c;一个服务的数据源可能来自不同的库&#xff0c;比如&#xff1a; 对接提供的中间库&#xff0c;需要查询需要的数据同步数据&#xff0c;需要将一个库的数据同步到另一个库&#xff0c;做为同步工具的服务对接第三方系统…

离零售业智能体时代的真正开启还有多远?

AIGC&#xff08;生成式人工智能&#xff09;当道的2023年&#xff0c;将LLM&#xff08;大语言模型&#xff09;的各类生成式能力发挥到淋漓尽致、精彩纷呈的程度。各行各业一边在观望大语言模型不断扩宽的商业运用可能&#xff0c;一边在继续探寻能够不断拓宽企业往纵深发展的…

C/C++ - Auto Reference

目录 auto Reference auto 当使用auto​​关键字声明变量时&#xff0c;C编译器会根据变量的初始化表达式推断出变量的类型。 自动类型推断&#xff1a;auto​​关键字用于自动推断变量的类型&#xff0c;使得变量的类型可以根据初始化表达式进行推导。 初始化表达式&#x…