Semantic ID Retrieval for Recommendation (RPG)
Skill-Semantic-ID-Retrieval-RPG · 05-推荐系统
experimentforecastingrecommendationrag客服与VOC推荐与搜索WF-C 客服分诊
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐⭐☆
业务视角
适用角色运营负责人 / 选品负责人 · 产品经理 · 广告优化师
适用平台Amazon · DTC 独立站 · 邮件/SMS 个性化
什么情况下用老客来了只买一件就走,相关产品没被推出去;Bundle 商品连带销售做不起来;站内推荐位点击率低
成功是什么样的老客连带购买率提升 20-35%,客单价提升,品类交叉销售做起来
业务痛点
1. 解决的问题
传统推荐系统用无序的one-hot ID或量化向量表示商品,丢失了语义信息。
2. 核心算法逻辑
核心问题:传统推荐系统用无序的onehot ID或量化向量表示商品,丢失了语义信息。"三段奶粉"和"二段奶粉"在向量空间里可能是遥远的点,尽管它们在语义上高度相关。
3. 业务应用场景
业务问题:Momcozy 在欧美多国销售,商品信息用英语、德语、法语维护。用户用不同语言搜索"breast pump" / "Milchpumpe" / "tire-lait",传统ID-based检索无法跨语言关联同一商品。
RPG 应用: 1. 语义ID编码:每个商品生成多语言语义ID - 核心语义:`[吸奶器][电动][便携][单边]` - 语言变体:`[breast_pump][electric][portable][single]` / `[Milchpumpe][elektrisch]` 2. 用户query编码:将用户搜索词编码为语义ID前缀 3. 检索:在语义ID空间中找最相近的商品
预期产出: - 跨语言搜索准确率:60% → 85% - 新品自动关联:上架即被相似商品的用户看到 - 检索延迟:<10ms(与候选集大小无关)
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI:检索准确率提升25-40%,跨语言运营成本降低50%
- 难度:⭐⭐⭐☆☆(3/5)— 概念新颖,但可用TF-IDF/BERT简化实现
- 优先级:⭐⭐⭐⭐☆(4/5)— Meta开源,落地路径清晰,但需向量检索基建
7. 代码模板
代码块数量:1 · 路径:未检测到
"""
Semantic ID Retrieval — RPG-inspired implementation
用于推荐系统的语义ID编码与检索
"""
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
class SemanticIDEncoder:
"""语义ID编码器"""
def __init__(self, max_tokens=8):
self.max_tokens = max_tokens
self.token_vocab = {}
self.token_idx = 0
def encode(self, item_attributes):
"""
将商品属性编码为语义ID
Args:
item_attributes: dict,如 {
'category': '奶粉',
'subcategory': '3段',
'brand': '爱他美',
'origin': '德国',
'feature': '益生菌'
}
"""
tokens = []
for key, value in item_attributes.items():
token = f"{key}={value}"
if token not in self.token_vocab:
self.token_vocab[token] = self.token_idx
self.token_idx += 1
tokens.append(self.token_vocab[token])
# 补齐到固定长度
while len(tokens) < self.max_tokens:
tokens.append(-1)
return tokens[:self.max_tokens]
def decode(self, token_ids):
"""将语义ID解码为可读的属性描述"""
inv_vocab = {v: k for k, v in self.token_vocab.items()}
return [inv_vocab.get(tid, '[PAD]') for tid in token_ids if tid != -1]
class SemanticRetrieval:
"""语义ID检索系统"""
def __init__(self, embedding_dim=128):
self.encoder = SemanticIDEncoder()
self.vectorizer = TfidfVectorizer(max_features=embedding_dim)
self.item_ids = []
self.item_embeddings = None
8. 论文来源
未自动抽取;请查看原始 Skill 卡片。