背景:上文讲到离线model已经训练好了。接下来就是最重要的部分,在线应用部分拿效果。在个性化推荐算法recall的整体架构中,有比较简单的写kv,在线直接读取kv。如果应用了深度model,也有相对稍微复杂一点的请求tf serving,或者别的深度学习model服务,拿到一些结果,根据结果去索引里拼接结果的。但是我认为向量召回是目前为止个性化召回架构里最完美的。正是因为这份追求完美的心,导致深陷泥淖一个月拿不到效果,(不是开发过程有问题,是上小流量后战胜不了baseline的无奈与反复调试后最佳效果打平的遗憾背后,不得不换了一种方法,在召回架构上做了一定裁剪,才拿到收益。)所以说有时候完美的不一定是好的,大道至简。所以说熟读金庸的朋友们一定记得与杨过在得到玄铁重剑的时候看到独孤求败留在剑冢里的几句话。第四个境界就是木剑无滞。“四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进于无剑胜有剑之境。"我觉着是这是每一个做学术的人追求的最高境界,我可能也就刚刚到第一个境界--利剑无意,也许都还没到,我第一次读这个的书是在初中,觉着人生总还是要不停攀爬,再不行也需要,尽吾志也而不能至者 可以无悔矣。
一:完美的架构与不如人意的效果。这里需要两大块,离线侧需要训练完model之后,将tf model export出来已备建立tf serving做user embeding使用,离线侧还需要从训练好的model里面output 出item vector,将vector建立好fasis索引,以便达到向量召回。离线建立好之后,在线的开发只需要是在推荐引擎里面每一个user到来之后组建相应的user特征给tf serving发请求,tf serving embedding向量后,从fasis中召回最近邻的topk个itemid,推荐引擎得到itemid后从doc里面拿出详情再走入rank,完成推荐。很漂亮的一套流程,但是就是没有效果,在整体流程之上加了很多策略控制也是不太能战胜基线。分析原因:在我们这个系统中,基于user的推荐之前主要是content based来完成的,强依赖与user profile。很难做到跨域推荐。之前有一些基于点击的item来完成推荐的算法像内部自研的swing和一些其它的(脱敏不公开哈哈哈)等等。这部分的推荐流量占比已经非常高了。所以在调效果一个月不行的情况下,忍痛转为基于item的推荐。
二:月有阴晴圆缺,普通的架构下,拿到了一些正向收益。得到itemvector之后,直接相似度离线计算得到item sim,然后写kv,在线直接根据click item,去得到召回。这样的情况下小流量试验效果正向,这个新的召回分支表现也很棒。
最终结果分析:上线后ctr+1%,人均阅读时长+0.3%,推荐多样性+2.5%. 我之前看到过国内说自己应用这个然后收益的只有58同城,说的是ctr+1%,然后听到过公司里其它组同学分享说ctr+1%- +3%之间,不过他的建模不是这个模型,虽然思路类似。如果有一些别的公司落地实战产生了收益,而且比较大,麻烦看到的朋友留言或转告我一下,还想求教一下。毕竟人都有追求完美的心。哈哈哈。
虽然效果收益不是特别大,但是还是有一番感谢想说,因为个人永远是团体里一小部分。苏老板与君姐在没有效果的那一月的耐心等待,因为我今年刚跳槽,其实不应该在那一月里过多停留调效果,应该早转向。谢谢他们。也非常感谢一干组内人员的帮助,当时在系统不熟悉的情况下,他们给予了很多指点。 当然如果你看过我之前的文章和这次最大的变化就是在一些架构的描写少了,因为这次跳槽回到了大公司,有很多平台,谢谢模型平台的人搭建了这个模型,否则自己去实现这个youtube dnn还是会耗费很多时间。还有架构的人搭起来了fasis 可以直接建立索引和直接调用。也省了我一些时间。
本文为原创,如需转载请注明出处。
第一版完成与20180806凌晨。