You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Embedding实现购物车互补推荐的顺序不变性?

实现购物车商品表示的顺序不变性

要让不同商品顺序的购物车(如[A,B,C]和[C,B,A])得到完全等价的表示,核心是消除嵌入向量的位置依赖,可以通过以下几种直接方式实现:

1. 对称聚合嵌入向量(最常用方案)

对购物车中所有商品的嵌入向量执行顺序无关的聚合操作,比如求和、平均、最大池化,这些操作的结果不受元素顺序影响,同时能自动处理mask_zero标记的空位置。

代码示例:

from tensorflow.keras.layers import Input, Embedding, GlobalAveragePooling1D, GlobalMaxPooling1D, Lambda
import tensorflow as tf

MAX_CART_SIZE = 10
NB_ITEMS = 1000
EMBEDDING_SIZE = 64

# 输入层
item_input = Input(shape=(MAX_CART_SIZE,), name="item_id")
# 嵌入层,保留mask_zero处理可变长度购物车
item_embedding = Embedding(
    input_dim=NB_ITEMS+1,
    input_length=MAX_CART_SIZE,
    output_dim=EMBEDDING_SIZE,
    mask_zero=True
)(item_input)

# 可选聚合方式三选一:
# 方式A:全局平均池化(平衡各商品权重)
cart_representation = GlobalAveragePooling1D()(item_embedding)

# 方式B:求和聚合(保留商品数量带来的总量信息)
# cart_representation = Lambda(lambda x: tf.reduce_sum(x, axis=1))(item_embedding)

# 方式C:全局最大池化(突出特征最显著的商品)
# cart_representation = GlobalMaxPooling1D()(item_embedding)

2. 自定义对称聚合逻辑

如果需要更灵活的聚合规则(比如加权求和,权重由商品自身特征决定),可以自定义Lambda层实现对称逻辑,只要确保计算过程不依赖元素的位置索引即可。

示例:带商品权重的求和

# 假设每个商品有对应的权重向量(可通过另一个嵌入层学习)
item_weight_embedding = Embedding(input_dim=NB_ITEMS+1, output_dim=1, mask_zero=True)(item_input)
# 加权求和,顺序不影响结果
weighted_cart_representation = Lambda(
    lambda x: tf.reduce_sum(x[0] * x[1], axis=1)
)([item_embedding, item_weight_embedding])

关键原理

这些方案的核心是:聚合操作仅关注嵌入向量的数值本身,不涉及它们在序列中的位置索引,因此无论商品顺序如何,最终生成的购物车表示向量完全一致,满足顺序不变性需求。

内容的提问来源于stack exchange,提问作者Mark Morrisson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:25:45