paper2skills Playbook

FraudSquad — LLM 生成虚假评论检测:LM 嵌入 + 门控图变换器

Skill-FraudSquad-LLM-Review-Detection · 19-风控反欺诈

causalexperimentfraud_detection广告与投放客服与VOC推荐与搜索风控与合规WF-B 广告优化WF-C 客服分诊WF-D 选品扫描WF-E Review监控WF-G Listing内容优化
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色运营负责人 / 合规负责人 · 品牌负责人 · CEO
适用平台Amazon 刷评检测与举报 · TikTok Shop 刷单识别 · 竞品 Listing 攻击溯源
什么情况下用竞品刷单刷好评,自己的 BSR 和评分被打压;账号/ASIN 被恶意投诉删除;店铺有异常订单不确定是真实买家
成功是什么样的识别过滤刷评/恶意竞争行为,账号风险提前预警,维权有数据证据,降低封号风险
业务痛点
竞品刷评打压我们我们的好评被恶意举报删除不知道差评是真实的还是恶意的如何证明竞品恶意行为

1. 解决的问题

核心思想:LLM 生成的虚假评论文本质量极高(语法流畅、情感真实),传统文本特征工程(词频/情感/长度)已失效。FraudSquad 转变思路——不只看"单条评论写得怎样",而是看"这个评论者在评论图中的行为模式是否异常"。

2. 核心算法逻辑

核心思想:LLM 生成的虚假评论文本质量极高(语法流畅、情感真实),传统文本特征工程(词频/情感/长度)已失效。FraudSquad 转变思路——不只看"单条评论写得怎样",而是看"这个评论者在评论图中的行为模式是否异常"。

3. 业务应用场景

业务问题:竞品通过 ChatGPT 批量生成高质量 5 星好评(语言自然流畅、细节丰富),注入自家 listing 的同时给我们的 listing 刷低评,导致: 1. 竞品 BSR 飙升 → 抢占 Featured Offer 2. 我们 listing 评分下降 → 转化率下滑 10-25% 3. Amazon 算法降权 → 广告 CVR 下降

数据要求: - Amazon 评论爬虫数据:reviewer_id、product_asin、rating(1-5)、review_text、review_date、reviewer_join_date - 构建三方图:reviewer ↔ review ↔ product - 最少 50 条评论(含至少5条可疑评论)用于半监督训练 - 可选:reviewer 历史评论数量、verified_purchase 标志

预期产出: - 每条评论的欺诈概率分数(0-1) - 高置信度虚假评论列表(建议举报/屏蔽) - 刷评团伙聚类(识别哪些账号协同作战)

4. 输入数据要求

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

5. 输出结果

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

6. 业务价值 / ROI

未自动抽取;请查看原始 Skill 卡片。

7. 代码模板

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

"""
FraudSquad — LLM 生成虚假评论检测
论文: arXiv:2510.01801 (2025-10)
场景: Amazon 母婴品类刷评检测 / WF-E Review 清洗前置层
"""

from __future__ import annotations

import numpy as np
import pandas as pd
from dataclasses import dataclass, field
from typing import Dict, List, Optional, Tuple
from collections import defaultdict

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler


# ────────────────────────────────────────────
# 图数据结构
# ────────────────────────────────────────────

@dataclass
class ReviewGraph:
    """用户-产品-评论三方异构图"""
    review_ids: List[str] = field(default_factory=list)
    user_ids: List[str] = field(default_factory=list)
    product_ids: List[str] = field(default_factory=list)
    texts: List[str] = field(default_factory=list)
    ratings: List[float] = field(default_factory=list)
    timestamps: List[float] = field(default_factory=list)
    labels: Optional[np.ndarray] = None              # 1=虚假, 0=真实, -1=未知

    def add_review(
        self,
        review_id: str,
        user_id: str,
        product_id: str,
        text: str,
        rating: float,
        timestamp: float,
        label: int = -1,
    ) -> None:
        self.review_ids.append(review_id)
        self.user_ids.append(user_id)
        self.product_ids.append(product_id)
        self.texts.append(text)
        self.ratings.append(rating)
        self.timestamps.append(timestamp)
        if self.labels is None:
            self.labels = np.array([label])
        else:
            self.labels = np.append(self.labels, label)

    def __len__(self) -> int:
        return len(self.review_ids)


# ────────────────────────────────────────────

8. 论文来源

  • 2510.01801