查看: 92459| 回复: 132
跳转到指定楼层
上一主题 下一主题
收起左侧

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

   
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
地里的兄弟们好,这次跳槽实在从地里面汲取了太多有用的信息,
一直想要回馈大家,我看地里面虽然总是热烈讨论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/dlr ... commendation-model/

评分

参与人数 200大米 +633 收起 理由
FrankBOKI + 1 给你点个赞!
pxqtea + 1 赞一个
cuteripperkk + 2 很有用的信息!
BlackPen + 2 给你点个赞!
YahooZhang + 2 给你点个赞!

查看全部评分


上一篇:深度学习主机推荐
下一篇:Standford CS224n 第五次作业

本帖被以下淘专辑推荐:

 楼主| berserker888 2019-3-11 22:42:42 | 只看该作者
全局:
Tonyclint 发表于 2019-3-11 21:48
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

评分

参与人数 4大米 +8 收起 理由
t__c___ + 1 赞一个
zyyyyy712 + 1 赞一个
K叔 + 5 给你点个赞!
Tonyclint + 1 赞一个

查看全部评分

回复

使用道具 举报

推荐
 楼主| berserker888 2019-3-9 17:25:23 | 只看该作者
全局:
alibi 发表于 2019-3-9 16:17
楼主总结的真好。
我自己也做MLE相关的工作,但是系统比较老旧,model主要集中在rule based和一般classifi ...

有些paper是survey性质的,会告诉你很多方法,如果感兴趣去youtube搜一下作者在conference讲这个算法的视频一般都有
medium网站有很多RS方向的文章,可以搜一下netflix recommender system challenge从这里入门读几篇paper

1. matrix factorization
2. factorization machine
3. recommender system with implicit feedback
4. wide and deep learning

每一篇paper读完以后去medium搜一下导读(会引出很多intuitive问题)和python的implementation(帮你理解算法)

评分

参与人数 6大米 +32 收起 理由
Jedreke + 1 赞一个
K叔 + 25 真心好建议!
dylanoo + 1 赞一个
klnaniah + 1 赞一个
等待晴天 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
推荐系统最好还是把retrieval和ranking分开讨论,除非题目是只是设计ranking. 一个非常好的例子就是Youtube的论文,全文两大部分分别讨论retrieval model和ranking model.
回复

使用道具 举报

🔗
Warald 2019-3-9 02:39:51 | 只看该作者
全局:
本文被选为03/08/2019全站置顶文章之一。作者获得大米奖励。谢谢你的分享
回复

使用道具 举报

🔗
charnugagooo 2019-3-9 02:47:39 | 只看该作者
全局:
总结得很好!
回复

使用道具 举报

🔗
hengde12 2019-3-9 03:53:39 | 只看该作者
全局:
想问问楼主觉得MLE的市场需求大么? 而且收入和SDE相比差别多少呢?
回复

使用道具 举报

🔗
albeehere 2019-3-9 05:13:23 | 只看该作者
全局:
请问mle要刷多少题?狗和脸都是跟普通sde一样要求吗?
回复

使用道具 举报

🔗
bushimajia 2019-3-9 05:42:50 | 只看该作者
全局:
感谢楼主对ML Design的详细介绍!另外想问,楼主应该是统计背景的Data Scientist,System Design部分是怎么准备的呢?有什么推荐的资料吗?

评分

参与人数 1大米 +1 收起 理由
bushixiaohao + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
多谢楼主分享心得!
回复

使用道具 举报

🔗
 楼主| berserker888 2019-3-9 06:08:30 | 只看该作者
全局:
hengde12 发表于 2019-3-9 03:53
想问问楼主觉得MLE的市场需求大么? 而且收入和SDE相比差别多少呢?

各大公司都有这个职位,应该还是有需求的吧,不好说大不大
收入的话应该和SDE差别不大,尤其是大公司按级别给钱
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表