广告和新闻推荐--它们相似点是都可以看做一个点击率估计任务。根据用户的属性,估计一下哪个广告,哪个新闻用户可能点击,把这个可能点击的推荐给用户。

为了完成这个点击率预估,我们一般会收集特征,一般是从三个层面:
一个是用户层面,一般包括用户的人口属性以及兴趣属性。
第二就是item层面,例如新闻的分类,关键字,topic。广告也有一些属性,广告的类型,广告的文字描述。
第三个层面是上下文,这个用户访问的时间是什么,广告位所在的内容页属性。
所以整个特征的描述,会从这三个维度去匹配,匹配到一个最佳点,找到用户最可能点击的广告或者是新闻。
一个广告系统架构图:

上面是各个来源的广告请求。下面包括三个部分:左边这块主要是下面左边这块主要是数据准备,包括ctr模型,用户定向标签,内容页属性等。

右边是主要是广告索引,根据广告主定向条件和用户定向标签以及广告位信息检索出可以参与竞价的广告。

Ranking下面的模块主要是做广告投放策略的控制,比如现在是出竞价广告还是出展示广告。

推荐系统架构也非常类似,大体上也可以分为用户/页面属性,索引和排序三大模块。

用户兴趣标签的建立:

对一个媒体网站来讲,一个比较重要的任务就是获取用户对于不同类型文章的兴趣分布。用户的兴趣分布会被作为用户属性标签,和其他类型的标签(例如人口属性等)一起用作推荐的模型特征。

这里的问题在于用户阅读新闻的分布会集中在几个热点类别上。

上面是我们统计了手机搜狐网一个月的阅读新闻分布。发现社会新闻,国内新闻,娱乐新闻这三大类加在一起就超过了50%的流量。
具体原因首先是一些热点新闻,基本上是属于社会的热点事件,这些是有巨大的点击量的。另外新闻的曝光也是有偏的曝光,得到了大量的曝光就会得到大的点击量。而一些相对反应个性的新闻曝光量比较少。

所以我们对用户兴趣的建模不能建立在用户阅读新闻的绝对分布上,而应该是用个体的分布相对于所有用户平均分布的偏移度来建模。
我们把一个月的用户阅读新闻做了聚类,挑出两个有特点的类别,统计用户访问新闻的分布,以及把它和所有用户的平均分布做比较,下图是其中两个例子:

这两个图当中,蓝色的线都是用户的平均分布。
左边这个图,红色线我们称之为是财经爱好者的群体。这个群体财经的点击量明显高于平均曲线,而对新闻类(社会和国内新闻)差异并不太大。但如果按点击量绝对值的话财经、新闻两类的点击量相似。

右边这个图是军事爱好者的阅读者,同时对财经新闻的阅读量也是比平均分布高一些,低于平均分布的也是娱乐和社会新闻。也就是说这类用户和左边有点像,相对财经和军事阅读量高,同时对娱乐和社会新闻感兴趣的低一些。
第二个问题是我们用来收集用户兴趣的话,我们必须考虑到用户的长期兴趣和短期兴趣。

比如用户是体育迷或者是军事迷,这是他的长期兴趣。还有是受到一些突发事件的影响,例如奥运会,用户短期的兴趣会发生变化。所以我们要从短期和长期两个角度评价他的兴趣。
下面这个图示意了我们做用户标签计算的流程:

用户的点击数据会放在日志系统(HDFS)里,新闻的分类标签数据(CMS标签)存放在新闻数据库(MySQL)。
这些标签首先会和用户日志做一个join,得到一个(用户,标签)列表。

我们会把若干天的日志聚合在一起。针对长期兴趣会用两到三个月的新闻点击做分布的统计,短期兴趣我们会用一到两天的数据做分布统计。然后计算每一类标签在特定时间范围内的分布。
计算出分布之后,会和平均点击分布在每个新闻类型的维度上计算一个偏离度,这个偏离度会被量化之后得到一个标签权重值。这样就得到了每个用户的兴趣标签,然后存到redis库里。

标签的计算基于Spark实现。由于Spark提供了非常丰富的数据处理操作,像Map、reduce,filter,join,cogroup,以及scala语言的简洁性,使得代码量大为减少。另外由于Spark是内存计算,整个流程的处理时间相对Hadoop减少5~10倍。
下面谈谈ctr的预测。新闻的推荐和广告类似,也是建立在ctr预测的基础上。
常用的ctr预测的算法包括LR(Logistic  Regression), FM(Factorization Machines), GBDT等等。

像LR和GBDT, Spark Mllib都提供了相应的实现,另外台湾大学的Liblinear也有一个Spark版本的LR算法的实现。Mllib的LR是基于LBFGS的实现,而Liblinear是基于TRON的实现。实际当中我们测试过这两个算法,发现优化的性能非常接近。
FM目前在Spark上有一个JIRA (SPARK-7008),但是目前还没有正式release。
LR是最常用的算法,好处是简单明了,效果分析也相对容易,问题在于想要达到好的效果需要尝试大量的特征组合,特征工程比较费劲。

FM和GBDT都是非线性的分类器(FM可以看做二次的),省去了复杂的特征组合的过程,性能也往往较好,但是出了问题不太好分析原因。实际当中可以先尝试LR,当性能不满足要求时再试FM或GBDT。
FaceBook的一篇文章(Practical Lessons from Predicting Clicks on Ads at Facebook)提出先使用GBDT得到一个分类器,其中每棵树的叶子节点作为特征再送入LR训练分类器。解决了繁琐的特征组合问题。
使用LR还有一个原因是比较好处理探索和利用问题(Exploartion & Exploitation)。

由于每天都会有新的新闻产生,而对这些新闻一开始点击率估计可能不准确,因此需要通过适当的投放从而收集信息以提升点击率的估计。这属于牺牲短期利益以获取长期利益的最大化。

对于线性模型实现探索和利用有Yahoo的LinUCB以及微软的OBPR。另外对FM,也可以通过Bayes化实现E&E (Bayesian factorization machines, 2011),但是实现要相对复杂一些。

目前我们的建模主要依赖spark平台。整个集群规模目前约为500台机器,以Spark on yarn方式部署。除了广告和推荐建模外,还支撑用户定向,广告系统BI的任务。

--新闻个性推荐
其实新闻个性推荐和上面思路基本一致。包括用户兴趣建模(离线和在线标签),新闻点击率估计两个主要任务。基本都是上面的方法。

--搜狐数据分析在R的使用上如何
我们现在R使用较少。BI类需求基本依赖Hive,SparkSql这样的工具。算法类主要是Spark。R会有一些临时的任务,例如分布的统计等。

--模型拟定和训练上,过拟合问题
过拟合一般通过仔细的参数选择和交叉验证这样的实验手段可以克服。首先根据结构风险理论,简单模型例如线性相对非线性模型较容易避免过拟合。而适当增大模型的正则化项的系数也会有帮助。但是对大数据来说,交叉验证时间代价太大。

--Bi类需求在hive和sparkSQL实现,那前台显示有没有好工具?如果有比较明细的数据呢?
展示工具,商用的比如Tableau, hue,开源的比如Saiku等


--计算新闻相似度是用什么算法
新闻相似度简单方法包括余弦距离,复杂一点可以用pLSA,LDA这样的话题模型。更复杂一点就是Deep Learning了。

李滔搜狐大数据之Spark广告和新闻推荐相关推荐

  1. 大数据课程——Spark SQL

    大数据课程--Spark SQL   实验内容以及要求 现有一份汽车销售记录(文件名:Cars.csv),销售记录包括时间.地点.邮政编码.车辆类型等信息,每条记录信息包含39项数据项.按步骤完成如下 ...

  2. 院士李德毅:大数据认知(演讲全文)

    院士李德毅:大数据认知(演讲全文) 摘要: 导读:李德毅院士通过介绍作诗.语言翻译.语音识别.保险.人脸识别,深入浅出地阐述了大数据认知的方法学.大数据标志数据密集型科学的新时代的到来,大数据时代是小 ...

  3. 京东终身技术顾问李大学:互联网+大数据实战演练

    WOT2015"互联网+"时代大数据技术峰会于2015年11月28日于深圳前海华侨城JW万豪酒店盛大揭幕,42位业内重量级嘉宾汇聚,重磅解析大数据技术的点睛应用.秉承专注技术.服务 ...

  4. 尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程,map、mapPartitions、mapPartitionsWithIndex、flatMap、glom、groupBy)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  5. 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  6. 尚硅谷大数据技术Spark教程-笔记09【SparkStreaming(概念、入门、DStream入门、案例实操、总结)】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表[课程资料下载] 视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[SparkCore ...

  7. 大数据之Spark案例实操完整使用(第六章)

    大数据之Spark案例实操完整使用 一.案例一 1.准备数据 2.需求 1:Top10 热门品类 3.需求说明 方案一. 实现方案二 实现方案三 二 .需求实现 1.需求 2:Top10 热门品类中每 ...

  8. 李德毅:大数据时代的位置服务

    李德毅:大数据时代的位置服务 2013-06-26 16:40:05 来源:CIO时代网 摘要: 中国工程院院士李德毅院士为大家带来<大数据时代的位置服务>的主题演讲,李德毅院士同时指出: ...

  9. 大数据之spark学习记录二: Spark的安装与上手

    大数据之spark学习记录二: Spark的安装与上手 文章目录 大数据之spark学习记录二: Spark的安装与上手 Spark安装 本地模式 Standalone 模式 基本配置 步骤1: 复制 ...

最新文章

  1. 每天导航超4亿公里,百度地图整合AI功能
  2. 惊闻谢文离职雅虎中国
  3. VTK:Rendering之StringToImageDemo
  4. 第31讲 UI组件之 Gallery画廊控件
  5. java oracle 视图不存在_Weblogic 10.3,JDBC,Oracle,SQL - 表或视图不存在
  6. 陕师大计算机专业,陕师大计算机系组合数学试题
  7. nssl1249-C【数论】
  8. c语言中组合函数,排列组合c怎么算 公式是什么
  9. 官宣!多所高校,整体搬迁!
  10. C++ std::tr1::shared_ptr使用说明
  11. 4.4 Hibernate高级功能
  12. gis在线编辑服务器,WebGIS教程 使用Geoserver和PostGIS开发WebGIS 在线编辑
  13. 撒花!苹果iOS迅雷手机版终于上架App Store
  14. 如何计算 R 中 T 检验 的 P 值
  15. 虚幻3和虚幻4_虚幻的非会议
  16. invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix
  17. Unity游戏开发客户端面经——性能优化(初级)
  18. php创建数组填充数组的方法
  19. Python 中的 any(Python/any)
  20. java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)问题解决,很详细,很详细,很详细

热门文章

  1. 单片机中常见英文缩写(51为例)
  2. 只用mysql实现银行转账_基于mysql数据库银行转账功能实现
  3. 无人驾驶汽车路径规划概述
  4. android 一键锁屏实现
  5. 《数据结构课程实践》_01_学生成绩档案管理系统_准备工作
  6. 第五篇:稳定性之提升团队潜意识【依赖简化、谨慎变更】
  7. Pulmonary nodule detection in CT scans with equivariant CNNs
  8. 高等学校等级计算机考试,(全国高等学校计算机等级考试一级理论汇总_答案.doc...
  9. L3-031 千手观音 拓扑排序+哈希表
  10. 搭积木(block)