作者·黄崇远
『数据虫巢』
全文共9665字
题图ssyer.com
“ 按我自己的理解,重新梳理了embedding的逻辑,并给他们造了一个江湖。”
为什么会今天写这个话题,其实早在系列的第十九就写过一篇《数据与广告系列十九:推荐召回与广告LookAlike,万物皆可Embedding》。
但总感觉意犹未尽,以及经过更长一段时间的思考以及在思考的过程中不断吸收新的知识,再加上近一段时间也确实在研究这块的广告相关的业务。
因此,有必要再换一个角度或者站在另外一个高度再来看embedding这个东西。
01
Embedding的起源
至于embedding是什么东西,这里就不再做科普性质的陈述了。但说到他,大部分人下意识的会跟2013谷歌发布的word2vec联系起来,这是一种针对于word进行embedding化的模型。
既然word可以embedding化,那么其他item为什么不可以?
word可以借助句子的关系进行word的embedding,本质上还是依赖于句子对于word的组织关系,并且构建word在句子词窗内的概率积最大化的拟合逻辑,并通过word的权重映射成look up table,最终产生了word对应的embedding这种副产品。
对于word2vec来说,这是其目的,但从训练模型的角度上说,是中间副产品产出。
图01 word2vec三层网络结构图
所以,word可以这么搞,其他item也可以这么搞,关键在于word可以通过句子构建关系,其他item有没有类似的序列关系构建逻辑以及从业务上支撑其合理性。
显然是有的,回答完这个问题,那么万物皆可embedding就开启了一条康庄大道。
这也是通过item与item关系构建embedding路子的进化源点。
为什么特意强调通过item与item关系构建embedding,因为还有不通过item之间关系构建embedding的逻辑。
笔者觉得最早严谨逻辑可以回溯到2014年Facebook的《Practical Lessons from Predicting Clicks on Ads at Facebook》论文。
这篇论文突破了模型Ensemble的传统思路,传统逻辑都是"横向"的,比如结果层加权,或者类似单树模型到随机森林这种弱模型堆叠到强模型的方式。
但这篇论文提供的是一种“纵向”的思路,有点像“套娃”,也开启了非end2end模型的思路,而其中多个模型的分界点就在于embedding作为特征的使用。
回到这篇论文,或者说这个非item关系之间挖掘embedding的话题上,这篇论文提供了一种新的思路。
即通过与后续模型有共有的拟合目标,通过建立相同目标的方式,获取到前一个模型的中间结果,来作为特征embedding的描述。
在这篇论文中,其实就是多树模型的叶子节点01表征,天然的向量表示方法呀,纯天然的。
图02 Facebook论文中利用树叶子节点做线性模型特征输入的逻辑
在后续模式中,突破了树的末端叶子节点表示方式,也有基于softmax函数的输出作为embedding的,也有基于FM的中间结果特征隐向量(参考《数据与广告系列十四:智能定向&基于FM的标签组合推荐思路》)作为embedding,但更多的可能利用深度学习网络中的权重参数作为embedding。
但不管怎么搞,这篇论文感觉更像是这条路子的一个源点,代表了另外一条非word2vec系列的思路。
所以,从目前看embedding的生成分成了两派,一派笔者称之为“序列构建派”,一派笔者称之为“目标拟合派”。
但embedding的话题能够持续炸裂,不在于其起源于哪个模型,又或者分属什么派别,而在于其具体需要解决什么问题。
正是因为其要解决的问题一直存在,并且有不断深入的可能,才有embedding相关技术和模型的不断进化。
02
Embedding的进化-序列构建派
我们先来看笔者独家取名的“序列构建派”,为什么给他取名叫序列构建派,他能够解决的是什么问题,以及对应其进化的路径是什么。
我们上两篇文章《深度学习推荐系统笔记03:被玩坏了的模型,我们要做减法》中,有说到过,深度模型迭代到今天的程度,每个维度都被玩坏了。
而其中折腾的最最最多的维度,当然是特征,而如果说寄托于主模型本身对于特征的一些潜在的内涵进行深入理解和挖掘,还是比较难的。
所以,把特征item拆解出来独立建模,甚至挖掘里头更深层的内在含义,是一种非常标准的做法,这也是序列构建派embedding模型的进化主线动力。
更何况还有很多场景中,单一item的直接表征其内在含义太过于单薄,操作者总是希望这个item embedding的表征能够容纳更多含义,这也是一种不得已而为之的方法。
所以,总的来说,问题的是清晰的,即如何embedding化,让这个item包含更加的丰富的含义。
那我们正式开始序列构建派的进化。
word2vec的原始逻辑
按word2vec的做法就是,通过句子的词窗截断,计算词窗内的某个词与词窗的其他词之间的共现概率积最大化