用万字长文聊一聊 Embedding 技术

作者:qfan,腾讯 WXG 应用研究员

随着深度学习在工业届不断火热,Embedding 技术便作为“基本操作”广泛应用于推荐、广告、搜索等互联网核心领域中。Embedding 作为深度学习的热门研究方向,经历了从序列样本、图样本、再到异构的多特征样本的发展过程。本文主要系统总结了现在主流的 Embedding 技术,简单介绍它们的基本原理,希望对大家快速整理相关知识有所帮助。

一、引言

在提到 Embedding 时,首先想到的是“向量化”,主要作用是将高维稀疏向量转化为稠密向量,从而方便下游模型处理。那什么是 embedding 呢?下面是大家对 embedding 的定义:

In mathematics, an embedding is one instance of some mathematical structure contained within another instance, such as a group that is a subgroup. -- Wikipedia

An embedding is a mapping from discrete objects, such as words, to vectors of real numbers. -- Tensorflow 社区

Embedding 是用一个低维稠密向量来表示一个对象,使得这个向量能够表达相应对象的某些特征,同时向量之间的距离能反应对象之间的相似性。 -- 王喆《深度学习推荐系统》

将一个实例(instance)从复杂的空间嵌入(投射)到相对简单的空间,以便对原始实例进行理解,或者在相对简单的空间中进行后续操作。 -- chrisyi《Network embedding 概述》

我个人比较倾向于 Tensorflow 社区给出的定义,即Embedding是离散实例连续化的映射。如下图所示,可以将离散型词 embedding 成一个四维的连续稠密向量;也可以将图中的离散节点 embedding 成指定维度的连续稠密向量。

Embedding 作为深度学习的热门研究方向,经历了从序列样本、理图样本、再到异构的多特征样本的发展过程。此外,由于 embedding 技术本身具有较强的综合信息表示能力、较低的上线部署门槛,进一步加速了其在工业上的落地。

Embedding 对于推荐系统中深度学习方法的主要应用可以简单总结如下:

  • 作为 Embedding 层嵌入到深度模型中,实现将高维稀疏特征到低维稠密特征的转换(如 Wide&Deep、DeepFM 等模型);

  • 作为预训练的 Embedding 特征向量,与其他特征向量拼接后,一同作为深度学习模型输入进行训练(如 FNN);

  • 在召回层中,通过计算用户和物品的 Embedding 向量相似度,作为召回策略(比 Youtube 推荐模型等);

  • 实时计算用户和物品的 Embedding 向量,并将其作为实时特征输入到深度学习模型中(比 Airbnb 的 embedding 应用)。

对于推荐场景中,什么数据可以采用 Embedding 来构造特征呢?下面简单列了下我在做微信游戏中心场景游戏和内容推荐时主要采用 embedding 技术来处理的数据(本文只简单列一下主要的点,后续会详细文章来具体讲如何处理以及其带来的效果)。

  • User 数据(用户的基础属性数据,如性别、年龄、关系链、兴趣偏好等)

    • 对于用户兴趣偏好,一般简单地采用文本 embedding 方法来得到各标签的 embedding 向量,然后根据用户对个标签的偏好程度做向量加权;

    • 对于关系链数据(如同玩好友、游戏中心相互关注等),构造用户关系图,然后  采用基于图的 embedding 方法来得到用户的 embedding 向量;

  • Item 数据(Item 基本信息数据,如标题、作者、游戏简介、标签等)

    • 对于文本、简介和标签等可以采用基于文本的 embedding 方法来在已有语料上预训练模型,然后得到对应的 embedding 向量(如 word2vec 或者 BERT);

    • 此外对于有明确关系的(如 item->文本->标签 or 关键词)可以采用对关键词/标签的向量均值来表示 item 的文本向量(这里安利一下 FaceBook 开源的StarSpace);

  • User 行为数据(用户在场景中的行为数据,如点击、互动、下载等)

    • 针对用户对 Item 的操作(如点击、互动、下载)构造用户->item+Item 标签体系,构造用户-item-tag 的异构网络,然后可以采用 Metapath2vec 来得到各节点的 embedding 向量;

    • 通过记录用户在整个场景访问 item,构造 Item-Item 关系图,然后采用 DeepWalk 算法得到 item 的向量,用来挖掘 Item 间的关系特征;

  • 额外数据(外部扩充数据,如用户游戏行为、用户微信其他场景活跃等)

    • 标签型(主要是用户在各场景的兴趣偏好):

    • 关系链型(如游戏中心好友、游戏内好友、开黑好友)可以采用用户关系构造用户关系图,采用 Graph embedding 方法(如 GraphSAGE)来表示用户抽象特征

当然,这些处理方法只是我个人这一年多的经验,可能有些地方用的并不是很合理,欢迎大家一起交流

下面开始本文正文“介绍现在主流的 Embedding 技术”,主要分三大块:

  • 经典的矩阵分解方法:这里主要是介绍 SVD 方法

  • 基于内容的 embedding 方法:这部分主要涉及到 NLP 相关的文本 embedidng 方法,包括静态向量 embedding(如 word2vec、GloVe 和 FastText)和动态向量 embedding(如 ELMo、GPT 和 BERT)

  • 基于 Graph 的 embedding 方法:这部分主要是介绍图数据的 embedding 方法,包括浅层图模型(如 DeepWalk、Node2vec 和 Metapath2vec)和深度图模型(如基于谱的 GCN 和基于空间的 GraphSAGE)

二、经典矩阵分解法

1、奇异值分解

SVD(Singular value decomposition,奇异值分解)是一种矩阵分解的方法,任何矩阵,都可以通过SVD的方法分解成几个矩阵相乘的形式。

其中 是正交矩阵, 是特征值矩阵。

对于机器学习,SVD一个主要优点是对矩阵降维,对于高维矩阵 可以通过SVD表示成三个维度相对较低的矩阵

在推荐系统中,可以将用户行为构造成User-Item的评分矩阵 ,其中m和n分别表示平台的User数和Item数。 表示用户 对物品 的评分(也可以是点击、互动、播放、下载等行为),用于刻画User对Item的有效操作。采用SVD算法将 分解成

虽然,从形式上看SVD分解简单直接,但由于日常User-Item的评分矩阵事高度稀疏的,而SVD分解要求矩阵是稠密的,通常采用对评分矩阵中的缺失值进行补全(比如补0、全局平均值、用户物品平均值补全等)得到稠密矩阵。再用SVD分解并降维。但实际过程中,元素缺失值是非常多的,导致了传统SVD不论通过以上哪种方法进行补全都是很难在实际应用中起效果。此外传统SVD在实际应用中还有一个严重的问题——计算复杂度(时间复杂度是 ,空间复杂度是 )。当用户数和物品总量过大(如千上万级),对矩阵做SVD分解是非常耗时。这是得传统的SVD分解方法很难在实际业务中应用起来。

研究者们做了大量工作来解决传统SVD的稀疏数据不适用和高计算复杂度的问题,其中主要的有FunkSVD、BiasSVD和SVD++算法。

2、隐语义模型(Latent Factor Model)

LFM主要代表是2006年由Simon Funk在博客上公开的算法FunkSVD,将评分矩阵分解成两个低维矩阵(P和Q)相乘,可直接通过训练集中的观察值利用最小化均方根学习P,Q矩阵。

用户 对物品 的评分可以表示为 ,其中 分别是矩阵 对应第 的列向量,表示用户 和物品 的隐向量。FunkSVD核心思想是将在原始SVD上加了线性回归,使得我们可以用均方差作为损失函数来寻找P和Q的最佳值:

上式可以通过梯度下降法来求解,损失函数求偏导为:

参数更新如下:

在Funk-SVD获得巨大成功之后,研究人对其进行进一步优化工作,提出了一系列优化算法。其中BiasSVD就是在原始FunkSVD模型中添加三项偏移项优化得到的:

  • 物品偏移量 ( ):表示了物品接受的评分和用户没有多大关系,物品本身质量决定了的偏移;

  • 用户偏移量 (

  • 30
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值