1p3a-logo1p3a-logo
留学申请面试经验绿卡排期全民竞猜
APP
    旧版通行证登录注册APP
首页
热榜快讯
NEW
通知私信收藏阅帖历史积分中心
热门功能
💎每日夺宝🌱每日农场🛍️跳蚤市场🏠租房找室友🛒好物折扣💳信用卡助手📱旧机回收比价
我的版块
我的标签

浅谈ML Design推荐系统面试心得, ask me anything

berserker888
2019/3/8 · 发布于机器学习版·92456
地里的兄弟们好,这次跳槽实在从地里面汲取了太多有用的信息,
一直想要回馈大家,我看地里面虽然总是热烈讨论MLE这个职位,也偶尔蹦出几个MLE的面经
却很少有比较系统地讲ML Design轮的策略

先简单介绍一下我的情况,我是个统计小硕
16年秋天毕业以后就在一家小的公司任职data scientist,
想转行成MLE的动机也是想做一些hard core modeling
上学和工作的这几年一直在做推荐系统。
连续两年面的Google和FB的MLE,总共经历过大概6轮这两家的ML Deisgn面试
加上自己在原公司也面过大概20多个人, 所以这方面有点经验想和大家分享一下
这里我针对的听众是要面等同于FB和Google L3-4 这个level的同学,即new grad或者1-3年经验的,再高级别的,我还没够到呢

首先给大家科普一下MLE
一般我投的大公司,这个职位名称叫Software Engineer - Machine Learning, 顾名思义你首先必须要是一个Software Engineer
所以这也侧面说明了MLE的面试难度是要超过general SWE的,所有想在算法轮投机取巧(比如只刷LC Easy和Medium)的各位,可能有点困难噢
另外想和new grad说一句,其实如果你去抖包袱版里面看看MLE的offer,你会发现很少有new grad甚至1年经验的人拿到MLE,这也印证了大部分公司JD里标明的require 3-5年经验 they mean it
但我认识好几个general SWE new grad招进去做ML(或者转组去做ML)的,一点障碍没有,没人规定ML的东西只能MLE做
所以我会建议new grad以SWE的身份先进去,大公司很多组都拼了命地加ML进自己的东西,就算给你的组没有大不了咱也能转组。

下面share一下Google和FB的面试轮次,都是onsite
FB两年都很consistent: 2轮coding + 1轮bq & coding + 1轮System Design + 1轮ML Design
Google第一年: 4轮coding + 1轮ML
Google第二年: 3轮coding + 2轮ML
我要说的就是ML这轮,因为这是MLE特有的

在这一轮,你80%会被问到设计一个推荐系统,剩下的20%如果你熟读ML课本不会有问题(如果你申的职位是research或者特别精专的Deep Learning岗另说), 推荐系统的雏形是Netflix Recommender System competition,
不了解的可以搜一下,基本这个问题可以抽象为你有很多user,很多item,一定的历史数据(user买item后的rating),现在你要决定推荐哪些新的东西给每个user

具体到你被问的问题,可能会有一定的变种,举几个例子
1. Yelp饭馆的推荐,涉及到了geolocation information
2. Facebook Newsfeed推荐,涉及到了不同user之前的networking
3. Ins Story推荐,每条Story是独一无二的并且是有时间性的
4. Spotify音乐推荐,怎么把音乐做个embedding

这里我希望可以factor out这些问题相同的因子,你会发现每道题除了微妙的不同以外,其它基本可以按照一个套路来
首先对design轮,本来问题就 supposed to be vague,你会发现很多东西没有定义,而面试官也会希望你来导向整个流程
所以切记一定要 be organized !!(划重点)
我们给面试官的印象不仅仅是technical competency,同样作为一个人,我们的思想是make sense的(划重点)。
这个面试,我的建议是,稳妥起见,从基础模型开始,解决问题优先(划重点),适度go deeper,如果不必要不要秀fancy模型

我一般是分成四个部分
I. information and data:5分钟
II. feature engineering:10分钟
IV. model:15分钟
V. evaluation:5分钟

---Information and data
如果你被问到的问题就是 现在给你一个spotify,请给我设计一个音乐推荐系统, period.
你一定说巧妇难为无米之炊,我首先需要历史数据。
基本上最能用的历史数据可以被再细分为三个主要的table
1. interaction table or log table, 即每一个点击,每一个购买,每一个评价,都是以一个(user, item) pair的格式记录下来的
(1) 每一条记录,是可以包含some contextual information的,比如时间戳,音乐听了多久,购买花了多少时间,等等,要动脑筋想想什么信息是有用的,尽量多log下来
(2) log可能不止记录了购买信息,还有查看信息,scroll down看到但未被点击信息,都是indicate different level of preference
2. dimention table: user, 即每一个user是有自己的metadata信息的,比如年龄,性别,地域等等demographic信息
3. dimention table: item, 和上面一样,只不过是item的metadata
我一般不会在这个stage对item做embedding即向量化,而是存最原始的raw数据

---Feature Enginneering + Modeling
之前把这两个分开的原因是面试官可能会分别问这两个的问题
但实际上,你的feature engineering一定是要为model服务的
这里给出我经常会使用的几种简单的推荐系统模型

(0). rule based model (难易程度1, make sense程度5)
(1). 转化成classification/regression 模型 (难易程度2, make sense程度5)
(2). matrix factorization (难易程度3, make sense程度2)
(3). facorization machine (难易程度3, make sense程度3)
(4). wide and deep learning (难易程度4, make sense程度4)

我个人最喜欢的,而且觉得比较稳妥的是(0)+(1),说的好是绝对没问题的
至于(2)(3)(4)网上有大把的资料,但你不能看一篇paper或者video就上了,一定要谨慎想好可能遇到的问题,比如
- matrix factorization可能会问你怎么加进user and item metadata, 你的retrain plan是什么
- wide and deep learning可能会问你deep part的神经网络怎么搭的,为什么
一句话追求fancy就要担着玩儿大了的风险

对于(0)来说,作为一个basis model有提到的价值,在处理cold start的时候是很有用的,但不可恋战一定尽快带过
rule无外乎根据两个heuristic
- 对user_i 找到和ta类似的user,看看别人买了什么,推荐给ta
- 对user_i买的item_j, 找到类似的东西,推荐给ta
这里面涉及的知识点就是怎么定义“类似”,即需要一个distance metric,这点大家去网上找吧,很多的similarity metrics

重点是(1),这里依然拿spotify music 推荐当例子那么如果转化成一个binary classification问题,我们就要拿出所有的music listening history log, 即tuple of (user, item, context),
比如(berserker888, Titanium, 2019-01-01:12:00:00)当做我们的positive case,即y值为1
那我听了这一首歌,就没有听剩下的所有歌,那我在这个context下所有没听的歌理论上都是negative case, 这里要知道unbalanced data的危害以及一种random sample negative case的逻辑。
同样可以把问题转化成regression问题,就像之前说的,我看了没有听,我听了,和我压根没看的东西代表着3种preference level.

下面简短启发一下feature的展开,user, item, context都是需要vectorize化的
最简单的就是直接join user, item dimension table拿到metadata。
但有的时候比如item是视频图像或者自然语言,就需要我们通过一些方法,比如pretrained deep learning model take bottleneck layer,请大家自行搜索word embedding和image embedding
稍微tricky一点的是contextual feature,这里可能需要aggregate log来达到目的,我建议大家提前想好一些feature,给一个例子:has user_i listened to item_j's category in the past week at night?

---Evaluation
一定要区分statistical metric和business metric
前者是你训练模型时候定义的metric,主要用来tune hyperparameter的,比如accuracy, F1-score...
后者定义你的模型是否有意义的metric,比如推荐歌单平均听的时长
一般后者意义更大,更会被问。因为是无法直接直接optimize的,只能通过ab testing才测试,所以也有可能会被问到一点点experiment design的知识

写在最后的话:
谢谢你们看完我的流水账
Machine Learning是一个积累的过程,在上述流程的任何一个部分,面试官都可以插入问题来看面试者的水平,所以还是要多看多做多学
话说我也只是一个没几年经验的MLE,站在一个peer的角度,为还没进门的人提供点信息,还请各路大神轻踩
如果想到什么新的,会补充上去的
欢迎大家和我探讨ML Design的问题,任何模型上的问题,MLE发展的问题,anything,我有空时候一定会回大家
最后求个米吧

补充内容 (2019-8-28 12:29):
补充一下上面的内容,现在deep learning对业界的渗透已经很厉害了,想去大公司面试还是需要些这些方面的知识 https://ai.facebook.com/blog/dlrm-an-advanced-open-source-deep-learning-recommendation-model/
AMA,请加大米!

AMA,请加大米!

160个主题·7k+个回复·2026/9/17
随便聊聊26年怎么让AI帮忙写简历Google L6 PM (产品经理)AMATanium 评价,求大米分享一下爱尔兰转码学习➕大厂实习经验(求加米,跳槽ing写简历的一些建议
已获得 633 大米
avataravataravatar
+2
113
共132条回复
berserker888作者2019/3/11
置顶
Tonyclint 发表于 2019/3/11
lz好 我是今年去美国读统计的
将来非常想找ml dl方向的工作
想向lz请教一下职业规划的建议 就是我为了找ml ...
1. 刷题,最好有个200-300道的基础
2. 找实习是第一目的,ds实习机会不多,找sde的也可以,越big name越好
3. 别上太多课,上实用点的课,统计的课上太多没用
(1) ml, dm
(2) distributed computing/parallel programming
(3) Bayesian
(4) convex optimization
下面的课我觉得可以辅助
(1) internet programming: 知道一些网络传输协议,前端后端框架很有用
(2) computer systems: 知道compiler怎么工作会对代优化有更深的思考
(3) general computer engineer: 这个更像是一个文科课,教你一些比较professional的coding习惯比如怎么更好地用git,怎么写readme怎么写comment,怎么命名你的variable
4. project经验,多刷几个kaggle,问题要有variety,用的算法技术要有variety
已获得 8 大米
avataravataravatar
+1
14

✨ 您正在体验新版论坛UI

👉 【有奖公测】反馈问题或建议

新手指南常见Q&A小黑屋关于我们加入团队联系客服VIP通行证购买鳄梨去广告企业招聘地里专栏商务洽谈服务条款社区守则隐私政策
youtubetwitter
1Point3Acres.com does not represent or guarantee the truthfulness, accuracy, or reliability of any of communications posted by users.
Copyright ©2009-2026 1Point3Acres.com All rights reserved. See Terms of Service.