文档章节

有谁可以解释下word embedding?

Airship
 Airship
发布于 2017/08/19 07:29
字数 5437
阅读 74
收藏 0

li Eta

li Eta

 

机器学习 话题的优秀回答者

316 人赞同了该回答

word embedding的意思是:给出一个文档,文档就是一个单词序列比如 “A B A C B F G”, 希望对文档中每个不同的单词都得到一个对应的向量(往往是低维向量)表示。
比如,对于这样的“A B A C B F G”的一个序列,也许我们最后能得到:A对应的向量为[0.1 0.6 -0.5],B对应的向量为[-0.2 0.9 0.7] (此处的数值只用于示意)

之所以希望把每个单词变成一个向量,目的还是为了方便计算,比如“求单词A的同义词”,就可以通过“求与单词A在cos距离下最相似的向量”来做到。

word embedding不是一个新的topic,很早就已经有人做了,比如bengio的paper“Neural probabilistic language models”,这其实还不算最早,更早的时候,Hinton就已经提出了distributed representation的概念“Learning distributed representations of concepts”(只不过不是用在word embedding上面) ,AAAI2015的时候问过Hinton怎么看google的word2vec,他说自己20年前就已经搞过了,哈哈,估计指的就是这篇paper。

总之,常见的word embedding方法就是先从文本中为每个单词构造一组features,然后对这组feature做distributed representations,哈哈,相比于传统的distributed representations,区别就是多了一步(先从文档中为每个单词构造一组feature)。

既然word embedding是一个老的topic,为什么会火呢?原因是Tomas Mikolov在Google的时候发的这两篇paper:“Efficient Estimation of Word Representations in Vector Space”、“Distributed Representations of Words and Phrases and their Compositionality”。

这两篇paper中提出了一个word2vec的工具包,里面包含了几种word embedding的方法,这些方法有两个特点。一个特点是速度快,另一个特点是得到的embedding vectors具备analogy性质。analogy性质类似于“A-B=C-D”这样的结构,举例说明:“北京-中国 = 巴黎-法国”。Tomas Mikolov认为具备这样的性质,则说明得到的embedding vectors性质非常好,能够model到语义。

这两篇paper是2013年的工作,至今(2015.8),这两篇paper的引用量早已经超好几百,足以看出其影响力很大。当然,word embedding的方案还有很多,常见的word embedding的方法有:
1. Distributed Representations of Words and Phrases and their Compositionality
2. Efficient Estimation of Word Representations in Vector Space
3. GloVe Global Vectors forWord Representation
4. Neural probabilistic language models
5. Natural language processing (almost) from scratch
6. Learning word embeddings efficiently with noise contrastive estimation
7. A scalable hierarchical distributed language model
8. Three new graphical models for statistical language modelling
9. Improving word representations via global context and multiple word prototypes

word2vec中的模型至今(2015.8)还是存在不少未解之谜,因此就有不少papers尝试去解释其中一些谜团,或者建立其与其他模型之间的联系,下面是paper list
1. Neural Word Embeddings as Implicit Matrix Factorization
2. Linguistic Regularities in Sparse and Explicit Word Representation
3. Random Walks on Context Spaces Towards an Explanation of the Mysteries of Semantic Word Embeddings
4. word2vec Explained Deriving Mikolov et al.’s Negative Sampling Word Embedding Method
5. Linking GloVe with word2vec
6. Word Embedding Revisited: A New Representation Learning and Explicit Matrix Factorization Perspective

编辑于 2015-08-27

31610 条评论

分享

收藏感谢收起

知乎用户

知乎用户

218 人赞同了该回答

题主问的是embedding的含义,楼上几位的回答都是拿word embedding说了一通,也没解释出embedding的含义。我来说一下。
Embedding在数学上表示一个maping, f: X -> Y, 也就是一个function,其中该函数是injective(就是我们所说的单射函数,每个Y只有唯一的X对应,反之亦然)和structure-preserving (结构保存,比如在X所属的空间上X1 < X2,那么映射后在Y所属空间上同理 Y1 < Y2)。那么对于word embedding,就是将单词word映射到另外一个空间,其中这个映射具有injective和structure-preserving的特点。

通俗的翻译可以认为是单词嵌入,就是把X所属空间的单词映射为到Y空间的多维向量,那么该多维向量相当于嵌入到Y所属空间中,一个萝卜一个坑。

word embedding,就是找到一个映射或者函数,生成在一个新的空间上的表达,该表达就是word representation。

推广开来,还有image embedding, video embedding, 都是一种将源数据映射到另外一个空间

编辑于 2016-10-24

21811 条评论

分享

收藏感谢

李韶华

李韶华

研究者

98 人赞同了该回答

(基于我之前做的一个slides编写。slides完整版:https://sites.google.com/site/shaohua03/intro-word-embedding.pdf

 

词嵌入最粗浅的理解

o 词映射到低维连续向量(如图)

cat: (-0.065, -0.035, 0.019, -0.026, 0.085,…)

dog: (-0.019, -0.076, 0.044, 0.021,0.095,…)

table: (0.027, 0.013, 0.006, -0.023, 0.014, …)

o 相似词映射到相似方向 -- 语义相似性被编码了

o Cosine相似度衡量方向

词嵌入可以做类比题 o v(“国王”) – v(“王后”) ≈ v(“男”) – v(“女”) o v(“英国”) + v(“首都”) ≈ v(“伦敦”) o 反映出语义空间中的线性关系 o词嵌入编码了语义空间中的线性关系, 向量的不同部分对应不同的语义 o 质疑:然而并没有什么x用? o 两个句子: A含“英国”,“首都”,不含“伦敦”;B含“伦敦” o 所有词的词向量的和表示句子 o 两个句子仍会比较相似

相似词映射到相似方向:为什么 o 基本假设:“相似”词的邻居词分布类似 o 倒推:两个词邻居词分布类似 → 两个词语义相近 o 宠物 主人 喂食 蹭 喵 o 宠物 主人 喂食 咬 汪 o v(“猫”)≈v(“狗”) o Apple: tree red growth design music company engineering executive o v(“apple”)≈v(“orange”), v(“apple”)≈v(“microsoft”)

词嵌入的优点 传统one-hot编码: “天气”: (1,0,0…,0),“气候”: (0,1,0,…0) 权力/的/游戏: (1,0,0,1,1,0,0, …) 冰/与/火/之/歌: (0,1,1,0,0,1,1,…) o 维度高(几千–几万维稀疏向量),数据稀疏 o 没有编码不同词之间的语义相似性 o 难以做模糊匹配 词嵌入: o 维度低(100 – 500维), 连续向量,方便机器学习模型处理 o 无监督学习,容易获得大语料 o 天然有聚类后的效果 o 一个向量可以编码一词多义 (歧义的问题需另外处理) o 罕见词也可以学到不错的表示:“风姿绰约” ≈ “漂亮”

 

Word2vec 简介

o Mikolov 2013, Distributed Representations of Words and Phrases and their Compositionality

o 使用最广泛的词嵌入方法

o 速度快,效果好,容易扩展

o 原因:简单(Less is more)

Word2vec 模型

o 回归连结函数:

o P(w_k|w_i) \propto \exp(\tilde{v}_{w_k}^T v_{w_i} ) (分母是归一化项,可暂时忽略)

o \tilde{v}_{w_k}v_{w_i} 方向相似: 预测的 P(w_k|w_i)

方向不同: 预测的概率小

o w_k经常出现在w_i周围,P(w_k|w_i) 大,驱使 \tilde{v}_{w_k}v_{w_i} 指向相似方向

o \tilde{v}_{w_i}v_{w_i} 两套词向量,使用时只保留一套

o 没有耗时的矩阵乘,只留一个softmax变换,所以效率高

o 优化用随机梯度递降,罕见词不会主导优化目标

o 罕见词的统计数据噪音(随机性)很大;常用词的统计数据比较稳定,偏差很小

o 与之相对,基于矩阵分解的算法经常被罕见词主导优化目标,导致overfit噪音

编辑于 2017-06-30

988 条评论

分享

收藏感谢收起

YJango

YJango

 

日本会津大学 人机界面实验室博士在读

43 人赞同了该回答

YJango的Word Embedding--介绍 - 知乎专栏

该篇主要是讨论为什么要做word embedding:

gitbook阅读地址:Word Embedding介绍

目录

  • 单词表达
    • One hot representation
    • Distributed representation
  • Word embedding
    • 目的
      • 数据量角度
      • 神经网络分析
    • 训练简述

 

至于word embedding的详细训练方法在下一节描述。

单词表达

先前在卷积神经网络的一节中,提到过图片是如何在计算机中被表达的。 同样的,单词也需要用计算机可以理解的方式表达后,才可以进行接下来的操作。

One hot representation

程序中编码单词的一个方法是one hot encoding。

实例:有1000个词汇量。排在第一个位置的代表英语中的冠词"a",那么这个"a"是用[1,0,0,0,0,...],只有第一个位置是1,其余位置都是0的1000维度的向量表示,如下图中的第一列所示。

 

也就是说,

在one hot representation编码的每个单词都是一个维度,彼此independent。

Distributed representation

然而每个单词彼此无关这个特点明显不符合我们的现实情况。我们知道大量的单词都是有关。

语义:girl和woman虽然用在不同年龄上,但指的都是女性。

复数:word和words仅仅是复数和单数的差别。

时态:buy和bought表达的都是“买”,但发生的时间不同。

所以用one hot representation的编码方式,上面的特性都没有被考虑到。

我们更希望用诸如“语义”,“复数”,“时态”等维度去描述一个单词。每一个维度不再是0或1,而是连续的实数,表示不同的程度。

目的

但是说到底,为什么我们想要用Distributed representation的方式去表达一个单词呢?

数据量角度

这需要再次记住我们的目的:

机器学习:从大量的个样本 {\{(x_i,y_i)^N_{i=1}}\} 中,寻找可以较好预测未见过 x_{new} 所对应 y_{new} 的函数 f:x\rightarrow y

实例:在我们日常生活的学习中,大量的 {\{(x_i,y_i)^N_{i=1}}\} 就是历年真题, x_i 是题目,而 y_i 是对应的正确答案。高考时将会遇到的 x_{new} 往往是我们没见过的题目,希望可以通过做题训练出来的解题方法 f:x\rightarrow y 来求解出正确的 y_{new}

如果可以见到所有的情况,那么只需要记住所有的 x_i 所对应的 y_i 就可以完美预测。但正如高考无法见到所有类型的题一样,我们无法见到所有的情况。这意味着,

机器学习需要从 有限的例子中寻找到合理的 f

高考有两个方向提高分数:

  • 方向一:训练更多的数据:题海战术。
  • 方向二:加入先验知识:尽可能排除不必要的可能性。

问题的关键在于训练所需要的数据量上。同理,如果我们用One hot representation去学习,那么每一个单词我们都需要实例数据去训练,即便我们知道"Cat"和"Kitty"很多情况下可以被理解成一个意思。为什么相同的东西却需要分别用不同的数据进行学习?

神经网络分析

假设我们的词汇只有4个,girl, woman, boy, man,下面就思考用两种不同的表达方式会有什么区别。

One hot representation

尽管我们知道他们彼此的关系,但是计算机并不知道。在神经网络的输入层中,每个单词都会被看作一个节点。 而我们知道训练神经网络就是要学习每个连接线的权重。如果只看第一层的权重,下面的情况需要确定4*3个连接线的关系,因为每个维度都彼此独立,girl的数据不会对其他单词的训练产生任何帮助,训练所需要的数据量,基本就固定在那里了。

 

Distributed representation

我们这里手动的寻找这四个单词之间的关系 f 。可以用两个节点去表示四个单词。每个节点取不同值时的意义如下表。 那么girl就可以被编码成向量[0,1],man可以被编码成[1,1](第一个维度是gender,第二个维度是age)。

 

那么这时再来看神经网络需要学习的连接线的权重就缩小到了2*3。同时,当送入girl为输入的训练数据时,因为它是由两个节点编码的。那么与girl共享相同连接的其他输入例子也可以被训练到(如可以帮助到与其共享female的woman,和child的boy的训练)。

 

Word embedding也就是要达到第二个神经网络所表示的结果,降低训练所需要的数据量。

 

而上面的四个单词可以被拆成2个节点的是由我们人工提供的先验知识将原始的输入空间经过 f (上图中的黄色箭头)投射到了另一个空间(维度更小),所以才能够降低训练所需要的数据量。 但是我们没有办法一直人工提供,机器学习的宗旨就是让机器代替人力去发现pattern。

Word embedding就是要从数据中自动学习到输入空间到Distributed representation空间的 映射 f

训练方法

问题来了,我们该如何自动寻找到类似上面的关系,将One hot representation转变成Distributed representation。 我们事先并不明确目标是什么,所以这是一个无监督学习任务。

无监督学习中常用思想是:当得到数据 {\{(x_i,y_i)^N_{i=1}}\} 后,我们又不知道目标(输出)时,

  • 方向一:从各个输入 \{{x_i}^N_{i=1}\} 之间的关系找目标。 如聚类。
  • 方向二:并接上以目标输出 y_i 作为新输入的另一个任务 g:y \rightarrow z ,同时我们知道的对应 z_i 值。用数据 {\{(x_i,z_i)^N_{i=1}}\} 训练得到 k:x \rightarrow z ,也就是 z=g(f(x)) ,中间的表达 y=g(x) 则是我们真正想要的目标。如生成对抗网络。

Word embedding更偏向于方向二。 同样是学习一个 k:x \rightarrow z ,但训练后并不使用 k ,而是只取前半部分的 f:x \rightarrow y

到这里,我们希望所寻找的 k:x \rightarrow z 既有标签 z_i ,又可以让 f(x) 所转换得到的 y 的表达具有Distributed representation中所演示的特点。

同时我们还知道,

单词意思需要放在特定的上下文中去理解。

那么具有相同上下文的单词,往往是有联系的。

实例:那这两个单词都狗的品种名,而上下文的内容已经暗指了该单词具有可爱,会舔人的特点。

  • 这个可爱的 泰迪 舔了我的脸。
  • 这个可爱的 金巴 舔了我的脸。

而从上面这个例子中我们就可以找到一个 k:x \rightarrow z :预测上下文。

用输入单词 x 作为中心单词去预测其他单词 z 出现在其周边的可能性。

我们既知道对应的 z 。而该任务 k 又可以让 f(x) 所转换得到的 y 的表达具有Distributed representation中所演示的特点。 因为我们让相似的单词(如泰迪和金巴)得到相同的输出(上下文),那么神经网络就会将泰迪的输入 x金巴的输入 x经过神经网络 f(x) 得到几乎相同的和泰迪的输出 y 金巴的输出 y

 

用输入单词作为中心单词去预测周边单词的方式叫做:Word2Vec The Skip-Gram Model

用输入单词作为周边单词去预测中心单词的方式叫做:Continuous Bag of Words (CBOW)

编辑于 2017-07-12

431 条评论

分享

收藏感谢收起

知乎用户

知乎用户

25 人赞同了该回答

竟然没人提分布式假设(distributional hypothesis)。

总的来说,word embedding就是一个词的低维向量表示(一般用的维度可以是几十到几千)。有了一个词的向量之后,各种基于向量的计算就可以实施,如用向量之间的相似度来度量词之间的语义相关性。其基于的分布式假设就是出现在相同上下文(context)下的词意思应该相近所有学习word embedding的方法都是在用数学的方法建模词和context之间的关系。

如何得到word embedding?主要分为两种:基于矩阵分解和基于预测,可参见论文[1].

基于矩阵分解

  1. 首先基于语料库构建word context共现矩阵M,矩阵中每个单元可以是二值的表示是否二者共现,也可以是经过处理后的,如共现频率,共现的TF-IDF,共现的mutual information, point-wise mutual information和positive point-wise mutual information,还可以根据一些规则对单元值进行过滤(比如超过某个值后截断, Stanford的Glove用的这种方式[2]),等等。很多可衡量二个对象之间关联的指标都可以用来作为矩阵中每个单元的值。
  2. 得到矩阵之后,就可以进行矩阵分解,这里的矩阵分解可以是SVD分解 [4];,也可以是直接分解成两个子矩阵的形式,即M=AB [2]; 还可以是低秩矩阵分解。

基于矩阵分解(SVD)的方法我看到的最早的论文是1992年Schutze的文章[7].

这里如果不进行矩阵分解(降维),也可以得到一个词的向量表示(矩阵的行),只不过维度太高(词典大小),不方便计算。

基于预测

这种方法就是所谓的基于神经网络的方法了。其核心思想就是先用向量代表各个词,然后通过一个预测目标函数学习这些向量的参数。比如给定当前词预测窗口范围内的上下文词;给定周围几个词,预测中间这个词;给定前边几个词,预测下一个词(语言模型)。比如Bengio 2000年在NIPS上提出的neural language model [7],给定前n给词预测下一个词出现的概率;Hinton 2007年提出的用Restricted Boltzmann Machine作为language model, Collobert提出用CNN预测上下文词[8]。给定xx预测xxx的模型的输入都是词的向量,然后通过中间各种NN模型预测下一个词的概率。通过优化目标函数,最后得到这些向量的值。

比如word2vec中直接用二者的向量表示的内积来表示二者之间的关联,如下图公式 [3] (这里的向量是待学习的参数):

 

------------------------

基于矩阵分解和基于预测的模型之间有什么关联?Levy在文章[3]中证明了基于预测的SGNS (word2vec)和基于PMI的矩阵分解是等价的,二者差了一个常数。

 

各种各样的上下文:

既然语料库中的上下文可以反映一个词的语义信息,那么其他种类的上下文呢?于是各种各样的上下文被提出来,如topic, 如knowledge base相关联的词或对象,一个词的内部组成结构(部首,词根词缀,词的定义词, 多语言之间的一一对应的对象,句法树中特定dependency的词,和词对应的图片,和词对应的音频等等。所有这些信息都可以反应一个词的语义信息,即semantic evidence。于是各种集成不同context的方法也被提出来了 multi-view, multi-modal, multi-source [5,6]。

 

1. Baroni, Marco, Georgiana Dinu, and Germán Kruszewski. “Don’t Count, Predict! A Systematic Comparison of Context-Counting vs. Context-Predicting Semantic Vectors.” In Proceedings of the 52nd Annual Meeting of the Association for Computational Linguistics (ACL), 238–247. Baltimore, MD, USA, 2014. http://anthology.aclweb.org/P/P14/P14-1023.pdf.

2.Pennington, Jeffrey, Richard Socher, and Christopher D. Manning. “Glove: Global Vectors for Word Representation.” In Proceedings of the Conference on Empirical Methods in Natural Language Processing (EMNLP), 1532--1543, 2014. http://nlp.stanford.edu/projects/glove/glove.pdf.

3. Levy, Omer, and Yoav Goldberg. “Neural Word Embedding as Implicit Matrix Factorization.” In Proceedings of NIPS, 2177–2185, 2014. http://papers.nips.cc/paper/5477-scalable-non-linear-learning-with-adaptive-polynomial-expansions.

4. Levy, Omer, Yoav Goldberg, and Ido Dagan. “Improving Distributional Similarity with Lessons Learned from Word Embeddings.” Transactions of the Association for Computational Linguistics 3 (2015): 211–225.

5. Faruqui, Manaal. “Diverse Context for Learning Word Representations.” Carnegie Mellon University, 2016. http://www.manaalfaruqui.com/.

6. Li, Yingming, Ming Yang, and Zhongfei Zhang. “Multi-View Representation Learning: A Survey from Shallow Methods to Deep Methods.” arXiv:1610.01206 [Cs], October 3, 2016. http://arxiv.org/abs/1610.01206.

7. Schutze, Hinrich. “Dimensions of Meaning.” In Proceedings of Supercomputing, 787–796. IEEE, 1992. http://ieeexplore.ieee.org/abstract/document/236684/.

8. Collobert, Ronan, and Jason Weston. “A Unified Architecture for Natural Language Processing: Deep Neural Networks with Multitask Learning,” 160–67. ACM, 2008.

编辑于 2017-07-13

252 条评论

分享

收藏感谢收起

Brad

Brad

30 人赞同了该回答

我觉得这是一篇很好的文章可以帮助理解word embedding:
Deep Learning, NLP, and Representations
http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/
如果不爱看英文的话,中文版也有:
深度学习、自然语言处理和表征方法

编辑于 2016-01-30

302 条评论

分享

收藏感谢

刘通

刘通

欢迎学术沟通,做自然语言处理方面,邮箱liutong3231@163.com

2 人赞同了该回答

WordEmbedding是文本挖掘的内容。文本挖掘的根本任务是分析文本,当前对文本进行分析基本上就是在两个层次:词汇和文档。(也有一些体系分为:词汇、句子和文档,其实句子也属于文档,俗称“短文本”)。

因此,只要将词汇和文档进行数值化处理,就可以进行大部分的语言分析任务了。传统的思路有两种:

思路1: 直接对文档进行数值化处理,分析时需要用到词汇时,把词汇视为特殊的文档

思路2:先对词汇进行数值化处理,然后再将文档的分析问题转化为对词汇集合的分析问题

WordEmbedding主要指基于思路2的技术实现,即WordEmbedding主要用于对词汇进行数值化处理。每个词对应一个数,就可以进行文本比较分析了。当然,为了丰富一下词汇的含义,可以把每个词对应成一个向量。

本文转载自:https://www.zhihu.com/question/32275069

共有 人打赏支持
Airship
粉丝 39
博文 907
码字总数 19854
作品 0
南京
高级程序员
私信 提问
深度学习之文本与序列--基于Keras的IMDB电影评论分类

【应用场景】 在深度学习中,文本和序列有着很多的应用场景: 文本分类、时间序列分类。eg. 确定一篇文章的主题,确定一本书的作者 时间序列的相互比较。eg. 文本相似度,股票行情预测 语言序...

imu_zhangpeng
06/29
0
0
word2vec的推导与实现

带着问题看文章 word2vec是怎么实现的? 略过,看论文,先不总结 Wordvec怎么得到词向量? 那么word2vec向量到底在哪儿?其实这些词向量就是神经网络里的参数,生成词向量的过程就是一个参数...

多了去的YangXuLei
2017/08/07
0
0
Word Embedding与Word2Vec

http://blog.csdn.net/baimafujinji/article/details/77836142 一、数学上的“嵌入”(Embedding) Embed这个词,英文的释义为, fix (an object) firmly and deeply in a surrounding mass, ......

dby_freedom
05/20
0
0
超详细解读:神经语义解析的结构化表示学习 | 附代码分析

任务介绍 本文介绍的任务,语义解析(Sematic Parsing),是将自然语言的句子转换为机器可解析的语义表达。具体而言,在这篇文章中,研究的问题为: 给定一个知识库(knowledge base)K,以及...

技术小能手
05/04
0
0
(转)word2vec前世今生

word2vec 前世今生 2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,...

wangxiaocvpr
2016/07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(三)之NioEventLoop的线程(或者reactor线程)启动(一)

在第一章中,我们看关于NioEventLoopGroup的初始化,我们知道了NioEventLoopGroup对象中有一组EventLoop数组,并且数组中的每个EventLoop对象都对应一个线程FastThreadLocalThread,那么这个...

天空小小
今天
2
0
PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
今天
2
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
今天
3
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
今天
4
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部