cs224n word2vec 简介和公式推导
Word meaning
词意
词的意思就是idea
,如下:
- 词汇本身表达的意义
- 人通过词汇传达的想法
- 在写作、艺术中表达的意思
- signifier - signified(idea or thing) - denotation
传统离散表达
传统使用分类学去建立一个WordNet,其中包含许多上位词is-a
和同义词集等。如下:
上义词 | 同义词 |
---|---|
entity, physical_entity,object, organism, animal | full, good; estimable, good, honorable, respectable |
离散表达的问题:
- 丢失了细微差别,比如同义词:adept, expert, good, practiced, proficient, skillful
- 不能处理新词汇
- 分类太主观
- 需要人力去构建和修改
- 很难去计算词汇相似度
每个单词使用one-hot
编码,比如hotel=settle hotel
的时候也应该去匹配包含settle motel
的文章。 但是我们的查询hotel向量和文章里面的motel向量却是正交的,算不出相似度。
分布相似表达
通过一个单词的上下文去表达这个单词。
You shall know a word by the company it keeps. --- JR. Firth
例如,下面用周围的单词去表达banking :
government debt problems turning into banking crises as has happened in saying that Europe needs unified banking regulation to replace the hodgepodge
稠密词向量
一个单词的意义应该是由它本身的词向量来决定的。这个词向量可以预测出的上下文单词。
比如lingustics的词向量是
词嵌入思想
构建一个模型,根据中心单词
损失函数如下,
Word2Vec
在每个单词和其上下文之间进行预测。
有两种算法:
- Skip-grams(SG): 给目标单词,预测上下文
- Continuous Bag of Words(CBOW):给上下文,预测目标单词
两个稍微高效的训练方法:
- 分层softmax
- 负采样
课上只是Naive softmax。两个模型,两种方法,一共有4种实现。这里是word2vec详细信息。
Skip-gram
对于每个单词

目标函数
一般使用negative log likelihood
:负采样教程。
要最大化目标函数,就得得到损失函数。对于对数似然函数,取其负对数就可以得到损失函数,再最小化损失函数,其中
- Loss 函数 = Cost 函数 = Objective 函数
- 对于softmax概率分布,一般使用交叉熵作为损失函数
- 单词
是one-hot编码 - negative log probability
Word2vec细节
词汇和词向量符号说明:
上下文词向量,向量是 维的 词向量 - 中心词汇
,对应的向量是 - 上下文词汇
,对应的词向量是 - 一共有
个词汇
计算
两个单词越相似,点积越大,向量点积如下:
softmax之所以叫softmax,是因为指数会让大的数越大,小的数越小。类似于max函数。下面是计算的详细信息:

一些理解和解释:
是one-hot编码的中心词汇,维数是 是词汇表达矩阵,维数是 ,一列就是一个单词 相乘得到词向量 , , 用 维向量去表达了词汇t , , , 得到 语义相似度向量 - 再对
进行softmax即可求得上下文词汇 - 每个单词有两个向量,作为center单词向量和context单词向量
偏导计算
设
这里只计算
用
向量偏导计算公式,
函数偏导计算,链式法则,
最小化损失函数
:
这里只计算
部分1推导
部分2推导
所以,综合起来可以求得,单词o是单词c的上下文概率
实际上偏导是,单词
总体梯度计算
在一个window里面,对中间词汇
比如句子We like learning NLP
。设
- 中间词汇求梯度
- 上下文词汇求梯度
和 - 更新参数
梯度下降
有了梯度之后,参数减去梯度,就可以朝着最小的方向走了。机器学习梯度下降
随机梯度下降
预料会有很多个window,因此每次不能更新所有的。只更新每个window的,对于window t:

