P paper2skillsPlaybook
AI 路线图 →

VOC-Driven Recommendation Signal — 评论语义驱动的推荐增强:NLP-VOC×推荐系统桥梁

Skill-VOC-Driven-Recommendation-Signal · 07-NLP-VOC

causalexperimentrecommendationragdata_collectionpricing广告与投放客服与VOC推荐与搜索数据采集与治理定价与利润WF-B 广告优化WF-C 客服分诊WF-D 选品扫描WF-E Review监控WF-F 动态定价
年化 ROI20-60 万
实现难度⭐⭐⭐☆☆
业务视角
适用角色产品运营负责人 / 选品负责人 · 客服负责人 · 品牌负责人
适用平台Amazon Reviews / Q&A · TikTok 评论区 · Reddit 母婴社区
什么情况下用每月几千条差评和 Q&A 没有人力一条条看,但痛点都在里面;新品开发不知道做什么功能、改什么问题
成功是什么样的自动提取 Top 10 高频痛点,新品开发有用户数据背书,每月出竞品用户洞察报告
业务痛点
差评太多看不过来不知道用户真正在意什么竞品评论没有系统分析过新品开发靠拍脑袋

1. 解决的问题

推荐系统对静音敏感用户推了嘈杂的热销吸奶器导致退货率高——方面情感向量注入协同过滤将静音型产品从第8位升至第2位,推荐CVR提升8-15%,年化GMV增益20-60万元

2. 核心算法逻辑

传统协同过滤只用"谁买了什么",忽略"为什么买"。ACFRS 框架把用户评论中的方面级情感注入推荐模型:

3. 业务应用场景

业务问题:搜索"breast pump"返回20个结果,但用户历史评论显示她特别在意"静音"(写了"sleep-friendly",差评了噪音大的产品)——推荐系统完全不知道,只按购买频率排序。

数据要求: - 用户历史评论文本(近12个月) - 商品评论方面情感汇总(来自 VOC-Aspect-Sentiment-Extraction) - 现有推荐系统的候选集输出(Top 100)

预期产出: - 用户方面偏好向量(静音: 0.9, 便携: 0.7, 价格: 0.4...) - 个性化重排结果(静音型吸奶器从第8位升至第2位) - 方面解释:"因为您对静音有强偏好,推荐此款 <45dB 产品"

4. 输入数据要求

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

5. 输出结果

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

6. 业务价值 / ROI

  • ROI 预估
  • 搜索/推荐个性化重排:CTR 提升 12-20%,CVR 提升 8-15%
  • 避免向"噪音敏感用户"推荐嘈杂产品:退货率降低 10-20%
  • 年化 GMV 增益:¥20-60 万
  • 实施难度:⭐⭐⭐☆☆(需要评论方面分析基础设施 + 推荐系统接口改造,约 3-4 周)
  • 优先级评分:⭐⭐⭐⭐☆(填补 NLP-VOC ↔ 推荐系统完全断链;评论信号比行为数据更能解释"为什么不买")

7. 代码模板

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

"""
VOC-Driven Recommendation Signal
评论方面情感增强推荐系统(NLP-VOC × 推荐系统桥梁)
"""
import numpy as np
from collections import defaultdict


# 方面词典(母婴品类)
ASPECT_DICT = {
    '噪音': ['quiet', 'silent', 'noise', 'loud', '噪音', '安静'],
    '便携': ['portable', 'travel', 'compact', '便携', '轻便'],
    '吸力': ['suction', 'power', 'strong', '吸力', '吸奶量'],
    '价格': ['price', 'expensive', 'value', '价格', '贵', '便宜'],
    '清洁': ['clean', 'easy', 'wash', '清洗', '方便'],
}

SENTIMENT_WORDS = {
    'positive': ['good', 'great', 'love', 'excellent', 'perfect', 'best', '好', '棒', '喜欢'],
    'negative': ['bad', 'poor', 'hate', 'terrible', 'loud', 'heavy', '差', '不好', '失望'],
}


def extract_aspect_sentiment(review_text):
    """简化版方面情感提取"""
    text = review_text.lower()
    aspect_scores = {}
    for aspect, keywords in ASPECT_DICT.items():
        matched = any(kw in text for kw in keywords)
        if not matched:
            continue
        # 判断情感
        pos = sum(1 for w in SENTIMENT_WORDS['positive'] if w in text)
        neg = sum(1 for w in SENTIMENT_WORDS['negative'] if w in text)
        sentiment = (pos - neg) / (pos + neg + 1)
        aspect_scores[aspect] = round(sentiment, 2)
    return aspect_scores


def build_user_aspect_profile(user_reviews):
    """聚合用户历史评论,构建方面偏好向量"""
    aspect_accumulator = defaultdict(list)
    for review in user_reviews:
        scores = extract_aspect_sentiment(review)
        for asp, score in scores.items():
            aspect_accumulator[asp].append(score)
    # 加权平均(越强烈的情感权重越大)
    profile = {}
    for asp, scores in aspect_accumulator.items():
        abs_scores = [abs(s) for s in scores]
        weighted = sum(s * abs(s) for s in scores) / (sum(abs_scores) + 1e-8)
        profile[asp] = round(weighted, 3)
    return profile


def build_item_aspect_quality(item_reviews):
    """聚合商品评论,构建方面质量向量"""
    aspect_accumulator = defaultdict(list)
    for review in item_reviews:
        scores = extract_aspect_sentiment(review)

8. 论文来源

  • 2401.15285