Abstract:这篇是1月份头条首次公开的算法原理的笔记记录。
”你关心的,才是头条“
本质要解决的问题:用户、环境和资讯的匹配,即?
实质:推荐系统其实是一个拟合用户对内容满意度的函数,这个函数需要输入3个维度的变量。
? (内容):内容形式多元化,不同内容的特征也不同,需要考虑怎样提取不同内容类型的特征做好推荐
?(用户):怎样提取用户特征
?(环境):用户在不同场景下的信息偏好不同
结合这3个维度,推荐模型会给出1个预估:预测推荐内容在这一场景下对用户是否合适。
人的特征:兴趣,职业,年龄,性别,机型,用户行为
环境特征:地理位置,时间,网络,天气
文章特征:主题词,兴趣标签,热度,时效性,质量,作者来源,相似文章
广告&特型内容频控:特型内容比如问答卡片,其推荐目标不完全是让用户浏览,还要考虑吸引用户回答为社区贡献内容,这些内容和普通内容如何混排,怎样控制频控都需要考虑
低俗内容打压&频控
标题党、低质、恶心内容打压
重要新闻置顶&强插&加权
低级别账号内容降权
出于内容生态和社会责任的考量(算法无法完成,需要人工干预)
Logistic Regression
协同过滤
DNN:深度神经网络
Factorization Machine
GBDT
? 是经典的监督学习问题,以上5种算法均可实现
一个优秀的工业级推荐系统需要非常灵活的算法实验平台,可以支持多种算法组合,包括模型结构调整。因为很难有一套通用的模型架构适用于所有的推荐场景
现在很流行将LR和DNN结合
今日头条旗下几款产品都在沿用同一套强大的算法推荐系统,但根据业务场景不同,模型架构会有所调整
相关性特征:即评估内容的属性与用户是否匹配,包括关键词匹配,分类匹配,主题匹配,来源匹配
环境特征:地理位置,时间
热度特征:全局热搜,分类热度,主题热度,关键词热度(热度信息在冷启动时非常有效)
协同特征:点击相似用户,兴趣分类相似用户,兴趣主题相似用户,兴趣词相似用户(部分程度上解决算法推荐内容窄化问题,通过用户行为分析不同用户间相似性,比如点击相似、兴趣分类相似、主题相似、兴趣词相似,甚至向量相似,从而扩展模型的探索能力)
基于storm集群实时处理样本数据:包括点击、展现、收藏、分享等动作类型
实时训练模型:省资源且反馈快,用户需要行为信息可以被模型快速捕捉并反馈至下一刷的推荐效果
每收集一定量用户数据就更新推荐模型
模型参数存储在高性能服务器集群,包含几百亿原始特征和数十亿向量特征
整体训练过程:
线上服务器记录实时特征导入文件队列导入集群拼接用户完整数据,构造样本根据最新样本,更新模型参数线上模型获取新知识
目的:使用召回策略高效从海量内容中筛选出一小部分符号要求的内容库(选出数千内容后进行大规模机器学习排序,再基于场景去重、多样性控制、加权,生成最终的推荐列表;线上实时产生并更新)
不可能所有内容都由模型评估(计算开销太大),利用一些召回策略可有效平衡计算成本和效果。
兴趣分类召回:根据用户兴趣标签拉取相应文章,并rank top结果
Tag: 显式兴趣标签 & 隐式兴趣标签
特征抽取:需要用户侧和内容侧的各种标签
召回策略:需要内容侧和用户侧的各种标签
内容分析和用户标签挖掘:搭建推荐系统的基石
内容分析:文本分析,图片分析,音视频分析
用户兴趣建模(user profile):比如,给喜欢阅读“人工智能”文章的用户打上“人工智能”标签
帮助内容推荐:“Apple”的内容推荐给关心“Apple”的用户,“Dota”的内容推荐给“Dota”的用户
生成频道内容:“Dota”的内容分进“Dota频道”
用户标签和内容标签的先后顺序:先有内容标签,然后用户阅读了内容,才给用户打上相应标签;
若出现推荐窄化,则可返回子频道阅读,再回主频道,推荐效果会更好。
子频道的重要性:子频道探索空间较小,更容易满足用户需求。
文本特征对内容推荐的重要性
无文本特征则推荐引擎无法工作:资讯类基本上是消费当天内容,无文本特征的话新内容冷启动会很困难
协同类特征无法解决文章冷启动问题(无文本特征的内容无法被定位推荐给何种用户)
粒度越细的 文本特征。冷启动能力越强(eg.Dota vs 游戏)
文本特征包括
(显式)语义标签类特征:由人预定义的具有明确意义的标签;要求覆盖全,希望每篇文章都找到其合适的分类,精确性要求不高
语义标签需要人持续标注,如网络热词;
有一些产品上的需要,比如频道需要有明确定义的分类内容和容易理解的文本标签体系;语义标签的效果是检测公司NLP水平的试金石。
(隐式)语义特征:topic特征和关键词特征(topic特征是对于词概率分布的描述,无明确含义;关键词特征是基于一些统一特征描述,无明确集合);不要求覆盖全,但要求精确性(只要求覆盖每个领域的热门文章、机构、产品等即可)
文本相似度特征:包括主题、行文、主体等(根据相似度特征可避免给用户推送重复内容)
时空特征:分析内容的发生地点和时效性(eg.武汉限行的新闻推给北京的用户就没有什么意义)
质量特征:判断内容是否低俗、色情、暴力,或者是否是软文、鸡汤等
语义标签:
特征使用场景分类体系user profile;过滤频道内容;推荐召回;推荐特征概念体系过滤频道内容;标签搜索;推荐召回(Like)实体体系过滤频道内容;标签搜索;推荐召回(Like)
每个层级粒度不一样,要求也有区别。
层次化:即大类分中类,中类分小类。
有几条“飞线”的作用/目的:?
实体词识别算法
流程:分词&词性标注——> 抽取候选——>去歧(通过词向量、topic分布、词频本身等)——> 计算相关性模型
兴趣特征:
感兴趣的类别和主题
感兴趣的关键词
感兴趣的来源
基于兴趣的用户聚类
各种垂直兴趣特征
身份特征
性别:通过第三方登录社交账号获知
年龄:模型预测、通过机型和阅读时间分布等预估
地域:用户授权访问位置信息,然后基于位置信息再通过传统聚类得到常驻点
行为特征:晚上看视频
过滤噪声: 过滤停留时间短的点击,打击标题党
惩罚热点:用户在热门文章上的动作做降权处理
时间衰减:随用户动作增加,老的特征权重会随时间衰减,新动作贡献的特征权重会更大
惩罚展现:如果一篇推荐给用户的文章未被点击,则相关特征会被惩罚(类别、关键词、来源)
考虑全局背景:考虑给定特征的人均点击比例(是不是相关内容推送比较多,以及相关的关闭和dislike信号等)
用户标签批量计算框架
每天抽取昨天日活用户
抽取这些用户过去2个月的动作数据
在Hadoop集群上批量计算结果
批量计算用户标签的问题
计算量太大:用户增长 & 兴趣种类增加 & 其他批量处理任务增加
导致:集群计算资源紧张,开销增加,用户兴趣标签更新延迟变高
用户标签流式计算框架【头条:2014年上线】
用storm集群实时处理用户动作数据
每收集一定量用户数据就重新计算一次用户兴趣模型
用大规模+高性能存储系统支持用户兴趣模型的读写
流式计算和批量计算混合使用
大部分user profile采用流式计算
各个粒度的兴趣标签
垂直领域profile
对时效性不敏感的user profile采用batch计算
性别、年龄
常驻地点
对推荐效果可能产生影响的因素
候选内容集合的变化
召回模块的改进和增加
推荐特征的增加
推荐系统架构的改进
算法参数的优化
规则策略的改变
评估的意义:很多优化最终可能是负向效果
评估需要
完备的评估体系:尝试将尽可能多的综合指标合成唯一的评估指标
强大的实验平台
易用的实验分析工具
评估需要注意
注重短期指标和长期指标
注重用户指标和生态指标
注重协同效应的影响,有时需要做彻底的统计隔离
如果1%的内容出现问题,就会产生较大的社会影响。因此头条从创立伊始就把内容安全放在公司最高优先级队列。
成立之初,已经专门设有审核团队负责内容安全。当时研发所有客户端、后端、算法的同学一共才不到40人,头条非常重视内容审核。
今日头条的内容主要来源于两部分,一是具有成熟内容生产能力的PGC平台,一是UGC用户内容,如问答、用户评论、微头条。这两部分内容需要通过统一的审核机制。如果是数量相对少的PGC内容,会直接进行风险审核,没有问题会大范围推荐。UGC内容需要经过一个风险模型的过滤,有问题的会进入二次风险审核。审核通过后,内容会被真正进行推荐。这时如果收到一定量以上的评论或者举报负向反馈,还会再回到复审环节,有问题直接下架。
鉴黄模型:构建了千万张图片数据集,通过深度学习算法(Resnet)训练,召回率99%
低俗模型:对文本和图片同时分析,对文章和评论都做低俗识别;召回率90%+,准确率80%+(更注重召回率,可牺牲一定的准确率)
谩骂模型:净化评论氛围;样本库超过百万,召回率高达95%+,准确率80%+
低质模型:通过对评论做情感分析,结合用户其它的负反馈信息(举报、不感兴趣、踩)等信息,来解决很多语义上的低质问题,诸如题文不符、有头无尾、拼凑编造、黑稿谣言等。
目前低质模型的准确率为70%,召回率为60%,结合人工复审召回率能做到95%。
今日头条算法原理全