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. Power Of Two leetcode java

    问题描述: Given an integer, write a function to determine if it is a power of two. 问题分析:给定一个数,判断它是不是2的幂. ...

  2. python中几种循环体

    条件判断与循环 1.条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: < ...

  3. [LightOJ 1265] Island of Survival

    Island of Survival You are in a reality show, and the show is way too real that they threw into an i ...

  4. 六、持久层框架(Hibernate)

    一.乐观锁 Hibernate使用乐观锁来处理脏数据问题. 比如有这样一个制造脏数据的场景: 1.通过session1得到id=1的对象product1 2.在product1原来的价格基础上增加10 ...

  5. C++ leetcode Longest Palindromic Substring

    明天就要上课了,再过几天又要见班主任汇报项目进程了,什么都没做的我竟然有一种迷之淡定,大概是想体验一波熬夜修仙的快乐了.不管怎么说,每天还是要水一篇博文,写一个LeetCode的题才圆满. 题目:Gi ...

  6. 【转】JS常用函数整合库 lutils

    lutils 此工具包是在 outils 的基础上,加上个人平时收集的代码片段进行的二次整合 outils的GitHub:https://github.com/proYang/outils/blob/ ...

  7. rdesktop安装教程

    1.介绍 rdesktop是Linux下连接windows远程桌面的工具 2.下载 https://github.com/rdesktop/rdesktop/releases 3.安装 mkdir / ...

  8. 怎么样才是设计功能函数的好思路(javascript)?

    在js里面,对于函数的调用,实际上也是也是面向对象的思路,于是写好js函数,也是考核面向对象设计的能力,同时也必须考虑到如何实现高内聚和低耦合,拿一个例子来说,现在的需求是这样的,实现个投资进度框,就 ...

  9. shell脚本分析一

    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界 ...

  10. 真实分享记录我学习Linux系统遇到的问题

    对于linux,又爱又恨,也有自己的一些看法,毕竟已经接触了快两年了.但是,说出来都是伤,为什么呢?如果您想知道请让我给您慢慢道来. 最开始接触linux是在高考完后,由于我家的台式电脑太卡,于是我就 ...