Peacock:大规模主题模型及其在腾讯业务中的应用-2015

Peacock:大规模主题模型及其在腾讯业务中的应用

作者:赵学敏 王莉峰 王流斌 孙振龙 严浩 靳志辉 王益

摘要

如果用户最近搜索了“红酒木瓜汤”,那么应该展示什么样的广告呢?从字面上理解,可能应该返回酒水或者水果类广告。可是你知道吗?“红酒木瓜汤”其实是一个民间丰胸秘方。如果机器能理解这个隐含语义,就能展示丰胸或者美容广告——这样点击率一定很高。在广告、搜索和推荐中,最重要的问题之一就是理解用户兴趣以及页面、广告、商品等的隐含语义。

让机器能自动学习和理解人类语言中近百万种语义,以及从海量用户行为数据中归纳用户兴趣,是一个已经持续了20年的研究方向,称为主题建模(Latent Topic Modeling)。目前业界的各种系统中最为突出的是Google Rephil,在Google AdSense广告系统中发挥了重要作用。

追随Google的脚步,腾讯SNG效果广告平台部(广点通)的同学们成功的研发了Peacock大规模主题模型机器学习系统,通过并行计算可以高效地对10亿x1亿级别的大规模矩阵进行分解,从而从海量样本数据中学习10万到100万量级的隐含语义。我们把Peacock系统应用到了腾讯业务中,包括文本语义理解、QQ群的推荐、用户商业兴趣挖掘、相似用户扩展、广告点击率转化率预估等,均取得了不错的效果。

一、为什么我们要开发大规模主题模型训练系统Peacock?

1.1 短文本相关性

在自然语言处理和信息检索中,我们常常会遇到如下问题:给定查询词,计算查询词和文档之间的相关性。比如表1给出了2个具体例子,此时我们需要计算短文本之间的相关性。常用的计算方法就是不考虑词的相对顺序,使用BOW(Bag-Of-Words)模型把文档表示为词向量,然后计算文本之间的相似度。如果直接采用文档中词的TF-IDF构建文档特征向量,通过计算查询词特征向量和文档特征向量的余弦夹角,我们会发现Q1与D1、D2都相关,而Q2与D1、D2都不相关。显然,这与人对自然语言的理解并不相符:Q1和D2比较相关,都关于“苹果”这种水果;而Q2和D1比较相关,都关于“苹果”公司。

表1 短文本相关性

之所以会出现这种差异,是因为上述文档特征向量构建方法没有“理解”文档的具体语义信息,单纯的将文档中的词表示为一个ID而已。通过主题模型,文档可以表示为一个隐含语义空间上的概率分布向量(主题向量),文档主题向量之间的余弦夹角就可以一定程度上反映文档间的语义相似度了。

1.2 推荐系统


图1 用户-物品矩阵

主题模型的另一个主要应用场景是推荐系统。不管是电商网站的商品推荐,还是各大视频网站的视频推荐等,都可以简化为如下问题:给定用户-物品矩阵(图1,矩阵中用户u和物品i对应的值表示ui的偏好,根据用户行为数据,矩阵会得到部分“初始”值),如何“填满”矩阵中没有值的部分。

图2 物品聚类

在各种眼花缭乱的推荐算法中,直接利用用户-物品矩阵进行推荐是最有效的方式(没有长年的用户、物品内容分析技术积累也一样可以快速做出效果),而这其中的两类主要算法都与主题模型有关系:

  • 协同过滤[1]。以基于用户的协同过滤为例,就是要向用户推荐与之相似的用户喜欢的物品,包含两个主要步骤:计算用户相似度和向用户推荐与自己最相似的用户喜欢的物品,难点在于计算用户相似度。如果不引入外部数据,最简单的计算用户uv相似度的方法可以直接利用用户-物品矩阵的u行和v行,比如计算它们的余弦夹角。然而,真实的互联网数据中,用户-物品矩阵通常都非常稀疏,直接计算不能得到准确的结果。此时,常见的做法是对用户(或物品)进行聚类或者将矩阵投影到更低维的隐空间(图2、3),在隐空间计算用户相似度可以更加准确。主题模型可以用来将用户-物品矩阵投影到隐空间。
  • 隐含语义模型 (Latent Factor Model, LFM)[2]。该类方法本质上和主题模型是一致的,直观的理解是将用户-物品矩阵分解为用户-隐含语义(主题)矩阵和隐含语义(主题)-物品矩阵(图3),通过更低维度的上述两个矩阵,来重构原始用户-物品矩阵,重构得到的矩阵将不再稀疏,可以直接用于推荐。具体例子可以参看“QQ群推荐”应用。

图3 用户-物品矩阵分解

实际上,从以上的讨论中我们容易发现,当使用BOW模型处理文本,把文档数据表示成文档-词(Doc-Word)矩阵的时候,其表示结构和用户-物品(User-Item)矩阵结构是完全一致的。因此这两类数据可以使用同样的算法进行处理。使用隐含主题模型处理文档-词矩阵的时候,可以理解为把词聚类为主题,并计算各个文档和词聚类之间的权重。类似地,处理用户-物品矩阵的时候,可以理解为把物品聚类为主题,然后计算每个用户和各个聚类之间的权重。图2是这个过程的一个形象描述,而这个过程如图3所示,可以理解为把原始矩阵分解为两个较小的矩阵:左下的Topic-Item矩阵描述了物品聚类,每行一个主题(Topic)表示一个聚类;而右侧的User-Topic矩阵每一行为主题权重向量,表示每个用户和每个主题的紧密关系。

1.3 Peacock是什么?

从上面两个小节我们已经看到,主题模型在互联网产业中具有非常重要的应用。而Peacock系统着手开发时(2012年11月),一些开源以及学术界的主题模型训练系统[5,6,7,8],要么只能处理小规模的训练语料得到“小模型”,要么模型质量不佳。基于这种状况,我们设计并开发了Peacock系统(更多有关Peacock系统的设计哲学和开发进程,可以参考王益的博客[3]和图灵访谈文章[4])。Peacock是一个大规模主题模型训练系统,它既可以从数十亿的网络语料中学习出百万级别的隐含语义(主题),也可以对数十亿乘以几亿规模的矩阵进行“分解”。我们的工作总结成论文“Peacock: Learning Long-Tail Topic Features for Industrial Applications”发表在ACM Transaction on Intelligent System and Technology (2015)[15]


图4 Peacock文档语义推断系统Demo

图5 Peacock文档语义推断示例1:“苹果”

图6 Peacock文档语义推断示例2:“苹果 梨子”

图7 Peacock文档语义推断示例3:“苹果大尺度”

下面我们分别给定一些具体的例子,让大家对Peacock有一些直观上的认识:

  • 自然语言处理的例子。图4给出了Peacock在线推断系统Demo的主要界面,手动输入文档以后,点击“submit”就可以看到Peacock对输入文档的理解。这个例子中,我们利用训练好的Peacock模型,在线推断给定的输入文档的主题分布P(topic|doc)。每一行打印出一个语义主题,并给出主题的权重。具体的主题由一组相关的词组成,每个词都有权重。而第二部分 P(word|doc) 则给出了和该文档相关的权重最高的词。在Demo的例子中,我们可以看到 Peacock 对“红酒木瓜汤”这个检索串最重要的语义理解是“丰胸、产品、减肥、木瓜、效果”,非常符合人的语义理解。图5、6、7演示了典型的多义词“苹果”在不同语境下Peacock对其的不同理解,可以看到“苹果”这个检索串在 Peacock 中被处理成了如下三种语义:“苹果公司及其产品”、“水果”、“范冰冰《苹果》电影”。而“苹果、梨子”主要语义被理解为“水果”,“苹果大尺度”的主要语义被理解为“范冰冰《苹果》电影”。可以看到Peacock可以比较准确的理解不同文档的具体含义,这将有助于我们完成一系列自然语言处理和信息检索的任务。
  • 用户-物品矩阵分解的例子。这个例子中,“用户”(相当于“文档”)为QQ,“物品”(相当于“词”)为这部分用户加入的QQ兴趣群(在数据预处理中,我们会将QQ群分为关系群、兴趣群等,兴趣群可以比较好的反映用户的兴趣)。取非常活跃的5亿用户和非常活跃的1亿QQ兴趣群,得到一个5亿x1亿的矩阵,使用Peacock分解该矩阵后获得Topic-Item矩阵(即主题-QQ群矩阵),图8、9、10分别给出了该矩阵中的三个主题(只显示权重最高的主要QQ群)。为了方便理解,同时将QQ群的描述信息显示在群ID之后。可以看到,Peacock学习得到的主题含义比较明确,一定程度上可以反映出Peacock在处理用户-物品矩阵上的有效性。

图8 基于QQ-QQ群Peacock矩阵分解示例:炒股类主题

图9 基于QQ-QQ群Peacock矩阵分解示例:塔防三国游戏类主题

图10 基于QQ-QQ群Peacock矩阵分解示例:济南母婴类主题

通过一些具体的例子直观的介绍了主题模型之后,接下来第二章将主要从算法的角度来回答“什么是主题模型”这个问题,第三章介绍对主题模型并行化的一些思考以及Peacock的具体做法,最后第四章介绍主题模型在腾讯业务中的具体应用。

二、什么是主题模型?

下面以文档建模为例,简单介绍一下主题模型。

2.1 主题模型的“三个过程”

主题模型一般包含了三个重要的过程:生成过程、训练过程以及在线推断。生成过程定义了模型的假设以及具体的物理含义,训练过程定义了怎样由训练数据学习得出模型,在线推断定义了怎样应用模型。下面分别进行简要介绍。

一般来说,主题模型是一种生成模型(生成模型可以直观的理解为给定模型,可以生成训练样本)。给定模型,其生成过程如图11:

  • 模型有2个主题,主题1关于银行(主要的词为loan、bank、money等),主题2关于河流(主要的词为river、stream、bank等)。
  • 文档1内容100%关于主题1,主题向量为<1.0, 0.0>,文档中每一个词的生成过程如下:以100%的概率选择主题1,再从主题1中以一定的概率挑选词。
  • 文档2内容50%关于主题1,50%关于主题2,主题向量为<0.5, 0.5>,文档中每一个词的生成过程如下:以均等的概率选择主题1和2,再从选中的主题中以一定的概率挑选词。
  • 文档3内容100%关于主题2,主题向量为<0.0, 1.0>,文档中每一个词的生成过程如下:以100%的概率选择主题2,再从主题2中以一定的概率挑选词。

图11 主题模型的生成过程[9]

现实的情况是我们没有模型,只有海量的互联网文档数据,此时我们希望有机器学习算法可以自动的从训练文档数据中归纳出主题模型(如图12),即得到每个主题在词表上的具体分布。通常来说,训练过程还会得到一个副产品——每篇训练文档的主题向量。


图12 主题模型的训练过程[9]

有了主题模型,给定新的文档,通过在线推断,我们就可以得到文档的主题向量(如图13)。图5、6、7给出了一些具体的例子。


图13 主题模型的在线推断

三个过程中,训练过程是难点,后文将进行重点介绍。

2.2 LDA模型及其训练算法

LDA(Latent Dirichlet Allocation)[10]作为一种重要的主题模型,自发表以来就引起了学术界和产业界的极大关注,相关论文层出不穷。LDA的训练算法也多种多样,下面以吉布斯采样[11,12]为例,进行简要介绍。


图14 LDA训练过程

跳过复杂的数学推导,基于吉布斯采样的LDA训练过程如图14所示(每个词用w表示,每个词对应的主题用z表示,图中节点z的不同颜色表示不同的主题):

  • Step1: 初始时,随机的给训练语料中的每一个词w赋值一个主题z,并统计两个频率计数矩阵:Doc-Topic计数矩阵Ntd

本文链接:Peacock:大规模主题模型及其在腾讯业务中的应用
本站文章若无特别说明,皆为原创,转载请注明来源:火光摇曳,谢谢!^^


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

史上最简单的玻尔兹曼机模型讲解

在上一篇文章中&#xff0c;小夕讲述了逻辑回归为了抗衡贝叶斯网&#xff0c;也开始了自己的进化。然而令我们没有想到的是&#xff0c;逻辑回归最终竟然进化成了一个生成式模型——受限玻尔兹曼机&#xff08;RBM&#xff09;&#xff0c;也就是变成了敌方&#xff08;生成式模…

从头到尾彻底理解KMP(2014年8月22日版)

从头到尾彻底理解KMP 作者&#xff1a;July 时间&#xff1a;最初写于2011年12月&#xff0c;2014年7月21日晚10点 全部删除重写成此文&#xff0c;随后的半个多月不断反复改进。后收录于新书《编程之法&#xff1a;面试和算法心得》第4.4节中。 1. 引言 本KMP原文最初写于2年多…

解开玻尔兹曼机的封印会发生什么?

在上一篇文章中&#xff0c;小夕讲述了逻辑回归为了抗衡贝叶斯网&#xff0c;也开始了自己的进化。然而令我们没有想到的是&#xff0c;逻辑回归最终竟然进化成了一个生成式模型——受限玻尔兹曼机&#xff08;RBM&#xff09;&#xff0c;也就是变成了敌方&#xff08;生成式模…

KMP算法的核心,是一个被称为部分匹配表(Partial Match Table)的数组以及next数组求解

KMP算法的核心&#xff0c;是一个被称为部分匹配表(Partial Match Table)的数组。我觉得理解KMP的最大障碍就是很多人在看了很多关于KMP的文章之后&#xff0c;仍然搞不懂PMT中的值代表了什么意思。这里我们抛开所有的枝枝蔓蔓&#xff0c;先来解释一下这个数据到底是什么。 对…

Softmax(假神经网络)与词向量的训练

今天终于要完成好久之前的一个约定了~在很久很久以前的《如果风停了&#xff0c;你会怎样》中&#xff0c;小夕提到了“深刻理解了sigmoid的同学一定可以轻松的理解用(假)深度学习训练词向量的原理”&#xff0c;今天就来测测各位同学对于sigmoid的理解程度啦~习惯性的交待一下…

二叉树的先序遍历、中序遍历、后序遍历、层次遍历-图文详解

概述 二叉树的遍历是一个很常见的问题。二叉树的遍历方式主要有&#xff1a;先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在遍历过程中&#xff0c;父节点先于它的子节点被访问&#xff0c;就是先序遍历&#xff1b;父节点被访问…

写给我的女神,一个用灵魂歌唱的小精灵

我对娱乐圈不感兴趣&#xff0c;也很少关注娱乐圈。对于专业的歌唱艺术更是不在行。但我认为&#xff0c;一首歌&#xff0c;不应因为技法的平庸而被认为是烂歌&#xff0c;不应因为曲风的通俗而被认为是俗歌&#xff0c;不应因为声音和唱法的非主流而被认为是“非主流”歌曲。…

完美世界2020编程题-救雅典娜 英雄AB PK

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请注明出处。 https://blog.csdn.net/u012319493/article/details/82154113 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f…

训练神经网络时如何确定batch size?

前言 当我们要训练一个已经写好的神经网络时&#xff0c;我们就要直面诸多的超参数了。这些超参数一旦选不好&#xff0c;那么很有可能让神经网络跑的还不如感知机。因此在面对神经网络这种容量很大的model前&#xff0c;是很有必要深刻的理解一下各个超参数的意义及其对model的…

腾讯2013实习生笔试题+答案1-5aadaa 6-10adbcc 11-15 acacc16-20 bbddc

一、 单项选择题1) 给定3个int类型的正整数x&#xff0c;y&#xff0c;z&#xff0c;对如下4组表达式判断正确的选项(A) Int a1xy-z; int b1x*y/z;Int a2x-zy; int b2x/z*y;int c1x<<y>>z; int d1x&y|z;int c2x>>z<<y; int d2x|z&y;A) a1一定等…

训练神经网络时如何确定batch的大小?

当我们要训练一个已经写好的神经网络时&#xff0c;我们就要直面诸多的超参数啦。这些超参数一旦选不好&#xff0c;那么很有可能让神经网络跑的还不如感知机。因此在面对神经网络这种容量很大的model前&#xff0c;是很有必要深刻的理解一下各个超参数的意义及其对model的影响…

【论文翻译】学习新闻事件预测的因果关系

一、摘要 本文在这项工作中解决的问题是产生一个可能由给定事件引起的可能的未来事件。 论文提出了一种使用机器学习和数据挖掘技术建模和预测未来新闻事件的新方法。论文的Pundit算法概括了因果关系对的例子&#xff0c;以推断因果关系预测因子。为了获得精确标记的因果关系示…

阿里内推算法岗位编程笔试题

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/u014744127/article/details/79431847 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_v…

从逻辑回归到最大熵模型

在《逻辑回归》与《sigmoid与softmax》中&#xff0c;小夕讲解了逻辑回归背后藏着的东西&#xff0c;这些东西虽然并不是工程中实际看起来的样子&#xff0c;但是却可以帮助我们很透彻的理解其他更复杂的模型&#xff0c;以免各个模型支离破碎。本文中&#xff0c;小夕将带领大…

【论文翻译】统一知识图谱学习和建议:更好地理解用户偏好

一、摘要 将知识图谱&#xff08;KG&#xff09;纳入推荐系统有望提高推荐的准确性和可解释性。然而&#xff0c;现有方法主要假设KG是完整的并且简单地在实体原始数据或嵌入的浅层中转移KG中的“知识”。这可能导致性能欠佳&#xff0c;因为实用的KG很难完成&#xff0c;并且…

机器学习与深度学习常见面试题

为了帮助参加校园招聘、社招的同学更好的准备面试&#xff0c;SIGAI整理出了一些常见的机器学习、深度学习面试题。理解它们&#xff0c;对你通过技术面试非常有帮助&#xff0c;当然&#xff0c;我们不能只限于会做这些题目&#xff0c;最终的目标是真正理解机器学习与深度学习…

EJB的相关知识

一、EJB发展历史 IBM、SUN公司力推EJB前景&#xff0c;大公司开始采用EJB部署系统。主要价值&#xff1a;对分布式应用进行事务管理 出现问题&#xff1a; ①EJB的API难度大 ②规范要求必须抛出特定异常的接口并将Bean类作为抽象类实现&#xff08;不正常不直观&#xff09; ③…

深度前馈网络与Xavier初始化原理

前言 基本的神经网络的知识&#xff08;一般化模型、前向计算、反向传播及其本质、激活函数等&#xff09;小夕已经介绍完毕&#xff0c;本文先讲一下深度前馈网络的BP过程&#xff0c;再基于此来重点讲解在前馈网络中用来初始化model参数的Xavier方法的原理。 前向 前向过程很…

线性代数应该这样讲(三)-向量2范数与模型泛化

在线性代数&#xff08;一&#xff09;中&#xff0c;小夕主要讲解了映射与矩阵的关系&#xff1b;在线性代数&#xff08;二&#xff09;中&#xff0c;小夕讲解了映射视角下的特征值与特征向量的物理意义。本文与下一篇会较为透彻的解析一下向量的二范数与一范数&#xff0c;…

SOA基础

一、架构的演化&#xff1a; 结构化 客户端-服务端 三层 N层 分布式对象 组件 服务&#xff1a;是应用程序或者企业的不同功能单元&#xff0c;每个功能单元作为实例存在&#xff0c;并与应用程序和其他组件交互。通过基于消息的松散耦合的通信模型提供服务。 二、体系结…