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. Oracle 基本操作--数据类型、修改和删除表、增删改查和复制表

    一.Oracle基础数据类型:数据类型: 创建数据表时,设计数据表的结构问题,也就是设计及确定数据表中各个列的数据类型,是数值.字符.日期还是图像等其他类型. 因为只有设计好数据表结构,系统才会在磁盘 ...

  2. java getInstance()的使用

    转自:https://www.cnblogs.com/roadone/p/7977544.html 对象的实例化方法,也是比较多的,最常用的方法是直接使用new,而这是最普通的,如果要考虑到其它的需要 ...

  3. 27. Remove Element C++移除元素

    网址:https://leetcode.com/problems/remove-element/ 双指针(广义) class Solution { public: int removeElement( ...

  4. lua 函数基础

    函数定义在前,调用在后 如果函数只有一个实参,并且此参数是一个字面字符串或者table构造式,那么可以省略() 例如 print "hello" unpack{1,2} print ...

  5. 【LeetCode】最大子序列和

    要求时间复杂度 O(n). e.g. 给定数组 [-2,1,-3,4,-1,2,1,-5,4],其中有连续子序列 [4,-1,2,1] 和最大为 6. 我完全没有想法,看了答案. C++实现: int ...

  6. Vue + webpack 项目配置化、接口请求统一管理

    准备工作 需求由来: 当项目越来越大的时候提高项目运行编译速度.压缩代码体积.项目维护.bug修复......等等成为不得不考虑而且不得不做的问题.  又或者后面其他同事接手你的模块,或者改你的bug ...

  7. A Bug's Life(向量偏移)

    A Bug's Life Time Limit : 15000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  8. 常用的flex知识 ,比起float position 好用不少

      flex布局具有便捷.灵活的特点,熟练的运用flex布局能解决大部分布局问题,这里对一些常用布局场景做一些总结. web页面布局(topbar + main + footbar) 示例代码   要 ...

  9. 原 spring-boot工程中,jpa下hibernate的ddl-auto的各种属性

    jpa:  hibernate:    ddl-auto: create ddl-auto:create----每次运行该程序,没有表格会新建表格,表内有数据会清空 ddl-auto:create-d ...

  10. ubuntu 挂载虚拟机vdi文件

    sudo apt-get  install nbd-server  nbd-client  qemu-kvm # rmmod nbd # modprobe nbd max_part=8 # qemu- ...