首先给大家科普一下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进自己的东西,就算给你的组没有大不了咱也能转组。
(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就要担着玩儿大了的风险
重点是(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?