http://blog.csdn.net/pipisorry/article/details/76095118

词嵌入

词嵌入其实就是将数据的原始表示表示成模型可处理的或者是更dense的低维表示(lz)。

One-hot Embedding

假设一共有m个物体,每个物体有自己唯一的id,那么从物体的集合到\mathbb R^m有一个trivial的嵌入,就是把它映射到\mathbb R^m中的标准基,这种嵌入叫做One-hot embedding/encoding.

[数据预处理:独热编码(One-Hot Encoding)]

一般使用的低维embedding

应用中一般将物体嵌入到一个低维空间\mathbb R^n(n \ll m) ,只需要再compose上一个从\mathbb R^m\mathbb R^n的线性映射就好了。每一个n\times m 的矩阵M都定义了\mathbb R^m\mathbb R^n的一个线性映射: x \mapsto Mx。当x 是一个标准基向量的时候,Mx对应矩阵M中的一列,这就是对应id的向量表示。

这个概念用神经网络图来表示如下:

从id(索引)找到对应的One-hot encoding,然后红色的weight就直接对应了输出节点的值(注意这里没有activation function),也就是对应的embedding向量。

Note:

1 M随机初始化并且是可训练的,查找x对应的embedding表示其实 等价于 找x在下面这个网络中的权重,而这些权重是可训练的,且对应于矩阵M。

2  关于嵌入维度数量(New Embedding维度)的一般经验法则:

embedding_dimensions =  number_of_categories**0.25

也就是说,嵌入矢量维数应该是类别数量的 4 次方根。如词汇量为 81,建议维数为 3。

低维向量嵌入在tensorflow中的实现:tf.nn.embedding_lookup()

    embedding_map = tf.get_variable(  # 默认参数trainable = True,可训练name="embedding_map",shape=[self.config.vocab_size, self.config.embedding_size],initializer=self.initializer)seq_embeddings = tf.nn.embedding_lookup(embedding_map, self.input_seqs)

和下面类似:

matrix = np.random.random([1024, 64])  # 64-dimensional embeddings
ids = np.array([0, 5, 17, 33])
print matrix[ids]  # prints a matrix of shape [4, 64] 

从id类特征(category类)使用embedding_lookup的角度来讲:

1、onehot编码神经网络处理不来。embedding_lookup虽然是随机化地映射成向量,看起来信息量相同,但其实却更加超平面可分。

2、embedding_lookup不是简单的查表,id对应的向量是可以训练的(带有label信息),训练参数个数应该是 category num*embedding size,也就是说lookup是一种全连接层。详见 brain of mat kelcey

3、word embedding其实是有了一个距离的定义,即出现在同一上下文的词的词向量距离应该小,这样生成向量比较容易理解。autoencode、pca等做一组基变换,也是假设原始特征值越接近越相似。但id值的embedding应该是没有距离可以定义,没有物理意义,只是一种特殊的全连接层。

4、用embedding_lookup做id类特征embedding由google的deep&wide提出。阿里 第七章 人工智能,7.6 DNN在搜索场景中的应用(作者:仁重) 中提下了面对的困难,主要是参数数量过多(引入紫色编码层)和要使用针对稀疏编码特别优化过的全连接层( Sparse Inner Product Layer )等。

5、在分类模型中用这种id类特征,主要是希望模型把这个商品记住。但id类特征维度太高,同一个商品的数据量也不大,因此也常常用i2i算法产出的item embedding来替代id特征。

[tf.nn.embedding_lookup函数原理?]

[求通俗讲解下tensorflow的embedding_lookup接口的意思?]

[tf.nn.embedding_lookup]

[what-does-tf-nn-embedding-lookup-function-do]

某小皮

词嵌入有其它很多方法如word2vec,bert等,embedding lookup只是其中一种。我们可以只使用简单的embedding lookup让模型自己去训练;也可以将embedding lookup中的矩阵先通过word2vec训练好进行初始化,再通过embedding lookup训练;或者只使用vord2vec进行初始化后,embedding lookup设置成不训练。

Word2vec

[深度学习:词嵌入之word2vec]

其它的Word Representation

 

Word level representation from characters embeddings    Bidirectional LSTM on top of word representation to extract contextual representation of each word

右图中的context应该是指句子的上下文。

[Sequence Tagging with Tensorflow]

句子embedding

1 词向量直接求平均或者最大值:对句子中所有单词直接求平均, 每个单词的权重相同, 得到sentence embedding。

2 使用每个词的TF-IDF值为权重, 加权平均, 得到sentence embedding。

sif sentence embedding使用预训练好的词向量, 使用加权平均的方法, 对句子中所有词对应的词向量进行计算, 得到整个句子的embedding向量:模型的输入是一个已有的word embedding,然后通过加权求平均的方法求得sentence的embedding,最后使用主成分分析去掉一些special direction,即在完成词加权平均之后,移除所有行为向量的公共主成分:v_s -= u*u^t*v_s。

其中v_s表示加权平均之后的结果,u表示所有句子向量进行特征分解之后,最大特征值对应的特征向量,相当于所有句子向量的最大主成分,这样就把所有行为链路中彼此相关的一部分去除,只保留反应序列特性的成分。
[论文阅读 A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SEN- TENCE EMBEDDINGS]

[A simple but tough-to-beat baseline for sentence embedding]

词向量维度的选择

On the Dimensionality of Word Embedding

词向量集合的距离度量:PIP loss,基于此可以选择最优词向量维度

文章分析了LSA, Word2vec, Glove对于不同任务的最优维度


[On the Dimensionality of Word Embedding]

from: http://blog.csdn.net/pipisorry/article/details/76095118

ref: [tensorflow对嵌入概念的解释]

[深度学习、NLP 和表示法(Chris Olah 的博客)]

[TensorFlow Embedding Projector]

深度学习:词嵌入Embedding相关推荐

  1. 深度学习-词嵌入(word2vec)

    词嵌入(word2vec) 自然语言是一套用来表达含义的复杂系统.在这套系统中,词是表义的基本单元.顾名思义,词向量是用来表示词的向量,也可被认为是词的特征向量或表征.把词映射为实数域向量的技术也叫词 ...

  2. 2.5 学习词嵌入-深度学习第五课《序列模型》-Stanford吴恩达教授

    学习词嵌入 (Learning Word Embeddings) 在本节视频中,你将要学习一些具体的算法来学习词嵌入.在深度学习应用于学习词嵌入的历史上,人们一开始使用的算法比较复杂,但随着时间推移, ...

  3. [DeeplearningAI笔记]序列模型2.3-2.5余弦相似度/嵌入矩阵/学习词嵌入

    5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.3词嵌入的特性 properties of word embedding Mikolov T, Yih W T, Zwe ...

  4. [Embeding-2]文本表示学习-词嵌入入门理解

    转载自Scofield Phil: http://www.scofield7419.xyz/2017/09/25/文本表示学习-词嵌入入门理解/ 之前一段时间,在结合深度学习做NLP的时候一直有思考一 ...

  5. 自然语言处理 —— 2.5 学习词嵌入

    这里将学习一些具体算法来学习词嵌入,在深度学习应用于学习词嵌入的历史上,人们一开始使用的算法比较复杂.但随着时间推移,研究者们不断发现它们能用更加简单的算法来达到一样好的效果,特别是在数据集很大的情况 ...

  6. 深入理解深度学习——图嵌入(Graph Embedding)

    分类目录:<深入理解深度学习>总目录 前面的文章介绍了由Word Embedding延伸出的Item Embedding等,这些延伸都建立在它们有序列特性的基础上.其实,可延伸的领域还有很 ...

  7. 深度学习中的embedding

    整理翻译自google developer的机器学习入门课程,介绍了embedding的应用方式和如何计算embedding,后面还配有通过tensorflow DNN训练embedding练习加深理 ...

  8. 深度学习(六) Word Embedding

    Word Embedding 前言 一.One-hot编码 1.为什么使用one-hot编码? 2.什么是one-hot编码? 3.one-hot编码的优缺点 二.Word Embedding(词嵌入 ...

  9. tensorflow2.0实现IMDB文本数据集学习词嵌入

    1. IMDB数据集示例如下所示 [{"rating": 5, "title": "The dark is rising!", " ...

  10. 序列模型第二周 自然语言处理与词嵌入

    2.1 词汇表征 2.2 使用词嵌入 如果采用featurized representation对每个单词进行编码,再构建该RNN模型.对于一个新的句子:Robert Lin is a apple f ...

最新文章

  1. LeetCode 21. Merge Two Sorted Lists
  2. mysql基础(九) 索引和视图
  3. c:if判断参数是否为空
  4. 评分卡建模—拒绝推断
  5. ITK:向二进制图像添加噪声
  6. UDP 通讯协议 局域网通信发送消息 简单实现
  7. JavaScript强化教程 —— Cocos2d-JS极速调试技巧
  8. iOS5中 UIViewController新方法的使用
  9. 完善区块链产业链 加速经济数字化转型
  10. Linux 两台服务器之间传输文件
  11. C++自学13:位运算(std::bitset)
  12. RMAN冷备份异机还原
  13. python学习之课后习题
  14. 凤凰系统运行linux,凤凰系统率先升级内核到Linux4.9,支持更多新硬件
  15. 粒子群算法总结+背包问题
  16. 微信小程序 wx.request转同步
  17. IOS 最右 注册 登录协议分析记录
  18. 解读6大常见肿瘤的消融选择
  19. 【css】解决z-index失效或者不起作用
  20. html中submit和button的区别(总结)

热门文章

  1. Java String的内存机制
  2. An Introduction to Asynchronous Programming and Twisted (2)
  3. 【已解决】bootstrap table 参数后台获取不到
  4. python3 用递归方法列出所有目录与文件
  5. 面向对象程序的设计模式
  6. SpringMVC对象绑定时自定义名称对应关系
  7. cocos2d-html5 碰撞检测的几种方法
  8. 消息队列的使用场景(转载c)
  9. Swagger生成WebAPI文档
  10. c语言 int (*p)[5] 类型分析