CS224N(NLP)组队学习-L1 Introduction and Word Vectors

1. 学习内容

1. 词义

2. 如何对一个词进行表示

3. 什么是word2vector

4. word2vector的目标函数

本项目参见https://github.com/datawhalechina/team-learning/tree/master/04%20%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86

2. 词义

词义:语言或文字符号所表示的某种概念。

通过wordnet,我们可以查找与某个英语单词含义相近其他词汇。

图2.1 利用wordnet查找近义词

Wordnet是一个不错的资源工具,但是它也存在一些局限性。首先,它忽略了近义词之间存在的细微差别;其次,它难以持续维护和更新同时还需要投入大量人力;最后,也是最重要的是,它无法用来计算两个词之间的相似程度。

3. 如何表示一个词

在传统的NLP中,我们将一个词视为一个独热向量。然而,对于由同一个语料库得到的不同词的独热向量是彼此正交的。正交的向量无法计算相似度。另外,随着语料库中词汇的扩充,独热向量的维度会不断变大。这既不利于存储,也不利于计算,更不利于更新。因此,一个理想的词向量,应当是长度固定且非独热的密集向量。

针对这一点,有人提出用固定的上下文窗口的方式来表示一个词汇。之所以这么做的原因是:⼀个单词的意思往往是由经常出现在它附近的单词给出的。当⼀个单词w出现在⽂本中时,它的上下⽂是出现在其附近的⼀组单词(在一个固定大小的窗口中)。

图3.1 用上下文的方式表示一个单词

由这种方法得到的词向量不但能满足上面的需求,而且这个词向量还能保证与出现在类似上下文的词汇的词向量相似程度很高。

4. 什么是word2vector

Word2vector实际上就是一个用来得到词向量的框架。它的思想是:假设有大量的文本,固定的词汇表中每个词都由一个向量来表示;文本中的每个位置t,都有一个中心词c和一些外部词o(即上下文);用c与o的相似性来计算P(o|c)或P(c|o);不断调整词向量来最大化条件概率。

图4.1 P(o|c)的计算过程(中心词分别为into和banking)

5. Word2vector的目标函数

假设位置t=1,2,3,...,T,窗口大小为m,则对于给定的中心词应有

$$\text {Likelihoood}=L(\theta)=\prod_{t=1}^{T} \prod_{-m \leq j \leq m \atop j \neq 0} P\left(w_{t+j} \mid w_{t} ; \theta\right)$$

其中,\theta是所有需要优化的变量。

Word2vector的目标函数为

J(\theta)=-\frac{1}{T} \log L(\theta)=-\frac{1}{T} \sum_{t=1}^{T} \sum_{-m \leq j \leq m \atop j \neq 0} \log P\left(w_{t+j} \mid w_{t} ; \theta\right)

那么,现在问题变成了要如何求解P\left(w_{t+j} \mid w_{t} ; \theta\right)

我们规定:对于一个单词w,v_{w}为w作为中心词的词向量,而u_{w}为w作为外部词的词向量。于是,对于一个中心词c和一个外部词o,应有

P(o \mid c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)}

这里我们用到了softmax函数来进行处理。softmax函数可以放大最大概率,同时也可以避免将很低的概率变成0。

可以看出,优化目标函数实际上就是优化P(o \mid c)。这里我们使用梯度下降算法

\begin{aligned} \frac{\partial}{\partial v_{c}} \log P(o \mid c) &=\frac{\partial}{\partial v_{c}} \log \frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} \\ &=\frac{\partial}{\partial v_{c}}\left(\log \exp \left(u_{o}^{T} v_{c}\right)-\log \sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)\right) \\ &=\frac{\partial}{\partial v_{c}}\left(u_{o}^{T} v_{c}-\log \sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)\right) \\ &=u_{o}-\frac{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right) u_{w}}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} \end{aligned}

可以看出,第⼀项是真正的外部词,第⼆项则是预测的外部词。在多次迭代后,模型预测的上下⽂将越来越接近真正的上下⽂。

上式还可以进一步改写为

\begin{aligned} \frac{\partial}{\partial v_{c}} \log P(o \mid c) &=u_{o}-\frac{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right) u_{w}}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} \\ &=u_{o}-\sum_{w \in V} \frac{\exp \left(u_{w}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} u_{w} \\ &=u_{o}-\sum_{w \in V} P(w \mid c) u_{w} \end{aligned}

从另一个角度来看

\begin{aligned} \frac{\partial}{\partial u_{o}} \log P(o \mid c) &=\frac{\partial}{\partial u_{o}} \log \frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} \\ &=\frac{\partial}{\partial u_{o}}\left(\log \exp \left(u_{o}^{T} v_{c}\right)-\log \sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)\right) \\ &=\frac{\partial}{\partial u_{o}}\left(u_{o}^{T} v_{c}-\log \sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)\right) \\ &=v_{c}-\frac{\sum \frac{\partial}{\partial u_{o}} \exp \left(u_{w}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} \\ &=v_{c}-\frac{\exp \left(u_{o}^{T} v_{c}\right) v_{c}}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} \\ &=v_{c}-\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} v_{c} \\ &=v_{c}-P(o \mid c) v_{c} \\ &=(1-P(o \mid c)) v_{c} \end{aligned}

P(o \mid c) \rightarrow 1时,通过中⼼词c我们可以正确预测外部词o 。此时我们无需对u_{o}进行调整,否则则要调整。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值