简介:一份面向电商产品经理与开发团队的商品评价标签需求说明文档,由产品李敏荣编制,版本1.2。文档系统梳理了商品评价标签的核心概念与功能框架,涵盖商品页评价信息、商品评论列表页、更新机制、数据统计,以及后台大数据评价标签管理、评价标签初始化编辑等模块,每个功能均配有界面预览和功能说明,适合作为电商平台商品评价模块设计、开发与验收的参考规范。资源包仅含1个doc文档,大小1.15MB,便于直接查阅与编辑。文档结构完整,从术语定义到后台接口说明逐层递进,既清晰定义了评价星级、评价数量等标签要素,也给出了更新机制与统计维度的后台设计思路,可帮助读者快速理解评价标签的业务逻辑,并据此开展原型设计、状态字段规划或接口文档撰写。目前已有65人学习下载,适合正在搭建商品评价体系、需要一份标准化需求模板的产品新人或项目团队参考。
1. 评价标签不是“给评价打几个字”:先看懂三层标签链路
评价标签这件事,很多人第一反应是“把用户评价里的高频词抽出来挂到商品页”,但真正做起来会发现,算法抽出来的词根本没法直接给用户看。这篇商品评价标签需求文档(1.2 版)给出的方案绕了一个关键弯:算法只负责产出原始标签集和近义标签集,而前端页面上用户看到的一切标签,都必须经过后台人工初始化,这一步直接决定标签能不能上线。换句话说,系统设计者从一开始就默认了“算法不可信”,这个判断在 2016 年的电商场景里非常务实,放到今天做评价内容结构化,思路依然成立。
这套体系实际拆成三层:大数据算法层产出原始关键词和近义关键词,后台运营层负责把原始关键词初始化成人话(比如“工作人员服务热情”和“态度服务好”归并成“服务贴心”),前端展现层再按情感倾向、标签数量、排序规则做截断和展示。适合谁看?如果你正在做电商商品详情页的评价信息重构,或者要给 UGC 内容做标签化展示,这篇文档里的好评率公式、标签展示阈值、去重累计逻辑和后台管理流程,都能直接拿去对齐你的方案。
2. 商品页评价信息模块:好评率公式与标签展示阈值的硬规则
商品页的评价信息模块是整个标签体系的前端主战场,文档里分成了“总体评价”和“评价信息”两块。总体评价模块回答的是“这个商品值不值得买”的宏观问题,评价信息模块回答的是“这个商品具体好在哪”的微观问题。两个模块共享同一套标签数据源,但展示规则完全不同。
2.1 好评率、好评等级与“评价标签关键词”的联动逻辑
总体评价模块由三个元素组成:好评率、好评等级、评价标签关键词。好评率的计算公式文档里写得很明确:
好评率 =(好评数 + 中评数)/(好评数 + 中评数 + 差评数)* 100%好评数对应评分 4 星和 5 星的评价,中评是 3 星,差评是 1 星和 2 星。这里有个容易踩的坑:好评率的分子包含中评数,也就是说中评被默认算进了“非负面”区间。这个口径和很多平台“好评率只看好评数”的做法不一样,做数据统计或对账时要先确认口径,否则前台展示的好评率和 BI 报表里的数字会对不上。
好评率取整规则是“读取小数点 1 位四舍五入”,也就是 97.96% 会显示成 98.0% 还是 98% 取决于前端展示模板,但数值本身按一位小数结算。好评等级则按阈值阶梯映射:
| 好评率范围 | 好评等级文案 |
|---|---|
| 好评率 ≤ 90% | 不错 |
| 90% < 好评率 ≤ 95% | 很好 |
| 好评率 > 95% | 超赞 |
文档里有两种边界情况需要注意。第一种是没有任何评价时不显示“总体评价”模块;第二种是全部为差评时同样不显示。这两种情况如果只按好评率公式算,会分别出现“0%”和“0/0”的尴尬展示,所以前端要做空值拦截,不能把公式结果直接渲染出来。
评价标签关键词的获取规则是“取第 1 个商品评价标签,且情感类型为积极”。这里指的是标签排序后的首位,排序规则后面第 3 章展开。如果商品评价标签为 0 个,或者全部标签的情感类型都是“消极”,则不展示关键词。另外,后台管理里配置了【单个酒景评价管理-推荐标签】时,该配置优先级最高,直接覆盖默认取第 1 个标签的逻辑。这条规则意味着默认展示逻辑只是兜底,运营有绝对的内容干预权。
2.2 评价标签的个数、排序与隐藏条件
评价信息模块中,“评价标签(评价数)”的展示规则是整个文档里约束最细的部分。展示个数限制在“最多 6 个、最少 2 个,不足 2 个不显示”。这个设计的意图很明显:标签太少说明数据量不足以支撑结论,强行展示会显得商品页很空旷;超过 6 个则会淹没重点,用户的注意力会被稀释。排序规则是“按标签评价数由大到小排序,评价数相同则按后台商品标签 ID 排序”,这是一个典型的两级排序方案,第一级解决用户感知的“热门优先”,第二级解决同分场景下的结果稳定性。如果不加 ID 排序,相同评价数的标签每次查询可能返回不同顺序,前端就会出现标签抖动。
评价数本身也有一个隐藏的“去重”口径:同一条评价内容如果提取了多个原始关键词,而这些关键词被初始化到同一个标签下,该标签的评价数只累计 1 条。比如某条评价同时命中“工作人员服务热情”和“态度服务好”两个原始关键词,而后台把这两个词都初始化成“服务贴心”,那么“服务贴心”标签的评价数是 1,不是 2。这个口径直接影响排序结果,而且在数据量大的时候,如果不清洗直接用“关键词命中次数”来计数,排序结果会失真。
-- 标签评价数统计(去重累计口径) SELECT tag_id, COUNT(DISTINCT comment_id) AS tag_comment_cnt FROM product_comment_tag_map WHERE tag_id IN (:tag_ids) AND is_deleted = 0 GROUP BY tag_id ORDER BY tag_comment_cnt DESC, tag_id ASC LIMIT 6;这里用COUNT(DISTINCT comment_id)实现去重累计,避免同一条评论命中多个同义关键词时被重复计数。如果在实际开发中沿用“关键词命中次数”的统计方式,需要把DISTINCT去掉,但排序结果会偏大。文档里的口径明确是“同一条评价内容包含多个相同标签,计为 1 条”,所以DISTINCT是必要的。
3. 评价列表页的标签 TAB:筛选、排序与高亮定位的完整规则
商品评论列表页是标签体系的第二个前端场景,也是用户实际浏览评价时的主要入口。这里的核心交互从“看”变成了“筛选”,用户点击某个标签 TAB 后,列表要筛选出包含该标签的评价,并且高亮显示标签关键词所在的句子。这个功能对后端接口的查询能力和前端文本处理能力都有要求。
3.1 固定标签 TAB 与评价标签 TAB 的双轨设计
列表页的 TAB 分成两类:固定标签(全部、好评、差评、有图、精华评价)和评价标签(环境好、人多等动态标签)。固定标签的筛选逻辑是写死的,其中“全部 TAB 无评价数”,其余 TAB 显示各自的评价条数。好评 TAB 筛评分 4 星和 5 星,差评 TAB 筛评分 1 星和 2 星,有图 TAB 筛包含图片的评价,精华评价 TAB 筛后台标记“优质”字段的评价。这组设计不复杂,但有一个隐藏条件:任一固定 TAB 的评价数为 0 时,该 TAB 隐藏不显示。全部评价为 0 时显示缺省页,全部评价为差评时只显示全部 TAB,不显示差评 TAB。
评价标签 TAB 的展示个数是“最多显示评价数前 TOP8”,排序规则与商品页一致,按评价数由大到小。这里的 TOP8 与商品页的 TOP6 是两套独立参数,需要分开配置。如果后台运营希望两个场景的标签一致,需要同步修改两处配置,文档里没有提供统一开关,这个在产品设计上是一个可以后续优化的点。
3.2 点击标签后的筛选链路与句子高亮
点击评价标签 TAB 后,列表数据变成“包含该标签的评价”,同时评价内容中命中该标签关键词的句子要被高亮标出。这里的技术实现分两步:第一步是筛选,后端通过标签与评价的映射关系查出所有包含该标签的评价 ID 列表,再按原有评价排序规则返回;第二步是高亮,后端需要返回每个评价中命中标签关键词的句子位置信息(起始偏移量和长度),或者直接在渲染层做文本匹配。
// 前端高亮渲染示例:根据命中位置切片 function highlightComment(commentText, highlightRanges) { if (!highlightRanges || highlightRanges.length === 0) { return commentText; } let result = ''; let lastIndex = 0; highlightRanges.forEach(range => { result += commentText.slice(lastIndex, range.start); result += `<em class="tag-highlight">${commentText.slice(range.start, range.end)}</em>`; lastIndex = range.end; }); result += commentText.slice(lastIndex); return result; }highlightRanges由后端在搜索命中时一并返回,前端只做切片拼接,这样能保证高亮位置与筛选条件一致,避免前后端各做一套分词导致高亮错位。这里要注意的是评价内容中的图片、表情符号等富文本元素,处理时不能按纯文本偏移量直接切片,要做富文本节点遍历。
评价列表的排序保持原有规则不变:置顶评价优先,置顶和非置顶分别按评价创建时间由近到远。标签 TAB 的筛选不改变这个排序基线,只做“包含该标签”的过滤。这意味着即使某条评价的发布时间很早,只要它是置顶评价,仍然排在非置顶评价之前,标签筛选结果可能看起来“不够新”,但这是产品明确要保底互动质量的决策。
4. 后台标签管理:从原始关键词到运营标签的四级维护体系
后台是整个标签体系的运营中枢,文档里拆成了大数据评价标签管理、评价标签初始化编辑、单个酒景评价标签管理(含推荐标签)、运营标签重命名编辑几个模块。这一层的核心职责是:把算法产出的原始标签转成用户能看懂、且符合当前运营策略的初始化标签,并维护标签与酒景(商品)之间的绑定关系。
4.1 大数据评价标签管理的筛选与字段设计
大数据评价标签管理页是后台的入口,用于管理大数据算法提取的原始关键词。筛选区包含标签 ID、标签关键词、情感倾向、修改时间、修改人。其中标签关键词可以同时筛“初始化标签”和“近义标签集”内容,情感倾向按大数据算法规则分为好、差、其他。这个筛选条件组合的实际价值在于运营可以快速找到“情感倾向为差但标签关键词人话不明确”的记录,批量做初始化。字段里有一个“初始化标签集”的展示列,用来标记该原始关键词是否已被初始化,为空则说明还未处理。
| 字段 | 说明 | 是否必填 |
|---|---|---|
| 标签 ID | 原始标签的唯一标识 | 是 |
| 标签关键词 | 算法提取的原始关键词 | 是 |
| 情感倾向 | 好 / 差 / 其他,由算法判定 | 是 |
| 初始化标签 | 人工维护后的标签名,为空表示未初始化 | 否 |
| 近义标签集 | 算法汇聚的近义关键词,TOP100 | 否 |
| 修改时间 / 修改人 | 审计追踪 | 是 |
这个表格的字段顺序也是后台列表的展示顺序。实际操作中,初始化标签为空的数据量往往很大,需要支持批量打标,不能靠运营一条一条编辑。比如遇到“服务好”、“服务态度好”、“服务员热情”这类近义词,单个编辑效率太低,按近义标签集聚合后批量填充初始化标签,是后台操作的核心提效手段。
4.2 初始化编辑、运营标签覆盖与单个酒景推荐标签
评价标签初始化编辑页负责把原始关键词重命名成初始化标签。文档里提到“近义标签集 TOP100”,这个数字的意义在于算法给出了候选范围,但最终归并到哪一个初始化标签由人工决定。编辑界面需要展示近义标签集合,让运营看到这个原始关键词的所有变体,再做归并决策。初始化标签的情感倾向必须与原始标签一致,否则会出现“差评关键词但前台标签文案很正面”的乌龙。
运营标签的逻辑是在初始化标签基础上做二次覆盖:对初始化标签重命名后,新文案覆盖初始化标签,前台该酒景的相应初始化标签位置显示运营标签。这里有一个容易出问题的点:运营标签是全局生效还是按酒景区分?文档里【单个酒景评价标签管理】说明,配置是针对单个酒景做的,因此运营标签如果只想作用于某个酒景,就需要在该酒景的评价标签管理里单独配置,不能直接改全局的初始化标签。
单个酒景评价标签管理对应一个配置页面,用于维护某款商品特有的推荐标签。文档 6.1.2.1 里明确“商品评价标签可后台人工配置,且优先级最高,覆盖默认标签”。这个配置项的用途是在酒景做促销或品牌宣传时,把特定标签顶到第一位。推荐标签的配置不应影响评价数统计,只影响展示顺序和展示内容。
{ "shopId": "A0001", "recommendTags": [ { "tagName": "明星同款", "sort": 1, "expireAt": "2016-12-31 23:59:59" } ], "defaultTagPriority": "comment_count_desc" }这段 JSON 表示单个酒景的推荐标签配置,sort字段控制展示优先级,expireAt做限时配置。配置了推荐标签后,商品页的评价标签关键词直接取recommendTags的第一个,不再走默认的“评价数最高且情感积极”的逻辑,这对应文档里“推荐标签”覆盖默认标签的规则。
5. 更新机制、埋点之外:定时同步与实时更新的工程取舍
标签系统的数据链路包含两个更新场景:新增评价内容的标签每日定时更新,线上已显示评价内容的增删查改实时更新。这个“定时 + 实时”的双轨设计是文档里容易被忽略但工程上很重要的部分,直接决定系统的数据一致性和资源消耗。
5.1 定时任务与实时同步的边界划分
新增评价的标签提取是计算密集型的任务,如果每条评价在产生时都立刻触发算法提取,接口延迟会变得不可控。文档里的方案是每日定时批量处理,时间暂定,建议放在凌晨低峰期,用离线任务扫描前一天的新增评价,统一补标签。实时同步的范围限定在“已显示评价内容”的增删改查,也就是用户可见数据的即时一致性。比如运营在后台删除一条评价,前端列表页要立刻看不到,这类操作通过消息队列实时广播即可。
# 每日标签提取定时任务示例(crontab) 30 3 * * * cd /opt/comment-tag && ./run_tag_extract.sh --date=$(date -d "yesterday" +%Y%m%d)run_tag_extract.sh内部按日期参数拉取新增评价,跑算法提取关键词,回写标签映射表。失败时要有重试和告警,否则当天新增评价的标签会缺失,第二天前台展示的标签统计会跳变。
埋点统计这部分,文档里把行为拆到了具体点击动作,涵盖了五个固定 TAB 和评价标签 TAB。埋点上报一般用event+params的结构,实际配置时,标签 TAB 的埋点要把tag_id和tag_name都带上,因为后台可能重新初始化标签文案,只报tag_name会导致历史数据无法对回标签 ID。
// 埋点上报标准化示例 function trackTagClick(tagType, tagId, tagName) { window._tracker && window._tracker.track('product_comment_tag_click', { tag_type: tagType, // fixed / dynamic tag_id: tagId, // 后台标签ID tag_name: tagName, // 展示文案 page: 'comment_list' }); }这组埋点字段的好处是后台可以同时按标签 ID 和文案维度统计,标签被重命名后也不会丢历史数据。另外,好评率计算和展示有个隐形问题:好评率小数位四舍五入导致的边界展示,比如 95.0% 和 95.4% 会显示成同一个等级,但对用户感知差异不大,不需要额外处理。
最后留一个实际排查建议:当商品页和列表页的标签排序不一致时,优先检查两处是否共用了同一个标签查询接口。文档里商品页取 TOP6,列表页取 TOP8,如果后台把它们实现成两个独立查询,就会因缓存或数据延迟出现同品不同序。比较好的做法是把标签数据按商品维度统一缓存成一张表,两个前端场景各自截取所需的条数,从源头上避免两侧数据不一致。
本文还有配套的精品资源,点击获取