2020李宏毅机器学习笔记-Unsupervised Learning - Word Embedding

目录

概述

Introduction

Word Embedding

Count based

Prediction based

how to do predition

Why prediction works

Sharing Parameters

Formulation

In Practice

Various Architectures

Application

机器问答

机器翻译

总结和展望


概述

本节首先提出一个问题如何用vector来表示一个word呢?给了两种方法1-of-N Encoding和Word Class,但都有局限性,1-of-N Encoding无法体现词义之间的联系而word class也无法体现全面的信息。

因此引出word embedding,word embedding就是用向量表示词,输入一个词,输出一个向量。word embedding的基本思路就是:通过上下文找到这个词的意义,基于降维思想提供了count-based和prediction-based两种方法,并介绍了该思想在机器问答、机器翻译、图像分类、文档嵌入等方面的应用。

 

Introduction

词嵌入(word embedding)是降维算法(Dimension Reduction)的典型应用

那如何用vector来表示一个word呢?

1-of-N Encoding

最传统的做法是1-of-N Encoding,假设这个vector的维数就等于世界上所有单词的数目,那么对每一个单词来说,

只需要某一维为1,其余都是0即可;但这会导致任意两个vector都是不一样的,你无法建立起同类word之间的联系。

Word Class

还可以把有同样性质的word进行聚类(clustering),划分成多个class,然后用word所属的class来表示这个word,

但光做clustering是不够的,不同class之间关联依旧无法被有效地表达出来。

Word Embedding

词嵌入(Word Embedding)把每一个word都投影到高维空间上,当然这个空间的维度要远比1-of-N Encoding的维度低,

假如后者有10w维,那前者只需要50~100维就够了,这实际上也是Dimension Reduction的过程。

类似语义(semantic)的词汇,在这个word embedding的投影空间上是比较接近的,而且该空间里的每一维都可能有特殊的含义

假设词嵌入的投影空间如下图所示,则横轴代表了生物与其它东西之间的区别,而纵轴则代表了会动的东西与静止的东西之间的差别

word embedding是一个无监督的方法(unsupervised approach),只要让机器阅读大量的文章,

它就可以知道每一个词汇embedding之后的特征向量应该长什么样子。

我们的任务就是训练一个neural network,input是词汇,output则是它所对应的word embedding vector,实际训练的时候我们只有data的input,该如何解这类问题呢?

 

Word Embedding

basic idea

基本精神就是,每一个词汇的含义都可以根据它的上下文来得到

比如机器在两个不同的地方阅读到了“bxx520宣誓就职”、“axx520宣誓就职”,它就会发现“bxx”和“axx”前后都有类似的文字内容,

于是机器就可以推测“马xx”和“蔡xx”这两个词汇代表了可能有同样地位的东西,即使它并不知道这两个词汇是人名。

怎么用这个思想来找出word embedding的vector呢?有两种做法:

  • Count based
  • Prediction based

Count based

假如wi和wj这两个词汇常常在同一篇文章中出现,它们的word vector分别用V(wi)和V(wj)来表示,则V(wi)和V(wj)会比较接近

假设 Ni,j 是wi和wj这两个词汇在相同文章里同时出现的次数,我们希望它与V(wi). V(wj)的内积越接近越好。

 

Prediction based

how to do predition

 

给定一个sentence,我们要训练一个神经网络,它要做的就是根据当前的word wi-1 ,来预测下一个可能出现的word  wi是什么

假设我们使用1-of-N encoding把wi-1表示成feature vector,它作为neural network的input,output的维数和input相等,只不过每一维都是小数,

代表在1-of-N编码中该维为1其余维为0所对应的word会是下一个word wi 的概率。

把第一个hidden layer的input z1,z2.... 拿出来,它们所组成的Z就是word的另一种表示方式,当我们input不同的词汇,向量Z就会发生变化,

也就是说,第一层hidden layer的维数可以由我们决定,而它的input又唯一确定了一个word,因此提取出第一层hidden layer的input,

实际上就得到了一组可以自定义维数的Word Embedding的向量。

 

Why prediction works

 

prediction-based方法是如何体现根据词汇的上下文来了解该词汇的含义这件事呢?

假设在两篇文章中,“aaa”和“bbb”代表wi-1,“宣誓就职”代表wi,我们希望对神经网络输入“axx”或“bxx”这两个词汇,

输出的vector中对应“宣誓就职”词汇的那个维度的概率值是高的。

为了使这两个不同的input通过NN能得到相同的output,就必须在进入hidden layer之前,就通过weight的转换将这两个input vector投影到位置相近的低维空间上,

也就是说,尽管两个input vector作为1-of-N编码看起来完全不同,但经过参数的转换,将两者都降维到某一个空间中,在这个空间里,

经过转换后的new vector 1和vector 2是非常接近的,因此它们同时进入一系列的hidden layer,最终输出时得到的output是相同的。

因此,词汇上下文的联系就自动被考虑在这个prediction model里面

总结一下,对1-of-N编码进行Word Embedding降维的结果就是神经网络模型第一层hidden layer的输入向量[z1,z2,z3....]T,

该向量同时也考虑了上下文词汇的关联,我们可以通过控制第一层hidden layer的大小从而控制目标降维空间的维数。

Sharing Parameters

你可能会觉得通过当前词汇预测下一个词汇这个约束太弱了,由于不同词汇的搭配千千万万,即便是人也无法准确地给出下一个词汇具体是什么,

你可以扩展这个问题,使用10个及以上的词汇去预测下一个词汇,可以帮助得到较好的结果,

这里用2个词汇举例,如果是一般是神经网络,我们直接把wi-2和wi-1这两个vector拼接成一个更长的vector作为input即可

但实际上,我们希望和wi-2相连的weight与和wi-1相连的weight是tight在一起的,简单来说就是与的相同dimension对应到第一层hidden layer相同neuron之间的连线拥有相同的weight,

在下图中,用同样的颜色标注相同的weight:

 

如果我们不这么做,那把同一个word放在wi-2的位置和放在wi-1的位置,得到的Embedding结果是会不一样的,把两组weight设置成相同,可以使wi-2与wi-1的相对位置不会对结果产生影响,

除此之外,这么做还可以通过共享参数的方式有效地减少参数量,不会由于input的word数量增加而导致参数量剧增。

Formulation

假设wi-2的1-of-N编码为xi-2,wi-1的1-of-N编码为xi-1,维数均为|V|,表示数据中的words总数

hidden layer的input为向量z,长度为|Z|,表示降维后的维数, z = W1xi-2 + W2xi-1

其中W1和W2都是|Z|*|V|维的weight matrix,它由|Z|组|V|维的向量构成,第一组|V|维向量与|V|维的xi-2相乘得到z1,第二组|V|维向量与|V|维的xi-2相乘得到z2,...,依次类推

我们强迫让W1=W2=W,此时z=W(xi-2 + xi-1)

因此,只要我们得到了这组参数W,就可以与1-of-N编码x相乘得到word embedding的结果

In Practice

那在实际操作上,我们如何保证W1和W2一样呢?

以下图中的wi和wj为例,我们希望它们的weight是一样的:

  • 首先在训练的时候就要给它们一样的初始值

  • 然后分别计算loss function 对和的偏微分,并对其进行更新

这个时候你就会发现,C对wi和wj的偏微分是不一样的,这意味着即使给了wi和wj相同的初始值,

更新过一次之后它们的值也会变得不一样,因此我们必须保证两者的更新过程是一致的,即:

 

这个时候,我们就保证了wi和wj始终相等:

  • wi和wj的初始值相同
  • wi和wj的更新过程相同

如何去训练这个神经网络呢?注意到这个NN完全是unsupervised,你只需要上网爬一下文章数据直接喂给它即可

比如喂给NN的input是“潮水”和“退了”,希望它的output是“就”,之前提到这个NN的输出是一个由概率组成的vector,而目标“就”是只有某一维为1的1-of-N编码,

我们希望minimize它们之间的cross entropy,也就是使得输出的那个vector在“就”所对应的那一维上概率最高。

Various Architectures

除了上面的基本形态,Prediction-based方法还可以有多种变形

  • CBOW(Continuous bag of word model)

    拿前后的词汇去预测中间的词汇

  • Skip-gram

    拿中间的词汇去预测前后的词

 

Application

机器问答

从得到的word vector里,我们可以发现一些原本并不知道的word与word之间的关系

把word vector两两相减,再投影到下图中的二维平面上,如果某两个word之间有类似包含于的相同关系,它们就会被投影到同一块区域

 

机器翻译

此外,word vector还可以建立起不同语言之间的联系

如果你要用上述方法分别训练一个英文的语料库(corpus)和中文的语料库,你会发现两者的word vector之间是没有任何关系的,因为Word Embedding只体现了上下文的关系,如果你的文章没有把中英文混合在一起使用,机器就没有办法判断中英文词汇之间的关系

但是,如果你知道某些中文词汇和英文词汇的对应关系,你可以先分别获取它们的word vector,然后再去训练一个模型,把具有相同含义的中英文词汇投影到新空间上的同一个点

接下来遇到未知的新词汇,无论是中文还是英文,你都可以采用同样的方式将其投影到新空间,就可以自动做到类似翻译的效果

 

总结和展望

本节学习了Word Embedding(词嵌入)的知识,其基本思路就是:通过上下文找到这个词的意义,它是无监督学习的(输入一个词,输出一个向量),其基本思路有 Count based(基于统计) 与 Prediction based(基于预测)两种方法。

基于统计的主要思想是:两词向量共同出现的频率比较高的话,那么这两个词向量也应该比较相似。

而基于预测的方法是,我们要训练一个神经网络,它要做的就是根据当前的word wi-1 ,来预测下一个可能出现的word  wi是什么。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值