深度学习word2vec笔记之应用篇

好不容易学了一个深度学习的算法,大家是否比较爽了?但是回头想想,学这个是为了什么?吹牛皮吗?写论文吗?参加竞赛拿奖吗?

不管哪个原因,都显得有点校园思维了。

站在企业的层面,这样的方式显然是不符合要求的,如果只是学会了,公式推通了,但是没有在工作中应用上,那会被老大认为这是没有产出的。没有产出就相当于没有干活,没有干活的话就……呃……不说了。

下面就给大家弄些例子,说说在互联网广告这一块的应用吧。

一.对广告主的辅助

1.1基本概念

互联网广告的广告主其实往往有他们的困惑,他们不知道自己的目标人群在哪里。所谓目标人群,就是广告主想向他们投广告的那帮人。就像互联网广告的一个大牛的一句名言——我知道互联网广告有一半是浪费的,问题是我不知道是哪一半。

这个困惑就给媒体带来一个义务——要帮助广告主定向他们的目标人群。

对于普通的广告主来说,比如说一个化妆品广告的广告主,它的目标人群很明显就是年轻的女性。注意关键词“年轻”和“女性”,这是决定媒体这边能否赚 到钱的关键词。要知道对于媒体来说,广告主是它们的客户,满足客户的要求,客户就给它们钱,不满足客户的要求,就没有人为媒体买单;没有人为媒体买单,媒 体就没有钱养它们的员工和机器,也弄不来新闻和互联网的其他内容,那样媒体公司就垮了……

那么在媒体这边,需要做的的工作就很明确了——满足它们的客户(也就是广告主)的需求。怎么满足呢?这工作说容易也容易,说简单也简单,就是把喜欢这个广告主的广告的人找出来,然后帮这个广告主把他们的广告投放给这些人,让这些人看到这个广告主的广告。

这个工作带来的问题就真多了,媒体又不是什么神人,比如说一个新闻网站,浏览这个网站的每天有100万人,这个新闻网站的员工不可能一个个去访问他们的用户(浏览这个网站的人),整天问他们你喜不喜欢化妆品啊,喜不喜欢体育啊之类的问题。

那怎么办呢?媒体的员工只好猜了,但是哪怕是猜都很费劲,想想都头疼,一百万人啊,一个个猜也得吃力不讨好啊。这时候计算机的作用就来了,用计算机 猜嘛,而且不一定需要全部瞎猜的,因为用户如果注册了的话,还有一些用户的个人信息可以参考的。一般的网站注册的时候都要求提供年龄性别之类的个人信息, 有时候要要求写一些个人的兴趣什么的标签。这个时候这些数据就用上大用处了。

网站可以把注册用户的个人信息保存下来,然后提供广告主选择。如上面的那个化妆品的广告主,它就可以跟媒体提它的要求——我要向年轻的女性投放广 告。媒体这个时候就可以提供一些条件给这个广告主选择,如媒体说我有很多用户,18到80岁的都有,然后男性女性用户都有。广告主就可以根据这些条件选择 自己的目标用户,如选择了18到30岁的女性用户作为目标人群。选中了目标人群后,广告主和媒体就可以谈价钱了,谈好了价钱广告主就下单,然后媒体就帮广 告主投广告,然后媒体的钱就赚到了。

1.2兴趣挖掘的必要性

上面多次提到的“目标人群”,就是广告主最关心的事情。客户最关心的事情自然也是媒体最关心的事情。所以媒体会尽力帮助它们的客户去定向它们的目标人群。

一般所谓的定向也不是媒体亲自有一个人来跟广告主谈的,是媒体建立好一个页面,这个页面上有一些选项,比如年龄,性别,地域什么的,都是条件。广告主在上面把自己的目标人群符合的条件输入,然后下单购买向这些人投放广告的机会。

媒体为了更好地赚钱,肯定是愿意把这个页面上的条件做得更加丰富一点,让更多的广告主觉得这个网站的用户里面有它们的目标人群,从而让更多的广告主愿意过来下单。

广告主的定向其实有粗细之分的,有些广告主粗放点,它们有钱,选的定向条件比较宽,就说女性的用户,全部都投放;有些就定向得比较窄,比如说,北京 的20到25岁的女性,并且要喜欢羽毛球的用户。对于定向宽的广告主好处理,问题就是这些定向窄的广告主,它们还希望知道用户的兴趣所在,这就麻烦了。

为啥麻烦呢?一个用户的兴趣鬼才知道呢。就算当面问,人家也不乐意回答,何况就凭借一点点东西瞎猜。但是为了赚钱,瞎猜也得上的了,工业界为了赚这 个钱,诞生了整整一个行业——数据挖掘,甚至在学术界还有一个更加生猛的名字——机器学习。学术界的那个名字和解释都是相当大气的:让机器学会像人一样思 考。工业界就务实一点,只是对数据内容本身做一个挖掘,获取到啥呢?一般就是用户的兴趣啊,爱好啊什么的。这些东西供谁使用呢?暂时看来只有广告主愿意为 这些掏钱,其他的就有些媒体做来让自己推荐的内容不至于让用户那么反感而已。

上面有个名词“数据”,没错了,这个词是互联网广告业,甚至是数据挖掘行业的核心的东西。所谓数据,这里简单点说就可以认为是用户的年龄、性别、地 域等用户的基本属性;复杂点说可以说是用户兴趣、爱好,浏览记录等;更高级的有用户的交易数据(当然这个高级的数据很少媒体能搞得到)等。

解释完“数据”这个词,结合一下广告这个场景,就可以得到活在媒体公司里面的互联网广告行业数据挖掘工程师的工作是什么了。他们的工作就是:根据用 户自身的基本属性和用户流量的网页记录以及内容,想方设法让计算机猜出用户的兴趣爱好。用户的兴趣爱好“挖掘”出来后,就可以作为定向条件放到上面说的那 个网页上面供广告主选择了。这事情整好了,广告投了有人点击,公司的钱就赚到了;没整好,广告没人点击,广告主不乐意下单了,公司就赚不到钱……怎么着? 炒这些工程师的鱿鱼去。

上面可以看到了,辅助广告主定位它们的目标人群是很重要的。

经过一番的探索,word2vec在互联网广告上面也是可以辅助广告主定向他们的目标人群的,下面就讲讲这个算法在互联网广告的应用吧。

1.3利用word2vec给广告主推荐用户

为了用上word2vec,把场景转换到一个新闻媒体如A公司。

在A公司的多个页面中,电商公司B有他们的一个主页,专门介绍他们公司一些产品促销,抢购和发布会什么的。

公司A目前有很多用户的浏览数据,如用户u浏览了公司A的页面a1,a2,a3等。

把这些数据处理一下,整合成word2vec能处理的数据,如下

U1 a1,a2,a3……

U2 a2,a3,a5,……

U3 a1,a3,a6,……

其中u1,u2,u3表示不同的用户,后面的一串表示这些用户的浏览记录,如U1 a1,a2,a3表示用户u1先浏览了页面a1,再浏览a2,然后浏览了a3,……

这些数据还不符合word2vec的输入数据格式,把第一列去掉,变成下面的样子

a1,a2,a3……

a2,a3,a5,……

a1,a3,a6,……

这些数据就可以作为word2vec的输入数据了。

就把这些数据作为word2vec的训练数据,词向量维度为3,进行训练,完成后得到下面的输出

A1 (0.3,-0.5,0.1)

A2 (0.1,0.4,0.2)

A3 (-0.3,0.7,0.8)

……

An (0.7,-0.1,0.3)

就得到了每个页面的向量。

这些向量有啥意义呢?其实单个向量的意义不大,只是用这些向量可以计算一个东西——距离,这个距离是页面之间的距离,如页面a1和a2可以用欧式距 离或者cos距离计算公式来计算一个距离,这个距离是有意义的,表示的是两个网页在用户浏览的过程中的相似程度(也可以认为是这两个页面的距离越近,被同 一个人浏览的概率越大)。注意这个距离的绝对值本身也是没有意义的,但是这个距离的相对大小是有意义的,意思就是说,假设页面a1跟a2、a3、a4的距 离分别是0.3、0.4、0.5,这0.3、0.4、0.5没啥意义,但是相对来说,页面a2与a1的相似程度就要比a3和a4要大。

那么这里就有玄机了,如果页面a1是电商公司B的主页,页面a2、a3、a4与a1的距离在所有页面里面是最小的,其他都比这三个距离要大,那么就 可以认为同一个用户u浏览a1的同时,浏览a2、a3、a4的概率也比较大,那么反过来,一个用户经常浏览a2、a3、a4,那么浏览a1的概率是不是也 比较大呢?从实验看来可以这么认为的。同时还可以得到一个推论,就是用户可能会喜欢a1这个页面对应的广告主的广告。

这个在实验中实际上也出现过的。这里模拟一个例子吧,如a1是匹克体育用品公司在媒体公司A上的官网,a2是湖人队比赛数据页,a3是热火队的灌水讨论区,a4是小牛队的球员讨论区。这个结果看起来是相当激动人心的。

根据这样的一个结果,就可以在广告主下单的那个页面上增加一个条件——经常浏览的相似页面推荐,功能就是——在广告主过来选条件的时候,可以选择那 些经常浏览跟自己主页相似的页面的用户。举个例子就是,当匹克体育用品公司来下单的时候,页面上给它推荐了几个经常浏览页面的粉丝:湖人队比赛数据页,热 火队的灌水讨论区,小牛队的球员讨论区。意思是说,目标人群中包括了经常浏览这三个页面的人。

这个功能上线后是获得过很多广告主的好评的。

这样word2vec这个算法在这里就有了第一种用途。

回到顶部

二. 对ctr预估模型的帮助

根据另一篇博文《互联网广告综述之点击率系统》,里面需要计算的用户对某广告的ctr。在实际操作的时候,这个事情也是困难重重的,其中有一个冷启 动问题很难解决。冷启动问题就是一个广告是新上线的,之前没有任何的历史投放数据,这样的广告由于数据不足,点击率模型经常不怎么凑效。

但是这个问题可以使用同类型广告点击率来缓解,意思就是拿一个同行的广告的各种特征作为这个广告的特征,对这个新广告的点击率进行预估。

同行往往太粗糙,那么怎么办呢?可以就利用跟这个广告主比较相似的广告的点击率来预估一下这个广告的点击率。

上面说过,可以得到每个页面的词向量。这里的方法比较简单,如在媒体公司A上面有1000个广告主,它们的主页分别是a1、a2、……、a1000。

根据上面的方法,得到了这1000个词向量,然后运行kmean或者其他聚类算法,把这1000个广告主聚成100个簇,然后每个簇里面的广告主看成是一个。

这里可以模拟一个例子,聚类完成后,某个簇c里面包含了几个广告主的主页,分别是京东商城,天猫,唯品会,当当,聚美优品,1号店,蘑菇街,卓越,亚马逊,淘宝这10个,这10个的目标人群看起来基本是一致的。

这里的看成是一个簇是有意义的,比如说第一个簇c1,c1这个簇里面的所有历史投放数据和实时数据可以做特征,来预估这个流量对这个簇的ctr。得 到这个ctr后,就很有用了,如果某广告投放数据比较充分,就直接预估这个广告的ctr;如果某广告的历史投放数据很少,就用这个广告主所在的簇的ctr 来代替这个广告,认为对簇的ctr就是这个广告的ctr,这样能让一个新广告也能得到相对靠谱的预估ctr,保证不至于乱投一番。

回到顶部

三.一些总结

如何应用好一个算法,确实是很多算法工程师的一个重大课题。

数据挖掘算法工程师经常要面对的一个难题就是:这个算法怎么用到我们的数据上面来?有不少同学会认为是:我到了公司,就发明一个很牛逼的算法,把公 司的原来的问题解决掉,然后大大增加了效果,获得了领导的好评。这个天真烂漫的想法就不评价了,免得被说打击人。互联网企业里面的真实情况是算法工程师面 对那一团乱遭的数据,得想尽办法去把数据整合成能用的格式。

拿上面的(1.3)中的例子,那个把数据组合成a1,a2,a3……这样一行行的,然后进入word2vec去进行训练是最难想到的而且是最核心的 东西,虽然明着说是word2vec这个算法厉害,实际上面是“把数据整合成合适的方式交给word2vec进行训练”这个想法重要,因为尝试了很多想 法,做了很多实验才能想到这样的一招的。

还有数据的整合其实也费了很多功夫的,比如说媒体有些用户是一些机器的账号,人家乱搞的,要想办法排除掉的,而“想办法排除”这么简单一句话,真正要做的工作真是多多的有。

哪怕结果都训练出来了,怎么解释这个结果是好的?这个问题也是得想了一段时间的,后来是实验发现了利用词向量的距离来评价相似性这个东西最靠谱,然后才用上的。

一个数据挖掘的过程其实不简单,这个博客也没办法一一体现做的过程里面的那些各种折腾,各种不顺畅。

数据挖掘工程师经常要面对的另一个难题就是:明明理论上推得杠杠的,算法性能也是杠杠的,但是对于互联网广告的效果,怎么就那么不咸不淡的呢?

这个问题真没有什么统一的答案,这种现象多了去了。经常遇到的原因有:数据本身处理的方式不对和算法不合适。

所谓数据本身处理的方式,可以参看博文《互联网广告综述之点击率特征工程》,里面说的那些方法不是从哪本书上面看到的,是经过比较长时间实践,然后 各种折腾,各种特征取舍,各种胡思乱想,各种坑踩出来的。可能志在学术的人看起来都简单,实际上课本那些东西,学生们吹起牛皮来不眨眼的那些东西,一跟真 实应用场景结合起来就各种坑要踩的了。

拿上面的(二)中的例子来看。方法简单得不得了,但是可以想象一下,word2vec牛逼啊,kmeans牛逼啊,第一次聚类出来的结果也不过如 此。后来又加入了每个广告主的行业和地域作为特征,而且这个加特征,就是直接把行业和地域处理一下,连接到广告主的词向量后面的。如a1的词向量是 (0.3,-0.5,0.1),然后假设只有两个行业,体育和化妆品,处理成二值特征,占据第4和5两个index,第4个特征为1,第5个特征为0表示 体育类广告主,反过来,第4个特征为0,第5个特征为1表示化妆品;再对地域的下标做了一下处理,成为二值特征,比如说占据了6到10这5个位置(假设第 6个位置为1,其余7到10为0表示北京;第7个位置为1,其余为0表示广东,以此类推)。

经过了上面的处理,再用kmeans进行聚类,从聚类后一个个簇去看,结果看起来才顺眼了很多。上面的行业和地域特征的加入,也是用了比较多的经验 的,不是凭空乱整出来的一个吹牛皮的东西,当然谁有更好的方法,也可以提出来试试看。另外还希望大家注意关键字“一个个簇去看”,这个工作真是费时费力, 比较辛苦的。

以上举了一些例子,也把互联网广告的数据挖掘算法工程师的一些工作中的成功和不成功的地方都说出来了,基本上算是实话实说,希望对大家有点帮助吧。有过类似经历的人能看懂,没啥兴趣的就呵呵吧。

回到顶部

参考文献

  • Deep Learning 实战之 word2vec PDF
  • 皮果提在知乎上的问答
  • 杨超在知乎上的问答《Word2Vec的一些理解》
  • hisen博客的博文
  • n-gram语言模型
  • 主题:统计自然语言处理的数学基础
  • Hierarchical probabilistic neural network language model. Frederic Morin and Yoshua Bengio.
  • Distributed Representations of Words and Phrases and their Compositionality T. Mikolov, I. Sutskever, K. Chen, G. Corrado, and J. Dean.
  • A neural probabilistic language model Y. Bengio, R. Ducharme, P. Vincent.
  • Linguistic Regularities in Continuous Space Word Representations. Tomas Mikolov,Wen-tau Yih,Geoffrey Zweig
  • Efficient Estimation of Word Representations in Vector Space. Tomas Mikolov,Kai Chen,Greg Corrado,Jeffrey Dean.
时间: 2024-10-13 21:24:09

深度学习word2vec笔记之应用篇的相关文章

深度学习word2vec笔记之算法篇

深度学习word2vec笔记之算法篇 声明:  本文转自推酷中的一篇博文http://www.tuicool.com/articles/fmuyamf,若有错误望海涵 前言 在看word2vec的资料的时候,经常会被叫去看那几篇论文,而那几篇论文也没有系统地说明word2vec的具体原理和算法,所以老衲就斗胆整理了一个笔记,希望能帮助各位尽快理解word2vec的基本原理,避免浪费时间. 当然如果已经了解了,就随便看看得了. 一. CBOW加层次的网络结构与使用说明 Word2vec总共有两种类

深度学习论文笔记--Recover Canonical-View Faces in the Wild with Deep Neural Network

文章来源:CVPR2014 作者:Zhenyao Zhu,Ping Luo,Xiaogang Wang,Xiaoou Tang (香港中文大学果然牛啊,CVPR一刷一大堆) 主要内容: 提出了利用深度学习(还是CNN)来进行人脸图像重构正面人脸,然后利用重构的正面人脸图像来进行人脸的verification,当然能够取得更高的准确率(比没有用正脸去verification),文章提出利用DL来学习从任意脸到canonical 脸的转换,可以认为是一个回归问题(也不一定非得用DL方法来做). 现有

(转)大牛的《深度学习》笔记,60分钟带你学会Deep Learning。

大牛的<深度学习>笔记,60分钟带你学会Deep Learning. 2016-08-01 Zouxy 阅面科技 上期:<从特征描述到深度学习:计算机视觉发展20年> 回复“01”回顾全文   本期:大牛的<深度学习>笔记,60分钟带你学会Deep Learning. 深度学习,即Deep Learning,是一种学习算法(Learning algorithm),亦是人工智能领域的一个重要分支.从快速发展到实际应用,短短几年时间里,深度学习颠覆了语音识别.图像分类.文本

[转]关于深度学习,看这一篇就够了

关于深度学习,看这一篇就够了 原文地址:http://www.dlworld.cn/XueXiSuanFa/13.html [日期:2016-04-26] 来源:36氪  作者: [字体:大 中 小] 编者按:本文作者王川,投资人,中科大少年班校友,现居加州硅谷,个人微信号9935070,36 氪经授权转载自其个人微信公众号 investguru. 一 2016 年一月底,人工智能的研究领域,发生了两件大事. 先是一月二十四号,MIT 的教授,人工智能研究的先驱者,Marvin Minsky 去

Tensor flow 实战Google深度学习框架 笔记摘要Pone

<Tensor flow 实战Google深度学习框架>前三章的摘要(没有简介和环境搭建的部分) 摘要的内容是 与tensorflow 语句相关的知识 如有违规之类的请通知我啊 这个pdf 一般bd有 需要的可以私聊我 或者留下扣扣邮箱 欢迎指点 注:本来是要直接粘word 但是 word能粘截图 我就一个一个 传上来的   第一篇微博~~~ 1表示用户信息 结构化数据 .name:张三 .Id:12345 .Email:[email protected]   xml形式 <user&g

吴恩达-深度学习-课程笔记-6: 深度学习的实用层面( Week 1 )

1 训练/验证/测试集( Train/Dev/test sets ) 构建神经网络的时候有些参数需要选择,比如层数,单元数,学习率,激活函数.这些参数可以通过在验证集上的表现好坏来进行选择. 前几年机器学习普遍的做法: 把数据分成60%训练集,20%验证集,20%测试集.如果有指明的测试集,那就用把数据分成70%训练集,30%验证集. 现在数据量大了,那么验证集和数据集的比例会变小.比如我们有100w的数据,取1w条数据来评估就可以了,取1w做验证集,1w做测试集,剩下的用来训练,即98%的训练

吴恩达-深度学习-课程笔记-7: 优化算法( Week 2 )

1 Mini-batch梯度下降 在做梯度下降的时候,不选取训练集的所有样本计算损失函数,而是切分成很多个相等的部分,每个部分称为一个mini-batch,我们对一个mini-batch的数据计算代价,做完梯度下降,再对下一个mini-batch做梯度下降.比如500w个数据,一个mini-batch设为1000的话,我们就做5000次梯度下降(5000个mini-batch,每个mini-batch样本数为1000,总共500w个样本). 对于batch梯度下降(每次计算所有的样本),随着迭代

吴恩达-深度学习-课程笔记-8: 超参数调试、Batch正则化和softmax( Week 3 )

1 调试处理( tuning process ) 如下图所示,ng认为学习速率α是需要调试的最重要的超参数. 其次重要的是momentum算法的β参数(一般设为0.9),隐藏单元数和mini-batch的大小. 第三重要的是神经网络的层数和学习率衰减 adam算法的三个参数一般不调整,设定为0.9, 0.999, 10^-8. 注意这些直觉是ng的经验,ng自己说了,可能其它的深度学习研究者是不这么认为的. 那么如何选择参数呢?下面介绍两个策略,随机搜索和精细搜索. 早一代的机器学习算法中,如下

《Andrew Ng深度学习》笔记1

深度学习概论 1.什么是神经网络? 2.用神经网络来监督学习 3.为什么神经网络会火起来? 1.什么是神经网络? 深度学习指的是训练神经网络.通俗的话,就是通过对数据的分析与计算发现自变量与因变量的映射关系(神经网络模型),这个映射关系可以是单层(一个神经元),也可以是网络(多个神经元),此过程可称为训练过程:其后根据此神经网络模型来对事物进行预测或分类. 通过一个例子来说明何为神经网络.房价的预测,影响房价的因素有很多,现在仅考虑房间大小,即只有一维特征.下图的红叉代表已知价格的房子大小,通过