one-hot 编码 和 Embedding

目录

1.引言

2.什么是离散特征呢?

3.怎么对离散特征进行处理呢?

4.有没有一个新颖的例子来更好的理解one-hot encoding 和 embedding呢?

5.小结:

1.引言

这篇文章的内容是对离散特征的处理,包括 one-hot 编码 和 embedding。我会先和平常学习一样先给一些比较官方的解释,然后通过一个生动的例子来让大家理解one-hot 编码和 embedding是怎么运用的,如果对官方的一些解释不太懂也没有关系,只要你看了,其实你已经对one-hot 编码和 embedding有一些了解了,再看我讲的例子你也许就会恍然大悟。最后我还会给出我对于学习的一些个人的思考。话不多说,让我们进入正题吧!

2.什么是离散特征呢?

性别:男生和女两种类别

国籍:中国,美国,印度等200个国家

物品ID:小红书有几亿篇笔记,每篇笔记都有对应的自己的一个ID

用户ID:小红书有几亿个用户,每个用户都有对应的自己的一个ID

事实上,推荐系统会把每个ID映射成一个向量。中国,美国,男生,女生这些就算是离散特征,主打一个离散。

3.怎么对离散特征进行处理呢?

举个例子:

 one-hot编码是很有局限的,比如小红书的推荐系统,你如果对物品的ID做编码,那显然是不可能的(小红书有几亿篇笔记,one-hot向量的维度是几亿),因此,当类别太多时不会使用one-hot编码。这里引入embedding,embedding可以把序号映射成低维稠密向量,比one-hot的高维稀疏向量要好。比如:

参数数量=向量维度*类别数量

如果这个例子中embedding得到的向量是4维的一共有200个国籍,参数数量就是4*200=800,这些参数用一个矩阵来保存,矩阵大小= 向量维度*类别数量

一边情况下,如果用编程实现,pytorch会提供embedding层,参数用一个矩阵来保存,矩阵大小= 向量维度*类别数量。输入是一个序号,比如输入1,输出中国的对应的向量(参数矩阵的第一列)

现在有一个问题,怎么用4维的向量表征一个国家呢?其实这个4维的向量一开始是随机给值的,让这个向量不断迭代训练之后,最终得到的4维向量的值是可以很好的反应这个特征的。

4.有没有一个新颖的例子来更好的理解one-hot encoding 和 embedding呢?

我可以尝试着用文本挖掘推荐系统来去理解离散特征和对离散特征的处理。今天听了郑麟老师的深度神经网络的课后,一下子我就被点醒了,我之前对 one-hot encoding 和 embedding这两种方法其实也仅仅是一知半解,他今天通过一个卷积神经网络的例子让我理解了。原来,离散特征就是任意的,突出的就是“离散”这两个字,比如说在推荐系统里用户对物品的评论,你的一长串评论里面每一个单词都是一个离散特征。比如说I Love You这三个单词,我们会令I=48,Love=55, You=153这样子,那么你会把一个评论变成一个向量,而对于这个向量,你是无法进行卷积核操作的,因为这个只是一个向量,你要想办法把这个向量变成一个矩阵,这样卷积核才可以进行扫描。那怎么样才可以把这个向量变成一个矩阵呢?就要用到one-hot encoding 和 embedding,如果是one-hot encoding的话就I=[0,0],Love=[0,1],You=[1,0],当然,我这只是举一个例子,实际上评论会很长,不会只有三个字母,所以如果用one-hot encoding的话一个单词从一个数字会变成一个长向量,而且是稀疏的向量。用embedding则是相反,他会随机的定义一个比较短的但是稠密的向量,这个向量的数字当然是随机的,然后通过不断的迭代预训练,最终得到的这个向量肯定是可以很好地反应“I”这个单词的语义的。当你用卷积核进行卷积操作时,假设你用的是one-hot,那你根本卷不动,因为那些向量都是只有0和1,几十个单词,每一个单词的向量拼在一起得到的矩阵满屏都是0和1,你怎么卷积?所以embedding的优势就出来了,你用embedding起码卷的动,是吧!

5.小结:

通过以上一轮官方的定义和生动的例子相信大家应该已经比较好的理解了 one-hot encoding 和 embedding这两种对离散特征的处理方式了。不瞒大家说,Part4和Part5是我后面才加上去的,我一开始只有Part123这三部分。事实是我即使已经学了 one-hot encoding 和 embedding,而且还写了一次博客,我还是没有彻底弄懂这个知识,直到今天得到了郑麟老师的指点。我曾经反思过自己,我写了那么多博客,有时却没有真正弄懂知识,那我写的这么多博客是否是没有意义的呢?其实不是的,正如赵志丹老师所言:只要你在学习知识,就绝对不会没有意义这一说,你所学过的知识都会在将来的某一阶段回报给你。我今天算是彻底理解这句话了。如果我对 one-hot encoding 和 embedding没有一个基本的了解,那么今天郑麟老师的课的知识我根本就不可能听懂。希望与读者共勉!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值