菜鸟的NLP学习记002 ---------斯坦福公开课CS224n--------词向量表示:Word2Vec

本文为学习笔记,供自己复习回顾,分享,交流,如果专家们发现谬误之处欢迎批评与修正。

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

上节课我们自顶向下从宏观层面讨论了什么是NLP,什么是深度学习,如何将深度学习应用于NLP领域,这届课我们将从基本的语言的底层开始研究,我们将使用向量,做一些简单的数学。

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

1.词汇含义

1.我们如何表示一个词的含义?

1.韦伯斯特词典对meaning(含义)做了如下定义:

a.用单词或短语等表示的想法。

b.人们想要通过单词、符号等表达的想法

c.书面或艺术表达的想法

2.最常见的语言学角度对meaning (含义) 的看法是:

单词就像是一种语言学的符号,它指代了世界上的某些具体事物,如果我有一个单词,比如说眼镜,这就有了具体的指代,所以所有“眼镜”能指代的事物,就是眼镜一词的指代物。

但是这种解释在我们运用在计算机系统处理语言时并不是很容易可行,

2.我们怎样在计算机中拥有可用的含义?

目前,最常用的方法是,人们分类学来处理词义,英语方面我们有WordNet, 它可以提供很多词汇相关的分类信息,具有上义词(is-a)关系 和同义词集合

上义词(hypernyms):是对事物的概括性、抽象性说明。

下义词(hyponyms):是事物的具体表现形式或更为具体的说明。

同义词(synonyms):意义相同或相近的词。

e.g.   桌子和板凳是都是家具,所以他们都是家具的下义词,反过来,家具里面有桌子和板凳,所以家具是他们的上义词。

上义词关系也可以称为包含关系,从属关系,板凳是一种家具,桌子是一种家具。

根据这种关系,我们形成具有意思相近或相同的集合,也就是同义词集合。

如下图,使用python从nltk语料库中调用wordnet,寻找panda(不是pandas库)的上义词,可以发现,熊猫是浣熊类,之后食肉动物等等,之后越来越大。

再比如说,good(好)的一词不同含义的同义词,我们同样可以用python查找同义词集合。比如说good在形容好人时,可以有其他的同义词(令人尊敬的),在形容熟了的梨时,有熟了的同义词。

3.离散化表征的问题

实际生活中,本身就存在大量的同义词资源,但是我们很难从这些资源中尽可能多的获取价值。那么为啥呢?

1. 这类资源会忽略很多细微差别,e.g. good和专家还是有区别的。

2. 缺乏新词(不能保证语料库的实时更新),e.g.很多网络词汇并没有包含

3. 主观性很强,哪些词时同义的,哪些词是异义的,是非常模糊的判断

4. 需要大量人力去创造和更新

5. 很难对词汇的相似性给出准确定义,e.g. 精通比“好” 更接近于专家。

大多数基于规则和统计的NLP把词看作是原子符号,例如 hotel, conference,walk.

在向量空间表示中,就会出现一个1和很多的0,这样来表示一个单词。

这个向量的大小取决于你的语料库中词汇量的大小。

随着词汇量的增多,你需要存储的向量也就越多越大。

我们这种表示方法称作为“one-hot”表示,中文叫热编码。

它的主要问题在于,它没有给出任何词汇之间的内在关系概念,但是我们常常想得到的是一些有相近含义的词汇和短语,因为在网络搜索问题中我们并不能精确定位到每一个单词,而是“模糊”的去查找,例如:

如果用户搜索“Seattle motel“,我们其实更想去匹配包含”Seattle hotel“ 的文档,但是实际上如果我们采用热编码的方法,

我们的请求和文本向量是正交的, motel 和 hotel没有内在相似性。

这种符号编码问题不仅仅存在于传统基于规则的理性方法的自然语言处理中,也存在于所有基于概率统计传统的机器学习方法,尽管使用这些模型运用了真实的数字,计算了某些词在其他词存在背景下出现的可能性,但是因为它们是基于符号表示开发的,所以你就不能得出词汇和模型之间的关联,每个词汇都是独立存在而已。

解决方法:

1. 直接建立一套独立的相似度体系

2.重新建立一种直接体现相似度的向量编码 (我们用的)

4.基于分布相似性的表示(分布表示)

分布相似性是指,只需通过观察其出现的上下文,并对这些上下文做一些处理,你可以得到大量表示某个词汇含义的值。

e.g. 如下图所示,如果我想知道banking这个词的含义,我找到很多包含banking的例句进行观察,观察其出现的场合,你会看到:债务问题,政府法规,欧洲,统一的,然后我们开始统计所有出现过的内容,通过某种方式用这些上下文中的词来表示banking的含义

接下来我们为每个单词构造一个向量,我们会建立一个密集向量(不是稀疏的),以至于可以让它预测目标单词所在文本的其他词汇,这叫做分布表示,这个过程是迭代循环更新的。

2. 什么是word2vec?

1.学习神经网络词汇编码的基本思想

我们定义一个模型,来根据中心词汇预测它的上下文词汇,根据给定单词预测上下文单词出现的概率,

接下来我们可以用损失函数来判断,预测准确性。

这种模型是一个能够义词学习一个迭代,并最终能够对给定上下文单词的概率进行编码的模型,而不是计算和保留一个巨大的数据集的全局信息。

该模型的参数就是词向量,在每次模型的迭代,计算误差,并遵循一些更新规则,该模型具有惩罚造成错误的模型参数(损失函数)的作用,从而可以学习到词向量,这种方法称为误差反向传播,使得训练模型的速度更快。

我们将在大型语料库的各个地方重复这样的操作,我们的目标是调整词汇的表示,从而使损失最小化。

2. word2vec主要思想

word2vec模型核心是构建一个很简单的、可扩展的、快速的训练模型,让我们可以处理数十亿单词文本,并生成非常棒的单词表示。

word2vec尝试去做的最基本的事情就是利用语言的意义理论来预测每个单词和它的上下文词汇。

包含两个用于生成词汇向量的算法和两套效率中等的训练方法。

两个算法:continuouscontinuous bag-of-words(CBOW)和 skip-gram。CBOW 是根据中心词周围的上下文单词来预测该词的词向量。skip-gram 相反,是根据中心词预测周围上下文的词的概率分布。

两个训练方法: negative sampling 和 hierarchical softmax。Negative sampling 通过抽取负例来定义目标,hierarchical softmax使用一个有效的树结构来计算所有词的概率来定义目标。

2.1.Skip-grams(SG)

给定中心词”banking“, 模型可以预测或者生成中心词附近的词语,这样的模型叫做Skip-gram模型。

对于每一个单词t=1...T,在窗口半径m的范围内进行上下文词预测。

其目标函数是,最大化现有中心词的上下文次的概率。

也就是最小化负对数释然值。

对于每个在中心值Wt下Wt+j的条件概率最初是,

o:除中心词以外词的索引

c:中心词索引

Vc:中心词向量

Vo:索引为o的向量。

使用Softmax生成概率分布。

具体过程如下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值