Product Attribute Completion — 商品属性自动补全:AI 填补 Listing 属性空白
Skill-Product-Attribute-Completion · 22-数据采集工程
causalexperimentforecastingknowledge_graphdata_collectionvisual_generation广告与投放推荐与搜索知识图谱与RAG数据采集与治理视觉内容生成WF-B 广告优化WF-D 选品扫描WF-G Listing内容优化
年化 ROI¥20-50 万
实现难度⭐⭐☆☆☆
业务视角
适用角色数据工程师 / 技术负责人 · 运营负责人 · 选品负责人
适用平台Amazon SP API + Keepa · TikTok Shop API · 跨境多平台数据湖
什么情况下用想监控竞品价格/评论/排名但没有稳定采集能力,手动太慢;多平台数据分散整合成本极高;数据管道不稳定经常断
成功是什么样的竞品价格/评论数据每日自动更新,多平台数据统一入仓,数据管道稳定性 >99%,取数时间从小时降到分钟
业务痛点
1. 解决的问题
新款吸奶器需要填写42个属性字段人工填写1.5小时但30-40%属性空白导致搜索排名下降——AI从标题/要点/图片自动提取属性值5分钟完成,属性完整度60%提升到90%搜索曝光增加20-35%年化15-40万元
2. 核心算法逻辑
人工填属性 vs AI 补全:
3. 业务应用场景
业务问题:新款吸奶器上架需要填写 42 个属性字段(Amazon 要求的 ASIN 属性),运营一个一个填写需要 1.5 小时/SKU,10 款新品需要 15 小时。AI 补全可以 10 秒完成,运营只需要复核高置信度的属性。
数据要求: - 商品标题/要点/描述(已有文本) - 商品主图(可选,提升精度) - 品类属性模板(Amazon 要求的属性字段列表)
预期产出: - 所有属性的预测值(含置信度) - 高置信度(>0.85)自动填充,低置信度标记为"需人工确认" - 属性填充前后的搜索曝光预期提升
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI 预估:
- 属性填写效率提升 18x(90分钟 → 5分钟/SKU)
- 属性完整度 60% → 90%:A10 排名权重提升,搜索曝光 +20-35%
- 批量历史 SKU 处理:月增 GMV ¥5-20 万
- 年化综合 ROI:¥20-50 万
- 实施难度:⭐⭐☆☆☆(规则引擎版 1 周可实现;LLM 增强版约 2-3 周;需要品类属性模板建立)
7. 代码模板
代码块数量:3 · 路径:未检测到
"""
Product Attribute Completion
商品属性自动补全:从文本+图片提取属性值
"""
import re
from dataclasses import dataclass
from typing import Optional
@dataclass
class AttributeDefinition:
name: str
attr_type: str # 'numeric', 'categorical', 'boolean', 'text'
required: bool = False
extraction_patterns: list = None
# 母婴吸奶器品类属性模板
BREAST_PUMP_ATTRIBUTES = [
AttributeDefinition('noise_level_db', 'numeric', required=True,
extraction_patterns=[r'<?\s*(\d+)\s*dB', r'under\s*(\d+)\s*dB']),
AttributeDefinition('pump_type', 'categorical', required=True,
extraction_patterns=[r'(single|double|dual)\s*(electric|breast)', r'(wearable|portable|hands-free)']),
AttributeDefinition('power_source', 'categorical', required=True,
extraction_patterns=[r'(USB|AC|battery|rechargeable|electric)\s*(rechargeable|powered|charging)?']),
AttributeDefinition('suction_levels', 'numeric',
extraction_patterns=[r'(\d+)\s*suction\s*(level|mode|setting)', r'(\d+)\s*level']),
AttributeDefinition('bpa_free', 'boolean',
extraction_patterns=[r'BPA[\s-]?free', r'BPA[\s-]?Free', r'non[\s-]?BPA']),
AttributeDefinition('weight_kg', 'numeric',
extraction_patterns=[r'(\d+\.?\d*)\s*(lb|lbs|kg|pounds?)', r'lightweight']),
AttributeDefinition('warranty_years', 'numeric',
extraction_patterns=[r'(\d+)[\s-]?(year|yr)\s*(warranty|guarantee)']),
AttributeDefinition('compatible_brands', 'text',
extraction_patterns=[r'compatible with\s+(\w+)', r'works with\s+(\w+)']),
]
def extract_attribute_from_text(text: str, attr_def: AttributeDefinition) -> dict:
"""从文本提取单个属性值"""
text_normalized = re.sub(r'\s+', ' ', text.strip())
for pattern in (attr_def.extraction_patterns or []):
match = re.search(pattern, text_normalized, re.IGNORECASE)
if match:
raw_value = match.group(1) if match.lastindex else match.group(0)
# 类型转换
if attr_def.attr_type == 'numeric':
try:
value = float(raw_value.replace(',', ''))
return {'value': value, 'confidence': 0.90, 'source': 'text_regex'}
except:
pass
elif attr_def.attr_type == 'boolean':
return {'value': True, 'confidence': 0.95, 'source': 'text_keyword'}
elif attr_def.attr_type == 'categorical':
return {'value': raw_value.strip().title(), 'confidence': 0.85, 'source': 'text_regex'}
else:
return {'value': raw_value.strip(), 'confidence': 0.75, 'source': 'text_regex'}8. 论文来源
- 2507.19679
- 2606.14383