题目重点:为帖子评论排序,利用线程上下文、相关性和对话质量,区别于主帖News Feed排序。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练候选是某post下用户可见的评论及回复,不是全站主帖;目标是有用对话体验,安全和权限先过滤。
- 评论是否按线程成组、父回复是否一并展示以及时间排序回退需先问;示例先排一级评论,回复在各线程内单独排序。
解题路线
- 建post/comment/reply关系与真实曝光事实,label为阅读、展开、有效回复、helpful反馈和hide/report。很多reply不一定优质,争吵也会提高reply量;人工质量与用户满意样本补充行为label。
- 特征明确comment与post的语义相关性、parent/thread上下文、作者与访问者关系、评论年龄、建设性/重复/垃圾风险。内容词向量可预计算,实时votes与thread变化需新鲜度版本。
- baseline相关性+时间/质量规则,升级多任务排序预测正负反馈,再做多样性re-rank。全局热门票数偏向早发评论,应按展示机会、年龄和位置校正,不以累计like独占。
- 线程排序与回复顺序分别做:一个高质量回复不能脱离必要父上下文展示;删除父评论时可按政策保留占位,但权限变化后不可泄露已隐藏文本。
- 离线按帖子/作者/时间隔离,评估NDCG、负反馈、观点覆盖和审核误伤;在线主看有效对话满意与阅读,分长短帖子/语言/新评论,监控倾向反馈循环。
手动走一遍
早发一句无关玩笑有1000like,后发有用解释只有20like。累计like排序会固定前者;结合相关性、曝光归一反馈与受控探索,才可能让后者得到公平评价。
规模与取舍
每post候选M的rank约O(MC),超长讨论先召回/层级裁剪;线程树遍历与权限过滤可O(nodes),缓存按post/commentVersion/modelVersion,不能只按postId永久复用。
易错点与追问
容易失分的边界
- 把Feed主帖的watch label照搬评论,会遗漏线程结构与有效回复。
- position bias使高位评论获得更多反馈,纯训练历史互动会强化原偏差。
继续深挖
- 如果必须所有回复保持时间顺序,ML只决定一级线程排序,不能偷偷重排回复。
- 新评论无互动怎么办?语义/质量prior加有限探索,避免“0 like永远靠后”。
