nlp笔记二

1 Word Meaning
需要掌握的主要是词的表示方法,大体来说,词的表示主要有下面两种:

1.1 discrete representation
用一个one-hot向量来表示一个词,比如现在有三个词apple,banana,orange分别对应向量的每个位置,那么[0,1,0]表示banana。

这种表示被称作是一种本地表示(localist representation)

当全部单词比较多的时候,discrete representation需要用比较大的维度表示一个单词,这样得到的向量是一个稀疏的向量(只有一维是1),而事实上我们希望如果两个词语词义相近,那么他们向量的内积比较大,但是用discrete representation表示两个近义词的话,他们对应的向量内积是0,这是我们不希望的

1.2 distributed representation
这种表示方法是想要用一个稠密的向量来表示一个单词,而稠密向量的维度可以不用像上一种那么大,同时我们希望两个近义词用distributed representation时对应向量的内积尽量大

关键是怎么得到这个稠密向量呢?笼统的说,我们是通过单词所处的上下文来得到的。一个单词所在文章的上下文能够体现这个单词的词义,我们称之为distributional similarity,举个例子,hotel和motel这两个单词上下文的环境一般是比较类似的。注意区分distributional similarity和我们说的distributed representation两者不是一回事,distributional similarity是语言学上表示词义的一种方式,而distributed representation是用数值(向量)的方式呈现词的一种方法。

至于具体怎么通过上下文得到稠密向量,就是下面word2vec的主要内容

2 word2vec introduction
word2vec就是为了实现distributed representation,但在细节上又有一点变化

2.1 中心词和上下文
word2vec中用两个稠密向量来表示一个单词,其中,用表示这个词作为中心词时对应的向量,用表示这个词作为上下文时对应的向量

那么什么是中心词和上下文呢?中心词和上下文是一对相对的概念,比如我有一句话 Here is the explanation for word2vec,那么当我选择explanation作为中心词的时候,here,is,the,for,word2vec就都被称为上下文。

2.2 SG与CBOW
现在我要想办法得到每一个词的和,主要有两种算法:

第一种是skip-grams(SG)算法,这种算法是假定中心词确定的情况下,得到每个词的和;

第二种是Continuous Bag of Words(CBOW)算法,这种算法是假定上下文确定的情况下,得到每个词的和

2.3 skip-grams算法铺垫部分
第二课中,主要介绍的是skip-grams算法

skip-grams算法中有一个半径是m的滑动窗口,对于一个中心词,只有滑动窗口中中心词前后的词才被我们称为上下文。举个例子,对一句话Here is the explanation for word2vec which is a basic concept in NLP,我们滑动窗口的半径如果是2,那么窗口的大小就是2m+1(等于5),初始时,窗口中内容是[Here is the explanation for],此时中心词时the,那么除了the以外的四个词都被认为是the的上下文;窗口滑动一次,内容变为[is the explanation for word2vec],此时中心词变为explanation…依次类推,每次向后滑动一下直至滑到底。

对于当前的窗口,假设是[is the explanation for word2vec],我们前面提到过SG算法的前提是认为中心词是确定的,也就是我们已知中心词是explanation,我们希望explanation的上下文中出现is,the,for,word2vec这件事是“合理”的,我们给出一个“合理”与否的判断标准:

这个值表示确定为中心词时上下文为的概率,其中表示中心词,在例子中就是explanation,表示中心词的前一个词,例子中是the,表示中心词的后两个词,例子中是word2vec。现在我们要做的就是让这个概率最大

2.4 求法与softmax公式
2.4.1 求法
通过2.3,我们了解了一个窗口内的优化的目标,那么现在问题就是怎么表示的问题了

首先,在为中心词的前提下出现的概率如果比较大,则说明和这两个单词比较“亲近”(现在为了方便表示,我用o表示,用c表示)。如果用数学语言来表示,就是c作为中心词时的向量与o作为上下文时的向量二者的内积的值越大,这两个词越“亲近”

2.4.2 softmax公式
但是,我并不能来作为的值,因为这个内积值都不一定在0到1之间,用它来做概率显然不合理

在这里,我们用softmax公式来得到的值。为了不过分偏移主题,我们这里不具体分析softmax公式本身的优点与合理性,只给出在这个问题里softmax的形式,关于softmax的详细知识可以单独查找学习。

下面给出的表示:

其中,V是语料库中所有单词的数量,我们把整个语料库中的每一个单词,都用他作为上下文的向量和做点积,作为这个单词和当前中心词c相似度的一个分数,把这个分数作为e的指数之后,可以认为仍然还是一个分数,只是放大或缩小了,但相对大小不变,我们希望大,其实是希望o作为上下文时这个分数占得比重尽量大

2.5 skip-grams总述
2.5.1 优化目标
2.3 2.4两节我们已经铺垫了对于一个滑动窗口内是怎么计算的;但是对于一段文字,我们希望的不仅仅是某一个滑动窗口内的概率最大,而是所有窗口中的情况同时成立时的值最大,也就是所有滑动窗口中对应概率之积最大,这个积记为,表示为

其中T为文本中可以作为中心词的词的数量,表示所有的参数(具体来说,就是所有单词的和)

我们要调整使对应的最大,但为了方便优化,我们更希望优化对象是一个和的形式,我们对取log,因为log函数单调递增,所以原先较大的值取log之后依然较大,现在变成了我们希望调整参数使取log之后的结果尽量大;接下来,我们在对取log之后的结果乘,那么就变成了我们希望当前的结果尽量小,最终要优化的函数是

我们要让这个函数最小

2.5.2 skip-grams整体流程
下面用V表示所有单词的总数,d表示稠密向量的维数

(1)输入一个单词对应的one-hot向量,这个向量是V*1维的,我们假设其第m列为1

(2)定义一个d*V维的矩阵,这个矩阵的第j列就是第j个单词的,所以乘得到的就是输入单词作为中心词的(因为只有第m维是1,所以也只有那m列起作用)

(3)定义一个Vd维的矩阵,这个矩阵的第i行就是第i个单词的,所以乘得到一个V1维向量,其中第k维的数值就是输入的单词作为中心词时,第k个单词作为上下文时二者向量的点积

(4)对向量进行softmax操作,得到softmax之后的向量,利用它与每一个上下文单词对应的one-hot向量进行loss计算,然后反向传播,先后修改矩阵和,也就是更新了每个单词对应的和;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值