embedding是指将目标向量化,常用于自然语言处理(如:Word2Vec)。这种思想的意义在于,可以将语义问题转换为数值计算问题,从而使计算机能够便捷处理自然语言问题。如果采用传统的One-hot编码,每个单词之间相互独立,此时词向量之间相互正交,编码无法反映单词之间的关联关系。而embedding可以理解为是将One-hot编码的高维向量,降维到一个较低维度的空间,在这个空间中不同单词之间能够通过向量计算确定关系。比如:北京为[0,1,1],巴黎为[0,0.5,0.5],二者的距离可以简单的用点乘表示为0*0+1*0.5+1*0.5=1。

那么,我们如何得到每个单词的embedding呢?概括来说,就是基于语料库训练一个双层神经网络,得到的权重矩阵即为embedding。注意,这里训练神经网络的目标并不是得到一个可用于预测的模型,而是要得到神经网络中的权重矩阵参数。

在该神经网络中,输入(特征)和输出(标签)都来自于同一语料库。有两种主要的提取输入、输出的方法:CBOW(连续词袋)和Skip-Gram。其中CBOW将与目标词相邻的词作为输入,将目标词作为输出,而Skip-Gram将目标词作为输入,将与目标词相邻的词作为输出。

例如当语料库为一句话:the quick brown fox jumped over the lazy dog.假定我们要预测的目标词为fox,相邻窗口长度定义为左右1个单词时。使用CBOW提取的输入将是[brown, jumped],输出将是[fox]。Skip-Gram则正好相反,输入为[fox],输出为[brown, jumped]。实际应用中,CBOW在小语料库中较为有效,Skip-Gram更适用于大型语料库。

CBOW和Skip-Gram的训练过程并无太大区别,下面以CBOW为例来说明训练得到embedding的过程。下图展示了训练模型的各个要素以及它们之间的逻辑关系,其中最左边的x1k、x2k……xck是模型的输入,对应到上面实例就是[brown, jumped];最右边yj是模型的输出,对应上面实例中的[fox]。关键点在于x1k、x2k……xck以及yj全都是One-hot编码后的向量。对应到实例,可按单词在句子中的位置进行编码,这样brown将编码为[0,0,1,0,0,0,0,0,0],jumped编码为[0,0,0,0,1,0,0,0,0],fox编码为[0,0,0,1,0,0,0,0,0]。


明确了输入和输出数据,那embedding如何获取呢?答案就是图中与隐藏层相连的权重矩阵W(V*N)和W'(N*V),其中V是词库中单词的数量,对于上例而言V=9,N是我们最终希望得到的embedding的维度,这里假设N=5。W(V*N)的每一行或者W'(N*V)的每一列其实就是最终的单词embedding。

假设已经给W(V*N)和W'(N*V)赋好初值,那如何训练得到最终的W(V*N)和W'(N*V)呢?在回答这个问题之前,先简单描述下由输入预测输出的过程:图中xik(i=1,2...,C)均为1*V的one-hot编码向量,C为输入侧单词的数量;W(V*N)是V行N列的矩阵,则xik与W(V*N)相乘将得到一个1*N的向量vi,k(其中i=1,2...,C)。对这C个向量vi,k求算术平均,得到隐藏层输出hi=Σv(i,k)/C,容易知道hi亦为1*N维向量。W'(N*V)是N行V列的矩阵,隐藏层输出hi与W'(N*V)相乘得到预测输出yj',yj'正好也是1*V向量。至此,我们就可以给出训练的目标了,即预测值yj'与实际值yj的误差最小,这个误差可以使用交叉熵。

明确了训练目标,最后就是训练的方法:通常使用yj'与yj间的误差反向传播,即使用梯度下降法迭代法训练得到最终的W(V*N)和W'(N*V)。这两个矩阵就是我们最终要求得的embedding(使用任意一个都行),W(V*N)的每一行就代表对应单词的embedding,W'(N*V)的每一列也代表对应单词的embedding

更加详细的说明,可参考以下相关文献:
斯坦福大学Deep Learning for NLP课堂笔记:https://cs224d.stanford.edu/lecture_notes/notes1.pdf

embedding与word2vec的更多相关文章

  1. Embedding和Word2Vec实战

    在之前的文章中谈到了文本向量化的一些基本原理和概念,本文将介绍Word2Vec的代码实现 https://www.cnblogs.com/dogecheng/p/11470196.html#Word2 ...

  2. Word Embedding与Word2Vec

    http://blog.csdn.net/baimafujinji/article/details/77836142 一.数学上的“嵌入”(Embedding) Embed这个词,英文的释义为, fi ...

  3. 无所不能的Embedding 1 - Word2vec模型详解&代码实现

    word2vec是google 2013年提出的,从大规模语料中训练词向量的模型,在许多场景中都有应用,信息提取相似度计算等等.也是从word2vec开始,embedding在各个领域的应用开始流行, ...

  4. word2vec和word embedding有什么区别?

    word2vec和word embedding有什么区别? 我知道这两个都能将词向量化,但有什么区别?这两个术语的中文是什么? from: https://www.zhihu.com/question ...

  5. 学习笔记CB011:lucene搜索引擎库、IKAnalyzer中文切词工具、检索服务、查询索引、导流、word2vec

    影视剧字幕聊天语料库特点,把影视剧说话内容一句一句以回车换行罗列三千多万条中国话,相邻第二句很可能是第一句最好回答.一个问句有很多种回答,可以根据相关程度以及历史聊天记录所有回答排序,找到最优,是一个 ...

  6. Word Embedding理解

    一直以来感觉好多地方都吧Word Embedding和word2vec混起来一起说,所以导致对这俩的区别不是很清楚. 其实简单说来就是word embedding包含了word2vec,word2ve ...

  7. tensorflow加载embedding模型进行可视化

    1.功能 采用python的gensim模块训练的word2vec模型,然后采用tensorflow读取模型可视化embedding向量 ps:采用C++版本训练的w2v模型,python的gensi ...

  8. PaperWeekly 第五期------从Word2Vec到FastText

    PaperWeekly 第五期------从Word2Vec到FastText 张俊 10 个月前 引 Word2Vec从提出至今,已经成为了深度学习在自然语言处理中的基础部件,大大小小.形形色色的D ...

  9. 无所不能的embedding 3. word2vec->Doc2vec[PV-DM/PV-DBOW]

    这一节我们来聊聊不定长的文本向量,这里我们暂不考虑有监督模型,也就是任务相关的句子表征,只看通用文本向量,根据文本长短有叫sentence2vec, paragraph2vec也有叫doc2vec的. ...

随机推荐

  1. New Year and Old Subsequence CodeForces - 750E (dp矩阵优化)

    大意: 给定字符串, 每次询问区间[l,r]有子序列2017, 无子序列2016所需要删除的最小字符数 转移用矩阵优化一下, 要注意$(\mathbb{Z},min,+)$的幺元主对角线全0, 其余全 ...

  2. 4月18 数据库的CRUD操作

    php主要是实现B/S Brower Server;此外还有C/S:Client Server暂时不考虑: LAMP: Linux系统 A阿帕奇服务器 Mysql数据库 Php语言,而现在学的是在wi ...

  3. 【Java】【6】JDK8 Stream操作整理

    摘要: 1,List<EntityOld>转换为List<EntityNew> List<EntityOld> list = oldList; List<En ...

  4. springBoot配置,贴个图

    spring: datasource: name: test url: jdbc:mysql://localhost:3306/epay?characterEncoding=UTF-8 usernam ...

  5. javaweb项目静态资源被拦截的解决方法

    <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/*< ...

  6. 四则运算web最终版

    经过若干时间的奋战,终于完成了web版四则运算程序.团队成员:井小普.张贺. 设计思想: 在之前的程序基础上两人结合开发web系统. 首先,进行登录注册界面的编写,不同用户,对应不同的错题库,答题记录 ...

  7. sql百万级查询优化(转)

    < 数据库技术内幕 > 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进 ...

  8. DBMS_ROWID定位数据行物理存储位置

    对于Oracle中的堆表,我们可以通过oracle内置的ROWID伪列得到对应行记录所在的ROWID的值(注意,这个ROWID只是一个伪列,实际的块中并不存在该列).然后我们可以通过DBMS_ROWI ...

  9. mongodb副本集修改配置问题

    因虚拟机地址被占用,需要重新设置ip地址,这时需要修改副本集中的IP地址配置: 1: 查看配置rs.config():需要找到primary主机,在该主节点服务器上才有权限修改配置 2:rs.remo ...

  10. Linux安装配置NFS教程(CentOS 6.5)

    一.服务端安装nfs 1.1安装 yum install -y rpcbind yum install -y nfs-utils 1.2配置nfs共享目录 这里以/nfs目录为例 mkdir /nfs ...