版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhq9695/article/details/86526081
这是斯坦福大学2017年课程CS224n: Natural Language Processing with Deep Learning
笔者学习完之后,简单做个笔记
如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~
0. 前言
每一个单词需要表示成一个向量,有两种表示方法:
- one-hot representation
one-hot向量表示一个单词,只有一个元素是1,其余都是0,维度是词汇表长度。
one-hot存在的问题:单词向量之间正交,同义词之间没有任何关联。
- distributional similarity representation
根据的思想是:相似的同义词具有相似的上下文单词。
根据单词的上下文,确定单词向量。
本文中将介绍两种Word2Vec的算法:
- continuous bag-of-words(CBOW)
CBOW旨在根据上下文,预测中间的单词。
- skip-gram
skip-gram旨在根据中间的单词,预测上下文的单词。
1. Language Model(语言模型)
如果句子的语法语义是通顺的,那么语言模型会给予句子一个较高的概率:
P(w1,w2,...,wn)
unigram model(一元语言模型):
P(w1,w2,...,wn)=i=1∏nP(wi)
一元语言模型存在的问题:后一个单词可能跟前一个单词具有较高的关联性
bigram model(二元语言模型):
P(w1,w2,...,wn)=i=2∏nP(wi∣wi−1)
2. continuous bag-of-words(CBOW)
CBOW旨在根据上下文单词预测中间单词,例如句子"The cat jumped over the puddle",上下文单词为{“The”, “cat”, “over”, “the”, “puddle”},则中间单词就是"jumped"。
输入为one-hot向量
x(c),输出为one-hot向量
y(c),均对应词汇表单词。
对于每个单词,需要学习两个向量,
v表示单词作为上下文单词时的向量,
u表示单词作为中间单词时的向量。
CBOW的符号定义如下:
-
m:取上下文单词的窗口大小
-
V:词汇表,也是one-hot向量的维度
-
wi:词汇表中的第
i个单词
-
V:
Rn×∣V∣,输入向量矩阵,第
i列是单词
wi的
n维嵌入向量,表示为
vi
-
U:
R∣V∣×n,输出向量矩阵,第
j行是单词
wj的
n维嵌入向量,表示为
uj
CBOW的计算流程表示如下:
- 取得窗口大小
m的上下文单词的one-hot向量:
x(c−m),…,
x(c−1),
x(c+1),…,
x(c+m)
- 获得其作为上下文单词时的嵌入向量:
vc−m=Vx(c−m),…,
vc+m=Vx(c+m)
- 对这些嵌入向量取平均:
v^=2mvc−m+...+vc+m
- 计算出得分向量:
z=Uv^,相似的向量,点乘的数值更大
- 转换为概率:
y^=softmax(z),我们将其与真实one-hot向量
y尽可能匹配
如下图所示(图源:CS224n-2017):
使用交叉熵定义损失函数:
H(y^,y)=−j=1∑∣V∣yjlog(yj^)=−log(yj^)minimize J=−logP(wc∣wc−m,...,wc+m)=−logP(uc∣v^)=−log∑j=1∣V∣exp(ujTv^)exp(ucTv^)=−ucTv^+logj=1∑∣V∣exp(ujTv^)
3. skip-gram
skip-gram旨在根据中间单词预测上下文单词,例如句子"The cat jumped over the puddle",中间单词是"jumped",则上下文单词为{“The”, “cat”, “over”, “the”, “puddle”}。
输入为one-hot向量
x(c),输出为one-hot向量
y(c),均对应词汇表单词。
对于每个单词,需要学习两个向量,
v表示单词作为中间单词时的向量,
u表示单词作为上下文单词时的向量。
skip-gram的符号定义如下:
-
m:预测上下文单词的窗口大小
-
V:词汇表,也是one-hot向量的维度
-
wi:词汇表中的第
i个单词
-
V:
Rn×∣V∣,输入向量矩阵,第
i列是单词
wi的
n维嵌入向量,表示为
vi
-
U:
R∣V∣×n,输出向量矩阵,第
j行是单词
wj的
n维嵌入向量,表示为
uj
skip-gram的计算流程表示如下:
- 取得中间向量
x(c)
- 获得中间向量的嵌入向量:
vc=Vx(c)
- 计算出得分向量:
z=Uvc
- 转换为概率
y^=softmax(z),
y^c−m,…,
y^c+m分别对应不同的上下文单词,我们将其与真实one-hot向量
y尽可能匹配
如下图所示(图源:CS224n-2017):
使用交叉熵定义损失函数,并采用贝叶斯假设:
H(y^,y)=−j=1∑∣V∣yjlog(yj^)=−log(yj^)minimize J=−logP(wc−m,...,wc−1,wc+1,wc+m∣wc)=−logj=0,j̸=m∏2mP(wc−m+j∣wc)=−logj=0,j̸=m∏2mP(uc−m+j∣vc)=−logj=0,j̸=m∏2m∑k=1∣V∣exp(ukTvc)exp(uc−m+jTvc)=−j=0,j̸=m∑2muc−m+jTvc+2mlogk=1∑∣V∣exp(ukTvc)
如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~