① 2 月末,我又在 KKBox 上做了很多实验,比较了 HF、ClF、CtF 的表现,然后下采样(downsample)到 S2M 的数据量重复实验(中间还搞错了如何做 downsample)。虽然我知道了 HF > ClF > CtF,但我并没有深入理解为啥会这样,这是“战略上的懒惰”。
② 3.3,我们几周来第一次和 Susan 开组会。一开始大家讲一些统计和经济的东西我没太听懂;之后 710 问 Susan 对下一步的方向有何建议。让我意外的是,Susan 说她主要指望学生们自己头脑风暴,给作为导师的她提供灵感;我们学生应该比她更清楚怎样的 project 更 publishable、能推进科学发展、有益于合作伙伴。我们应该主动提出 project,然后从这些维度评估可行性。
③ 3.3 晚上,709 也说我应该对 project 建立完全的自主权(他常不经意地说“我想让你做 xxx ”,他说这不对,应该是“你可以做 xxx ”)。确实,入 lab 三个月,我已经发展了很多自己的想法。但与此相矛盾的是,我提出的很多想法都会被 709 或 Susan 否决:要么是别人已经做过了,要么没必要,要么不现实。
④ 比如我说用 Neural CF,“我们连基本的 CF 都没搞好,Neural CF 怎么会更好呢”;比如我说加入多样性,“现在的问题不是多样性,不是说推荐物品卡在某种类别上”;比如我说我可以用分布式数据处理工具,重写预处理流程,“这不是我们的任务,公司工程团队做不出来的才应该由我们做”。当然,709 说他的 idea 被 Susan 否决也是家常便饭。
⑤ 709 开诚布公地对我说,“如果你觉得我哪里不好,你可以单独向 710 吐槽”。我的队员有如此胸怀,和他们共事好棒!还问我喜欢和不喜欢 project 的什么方面、我希望这个 RAship 如何 fit 进我的职业规划,让我放开说。
⑥ 我说喜欢探索给用户、物品建模的过程;不喜欢的地方是,老让我算 RMSE 就很鸡肋,不能真正反映推荐系统的好坏。709 说确实如此,他举了一个例子,说明一个模型做出了正确的推荐但 RMSE 还是会很高:准确预测了某个用户评分的相对名次,但绝对数值错误,普遍上移或者下移。
⑦ 现在我对下面几个月要做啥还是挺迷茫的。我说强烈希望能自己搭建一套完整的推荐系统,从 csv 数据开始,产出两个模块(TFY、RS)的推荐结果,而不是天天算 RMSE。虽然 709 已经做了,但说不定我自己能提供新思路呢。而且(1)这个更能帮助我的职业发展,(2)我也不知道应该做什么其他事情了…
⑧ 最近我们探讨的最大问题是如何应对用户和物品的冷启动(cold start)问题。我们可以按 popularity 给新用户推荐,但问题是从什么时候开始个性化呢。709 让我读一读 Hierarchical Modeling,这种方法使用某种“先验分布”(prior distr.)来解决新用户信息不足的问题,不过我们还是放弃了这种方法。
⑨ 我还研究了一下离线评估指标的问题,和 709 提出使用 MAE 而不是 RMSE、把 Freadom 推荐模型的 utility 换成二元值,不过都没有被采纳。还有怎么创建测试集的问题,还有如何理解 latents 的意义,还有算法的时间复杂度。
⑩ 3.10,我们又提出了一个基于排名准确率的指标,precision@k。计算的是给预测的 utility 排序之后,前 k 个实际 utility 是“正样本”的比例。
⑪ 显然,如果数据里有很多用户只有不到 k 个 interactions,那这个 metric 就没有意义了,所以需要过滤掉互动数量小于 k 的用户,好在 709 已经做好了这一步。还有的问题是需不需要单独 split 出测试集来计算;现在我们并没有区分 train/test。
⑫ 3.15,我实现了这个的代码,之后做实验,看各种模型和 baseline 在 precision@k 上的表现。709 期望我能很快完成,然而最后直到 3.24 才做出来(中间放了一周假),实际花了我 3 天时间。
⑬ 原因在于他的 ItemMeans 模型本来不是用 PyTorch 写的,我得把它变成 PyTorch 的 class;那以后出了各种难解的 bug,又是 train 命名冲突,又是 forward 的 output 不对,又是 0D tensor 作为 getitem 的参数会有奇怪的事情发生。搞好以后,发现我们的个性化推荐模型,确实表现更佳。