领导知道 后台是他下属对上级领导的评价,却总针对,讽刺我能力差。提离职,他让我再坚持一段时间。工作上开始帮我,为啥

本次分享的主题是快看漫画个性囮推荐探索与实践主要包括:

快看世界创立于2014年,旗下快看漫画 app 是中国新生代内容社区和原创 IP 平台截止2019年7月总用户量已经突破2亿,注冊用户量突破1亿月活突破4000万,绝大多数用户属于高活跃、高粘性的95后、00后快看漫画今年被 QuestMobile 等机构评为“最受00后欢迎的产品”。

很多人來到快看漫画可能更多的是想看漫画,实际我们的内容不只是漫画还有社区的 UGC 内容,从产品属性来讲虽然现在更倾向于漫画但是我們在逐渐强化社区属性,也是未来重点的战略方向所以,对于推荐来讲我们是长内容和短内容结合的

上图为快看漫画的主要推荐业务場景,包括:首页个性推荐 tab发现页推荐 tab,世界页推荐 tab贴底相关推荐。画面会比之前好一些对于推荐系统来讲,不光是技术、数据、算法还和 UI/UE、领域知识相关。

内容形式包含:长漫画、短漫画、图文帖子、视频帖子等

我们在做的事情就是如何为4000万月活用户很好的分發长内容和短内容。

短内容(短视频、新闻资讯、用户帖子等)特点:

  • 占用用户碎片化时间阅读时间短

长内容(漫画、小说等)特点:

  • 占用用户大块的时间,阅读周期长

  • 连续性、周期性、多章节多兴趣点

针对多样的内容形式我们面临的技术挑战:

  • 技术上如何捕捉长内容嘚连续性、周期性、多兴趣点等特征?

  • 快看漫画既有长内容又有短内容如何较好的融合两类内容?

快看漫画有大量的文本信息(帖子内嫆、弹幕、评论)和海量的图像信息(漫画图像、帖子图片)其带来的挑战为:

  • 如何进行漫画类图像内容理解?图中古风的图片可能比較好理解但是如何分辨校园和都市,通过图像是很难判别的

  • 独特的社区文化(比如二次元),新生代文化“暗语”(如上图帖子中的內容对这方面不了解的人都很难理解,对于机器来说更难理解)给文本内容理解带来挑战。

如果现在界定为深度学习时代各大公司嘚产品都已经上了深度学习模型,深度学习的效果是非常好的但是它的平台搭建周期是非常长的,并且很难被解释是一个黑盒的东西,看不到摸不到很难干预。对于前深度学习时代也就是传统机器学习模型来说,它的可解释性强训练起来比较容易,并且容易部署

2. 快看推荐算法迭代

快看推荐算法起步相对于推荐领域是比较晚的,但是相对于漫画垂直领域还是比较早的我们在2019年以前更多的是基于內容的推荐,今年的上半年我们引入了协同过滤同时19年到现在排序这块主要用到的是 XGBoost,未来我们会考虑深度学习

基于内容的推荐,最夶的难点在于对内容的理解我们有比较专业的运营和内容团队,在做推荐之前已经有了一些比较基础和简单的标签可以快速的应用起來,所以我们最早做的是基于内容的推荐做内容推荐,我们需要有很好的内容理解构造好物品的画像,另外需要很好的理解用户的興趣偏好,构建用户的用户画像我们把两者很好的结合就可以得到推荐的结果。对于内容推荐来讲它的可解释性也是比较强的,对于茬内容方面有很深积累的公司可以很快的构建起来。

快看漫画的标签体系分为三个维度:

  • 作品基础维度:搞笑、青春、治愈等

  • 用户分發维度:男性、女性、青少年等

  • 内容创作维度:青春成长、兄妹、学生等

即使有专业的标签团队来打标签,建立很好的标签体系也需要很長的周期过程因为人和人之间的感受和认知是有差距的,如何把这些标准制定好保证每个作品打的标签是无差别的,这是一个专业性佷强的问题(上图为我们去年比较火的作品,被拍成了电影)

做用户兴趣模型需考虑:

  • 相关行为:关注、点赞、评论、分享等

  • 行为粒喥:会精确到关注的作品或具体某个章节

  • 章节数量:章节数量不等,有的作品很长有的作品很短,如何判断用户对一个感兴趣对另一個作品不感兴趣

  • 兴趣衰减:用户的兴趣是周期性的,会存在兴趣衰减的情况

  • 作品热度:需考虑热门作品大家都在看的内容

基于内容推荐嘚总结,存在以下缺点:

  • 推荐粒度较粗如果用户兴趣单一的话,召回会不足

但是这是我们第一次上线基于内容推荐的模型,DAU 人均阅读佽数率提升35%效果还是很不错的。

之后我们引入了协同过滤,下面为我们实现了的三种算法:

  • 基于物品的协同过滤 ( Item-Based )对于漫画来讲,作品数量不是特别大可以很快的离线计算完成。

  • 基于用户的协同过滤 ( User-Based )由于我们有4000万的月活用户,做起来还是比较痛苦的下面将重点介紹。

由于协同过滤都是基于矩阵来完成的我们采用的是业界常用的 KNN 近邻算法。

因为基于用户的协同算法用户相似度计算量巨大,所以针对 KNN 近邻算法,我们做了调研对 Nmslib 和 Faiss 库做了对比:

它们都是开源的,可能 Faiss 会比较知名一点因为是 Facebook 开源的,它们的实现语言都是 C++都实現了 Python 绑定,但是 Faiss 会支持 GPU都实现了目前最快的 HNSW 分层索引算法,右边为网上找的两个算法在单机 CPU 上的 benchmark训练集大概 100+W,维度是200查找的是100个近鄰。大家可以看到最外层绿色的线就是 Nmslib 实现的 HNSW 算法,紧接着深绿色的就是 Faiss 实现的 HNSW 算法对比 Nmslib 会慢一点,再往下一条线是 Faiss 实现的 IVF 算法它會稍微差一些,但是它可以支持 GPU 并行计算所以按照 GPU 去考量,那么这个明显是胜出的所以我们综合考虑,选择了 Faiss 作为近邻计算的基础库

这里简单介绍下 Faiss 实现的算法。

① 聚类(找到聚类中心存储在量化器 quantizer 中)

② 找到每个向量最近的聚类中心点

① 搜出查询向量最近的 n 个聚类Φ心点 id 及对应的距离

② 构建 k 个元素最大堆

③ Id 对应的倒排 list 每个向量计算距离后放入最大堆

④ 堆排序最后做堆排序就可以得到 TopK

下面的 Faiss IndexIVFPQ,相当於一个升级优化版本实现更复杂些,会计算残差通过构建二级索引实现计算的加速。整体来说我们实现了 User-Based CF 的实时在线召回。

协同过濾上线后DAU 人均阅读次数提升了31%,同时协同过滤存在的缺点为:

  • 倾向于推荐热门内容 ( 当然可以通过一些方法对热门内容进行打压 )

  • 对新用户囷新内容不友好

  • 相似矩阵的计算量大 ( 可以通过 ANN 的方式来解决 )

我们有了基于内容的召回基于协同过滤的召回,每个召回都有自己的排序结果我们会考虑如何把这些结果合并起来,前期是基于规则的后期我们采用 CTR 预估的方式,使用传统的召回+排序的结构

① 常用 CTR 预估算法

  • 模型简单,善于处理离散化特征 ( 包括 id 类特征 )

  • 容易实现分布式可处理大规模特征和样本集

  • 特征之间在模型中是孤立的,需要做大量特征工程来做特征交叉

  • 树模型具有一定的组合特征能力

  • 善于处理联系特征可进行特征筛选,人工特征工程量少

  • 具有很强的记忆行为不利于挖掘长尾特征

  • 可以自动进行特征间的组合

  • 通过引入特征隐向量,加速了训练的复杂度善于处理稀疏数据

  • 工作量接近深度学习,效果不如深喥学习

  • 可直接输入原始特征减少交叉特征选择

  • 模型可能较大,调参复杂需要较大的工程支持

综上,我们最终选择人工特征工程量较少嘚 XGBoost 方案

上线召回排序模型之后,DAU 人均阅读次数提升36.6%目前的现状和问题:

  • 模型的训练效果有待提升,需要工程上的提升

  • 探索尝试新模型提升效果

架构的重要性:算法是大脑架构是骨架,如果没有好的推荐系统架构算法很难落地。

好的推荐系统需要具备的特质:

  • 及时、准确、全面的记录用户反馈

  • 优雅降级即使在服务出现问题的时候,也能推荐出个性化的结果

  • 快速迭代推荐策略、算法

这是 Netflix 在2013年公布的推薦系统架构把推荐系统分为了三层:

  • 离线层:一个用户产生行为,通过事件分发分发到离线层和近线层,离线部分是通过 hive 和 pag 这种通过離线的任务把数据分发到模型训练和一些离线计算上

  • 在线层:在线层会用离线计算的模型和近线计算的结果,得出在线的排序结果

这僦是当时 Netflix 的推荐系统架构。

我们在做快看推荐系统架构的时候实际上是没有参考 Netflix 的架构,但是当我们完成之后发现,各个层也可以按照这个方式去划分:

  • 近线层(橙色实时数据流过程):客户端采集的日志数据,通过 Kafka、Flink 传递到实时用户画像和动态文档

  • 离线层(红色):业务库数据通过 sqoop 导到 HDFS 后在 Spark 上计算,然后是离线模型包括特征工程,模型训练算法模型,向量索引用户画像等等。

  • 在线层(绿色):包括在线的召回、排序、推荐、服务端、ios/android 等等

  • 工具(紫色):标签权重模型、推荐结果追踪、数据指标监控和服务监控。

实验平台茬功能上是非常完善的是从产品各层级自上而下统一的实验标识,方便联动;实现了设备随机、用户随机、流量随机的随机分组方式;通过实验分层支持正交实验可以在一个层做多组实验;同时支持互斥实验,确保流量调整时用户稳定落在某一分组

对于指标计算,进荇了显著性的总结和功效的总结并且指标可配置,在做实验的时候想关注哪些指标可以进行配置方便查看算法实验的效果。

推荐往往會有一些 Bad case 暴露出来如果没有做追踪,就很难查找那块儿出了问题因此我们做了个性化推荐全链路的跟踪系统,保证了推荐的结果是因為什么推荐的或者为什么没有被推荐,这样就保证了一个可解释性如何解决的?我们会把当时的历史画像 Snapshot 和上下文通过 HBase 记录下来。

夲次分享主要介绍了快看和快看的推荐业务从算法和系统两方面介绍了快看推荐技术在起步阶段的一些探索,并且介绍了大规模k近邻计算方法、AB 实验平台搭建等常用技术的落地方案

  • 内容理解是推荐业务的基石,目前这块儿还比较欠缺未来将探索漫画领域的图像和文本內容理解技术。

  • 传统机器学习方法探索充分之后将尝试深度学习推荐算法以期更好的推荐效果。

夏博快看世界推荐研发负责人。清华夶学软件学院硕士毕业从业8年,先后就职于微策略 ( MicroStrategy )、万维思源 ( EverString )、一点资讯、快看世界;前期主要从事后端开发的工作目前主要从事推薦系统的开发工作,现任快看世界产品研发-推荐研发负责人

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴可以长按关注┅下:
如有收获,点个在看诚挚感谢

这是一个真实的面试题

前几天┅个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core、max、queue的执行循序去执行?"

我们都知道线程池中代码执行顺序是:corePool->workQueue->maxPool,源码我都看过你现在问题让我改源码?

一时间群里炸开了锅,小伙伴们纷纷打听他所在的公司然后拉黑避坑。(手动狗头大家一起调侃?(?????)?)

关于线程池他一共问了这么几个问题:

  • 线程池如何按照core、max、queue的顺序去执行?
  • 子线程抛出的异常主线程能感知到么?
  • 线程池发生了异常该怎样处理

全是一些有意思的问题,我之前也写过一篇很详细的图文教程:【万字图文-原创】 | 学会Java中的线程池这┅篇也许就够了! ,不了解的小伙伴可以再回顾下~

但是针对这几个问题可能大家一时间也有点懵。今天的文章我们以源码为基础来分析丅该如何回答这三个问题(之前没阅读过源码也没关系,所有的分析都会贴出源码及图解)

线程池如何按照core、max、queue的顺序执行

对于这个問题,很多小伙伴肯定会疑惑:"别人源码中写好的执行流程你为啥要改这面试官脑子有病吧......"

这里来思考一下现实工作场景中是否有这种需求?之前也看到过一份简历也写到过这个问题:

一个线程池执行的任务属于IO密集型CPU大多属于闲置状态,系统资源未充分利用如果一瞬间来了大量请求,如果线程池数量大于coreSize时多余的请求都会放入到等待队列中。等待着corePool中的线程执行完成后再来执行等待队列中的任务

试想一下,这种场景我们该如何优化

我们可以修改线程池的执行顺序为corePool->maxPool->workQueue。 这样就能够充分利用CPU资源提交的任务会被优先执行。当线程池中线程数量大于maxSize时才会将任务放入等待队列中

你就说巧不巧?面试官的这个问题显然是经过认真思考来提问的这是一个很有意思嘚问问题,下面就一起看看如何解决吧

我们都知道线程池执行流程是先corePool再workQueue,最后才是maxPool的一个执行流程

线程池发生了异常该怎样处理?

線程池中线程运行过程中出现了异常该怎样处理呢线程池提交任务有两种方式,分别是execute()和submit()这里会依次说明。

我们看到在执行task.run()时出现異常会直接向上抛出,这里处理的最好的方式就是在我们业务代码中使用try...catch()来捕获异常

线程池续:你必须要知道的线程池submit()实现原理之FutureTask!

这裏可以看到,如果业务代码抛出异常后会被catch捕获到,然后调用setExeception()方法:

可以看到其实类似于直接吞掉了当我们调用get()方法的时候异常信息會包装到FutureTask内部的变量outcome中,我们也会获取到对应的异常信息

对于线程池、包括线程的异常处理推荐以下方式:

  1. 直接使用try/catch,这个也是最推荐的方式
  2. 在我们构造线程池的时候重写uncaughtException()方法,上面示例代码也有提到:

  

这篇文章到这里就结束了不知道小伙伴们有没有一些感悟或收获?

通过这几个面试问题我也深刻的感受到学习知识要多思考,看源码的过程中要多设置一些场景这样才会收获更多。

小编给大家准备的學习资料也是非常珍贵的学习资料今年最新版的面试题,如果有需要的小伙伴私信“学习”来免费获取吧!

我要回帖

更多关于 下属对上级领导的评价 的文章

 

随机推荐