Case Study面经题解 - How to Recommend Video to Watch Next
本期Techie面经文章中,我们为大家精讲一道在数据科学岗位面试中常见的案例分析题:How to Recommend Video to Watch Next。我会先结合题目的具体要求,为大家梳理在实战面试作答过程中需要注意的问题,然后结合一系列面试常见考点,为大家剖析对应的细致解答。
如果你想跟我一起体验数据科学面试流程, 为你指导面试备考或者答题过程中的问题, 欢迎报名参加Techie备受好评的数据科学集训营以及数据科学模拟面试服务. 我会用70+课时的时间,结合90+道数据科学面试真题, 以最高效地方式帮大家梳理数据科学知识体系, 并结合工业界级别的项目训练, 全方位提高大家的综合应用能力以及面试实战技巧. 如果你在数据科学备考或学习过程中有任何问题, 也欢迎扫描下方的二维码或者搜索 TonyCoding20 添加我的微信, 期待和大家的沟通!
1. 面试题介绍
这是一道关于视频推荐的 Machine Learning Design 问题,我们先通过例子帮大家更好地理解应用场景:在视频网站 (比如YouTube) 上,当用户观看完一段视频之后,视频界面会推荐下一个待播放的视频。用户可以选择点击playnow观看,或者时间缓冲结束后会自动播放所推荐视频。一般来讲,推荐的视频是用户可能感兴趣继续观看的,所以推荐视频和历史视频浏览或者订阅视频会有一定的相关性,比如来自于同一个品类标签或者属于同一个视频集合等。在下图中,当视频 User Chrun Analysis - Part 1 结束后,系统自动推荐 User Churn Analysis Part - II。在右侧的推荐视频列表中,内容也几乎都和人工智能、科技、模型类主题有关,这与我们的搜索查询也是一致相关的。
对于这道面试题,大家在面试中需要着重注意以下几点:
- 在进入细致的技术问题讨论之前,首先要通过与面试官的交流来澄清问题的具体定义,包括:问题核心的优化目标(比如用户观看时长,点击率等) 以及模型上线后的延迟要求。
- 要着重展示你对推荐系统这一类的问题模型架构的整体理解。内容包括:数据标注 (data labeling)、数据处理 (data/feature processing)、召回排序 (candidate generation),以及后期的模型上线、实验设计和分析。注意在这里我们并不要对于求职者对每一部分都面面俱到。大家在面试时可以首先给出high level big picture,然后再根据实际情况与面试官做进一步讨论。对于这部分内容,我在Techie面经文章 - 资深面试官眼中的数据科学案例分析面试 中也为大家做过介绍。
- 结合数据分析或机器学习理论的问题作答。面试官一般会通过 follow-up questions 的形式来考察一些在实际工作中可能遇到的细节问题,比如如何消除排序中位置偏差 (position bias),如何解决新视频上传带来的冷启动 (cold start )问题等等。针对这类问题,我们可以先简单解释概念、列举出一些实际例子,然后提出多种不同解决方法,并向面试官解释不同方法的trade-offs。
2. 常见考点解答
Q1. 如何定义视频推荐系统的优化目标
我们可以根据用户的浏览记录、视频信息和场景信息来预测用户观看某个视频的可能性,然后选择得分最高的视频作为next video to watch 的推荐。优化目标可以是推荐视频的点击率 (click probability)和用户的观看时长 (watch time)。另外,revenue、number of videos watched 也可以作为优化目标。
Q2. 如何推荐相关视频
这个过程一般来说包含召回 (candidate generation)、排序 (ranker) 以及重排序 (reranker)。对于海量的视频候选集,我们先要根据用户观看历史记录,通过召回生成一部分可能相关的视频(比如视频来自于同一个标签集合)。这一阶段优化的目标主要是recall,即发现更多的相关的视频。在排序阶段,我们要对召回产生的视频候选集,使用模型做个性化排序(比如视频观看的可能性或者时长),这一阶段优化的目标是precision,即更看重top K 推荐的视频列表的准确性。最后在重排序阶段(reranker),我们要提升推荐视频的多样性并去除已观看视频,最后会呈现给用户作为相关视频推荐。
Q3. 如何生成训练数据
我们一般是里通过处理用户反馈(feedback)信息来生成训练数据。在这里用户反馈可以是用户是否完成观看视频或者达到某个百分比。在排序阶段,我们可以把“曝光给用户但未观看”的视频作为负样本 (impression but not watch)。而在召回阶段,为了保证训练数据和线上实际数据的一致性,还要选取一些之前未被召回的video作为负样本。
Q4. 在召回阶段有什么具体实现方法
我们可以先从简单的content-based filtering 的方法出发,通过video attributes 和video characters 找到和用户看过video 相同的attributes,比如相同的category, genre,来召回更多相似的video。进一步地,我们可以尝试向量化召回 (embedding retrieval),使用神经网络生成 video embedding 然后使用KNN 的方式召回相似的video集合,比如双塔结构 (two-tower approach)。此外还有协同过滤、Factorization Machines 以及更复杂的方法 Graph Neural Networks (GNNs) 等,在面试中可以选择相对熟悉的方法展开讨论即可。对于这部分具体的模型内容,我们在Techie数据科学集训营中给大家做了细致的讲解和归类,欢迎感兴趣的同学直接在Techie课程网站上免费观看课程首节试听课。
Q5. 需要收集哪些数据做模型训练?对数据如何做处理?
这里给大家罗列4大类常用特征数据:
- 用户类特征: 主要是demographic features 比如年龄、性别、语言等,这里注意要对年龄做归一化处理。
- 视频特征:比如视频时长, 视频评分,视频上传时间以及视频标签等。
- 场景特征: 时间相关 (hour of day, holiday),以及用户位置信息。
- 用户视频交互特征: 过去三个月观看过的视频、用户搜索历史等。对于其中的sparse feature(比如video id,text data),需要通过word embedding等处理方法将其转化为dense feature,便于后续的建模处理。
Q6. 如何检测并分析模型performance
在offline evaluation 阶段,可以基于不同的metrics(比如Mean Average Precision, NDCG)对 model performance 做evaluation。在online evaluation 阶段,可以采用AB Test实验方式测试模型在实际数据中产生的business impact。另外在有些情况下,model serving data 和 training data 两者之间会出现数据分布变化 (data drift),这会导致model performance degradation,所以定期更新训练数据和模型也是十分必要的。
Q7. 视频推荐model pipeline是如何搭建的
这里列出一个经典的pipeline作为例子,大家也可以在此基础上进行拓展和优化:
- database用来存放相关raw data 比如 user video history 以及用户information
- 通过feature pipeline 比如spark job 来生成 model training 所需要的features
- Model service 收到 prediction request 后生成推荐结果返回给用户。最后基于用户的反馈,进行下一轮模型的迭代。
以上就是关于面试中视频推荐系统部分的讨论,希望这篇文章能给大家带来一些启发,如果大家对文中讨论的内容有任何问题,欢迎扫描下方的二维码或者搜索 TonyCoding20 添加我的微信, 期待和大家的沟通!祝大家都能顺利通过面试,拿到理想的offer!