paper2skills Playbook

面向电商的稠密检索与语义排序

Skill-Dense-Retrieval-Ecommerce-Semantic-Search · 08-知识图谱

causalexperimentrecommendationragknowledge_graphpricing客服与VOC推荐与搜索知识图谱与RAG定价与利润WF-C 客服分诊WF-D 选品扫描WF-F 动态定价
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐☆☆
业务视角
适用角色选品负责人 / 运营负责人 · 数据分析师 · 供应链负责人
适用平台Amazon 品类体系 · 竞品 ASIN 网络分析
什么情况下用品类很多,不清楚品类间的关联,没法做系统性类目扩张规划;竞品矩阵太复杂,品牌/SKU/渠道理不清
成功是什么样的建立品类知识图谱,清晰看到哪些是入口品/引流品/利润品,指导下一步选品扩张方向
业务痛点
品类太多不知道先做哪个竞品关系理不清楚不知道用户买了奶瓶还会买什么类目扩张没有逻辑

1. 解决的问题

传统电商搜索基于 BM25/TF-IDF 关键词匹配,无法理解语义。例如用户搜"缓解涨奶 pain",关键词系统只能匹配包含"pain"或"涨奶"字样的商品,无法召回"吸奶器"、"冷敷贴"等语义相关但关键词不匹配的商品。

2. 核心算法逻辑

传统电商搜索基于 BM25/TFIDF 关键词匹配,无法理解语义。例如用户搜"缓解涨奶 pain",关键词系统只能匹配包含"pain"或"涨奶"字样的商品,无法召回"吸奶器"、"冷敷贴"等语义相关但关键词不匹配的商品。

3. 业务应用场景

业务问题: 母婴出海电商的商品搜索系统基于关键词匹配。用户搜索"新生儿防胀气"时,系统只能匹配标题中含"anti-colic"或"gas"的商品,但无法召回"Dr. Brown 奶瓶"(其描述强调"vent system reduces gas")。语义理解缺失导致搜索召回率低、用户体验差。

数据要求: - 商品描述文本(标题 + Bullet Points + 描述) - 结构化属性表:价格、评分、品牌、适用年龄、材质等 - 用户搜索日志(用于微调 embedding 模型)

预期产出: - 语义召回提升: - 结构化过滤:

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • 数据要求:需要商品描述文本和结构化属性,门槛低
  • 技术门槛:中等,核心依赖预训练 embedding 模型和 FAISS
  • 工程复杂度:中,四阶段流水线需要模块化设计
  • 维护成本:低,embedding 模型更新频率低,索引增量更新即可
  • 直接填补技术缺口:GraphRAG 当前仅用字符串匹配做语义相似度,本 Skill 提供真正的稠密向量检索
  • 业务价值明确:搜索/推荐是电商核心场景,语义理解直接提升转化

7. 代码模板

代码块数量:6 · 路径:未检测到

"""
面向电商的稠密检索与语义排序系统
基于 arXiv:2601.16492 (Siddiqui et al., 2026)

功能:
1. 双编码器稠密检索(Bi-encoder + FAISS)
2. 结构化约束提取与过滤
3. 交叉编码器重排序(Cross-encoder reranking)
4. 母婴商品语义搜索演示

Author: paper2skills
Date: 2026-05-01
"""

import numpy as np
from typing import List, Dict, Tuple, Optional, Any
from dataclasses import dataclass
from collections import defaultdict
import json
import re


# ============================================================
# 数据模型
# ============================================================

@dataclass
class Product:
    """商品"""
    product_id: str
    title: str
    description: str
    price: float
    rating: float
    brand: str
    category: str
    attributes: Dict[str, Any] = None

    def full_text(self) -> str:
        return f"{self.title}. {self.description}"


@dataclass
class SearchQuery:
    """搜索查询"""
    raw_query: str
    intent: str = ""
    constraints: Dict[str, Any] = None


@dataclass
class SearchResult:
    """搜索结果"""
    product: Product
    dense_score: float
    rerank_score: float = 0.0
    final_score: float = 0.0
    match_reason: str = ""

8. 论文来源

  • 2510.14321
  • 2601.16492
  • 2602.16299
  • 2603.25248