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. 【PowerDesigner】【5】数据模型 CDM

    前言:各种箭头的含义其实我还是有点混乱,所以这里只做记录 参考博客: 1,Powerdesigner数据库建模--概念模型--ER图[转] - holycrap - 博客园https://www.cn ...

  2. Hash应用例子

    八.Hash应用例子搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节.假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复 ...

  3. LeetCode 958. 二叉树的完全性检验

    958. 二叉树的完全性检验  显示英文描述 我的提交返回竞赛   用户通过次数119 用户尝试次数157 通过次数123 提交次数378 题目难度Medium 给定一个二叉树,确定它是否是一个完全二 ...

  4. Rail_UVa514_栈

    /* https://vjudge.net/problem/UVA-514 */ #include "pch.h" #include<iostream> #includ ...

  5. Beta阶段——第6篇 Scrum 冲刺博客

    Beta阶段--第6篇 Scrum 冲刺博客 标签:软件工程 一.站立式会议照片 二.每个人的工作 (有work item 的ID) 昨日已完成的工作 人员 工作 林羽晴 完成了函数的编写,提供报表数 ...

  6. django学习之——我的 Hello World

    pycharm 打开django 创建的项目:添加views.py文件 修改 urls.py from django.conf.urls import patterns, include, url f ...

  7. ActiveMQ producer 提交事务时突然宕机,会发生什么

    producer 在提交事务时,发生宕机,commit 的命令没有发送到 broker,这时会发生什么? ActiveMQ 开启事务发送消息的步骤: session.getTransactionCon ...

  8. qq远程连接/windows远程桌面/teamviwer/xmanager/vnc的区别

    软件 客户端运行平台 服务端运行平台 服务端是否需要同子网或公网IP 网络断开当前执行命令是否会中止 评价 QQ远程连接 windows windows 否 否 感觉用了一两分钟就动不了了 windo ...

  9. 在用mybatis向MySQL数据库中插入时间时报错:Incorrect datetime value: '' for column '' at row 1

    问题说明:使用的MySQL是5.1.37版本,用的mysql-connector-java-5.0.4.jar版本,在java文件中定义的字段是Date类型,MySQL中定义的字段类型是datetim ...

  10. SQLite 剖析

    由于sqlite对多进程操作支持效果不太理想,在项目中,为了避免频繁读写 文件数据库带来的性能损耗,我们可以采用操作sqlite内存数据库,并将内存数据库定时同步到文件数据库中的方法. 实现思路如下: ...