关系建模
核心思想
实体本身只是孤立节点,关系才让图谱有了价值。
通过 5 类语义关系将商品实体连接为有向带权图,支撑后续的任务感知子图召回。
5 类语义关系
实体之间通过以下 5 类语义关系连接,构成有向带权图:
| 关系 | 起点 → 终点 | 用途 | 权重含义 |
|---|---|---|---|
HAS_SPEC | Product → Specification | 事实校验,禁止冲突描述 | 规格重要程度 |
MADE_OF | Product → Material | 影响视觉渲染与文案触感词 | 材质显著性 |
SUITABLE_FOR | Product → UseCase | 触发 Lifestyle 图的环境光线道具 | 场景匹配度 |
HIGHLIGHTS | Product → FeatureSellingPoint | 按权重排序进入 5-Point Bullets | 卖点优先级 |
COMPLIES_WITH | Product → Compliance | 与高风险词库做集合差,剔除违禁声明 | 合规可信度 |
关系示意图
text
Product
(Stainless Kitchen Rack)
│
┌─────┬───────┼───────┬───────┬─────┐
│ │ │ │ │ │
MADE_OF HAS_SPEC SUITABLE HIGHLIGHTS COMPLIES_WITH
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌───────────────────────────────────────────┐
│ Material Spec UseCase Feature Compliance │
│ ┌─────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ 304 SUS │60×30×│ │Small │ │Foldab│ │Lead- │ │
│ │80cm │ │Kitchn│ │le │ │Free │ │
│ └─────┘ └──────┘ └──────┘ └──────┘ │
│ ┌─────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │8kg/ │ │Bathro│ │Anti- │ │Food │ │
│ │tier │ │om │ │rust │ │Safe │ │
│ └─────┘ └──────┘ └──────┘ └──────┘ │
└───────────────────────────────────────────┘各关系详解
1. HAS_SPEC(商品 → 规格)
用途: 事实校验
应用场景
当 LLM 生成 Listing 中提到"占地仅 30×30cm"时,系统检查 HAS_SPEC 子图,发现实际尺寸为 60×30×80cm,触发硬约束拒绝该输出。
抽取示例:
text
原文:Size 60×30×80cm, Folded 60×30×8cm, Load 8kg per tier
抽取关系:
<HAS_SPEC, Product, Size_60x30x80cm, weight=1.0, evidence="Size 60×30×80cm">
<HAS_SPEC, Product, Folded_60x30x8cm, weight=0.85, evidence="Folded 60×30×8cm">
<HAS_SPEC, Product, Load_8kg_per_tier, weight=0.90, evidence="Load 8kg per tier">2. MADE_OF(商品 → 材质)
用途: 影响主图风格选择 + 文案触感词
text
材质 → 视觉提示词的映射:
304 Stainless Steel → "brushed stainless, cool metallic sheen, anti-fingerprint finish"
Bamboo → "warm natural bamboo grain, matte finish, eco-friendly aesthetic"
ABS Plastic → "smooth matte plastic, modern minimalist look"
材质 → 触感词的映射:
304 Stainless Steel → "durable, premium, easy-clean"
Bamboo → "natural, lightweight, eco-conscious"
ABS → "lightweight, impact-resistant"3. SUITABLE_FOR(商品 → 场景)
用途: Lifestyle 图与 4 宫格场景生成
权重 = 该场景与商品的匹配度(0.0 - 1.0):
text
SUITABLE_FOR 关系(按 weight DESC):
├── Small Kitchen Apartment (1.0) ← 最佳契合
├── Bathroom Storage (0.7)
├── Office Pantry (0.6)
├── Outdoor Camping (0.5)
└── Garage Workshop (0.3) ← 弱契合,可能不召回
生成 4 宫格时取 Top-4 weight:
Top-4: Small Kitchen / Bathroom / Office / Outdoor4. HIGHLIGHTS(商品 → 卖点)
用途: 决定 Bullet 顺序
权重通过用户反馈学习调整:
text
初始权重:
Foldable 1.0
Anti-rust 1.0
Multi-tier 1.0
304-grade 1.0
经过 100 个 Listing 测试 + 用户反馈:
Foldable 1.15 (+15%) ← 用户最常保留
Multi-tier 1.05 (+5%)
304-grade 1.00
Anti-rust 0.92 (-8%) ← 用户常重写
→ Bullet 1 优先用 Foldable,Anti-rust 降级到 Bullet 45. COMPLIES_WITH(商品 → 合规)
用途: 违禁词集合差运算
text
COMPLIES_WITH 子图:
Lead-Free, Food Contact Safe, BPA-Free
亚马逊违禁词库(部分):
FDA approved, Antibacterial, Kills 99.9%, Best Seller, ...
生成时硬约束 Prompt:
"你可以基于 COMPLIES_WITH 子图描述合规性(lead-free, food-safe),
但严禁使用以下违禁词列表:[FDA approved, Antibacterial, ...]"权重设计
初始权重
实体抽取阶段,LLM 输出的 attrs 中包含 weight 字段:
json
{
"type": "FeatureSellingPoint",
"name": "Foldable",
"attrs": { "weight": 0.95 } // LLM 主观判断
}反馈学习机制
python
def update_weight(relation_id, user_action):
"""
user_action:
'kept' → weight × 1.05
'modified' → weight × 1.00 (不变)
'removed' → weight × 0.95
'requested' → weight × 1.10 # 用户主动请求强化
"""
factor = ACTION_FACTORS[user_action]
db.execute(
"UPDATE kg_relations SET weight = MIN(weight * ?, 2.0) WHERE id = ?",
(factor, relation_id)
)自我进化
这种轻量学习机制让平台越用越懂用户:
- 个人偏好(喜欢强调 "premium" / "eco" / ...)
- 类目特性(厨房用品多强调 "easy-clean",户外多强调 "durable")
- 季节趋势(圣诞前 "gift-ready" 卖点权重升高)
跨 SKU 实体复用
同一类目的多个 SKU 共享通用节点:
text
SKU_KitchenRack_001 ─┬─ SUITABLE_FOR ──→ Small_Kitchen_Apartment ─┐
SKU_KitchenRack_002 ─┤ ↑ │
SKU_KitchenRack_003 ─┘ │
│
SKU_BathroomShelf_001 ──── SUITABLE_FOR ─────────┘ │
│
共享节点:跨多 SKU 学习反馈 │
UseCase.attrs.refined_description ←────────────┘收益:
- 高频场景的描述质量持续提升
- 新 SKU 可秒级复用历史智慧
- 知识图谱形成复利效应
关系数据示例
sql
SELECT * FROM kg_relations WHERE source_id = 'ent_product_001';text
| id | source | target | rel_type | weight | evidence |
|-----------|------------|------------------|-----------------|--------|-----------------------|
| rel_001 | ent_001 | ent_002 (Mat) | MADE_OF | 1.00 | Material: 304 SUS |
| rel_002 | ent_001 | ent_003 (Spec) | HAS_SPEC | 1.00 | Size: 60×30×80cm |
| rel_003 | ent_001 | ent_004 (Spec) | HAS_SPEC | 0.85 | Folded: 60×30×8cm |
| rel_004 | ent_001 | ent_005 (Spec) | HAS_SPEC | 0.90 | Load: 8kg per tier |
| rel_005 | ent_001 | ent_006 (UseC) | SUITABLE_FOR | 0.95 | Implicit: small space |
| rel_006 | ent_001 | ent_007 (UseC) | SUITABLE_FOR | 0.65 | Implicit: bathroom |
| rel_007 | ent_001 | ent_008 (Feat) | HIGHLIGHTS | 1.15 | "Foldable" - boosted |
| rel_008 | ent_001 | ent_009 (Feat) | HIGHLIGHTS | 0.92 | "Anti-rust" - dampen |
| rel_009 | ent_001 | ent_010 (Comp) | COMPLIES_WITH | 1.00 | Lead-free certified |
| rel_010 | ent_001 | ent_011 (Comp) | COMPLIES_WITH | 1.00 | Food-contact safe |子图查询
任务感知的子图查询 SQL:
sql
-- 召回 HAS_SPEC + HIGHLIGHTS + COMPLIES_WITH
SELECT t.*, r.rel_type, r.weight, r.evidence
FROM kg_relations r
JOIN kg_entities t ON t.id = r.target_id
WHERE r.source_id = :product_id
AND r.rel_type IN ('HAS_SPEC', 'HIGHLIGHTS', 'COMPLIES_WITH')
ORDER BY r.rel_type, r.weight DESC;sql
-- 召回 SUITABLE_FOR + Top-1 Material
SELECT t.*, r.rel_type, r.weight
FROM kg_relations r
JOIN kg_entities t ON t.id = r.target_id
WHERE r.source_id = :product_id
AND r.rel_type IN ('SUITABLE_FOR', 'MADE_OF')
ORDER BY r.weight DESC
LIMIT 5;sql
-- 仅召回 COMPLIES_WITH
SELECT t.name AS compliance
FROM kg_relations r
JOIN kg_entities t ON t.id = r.target_id
WHERE r.source_id = :product_id
AND r.rel_type = 'COMPLIES_WITH';性能
| 操作 | 耗时 |
|---|---|
| 子图召回(5 类全量) | < 60 ms |
| 单关系类型召回 | < 30 ms |
| 跨 SKU 关系查询 | < 100 ms |
| 关系权重更新 | < 5 ms |