https://www.infoq.cn/article/g95hu67a4WheikGu*w9K

本次分享主题主要从以下是三个方面展开:

  • 知乎推荐页场景和 Ranking 历程介绍;

  • 深度学习在 Ranking 中的尝试和应用现状;

  • Ranking 面临的问题和未来研究方向。

首先大家看一下知乎 APP 的推荐页的推荐结果,由于单厚智老师对机器学习比较感兴趣,所以推荐内容大部分和机器学习相关。

image

一、推荐页请求流程

image

1、 召回:负责将用户可能感兴趣的内容提取出来,重点是全。

  • 基于话题:获取用户的关注数据,用户行为挖掘;

  • 基于内容:协同过滤的方式。

2、排序:负责对召回的内容进行打分,可以理解为感兴趣程度,重点是准。

  • 基于规则:时间顺序,线性加权;

  • 基于模型:GDBT,DNN。

3、重排序:出于产品或业务的考虑,对排序的内容进行重排,最终展示给用户。

  • 提权:比如给视频进行一定的提权;

  • 隔离:相似内容隔开;

  • 强插:高质量的新内容流通。

以上就是知乎推荐页的整体架构流程,下面针对 Ranking 模块做详细讲解。

首先介绍一下推荐页 Ranking 的演进历程, 如下图所示,Ranking 的演进主要经历了四个阶段。

image

  1. 按照时间排序
  • 按照用户的行为,比如关注,动态等,并根据时间进行排序;

  • 它的问题是没有考虑到亲密度或者感兴趣的程度。

  1. EdgeRank 算法

该算法借鉴 Facebook 的 EdgeRank 算法,根据用户亲密度进行排序。

  1. Feed Ranking

采用 GDBT 模型。

  1. Global Ranking

深度学习模型,DNN 等。

模型的选择主要有以下方面的考量:

  • 深度学习大趋势;

  • 能处理更高维度特征,如几十万话题量级,GBDT 无法完成训练;

  • 非线性模型,不必做大量的特征组合;

  • 使用 GPU + HDFS 结构,可以训练更多的样本。

二、特征介绍

我们的特征按照内容进行划,可分为如下分三类:

1、用户画像特征

  • 用户属性特征: 性别等;

  • 统计特征:用户点赞数等。

2、 内容画像

  • 固有特征:文章长度,关键词等;

  • 统计特征:历史点赞数等。

3、交叉特征

  • 用户与内容的交叉特征: 比如用用户感兴趣的话题和当前待推荐内容的话题交叉。

特征的形式主要有以下几个方面:

  • 数值特征:文章长度,点赞数;

  • Onehot:比如,内容类型;

  • Multihot:内容多个话题 id;

  • Onehot with value:用户对单类型内容的感兴趣程度;

  • Multihot with value :用户对各话题的感兴趣程度。

三、特征设计

设计原则:

  • 特征尽量全:从现有的数据中提取尽可能多的特征;

  • 特征原始值全:比如加历史 CTR 特征的时候,可以把 pv 和 click 都带上;

  • 覆盖率大:去掉一些覆盖率很低的特征,这些特征影响影响范围小,大部分是缺失值;

  • 线上线下一致:覆盖率和取值分布尽可能接近。

新特征方向:

  • 显式交叉特征:DNN 能学习特征的非线性能力,增加交叉特征可以降低模型搜索的空间,在训练数据一定的情况下可以提升效果,如用户的话题兴趣和当前话题的均值和最大值,效果提升明显;

  • 出于业务考虑:需要对业务有一定的理解,把自己当做用户,考虑什么情况下点击率会大,什么样的内容更容易被用户点,比如视频在 wifi 下更容易被点,视频点击率高的人更喜欢视频;

  • 数据挖掘特征:如内容 Embedding 特征。

3.1 内容 Embedding

  • Embedding 目的:把内容映射到低纬空间,相似内容距离较近,可以当做内容特征;

  • 文本角度:tfidf,关键词进行 word2vec 等;

  • 行为角度:考虑用户在知乎的行为,搜索内容相关性较好,依据搜索点击序列设计 Embedding。

实现细节

  • 数据:将搜索行为进行 session 切分,组织成类似于 sentence 序列;

  • 样本:85 亿;

  • 模型:skip-gram;

  • loss:nce-loss。

image

该方法借鉴 word2vec 的原理, 通过“词”去预测“上下文”,这里面的“词”就是 itemId,“上下文”就是指在点击该 Item 事件前后,固定窗口下其他 Item 的 Id 信息。

之所以通过搜索行为构建序列,是因为搜索是属于“强目的”的,并且搜索结果内容相似。

下图是模型的训练结果,从结果可以看出,这些内容大体相似。

image

四、CTR 模型

选择模型的原因:

1、推荐页排序目标是把用户推荐感兴趣的内容排在前面,可有下面两个学习目标:

  • 停留时长:适合用回归问题来解决,最后会偏向于长文章;

  • 点击率:二分类问题,知乎的问答一般不长,更加合适。

2、分类问题相比回归问题,目标类别少,相对准确率高;

3、分类问题场景业界应用较广,可交流空间大;

4、分类问题最后会输出一个概率分,方便与多目标结合。

损失函数采用交叉熵:

image

4.1 最初 DNN 结构

image

  • 将输入特征分为用户和内容两块;

  • 经过特征映射后分别通过全连接与两个独立的隐含层连接;

  • 两个独立的隐含层 cancat 后再经过两个全连接层;

  • 最后输出 sigmoid 与交叉熵损失作为 loss。

结果:这一版模型的 AUC 为 0.7618

4.2 优化 DNN 结构

image

  • 将用户和内容的特征,分别按照内容的 field 分为不同的 block;

  • 每个 block 先经过全连接到独立的隐含层;

  • 将上面的隐含层 concat 再经过后面的 DNN 模型。

结果:AUC:0.7678,提升 0.6%

4.3 Deep FM

image

  • 增加了一阶和 FM 模块,FM 通过 block 之间的内积实现;

  • AUC 提升 0.2%。

该 DeepFM 算法与华为设计的 DeepFM 不同,改模型将 FM 层的结果作为 DNN 的输入。

4.4 Last View + DIN

image

  • Last view topic 与当前内容的几个 topic 计算 Attention Score,再按权重进行 sum pooling;

  • AUC 提升约 0.2%。

我们基于的考虑是用户过去点击的内容肯定对他 2 将要点击的内容产生动态影响,这个模型参考了阿里的 DIN 模型,它会把用户看过的东西 Embedding,然后根据 Attention Score 再乘起来,我们的做法有所不同,我们是基于 Topic,是过去用户看过那些 Topic 下的内容进行划分。

4.5 Last Display + GRU

image

根据 4.4 的思想,过去点击的行为对现在能够产生影响,那么同理,过去展示的内容中没有点击的内容对当下的点击行为同样会产生影响,所以这里面增加了 Last Display(包括点击和没点击的所有数据)。

  • Last Display 经过 Embedding 后与是否点击结合,再进入 GRU 模块,最后状态当做 DNN 输入;

  • AUC 提升约 0.4%。

4.6 多目标

image

之前所有的模型都是基于 CTR 为导向来进行设计的,但是这样用户的负反馈可能会比较多一些,因为一些长尾的内容,或者大众化的内容会比较多,影响用户的体验。

后来考虑设计一个多目标模型,一个是基于点击率的模型,一个是基于收藏率的模型,基于点赞率,基于评论率等等,一共设计 8 个目标。

从性能方面的考虑,我们将底层权重设置成共享的, 最后一层会根据不同的目标进行权重的训练。

主要分为以下步骤:

o 每个 task 共享前面的几层权重,可以节省训练和预测的计算量;

o Loss 可以是几个 task 的 loss 做简单线性加权;

o 上线仍然要确定各个 ctr 的加权值,经验比较重要;

o 上线后线上表现:点击率基本不变,而其他的几个指标,比如点赞,收藏大幅提升。

4.7 最终模型结构

image

综合以上模型的优点,最终设计出如上图所示的模型。

五、经验分享

1、对于随时间变化的统计特征,比如用户和内容画像的统计值,线上 service 应当纪录请求时的值,生成训练样本时直接从纪录的日志里获取,避免特征穿越问题;

2、如果发现线下效果好,比如 AUC 和 NDCG 提升明显,但上线效果不显著,很可能是特征不一致导致的,可重点排查;

3、线上线下最好使用同一套特征抽取框架,只需使用的相同特征配置便可保证一致性,我们 Global Ranking 使用同一套 proto 结构和特征抽取模块实现;

4、做特征归一化操作,发现有特别大的值,比如几万或者几十万,要先取 log ,不然会导致这个特征大部分值都趋向 0,相当于征失效;

5、 输入特征要做非法检查,防止出现 inf,nan,而导致模型训练出现异常的参数;

6、对于线上的每次请求,用户特征都是一样的,可以只计算一遍用户特征相关的 block,避免冗余运算;

7、训练数据量要尽可能大,可以使用 FlatBuffer 结构把训练数据存放在 HDFS 上,训练时直接从 HDFS 读取,边读取边训练;

8、线上模型要能自动更新,过老的模型效果下降严重。

六、面临问题

1、推荐页与搜索页的特性不同

  • 搜索带着 query 来的,结果与之相关性越高越好,不用太关心结果的多样性;

  • 推荐页用户没有明确的目的,但是有兴趣偏好和对结果的多样性需求,推荐既要准确又要多样化。

2、CTR 预估模型是 pointwise 模型,没有考虑单个内容与其他内容同时出现的影响。

3、用户对感兴趣的东西会出现审美疲劳,要及时抓住这种特点,比如一个算法工程师看完几个机器学习文章后就不想再看了,这时候要能推荐一些其他话题的内容。

七、未来方向

1、强化学习

  • Actor:根据用户过去的浏览和点击行为生成推荐页整屏结果;

  • Critic:接收到点击或者其他正向行为作为 reward,同时训练 Critic 和 Actor 网络参数。

2、优点

  • 能及时捕捉用户的反馈,从而避免对同一话题产生审美疲劳;

  • 推荐整屏幕内容,避免 pointwise 方式下内容较为集中问题。

3、缺点

  • 模型结构复杂,模型参数训练较困难。

转载于:https://www.cnblogs.com/davidwang456/articles/10576464.html

知乎推荐页 Ranking 构建历程和经验分享相关推荐

  1. 知乎推荐页Ranking构建历程和经验分享

    本次分享主题主要从以下是三个方面展开: 知乎推荐页场景和Ranking历程介绍: 深度学习在Ranking中的尝试和应用现状: Ranking面临的问题和未来研究方向. 首先大家看一下知乎APP的推荐 ...

  2. 【小白】【大学】一名嵌入式软件开发小白的单片机学习历程、心路历程、经验分享

    我的嵌入式学习之路 我为什么写这篇文章 先简单介绍一下我自己 与每一个技术小白共勉 这篇文章写给谁 我的学习经验分享 我的成长之路 我的单片机学习历程分享 51系列单片机学习历程 预备知识:(可以查百 ...

  3. 保研历程(经验分享、保研流程介绍)

    文章创作于2020年10月,知乎原文:https://zhuanlan.zhihu.com/p/270308727 2020年10月12号早晨结束了本次保研历程,本科:末流211+rk2+国奖,内心非 ...

  4. 多任务视频推荐方案,百度工程师实战经验分享

    推荐系统的应用场景非常广泛,比如非常火爆的短视频推荐.电商平台商品推荐.搜索推荐等.但是你知道吗?短视频APP在向你展示一个你感兴趣的视频之前,通常既要预测你对这个视频是否感兴趣,又要预测你会看多久, ...

  5. 【iOS审核 4.2.2】被拒到上线心路历程及经验分享

    ​苹果4.2.2我们也不少见了,今天正好看到有朋友问我关于这块的问题,他说"我明明自己设计了,为啥还给4.2.2?",我自己之前开发初期也遇到过这类问题,不过现在很少见了,今天我就 ...

  6. 赣州“石妹”农产品电商发展历程及经验分享

    妹妹跟妹夫都是赣州市崇义县农村的,初中文化,虽然老家很多人富裕,但经济比较单一,收入来源比较少,对年轻人没有一技之长的话,日子过得并不好.如今二个小外甥也慢慢长大,开始进入幼儿园读书了,大人们有更多自 ...

  7. 自考计算机专业的草根,一个外行草根自学中医的历程和经验分享!人人皆可学,求人不如求己!...

    由 邻居小儿夜里盗汗 想到的 老百姓之悲 昨晚吃晚饭时,和家人聊天,家人在小区里听到不认识的邻居说她们小儿这么大热天,白天运动不怎么出汗,夜里睡觉到是经常出汗,很是羡慕那些反过来的小朋友,这虽然是个小 ...

  8. 成都榆熙:如何看待拼多多淡化“搜索”功能,以推荐为导向构建“爆款单品?

    拼多多作为新型社交电商的开创者,以GMV和活跃用户来看,拼多多是国内增长最快的电商平台,买家数甚至超过了京东成为了国内大二大电商平台,而拼多多其中70%的新增年度活跃用户都来自下沉市场,GMV的增长让 ...

  9. 知乎推荐算法工程师面经

    前言 曾三次迈进知乎的大门,面试算法工程师岗位.特整理了一些相关问题供大家研究,并附上了一些大佬的建议供大家参考. 面试流程 1.自我介绍 balabala...... 2.介绍下协同过滤 我大致介绍 ...

最新文章

  1. 第二届团体程序设计天梯赛
  2. 线下实操:搭建微服务天气预报应用!
  3. 入门Web前端有哪些误区?该如何避免?
  4. Struts2 控制台不打印异常的解决方案
  5. 让redhat5以yum方式安装软件
  6. MySQL遭遇DELETE误操作的回滚
  7. 【转】Prewitt 算子
  8. c语言python字典结构_在python中创建类似C语言中struct的结构来保存数据
  9. HCIPHCIE【2019-4月-更新增加新题】221 65道新题
  10. 台式电脑如何修复计算机,大神告诉你电脑不断重启如何修复
  11. 我想谈谈关于Android面试那些事,聪明人已经收藏了!
  12. C语言”%p”的意思-----printf(%p,p)
  13. 一个基于百度云和图灵的人工智能(智障)程序
  14. 什么是计算机网络的组成和功能是什么,计算机网络的组成要素及功能是什么
  15. Android Zip 解压与进度 实现,kotlin命令行输入值
  16. Flutter播放音频
  17. android studio 出现: Design editor is unavailable until a successful build 问题
  18. matlab设计风电机外部控制器,【matlab编程代做】步进电机控制器设计
  19. kafka命令行使用
  20. centos7下载spark连接mysql数据库提取数据(pyspark,Scala,python独立执行)

热门文章

  1. LayoutInflater中调用系统服务
  2. php 不刷新提交,提交表单而不刷新页面ajax,php,javascript?
  3. php 协程 mysql_实现一个协程版mysql连接池
  4. 服务器虚拟机进不了暗黑3游戏,暗黑破坏神3无法初始化 D3D的解决方法
  5. 机械师怎么打开计算机管理,机械师创物者-R笔记本智能控制中心使用教程
  6. 不允许对系统目录进行即席更新_还不懂Docker?一个故事安排的明明白白!
  7. C++中不同的继承方式
  8. python standard lib_跟Python Standard Library混个脸熟(一)
  9. 华为鸿蒙适配计划,华为鸿蒙适配计划提前曝光,快看看有你的机型吗?
  10. 中石油2018年秋季C语言 试卷答案,[石油华东]《数据采集系统》2018年秋季学期在线作业...