推荐系统实战3——推荐系统中Embedding层工作原理浅析

学习前言

Embedding层是推荐系统特征转换的精髓,有必要简单了解一下他的原理。
在这里插入图片描述

什么是Embedding

一、为什么要有Embedding

在这里插入图片描述
Embedding技术是现代推荐系统的标配,它的主要作用是将稀疏向量转换成稠密向量。

简单来讲,Embedding就是用一个低维稠密的向量来表示一个对象,在推荐系统中,这个对象常常指的是一个特征(比如说价格、ID、种类等等),在推荐系统中,很多特征以文本的方式存在,我们可以使用哈希桶或者列表将文本转化成数字,但仅仅是数字是不利于矩阵处理的,如果使用One-hot对类别、Id型特征进行编码,导致样本特征向量极度稀疏,而深度学习的结构特点使其不利于稀疏特征向量的处理。

这个时候Embedding就发挥了非常好的作用,将数字特征转换成稠密向量,向量之间的距离反映了对象之间的相似性。相似性低的对象之间,距离一般较大。这个时候,Embedding后的稠密特征就可以很好的表示当前的特征。

二、推荐系统中常见的Embedding处理方式

1、字符串形式的输入

在这里插入图片描述
对于推荐系统而言,输入常常是字符串形式,因为不是矩阵,字符串本身无法被网络直接处理,在推荐系统中,字符串可以通过哈希桶的方式转化成单一数字(hash_bucket),对任意一个字符串,我们都可以将其转化成固定的数字,这个数字处于0到hash_bucket_size之间。

之后在代码中会建立一个可查询的embedding表,他的shape为:
(hash_bucket_size, embedding_dim)
这是一个hash_bucket_size行,embedding_dim列的矩阵,当我们通过一个字符串获得一个固定的数字后,我们会通过这个固定的离散值,获得离散值对应的行。

比如上图的例子中,我们假设hash_bucket_size等于5,embedding_dim等于32。如果输入的字符串为bicycle,我们获得的离散值等于0。我们此时就会获取embedding表的第0行,作为这个特征的embedding。

2、连续值(特定范围值)的输入

在这里插入图片描述
除去字符串形式的输入,有些值可能是连续值,比如一个特征的取值范围是1-10,此时连续值类特征可以先使用分箱组件+进行离散化,可以进行等频/等距/自动离散化,变成离散值,此时连续值就变成了存在于特定范围内的离散值。

如果有些值直接存在于特定范围内,那么我们可以直接将其进行规定,举个简单的例子,比如我们现在的物品主要是车辆,那么车辆的种类就可以规定为连续值(特定范围值)的输入。

我们直接就可以将车分为[自行车,越野车,小轿车,公交车,大货车],这里只说了五个,实际上不止这么多,此时,我们就可以设定自行车就是0,越野车就是1,小轿车就是2,公交车就是3,大货车就是4。这样就不会存在hash冲突的问题,几就是几。
如果是连续值,可以先进行离散化,同样是直接进行映射。

之后在代码中会建立一个可查询的embedding表,他的shape为:
(boundaries_size, embedding_dim)
这是一个boundaries_size行,embedding_dim列的矩阵,当我们获得某个个体的cat_id,就可以获得其中第cat_id行。

比如上图的例子中,如果输入的字符串为bicycle,在列表中它的序号为0,此时我们获得的离散值等于0。我们此时就会获取embedding表的第0行,作为这个特征的embedding。

三、Embedding的注意点

一般来讲,尽管Embedding层的工作原理类似于查表的形式,但Embedding表本身也是需要训练的,不训练的话无法保证同一特征的不同值距离较大,embedding的长度一般也不是随便取的,可以通过如下的公式进行计算。其中,x 为不同特征取值的个数:
KaTeX parse error: Undefined control sequence: \ at position 27: …_dim=8+x^{0.25}\̲ ̲
公式参考easyrec文档:
https://easyrec.readthedocs.io/en/latest/feature/feature.html

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bubbliiiing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值