embeding 是什么
要搞清楚embeding先要弄明白他和one hot encoding的区别,以及他解决了什么one hot encoding不能解决的问题,带着这两个问题去思考,在看一个简单的计算例子
以下引用 YJango的Word Embedding–介绍
https://zhuanlan.zhihu.com/p/27830489
One hot representation
程序中编码单词的一个方法是one hot encoding。
实例:有1000个词汇量。排在第一个位置的代表英语中的冠词"a",那么这个"a"是用[1,0,0,0,0,…],只有第一个位置是1,其余位置都是0的1000维度的向量表示,如下图中的第一列所示。
也就是说,
在one hot representation编码的每个单词都是一个维度,彼此independent。
这里我们可以看到One hot方式处理的数据
1、会产生大量冗余的稀疏矩阵
2、维度(单词)间的关系,没有得到体现
继续引用
神经网络分析
假设我们的词汇只有4个,girl, woman, boy, man,下面就思考用两种不同的表达方式会有什么区别。
One hot representation
尽管我们知道他们彼此的关系,但是计算机并不知道。在神经网络的输入层中,每个单词都会被看作一个节点。 而我们知道训练神经网络就是要学习每个连接线的权重。如果只看第一层的权重,下面的情况需要确定43个连接线的关系,因为每个维度都彼此独立,girl的数据不会对其他单词的训练产生任何帮助,训练所需要的数据量,基本就固定在那里了。
Distributed representation
我们这里手动的寻找这四个单词之间的关系 f 。可以用两个节点去表示四个单词。每个节点取不同值时的意义如下表。 那么girl就可以被编码成向量[0,1],man可以被编码成[1,1](第一个维度是gender,第二个维度是age)。
那么这时再来看神经网络需要学习的连接线的权重就缩小到了23。同时,当送入girl为输入的训练数据时,因为它是由两个节点编码的。那么与girl共享相同连接的其他输入例子也可以被训练到(如可以帮助到与其共享female的woman,和child的boy的训练)。
Word embedding也就是要达到第二个神经网络所表示的结果,降低训练所需要的数据量。
Word embedding就是要从数据中自动学习到输入空间到Distributed representation空间的 映射f 。
以上的计算都没有涉及到label,所以训练过程是无监督的
看一个实际代码计算的例子
假设有一个维度为7的稀疏向量[0,1,0,1,1,0,0]。你可以把它变成一个非稀疏的2d向量,如下所示:
model = Sequential()
model.add(Embedding(2, 2, input_length=7))#输入维,输出维
model.compile('rmsprop', 'mse')
model.predict(np.array([[0,1,0,1,1,0,0]]))
array([[[ 0.03005414, -0.02224021],
[ 0.03396987, -0.00576888],
[ 0.03005414, -0.02224021],
[ 0.03396987, -0.00576888],
[ 0.03396987, -0.00576888],
[ 0.03005414, -0.02224021],
[ 0.03005414, -0.02224021]]], dtype=float32)
这个转换实际上是把[0,1,0,1,1,0,0]增加一个纵向展开的维度
model.layers[0].W.get_value()
array([[ 0.03005414, -0.02224021],
[ 0.03396987, -0.00576888]], dtype=float32)
通过比较两个数组可以看出0值映射到第一个索引,1值映射到第二个索引。嵌入构造函数的第一个值是输入中的值范围。在示例中它是2,因为我们给出了二进制向量作为输入。第二个值是目标维度。第三个是我们给出的向量的长度。
所以,这里没有什么神奇之处,只是从整数到浮点数的映射。
计算例子的model.layers[0].W.get_value(),就是上面引用图示中的映射f
embeding 是什么的更多相关文章
- Embeding Python & Extending Python with FFPython
Introduction ffpython is a C++ lib, which is to simplify tasks that embed Python and extend Python. ...
- keras embeding设置初始值的两种方式
随机初始化Embedding from keras.models import Sequential from keras.layers import Embedding import numpy a ...
- Embeding如何理解?
参考: http://www.sohu.com/a/206922947_390227 https://zhuanlan.zhihu.com/p/27830489 https://www.jianshu ...
- 分享一些学习资料-大量PDF电子书
分享一些学习用的电子书籍,给那些喜欢看书而不一定有机会买书的童鞋. 反对积分下载,提倡自由分享. 分享地址: http://pan.baidu.com/s/1qWK5V0g 提取密码: np33 ...
- 第七章 人工智能,7.6 DNN在搜索场景中的应用(作者:仁重)
7.6 DNN在搜索场景中的应用 1. 背景 搜索排序的特征分大量的使用了LR,GBDT,SVM等模型及其变种.我们主要在特征工程,建模的场景,目标采样等方面做了很细致的工作.但这些模型的瓶颈也非常的 ...
- Feuding Families and Former Friends: Unsupervised Learning for Dynamic Fictional Relationships-Naacl 2016-20160422
1.Information publication:-Naacl 2016 2.What 根据小说中的人物描述,a)在每个时间段给出,人物关系的描述的概率分布,b)从时间轴上看出关系的变化轨迹,提出模 ...
- VBPR: Visual Bayesian Personalized Ranking from Implicit Feedback-AAAI2016 -20160422
1.Information publication:AAAI2016 2.What 基于BPR模型的改进:在商品喜好偏序对的学习中,将商品图片的视觉信息加入进去,冷启动问题. 3.Dataset Am ...
- 关于Go,你可能不注意的7件事(转的)
http://tonybai.com/2015/09/17/7-things-you-may-not-pay-attation-to-in-go/ code https://github.com/bi ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)
循环神经网络(RNN, Recurrent Neural Networks)介绍 这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...
随机推荐
- python图片二值化提高识别率
import cv2from PIL import Imagefrom pytesseract import pytesseractfrom PIL import ImageEnhanceimport ...
- 使用ranger替代资源浏览器
使用方法参考,这个是比较高校的: http://www.mikewootc.com/wiki/linux/usage/ranger_file_manager.html
- python(函数调用)
1.在原文件中调用 def abc(x,y): print x + y abc(2,3) #直接通过函数名加括号进行调用传参 2.同一个包(package)下面调用不同文件中的函数 "&qu ...
- 使用Cloudera Manager搭建MapReduce集群及MapReduce HA
使用Cloudera Manager搭建MapReduce集群及MapReduce HA 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.通过CM部署MapReduce On ...
- Locust 教程
写在 Locust 教程开始的前面 本文参考了: Locust 教程 : https://www.axihe.com/tools/locust/home.html : locust 的官方 Githu ...
- 用java刷剑指offer(平衡二叉树)
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 牛客网链接 java代码 import java.lang.Math; public class Solution { public bool ...
- 用java刷剑指offer(数字在排序数组中出现的次数)
题目描述 统计一个数字在排序数组中出现的次数. 牛客网链接 java代码 //看见有序就用二分法 public class Solution { public int GetNumberOfK(int ...
- 微信小程序~调试
小程序调试面板 模拟器 模拟器模拟微信小程序在客户端真实的逻辑表现,对于绝大部分的 API 均能够在模拟器上呈现出正确的状态. 自定义编译 点击工具栏中的编译按钮或者使用快捷键 Ctrl(⌘) + B ...
- 在输出debug日志前加上logger.isDebugEnabled()判断的原因
场景: String token = md5.substring(0, 10) + base64Two + md5.substring(10); if (logger.isDebugEnabled() ...
- CH6803 导弹防御塔
6803 导弹防御塔 0x60「图论」例题 背景 Freda的城堡-- "Freda,城堡外发现了一些入侵者!" "喵...刚刚探究完了城堡建设的方案数,我要歇一会儿嘛l ...