专栏名称: CSDN
CSDN精彩内容每日推荐。我们关注IT产品研发背后的那些人、技术和故事。
目录
相关文章推荐
山东政府网  ·  3月13日省政府常务会研究了这几件大事! ·  5 小时前  
山东政府网  ·  3月13日省政府常务会研究了这几件大事! ·  5 小时前  
新浪科技  ·  【#曝特斯拉与百度合作FSD#】据外媒报道, ... ·  21 小时前  
极客公园  ·  ​实测新版通义 APP:更好用的个人 AI ... ·  昨天  
51好读  ›  专栏  ›  CSDN

深度学习在推荐领域的应用

CSDN  · 公众号  · 科技媒体  · 2017-06-01 10:56

正文

作者 | 吴岸城

责编 | 何永灿


当2012年Facebook在广告领域开始应用定制化受众(Facebook Custom Audiences)功能后,“受众发现”这个概念真正得到大规模应用,什么叫“受众发现”?如果你的企业已经积累了一定的客户,无论这些客户是否关注你或者是否跟你在Facebook上有互动,都能通过Facebook的广告系统触达到。“受众发现”实现了什么功能?在没有这个系统之前,广告投放一般情况都是用标签去区分用户,再去给这部分用户发送广告,“受众发现”让你不用选择这些标签,包括用户基本信息、兴趣等。你需要做的只是上传一批你目前已有的用户或者你感兴趣的一批用户,剩下的工作就等着Custom Audiences帮你完成了。


Facebook这种通过一群已有的用户发现并扩展出其他用户的推荐算法就叫Lookalike,当然Facebook的算法细节笔者并不清楚,各个公司实现Lookalike也各有不同。这里也包括腾讯在微信端的广告推荐上的应用、Google在YouTube上推荐感兴趣视频等。下面让我们结合前人的工作,实现自己的Lookalike算法,并尝试着在新浪微博上应用这一算法。

调研


首先要确定微博领域的数据,关于微博的数据可以这样分类:


  • 用户基础数据: 年龄、性别、公司、邮箱、地点、公司等。

  • 关系图: 根据人↔人,人↔微博的关注、评论、转发信息建立关系图。

  • 内容数据: 用户的微博内容,包含文字、图片、视频。


有了这些数据后,怎么做数据的整合分析?来看看现在应用最广的方式——协同过滤、或者叫关联推荐。协同过滤主要是利用某兴趣相投、拥有共同经验群体的喜好来推荐用户可能感兴趣的信息, 协同过滤的发展有以下三个阶段


第一阶段,基于用户喜好做推荐,用户A和用户B相似,用户B购买了物品a、b、c,用户A只购买了物品a,那就将物品b、c推荐给用户A 这就是基于用户的协同过滤,其重点是如何找到相似的用户。因为只有准确的找到相似的用户才能给出正确的推荐。而找到相似用户的方法,一般是根据用户的基本属性贴标签分类,再高级点可以用上用户的行为数据。


第二阶段,某些商品光从用户的属性标签找不到联系,而根据商品本身的内容联系倒是能发现很多有趣的推荐目标,它在某些场景中比基于相似用户的推荐原则更加有效 比如在购书或者电影类网站上,当你看一本书或电影时,推荐引擎会根据内容给你推荐相关的书籍或电影。


第三阶段,如果只把内容推荐单独应用在社交网络上,准确率会比较低,因为社交网络的关键特性还是社交关系 如何将社交关系与用户属性一起融入整个推荐系统就是关键。在神经网络和深度学习算法出现后,提取特征任务就变得可以依靠机器完成,人们只要把相应的数据准备好就可以了,其他数据都可以提取成向量形式,而社交关系作为一种图结构,如何表示为深度学习可以接受的向量形式,而且这种结构还需要有效还原原结构中位置信息?这就需要一种可靠的向量化社交关系的表示方法。基于这一思路,在2016年的论文中出现了一个算法node2vec,使社交关系也可以很好地适应神经网络。这意味着深度学习在推荐领域应用的关键技术点已被解决。


在实现算法前我们主要参考了如下三篇论文:


  • Audience Expansion for Online Social Network Advertising 2016

  • node2vec: Scalable Feature Learning for Networks Aditya Grover 2016

  • Deep Neural Networks for YouTube Recommendations 2016


第一篇论文 是LinkedIn给出的,主要谈了针对在线社交网络广告平台,如何根据已有的受众特征做受众群扩展。这涉及到如何定位目标受众和原始受众的相似属性。论文给出了两种方法来扩展受众:


1. 与营销活动无关的受众扩展;

2. 与营销活动有关的受众扩展。



图1 LinkedIn的Lookalike算法流程图


在图1中,LinkedIn给出了如何利用营销活动数据、目标受众基础数据去预测目标用户行为进而发现新的用户。今天的推荐系统或广告系统越来越多地利用了多维度信息。如何将这些信息有效加以利用,这篇论文给出了一条路径,而且在工程上这篇论文也论证得比较扎实,值得参考。


第二篇论文 ,主要讲的是node2vec,这也是本文用到的主要算法之一。node2vec主要用于处理网络结构中的多分类和链路预测任务,具体来说是对网络中的节点和边的特征向量表示方法。


简单来说就是将原有社交网络中的图结构,表达成特征向量矩阵,每一个node(可以是人、物品、内容等)表示成一个特征向量,用向量与向量之间的矩阵运算来得到相互的关系。


下面来看看node2vec中的关键技术——随机游走算法,它定义了一种新的遍历网络中某个节点的邻域的方法,具体策略如图2所示。



图2 随机游走策略


假设我们刚刚从节点t走到节点v,当前处于节点v,现在要选择下一步该怎么走,方案如下:



其中d tx 表示节点t到节点x之间的最短路径,d tx =0表示会回到节点t本身,d tx =1表示节点t和节点x直接相连,但是在上一步却选择了节点v,d tx =2表示节点t不与x直接相连,但节点v与x直接相连。其中p和q为模型中的参数,形成一个不均匀的概率分布,最终得到随机游走的路径。与传统的图结构搜索方法(如BFS和DFS)相比,这里提出的随机游走算法具有更高的效率,因为本质上相当于对当前节点的邻域节点的采样,同时保留了该节点在网络中的位置信息。


node2vec由斯坦福大学提出,并有开源代码,这里顺手列出,这一部分大家不用自己动手实现了。 https://github.com/aditya-grover/node2vec

注: 本文的方法需要在源码的基础上改动图结构。


第三篇论文 讲的是Google如何做YouTube视频推荐,论文是在我做完结构设计和流程设计后看到的,其中模型架构的思想和我们不谋而合,还解释了为什么要引入DNN(后面提到所有的feature将会合并经历几层全连接层):引入DNN的好处在于 大多数类型的连续特征和离散特征 可以直接添加到模型当中。此外我们还参考了这篇论文对于隐含层(FC)单元个数选择。图3是这篇论文提到的算法结构。



图3 YouTube推荐结构图

实现


  • (a)数据准备


    • 获得用户的属性(User Profile),如性别、年龄、学历、职业、地域、能力标签等;

    • 根据项目内容和活动内容制定一套受众标签(Audience Label);

    • 提取用户之间的关注关系,微博之间的转发关系;

    • 获取微博message中的文本内容;

    • 获得微博message中的图片内容。


  • (b)用户标签特征处理


    • 根据步骤a中用户属性信息和已有的部分受众标签系统。利用GBDT算法(可以直接用xgboost)将没有标签的受众全部打上标签。这个分类问题中请注意处理连续值变量以及归一化。

    • 将标签进行向量化处理,这个问题转化成对中文单词进行向量化,这里用word2vec处理后得到用户标签的向量化信息Label2vec。这一步也可以使用word2vec在中文的大数据样本下进行预训练,再用该模型对标签加以提取,对特征的提取有一定的提高,大约在0.5%左右。


  • (c)文本特征处理


    将步骤a中提取到的所有微博message文本内容清洗整理,训练Doc2Vec模型,得到单个文本的向量化表示,对所得的文本作聚类(KMeans,在30w的微博用户的message上测试,K取128对文本的区分度较强),最后提取每个cluster的中心向量,并根据每个用户所占有的cluster获得用户所发微博的文本信息的向量表示Content2vec。


  • (d)图像特征(可选)


    将步骤a中提取到的所有的message图片信息整理分类,使用预训练卷积网络模型(这里为了平衡效率选取VGG16作为卷积网络)提取图像信息,对每个用户message中的图片做向量化处理,形成Image2vec,如果有多张图片将多张图片分别提取特征值再接一层MaxPooling提取重要信息后输出。


  • (e)社交关系建立(node2vec向量化)







请到「今天看啥」查看全文