搜狐新闻算法原理

2023-10-27

[转载:搜狐新闻推荐算法原理] 

导读

    在当前这个移动互联网时代,各种信息内容爆炸,面对海量数据,用户希望在有限的时间和空间内,找到自己感兴趣的内容,这就是推荐需要解决的问题。接下来主要讲解新闻推荐的算法原理。

 

01.新闻推荐算法架构

   新闻算法的核心主要分为两个阶段:召回阶段(retrieval)和排序阶段(ranking)。之所以分为两个阶段,主要是从性能考虑。召回阶段面临的是百万级别甚至千万级别的文章,单篇文章的性能开销必须要小;而排序阶段的算法则非常消耗资源,不可能对所有文章都算一遍,也没有必要这样做,因为一般来说通不过召回粗选的文章,大部分在排序阶段排名也会很低。

   召回阶段,根据用户的历史行为和短期行为,分析用户的兴趣偏好,从千万级的文章库中挑选出一个小的候选集(通常几百到几千篇文章),这些候选集都是用户感兴趣的内容集合。

   排序阶段,在召回集的基础上进行更加精准的个性化计算,给每篇文章进行精确打分,这个分值就是文章与用户的个性化匹配分值,利用该分值进行排序,进而从几千篇文章中选出用户最感兴趣的几篇或者几十篇少量高质量内容。

推荐算法的核心部分两个阶段组成如图所示,大致包含:

   (1)用户画像:包含用户的人口属性(性别,学历等)、历史行为、短期行为、兴趣内容和个人偏好等多个维度的数据,是给用户做个性化推荐的基础。

   (2)特征工程:包含文章的类别属性、主题属性、关键词信息、内容分析、人群偏好和统计特征等比较全面的描述和度量,是新闻内容和质量分析的基础,也是做好用户与文章个性化匹配的基础。

   (3)召回算法:包含多个通道的召回模型,例如协同过滤(itemcf、usercf等)、主题模型、内容召回、矩阵分解等。

   (4)排序算法:对多个通道召回的内容进行统一的打分排序,选出最优的少量结果,这里常用的模型有lr、gbdt、fm以及DNN的一些模型。

    除此之外,推荐系统一般还要有一个rerank的过程,要兼顾推荐结果的多样性、新鲜度、惊喜度以及部分的人工的产品逻辑等多个维度,更能够满足用户个性化的需求。

 

02.新闻推荐算法原理

 

·  召回阶段  ·

    召回最重要的要求是性能要好,一般不超过30ms。

    召回策略的种类有很多,我们主要用的是倒排的思路:离线维护一个倒排索引,这个倒排的key可以是分类,topic,关键词,媒体来源等文章属性;也可以是协同过滤计算的结果,排序时需要考虑点击率、时效性、相关性等。线上召回可以迅速从倒排中根据用户的画像标签对内容进行截断召回,高效地从很大的内容库中筛选和用户比较匹配的一小部分内容。

 

基于内容的召回

    基于内容的召回(content-base),是根据文章内容本身的语义特征或者字面特征做召回,这类特征通常有关键词,topic,分类,媒体来源等。

基于协同过滤召回

    协同过滤算法(CF)的原理是汇总所有用户(user)和文章(item)的行为,利用集体智慧进行推荐。主要分为两大类,User-CF和Item-CF。

    User-CF,就像朋友推荐,比如通过用户点击的文章进行分析,发现用户A和用户B很相似,就可以把A点击文章而用户B还未点击的,推荐给用户B,这里重点是找出用户的朋友,即相似用户。

    Item-CF,分析每篇文章的点击行为,可以得出所有文章之间的相似度,找出与当前点击的文章最相似的N篇文章推荐给用户。

    协同过滤通常能推荐出很多有惊喜的结果,而且只依赖用户行为不需要对内容做深入分析;但是这种推荐需要大量的用户行为数据并且很难给出合理的解释。

 

基于矩阵分解召回

    协同过滤的核心是相似度计算,比较依赖用户行为,而在实际应用中,一方面,用户行为矩阵比较稀疏,计算结果不稳定,另一方面如果用户u没有对文章i的相似度得分,那么这个协同结果差异会很大。而这些问题在矩阵分解中可以得到很好的解决。

    矩阵分解,直观上就是把稀疏的用户评分矩阵近似的分解成两个小矩阵的乘积,在推荐计算时不再使用大矩阵而是使用分解得到的两个小矩阵。

常用的矩阵分解算法有SVD、SVD++、timeSVD++以及Spark自带的SparkALS等,学习过程基本相同,大致如下:

(1)准备好用户文章评分矩阵,点击曝光数据模拟评分(1、0)

(2)随机初始化来构造矩阵U和V

(3)用U和V计算预测后的分数,然后计算与实际分数的误差

(4)按照梯度下降方式更新U和V的元素值

(5)重复步骤3和4直到到达停止条件

    最后会生成user_weight user_vector和doc_weight doc_vector的模型文件,在召回计算的时候使用user向量矩阵和doc向量矩阵做内积,排序取topN。

    矩阵分解相比CF预测精度更高,但其缺点也很明显,推荐结果的解释性不好而且受限于矩阵维度。

 

基于热点召回

    热点召回一般用来做兜底,但是热点不能单纯的按ctr排序,因为文章的曝光不同,ctr不具有可比性,通常的做法有威尔逊置信区间、贝叶斯平滑、时间衰减等。

 

·  排序阶段  ·

    我们把推荐问题建模成一个“超大规模分类”问题,即在时刻T和上下文C的情况下,为用户U在文章库V中精准的预测出文章I的类别,这里召回已经帮我们解决了超大规模的问题,而排序的核心就是拟合一个用户对内容满意度的函数y=Fun(U, I, C),这个函数需要输入的就是这三个维度的特征:用户信息U、文章信息I和上下文信息C。

 

特征

    特征对于排序模型来说非常重要,好的特征能够提升模型的性能,更能帮我们理解用户数据、文章内容数据的特点,这对进一步改善模型、算法都有着重要作用。我们常用的几类推荐特征:

    相关性特征,可以理解为语义特征或者字面特征,用于描述用户和内容是否匹配。比较常见的匹配有;分类匹配、topic匹配、关键词匹配、媒体来源匹配等。

    上下文特征,包括用户的位置,时间,移动设备,联网状态等,这些就是bias特征,也能由此构建一些匹配特征。

    热度特征,包括文章的ctr、分类热度、topic热度等,这种内容热度信息不仅在推荐特征中起着重要作用,而且在用户冷启动的时候也非常有效。

    挖掘类特征,例如协同特征,聚类特征等,这类特征并非考虑用户的历史,而是根据用户点击行为分析不同用户的相似性,比如点击相似、兴趣相似或者属于同一个类簇,从而获取到新颖的结果,扩展了模型的探索能力,也能有效的解决越推越窄的问题。

 

模型

    推荐系统中比较典型的几种模型,也是近几年推荐算法模型发展的趋势:

LR

    LR是线性分类模型,要求输入线性独立特征。

    LR可以视作单层节点的“DNN” ,是一种宽而不深的结构,所有的特征直接作用在最后的结果上。模型优点是简单、可控性好、可解释性强,但是效果的好坏直接取决于特征工程的程度,需要非常精细的连续型、离散型等特征以及对应的特征组合,而这种特征组合是需要人工进行转换的,十分耗费人力并且随着特征的增加,这种组合复杂度越来越高,增加特征变得异常困难。

 

GBDT

    GBDT是一种迭代的决策树算法,它由多棵决策树组成,所有的树结论累加起来作为最终答案。它能自动发现多种有区分性的特征以及特征组合,并省去了复杂特征预处理逻辑。之前Facebook实现了GBDT+LR的模型,相比单纯的LR或者GBDT都有不错的提升。

     GBDT+LR模型虽然特征泛化能力良好,但是记忆能力比较差,通常需要增加高维特征来增强推荐的记忆能力,包括UserID、各种标签等特征。

 

FM & FFM

     由于GBDT是不支持高维稀疏特征的,如果将高维特征加到LR中,一方面需要人工组合高维特征,这种复杂度、难度以及准确度是显而易见的,另一方面模型维度和计算复杂度都是剧烈增加。所以后面有了FM&FFM模型。FM可以看作是带特征交叉的LR:

    相比一般的线性模型,FM考虑了特征间的关联,在多项式模型中,特征xi和xj的组合用xixj表示,这一部分就是FM模型多出来的特征组合,从NN的角度考虑:

    FM模型覆盖了LR的宽模型结构,同时也引入了交叉特征,增加了模型的非线性和泛化能力,提升了模型容量,能够捕捉更多额外的信息,对于像新闻推荐这样复杂的场景能有更好的预测能力。

    FFM模型中引入域(Field)的概念,把n个特征归属到f个field里,得到nf个隐向量的二次项:

 

    所以FFM可以看作是带多个域(Field)的FM,FM是只有一个域(Field)的FFM,其中,fj是第j个特征所属的field。如果隐向量的长度为k,那么FFM的二次参数有nfk个,远多于FM的nk个。另外,由于隐向量与field相关,FFM二次项是不能简化的,其预测复杂度是O(kn^2)。因此,性能往往是制约FFM大规模应用的因素,如果规模不是很大,而且特征比较稀疏的场景下,FFM有很好的效果。

    在实际应用中,FM比FFM更广泛一些,是对性能和效果的一些折中,比较常用的像dmlc下的FM,支持全量和增量的分布式计算,比较适合新闻推荐中场景和兴趣多变而且很多稀疏特征的情况。

DNN

    随着推荐场景的多样化,复杂度也随之增加,上面提到的几个浅层网络模型对于更多的隐层信息无法捕获以及更多的稀疏特征表达不够充分,DNN的方式逐步成为一种趋势。但是单纯的DNN模型对ctr的提升并不一定会有明显的提升,而且单一的DNN本身也有一些瓶颈。如果用户是一个非活跃用户时,由于自身于item之间的交互很少,根据用户行为得到的特征向量也会异常稀疏,而DNN在处理这类问题时会过度泛化,导致推荐结果与用户相关较差。为了更好的解决这类问题,通常会用DNN+具有记忆能力的模型,相互补充。

 

wide & deep

   该模型是谷歌在2016年发布的用于分类和回归的模型,并成功应用于google play的应用推荐中。随后该模型速度被普及开来,尤其在新闻推荐中,能取得不错的效果。wide & deep模型的核心思想是结合线性模型的记忆能力和DNN模型的泛化能力,在训练中同时优化2个模型的参数,达到整体模型的预测能力最优,从而避免了线性模型无法学习训练集中未出现的特征组合以及神经网络过度泛化的问题

 

    wide端对应的线性模型,输入特征可以是连续特征,也可以是稀疏的离散特征,离散特征之间进行进行交叉后可以构成更高维的特征,通过L1正则化能够很快收敛到有效的特征组合中。

    deep端对应的是DNN模型,每个特征对应一个低维的稠密向量,我们称之为特征的embedding,DNN能够通过反向传播调整隐藏层的权重,并且更新特征的embedding

    在实际的新闻推荐场景中,wide model侧主要包含文章分类id、topic id、曝光位置以及其他部分离散特征,主要为了提高模型的记忆能力;deep model侧主要包含离散特征和部分连续特征,例如UserID、DocId、用户位置、分类ID、关键词ID以及各种统计类特征离散化结果,这些特征通常需要embedding向量然后拼接进行信息融合。

 总结

    本文以新闻推荐为例,第一部分讲解了推荐算法的架构,主要包含召回和排序两个阶段;第二部分重点介绍了召回算法以及常用排序模型的原理和实现。在新闻推荐领域,排序模型逐步趋向DNN,但是单纯的模型更替意义不大,需要在特征工程、模型架构、多样性、冷启动、多策略召回以及多目标学习中做更多的尝试,更好地解决用户的个性化需求才是我们技术的立身之本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搜狐新闻算法原理 的相关文章

  • Xshell 7下载、安装步骤与使用教程

    Xshell 7下载 安装步骤与使用教程 一 内容 二 下载地址 三 安装步骤 四 Xshell7使用教程 一 内容 Xshell是一款功能强大的远程终端连接管理软件 支持多种远程协议 可以在多端进行高效安全的远程连接 同时还可以帮助你有效

随机推荐

  • IPC:信号——对内核信号集的操作

    对内核信号集的操作kernel signal set int sigprocmask int how const sigset t set sigset t oldset 功能 将自定义信号集中的数据设置到内核中 设置阻塞 解除阻塞 替换
  • LeetCode 1302. 层数最深叶子节点的和 DFS/BFS

    题目描述 给你一棵二叉树的根节点 root 请你返回 层数最深的叶子节点的和 示例 1 输入 root 1 2 3 4 5 null 6 7 null null null null 8 输出 15 示例 2 输入 root 6 7 8 2
  • 关于压力测试评定方式

    一个完整的压力测试需要关注三个方面 如何正确产生压力 如何定位瓶颈 如何预估系统承载力 1 首先说一下如何产生压力 压力方法有很多 通常可以写脚本产生压力机器人对服务器进行发包和收包操作 也可以使用现有工具 如jmeter loadRunn
  • vsCode 配置记录

    目录 1 import路径提示 2 按住ctrl点击鼠标 进入指定的文件 3 中文包安装 4 自定义函数和文件注释 4 1 快捷键不生效的处理办法 5 scss css id全局提示 5 1 scss变量 函数等全局提示 5 2 css i
  • Flutter 设置状态栏statusbar的背景颜色和文字颜色

    今天介绍如何设置状态栏的颜色和文字的颜色 本文采用通过在appbar里面的一个参数来设置 方法如下 可以定义一个基类 在基类之中进行整体的设定 也可以暴露方法 动态设置核心就是两行 很简单 return MaterialApp debugS
  • nginx负载配置,文件大小限制

    2019独角兽企业重金招聘Python工程师标准 gt gt gt user nobody worker processes 1 error log logs error log error log logs error log notic
  • Spring Data 与MongoDB 集成一:入门篇(开发环境搭建和简单CRUD)

    一 简介 SpringData 项目提供与MongoDB文档数据库的集成 二 SpringData 与MongoDB 配置及对应Jar包 1 安装mongodb 数据库 请查考 待补充 2 下载spring data 关联两个子项目 spr
  • 洛谷千题详解

    博主主页 Yu 仙笙 专栏地址 洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析 C 源码 C 源码2 C 源码3 Pascal源码 Java源码
  • 设计模式--介绍

    一 什么是设计模式 设计模式 Design pattern 是一套被反复使用 多数人知晓的 经过分类编目的 代码设计经验的总结 使用设计模式是为了可重用代码 让代码更容易被他人理解 保证代码可靠性 毫无疑问 设计模式于己于他人于系统都是多赢
  • 软件开发的4种模型和4种方法

    软件开发模型 1 瀑布模型 适合需求明确的软件开发 2 演化模型 获取一组基本需求 快速给出版本 成为原型 用于对软件需求缺乏准认知的情况 不需要明确的需求 3 螺旋模型 结合瀑布模型和演化模型 综合两者优点 并增加风险分析 螺旋模型包括四
  • java base64转字图片、图片转base64字符串

    实现代码如下 Slf4j public class Base64ToFileImageTools base64字符串转化成图片 param imgData 图片编码 param imgFilePath 存放到本地路径 return thro
  • 2021 全球人工智能技术创新大赛 医学影像报告异常检测 TOP4方案

    2021 全球人工智能技术创新大赛 医学影像报告异常检测 TOP4方案 1 写在前面 在本次全球人工智能技术创新大赛赛道一的比赛中 我们团队水煮毛血旺以初赛第三 复赛第四的成绩进入了决赛 最终决赛排名第四 本文主要想记录一下这次比赛的方案以
  • docker创建python、jdk环境并保存镜像,运行容器

    在本地任一台可联网服务器上 创建容器 1 首先确定系统的版本 拉取镜像 docker pull centos 7 4 1708 2 创建容器 docker run i t centos 7 4 1708 bin bash 3 在容器中安装所
  • Quartus18.1 lite免费教育版下载及安装

    目录 一 下载 1 首先注册intel官网账号 2 进入下载界面找到Quartus18 1教育版 3 下载项目 二 安装 一 下载 intel官网 www intel cn 1 首先注册intel官网账号 随便在官网注册个账号 国内的邮箱也
  • 如何快速做一个微信自动拉群机器人 足够简单 足够粗暴

    wechaty 首先 wechaty了解一下 文档链接 https docs chatie io v zh 只需要6行代码 你就可以通过个人号搭建一个微信机器人功能 用来自动管理微信消息 是不是很简单很粗暴 const Wechaty re
  • STM32 HAL库 时钟芯片RX8025T IIC的读写操作,入过的坑

    我使用STM32本身的IIC外设 与时钟芯片RX8025T进行通信 时钟芯片RX8025特点 高精度 据说每个月时钟误差在1秒以内 做流量计这些需要精密控时的东西 完全够用了 一 时钟芯片RX8025T简单说明 重要 RX8025芯片有二种
  • 图论模型(Dijkstra算法和Floyd算法)

    图论模型 图论模型 Dijkstra算法 概念 带权邻接矩阵 代码 操作 Floyd算法 概念 代码 操作 Dijkstra算法 概念 Dijkstra算法能求一个顶点到另一顶点最短路径 它是由Dijkstra于1959年提出的 实际它能给
  • C++之获取网卡物理地址(MAC)

    ConsoleApplication1 cpp 定义控制台应用程序的入口点 include stdafx h include
  • QT5.15离线安装

    在线安装后 将所有的资源打成压缩包 拷贝至另外一台电脑 进行如下设置 1 解压 2 进入路径 QT Tools sdktool share qtcreator QtProject 3 修改QtCreator ini 将所有的绝对路径修改为实
  • 搜狐新闻算法原理

    转载 搜狐新闻推荐算法原理 导读 在当前这个移动互联网时代 各种信息内容爆炸 面对海量数据 用户希望在有限的时间和空间内 找到自己感兴趣的内容 这就是推荐需要解决的问题 接下来主要讲解新闻推荐的算法原理 01 新闻推荐算法架构 新闻算法的核