推荐算法原理全文详解(今日头条、抖音) 推荐算法原理全文详解 系统概览以及内容分析、用户标签、评估分析,内容安全等原理 1.系统概览 推荐系统,如果用形式化的方式去描述实际上是拟合一个用户对内容满意度的函数,这个函数需要输入三个维度的变量 第一个维度是内容头条现在已经是一个综合内容平台,图文、视频、UGC小视频、问答、微头条,每种内容有很多自己的特征,需要考虑怎样提取不同内容类型的特征做好推荐 第二个维度是用户特征包括各种兴趣标签,职业、年龄、性别等,还有很多模型刻划出的隐式用户兴趣等 第三个维度是环境特征这是移动互联网时代推荐的特点,用户随时随地移动,在工作场合、通勤、旅游等不同的场景,信息偏好有所偏移 结合三方面的维度,模型会给出一个预估,即推测推荐内容在这一场景下对这一用户是否合适 这里还有一个问题,如何引入无法直接衡量的目标? 推荐模型中,点击率、阅读时间、点赞、评论、转发包括点赞都是可 以量化的目标,能够用模型直接拟合做预估,看线上提升情况可以知道做 的好不好 但一个大体量的推荐系统,服务用户众多,不能完全由指标评估,引 入数据指标以外的要素也很重要。
比如广告和特型内容频控像问答卡片就是比较特殊的内容形式,其 推荐的目标不完全是让用户浏览,还要考虑吸引用户回答为社区贡献内容这些内容和普通内容如何混排,怎样控制频控都需要考虑 此外,平台出于内容生态和社会责任的考量,像低俗内容的打压,标 题党、低质内容的打压,重要新闻的置顶、加权、强插,低级别账号内容 降权都是算法本身无法完成,需要进一步对内容进行干预 下面我将简单介绍在上述算法目标的基础上如何对其实现 前面提到的公式y = F(Xi ,Xu ,Xc),是一个很经典的监督学习问题可实现的方法有很多,比如传统的协同过滤模型,监督学习算法 Logistic Regression模型,基于深度学习的模型,Factorization Machine和GBDT等 一个优秀的工业级推荐系统需要非常灵活的算法实验平台,可以支持多种算法组合,包括模型结构调整因为很难有一套通用的模型架构适用于所有的推荐场景 现在很流行将LR和DNN结合,前几年Facebook也将LR和GBDT算法做结合今日头条旗下几款产品都在沿用同一套强大的算法推荐系统,但根据业务场景不同,模型架构会有所调整。
模型之后再看一下典型的推荐特征,主要有四类特征会对推荐起到比较重要的作用 第一类是相关性特征,就是评估内容的属性和与用户是否匹配显性的匹配包括关键词匹配、分类匹配、来源匹配、主题匹配等像FM模型中也有一些隐性匹配,从用户向量与内容向量的距离可以得出 第二类是环境特征,包括地理位置、时间这些既是bias特征,也能以此构建一些匹配特征 第三类是热度特征包括全局热度、分类热度,主题热度,以及关键词热度等内容热度信息在大的推荐系统特别在用户冷启动的时候非常有效 第四类是协同特征,它可以在部分程度上帮助解决所谓算法越推越窄的问题 协同特征并非考虑用户已有历史而是通过用户行为分析不同用户间相似性,比如点击相似、兴趣分类相似、主题相似、兴趣词相似,甚至向量相似,从而扩展模型的探索能力 模型的训练上,头条系大部分推荐产品采用实时训练实时训练省资 源并且反馈快,这对信息流产品非常重要用户需要行为信息可以被模型 快速捕捉并反馈至下一刷的推荐效果 我们线上目前基于storm集群实时处理样本数据,包括点击、展现、 收藏、分享等动作类型。
模型参数服务器是内部开发的一套高性能的系统,因为头条数据规模 增长太快,类似的开源系统稳定性和性能无法满足,而我们自研的系统底 层做了很多针对性的优化,提供了完善运维工具,更适配现有的业务场景目前,头条的推荐算法模型在世界范围内也是比较大的,包含几百亿原始 特征和数十亿向量特征 整体的训练过程是线上服务器记录实时特征,导入到Kafka文件队列中,然后进一步导入Storm集群消费Kafka数据,客户端回传推荐的 label构造训练样本,随后根据最新样本进行训练更新模型参数,最 终线上模型得到更新 这个过程中主要的延迟在用户的动作反馈延时,因为文章推荐后用户 不一定马上看,不考虑这部分时间,整个系统是几乎实时的 但因为头条目前的内容量非常大,加上小视频内容有千万级别,推荐 系统不可能所有内容全部由模型预估 所以需要设计一些召回策略,每次推荐时从海量内容中筛选出千级别的内容库召回策略最重要的要求是性能要极致,一般超时不能超过50 毫秒 召回策略种类有很多,我们主要用的是倒排的思路。
离线维护一个倒排,这个倒排的key可以是分类,topic,实体,来源等 排序考虑热度、新鲜度、动作等线上召回可以迅速从倒排中根据用户兴趣标签对内容做截断,高效的从很大的内容库中筛选比较靠谱的一小部分内容 二、内容分析 内容分析包括文本分析,图片分析和视频分析头条一开始主要做资讯,今天我们主要讲一下文本分析文本分析在推荐系统中一个很重要的作用是 用户兴趣建模 没有内容及文本标签,无法得到用户兴趣标签举个例子,只有知道文 章标签是互联网,用户看了互联网标签的文章,才能知道用户有互联网标签,其他关键词也一样 一方面,文本内容的标签可以直接帮助推荐特征,比如魅族的内容可以 推荐给关注魅族的用户,这是用户标签的匹配 如果某段时间推荐主频道效果不理想,出现推荐窄化,用户会发现到具 体的频道推荐(如科技、体育、娱乐、军事等)中阅读后,再回主feed,推 荐效果会更好 因为整个模型是打通的,子频道探索空间较小,更容易满足用户需求 只通过单一信道反馈提高推荐准确率难度会比较大,子频道做的好很重要。
而这也需要好的内容分析 上图是今日头条的一个实际文本case可以看到,这篇文章有分类、关 键词、topic、实体词等文本特征 当然不是没有文本特征,推荐系统就不能工作,推荐系统最早期应用在 Amazon,甚至沃尔玛时代就有,包括Netfilx做视频推荐也没有文本特征直 接协同过滤推荐 但对资讯类产品而言,大部分是消费当天内容,没有文本特征新内容冷 启动非常困难,协同类特征无法解决文章冷启动问题 今日头条推荐系统主要抽取的文本特征包括以下几类首先是语义标签 类特征,显式为文章打上语义标签 这部分标签是由人定义的特征,每个标签有明确的意义,标签体系是预 定义的 此外还有隐式语义特征,主要是topic特征和关键词特征,其中topic 特征是对于词概率分布的描述,无明确意义;而关键词特征会基于一些统一 特征描述,无明确集合 另外文本相似度特征也非常重要在头条,曾经用户反馈最大的问题之 一就是为什么总推荐重复的内容这个问题的难点在于,每个人对重复的定 义不一样。
举个例子,有人觉得这篇讲皇马和巴萨的文章,昨天已经看过类似内容, 今天还说这两个队那就是重复 但对于一个重度球迷而言,尤其是巴萨的球迷,恨不得所有报道都看一遍 解决这一问题需要根据判断相似文章的主题、行文、主体等内容,根据 这些特征做线上策略 同样,还有时空特征,分析内容的发生地点以及时效性比如武汉限行 的事 情推给北京用户可能就没有意义最后还要考虑质量相关特征,判断内 容是否低俗,色情,是否是软文,鸡汤? 上图是头条语义标签的特征和使用场景他们之间层级不同,要求不同 分类的目标是覆盖全面,希望每篇内容每段视频都有分类;而实体体系 要求精准,相同名字或内容要能明确区分究竟指代哪一个人或物,但不用覆盖很全 概念体系则负责解决比较精确又属于抽象概念的语义这是我们最初的分类,实践中发现分类和概念在技术上能互用,后来统一用了一套技术架构 目前,隐式语义特征已经可以很好的帮助推荐,而语义标签需要持续标注,新名词新概念不断出现,标注也要不断迭代其做好的难度和资源投入要远大于隐式语义特征,那为什么还需要语义标签? 有一些产品上的需要,比如频道需要有明确定义的分类内容和容易理解的文本标签体系。
语义标签的效果是检查一个公司NLP技术水平的试金石 今日头条推荐系统的线上分类采用典型的层次化文本分类算法 最上面Root,下面第一层的分类是像科技、体育、财经、娱乐,体育这 样的大类,再下面细分足球、篮球、乒乓球、网球、田径、游泳…,足 球再细分国际足球、中国足球,中国足球又细分中甲、中超、国家队…,相比单独的分类器,利用层次化文本分类算法能更好地解决数据倾斜的 问题 有一些例外是,如果要提高召回,可以看到我们连接了一些飞线 这套架构通用,但根据不同的问题难度,每个元分类器可以异构,像有 些分类SVM效果很好,有些要结合CNN,有些要结合RNN再处理一下 上图是一个实体词识别算法的case基于分词结果和词性标注选取候选,期间可能需要根据知识库做一些拼接,有些实体是几个词的组合,要确 定哪几个词结合在一起能映射实体的描述 如果结果映射多个实体还要通过词向量、topic分布甚至词频本身等去歧,最后计算一个相关性模型 三、用户标签 内容分析和用户标签是推荐系统的两大基石。
内容分析涉及到机器 学习的内容多一些,相比而言,用户标签工程挑战更大 今日头条常用的用户标签包括用户感兴趣的类别和主题、关键词、来源、 基于兴趣的用户聚类以及各种垂直兴趣特征(车型,体育球队,股票等)还有性别、年龄、地点等信息 性别信息通过用户第三方社交账号登录得到年龄信息通常由模型预测, 通过机型、阅读时间分布等预估 常驻地点来自用户授权访问位置信息,在位置信息的基础上通过传统聚类 的方法拿到常驻点 常驻点结合其他信息,可以推测用户的工作地点、出差地点、旅游地点 这些用户标签非常有助于推荐 当然最简单的用户标签是浏览过的内容标签但这里涉及到一些数据处理 。