课程网址:https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/
Lecture 1: Introduction and Word Vectors
2021.1.20晚
离散语义编码
• one-hot
• one-hot编码每个向量都是正交的,无法表示两个单词的相似性
• 如果建立单词的关系表,50,000个单词建立的表格太大
分布式语义编码
• “每个单词的意义是由上下文频繁出现的单词决定的”
Word vectors = word embedding = word representation
• 100维的词向量投影到二维空间的可视化:
• Word2vec (Mikolov et al. 2013) is a framework for learning word vectors.
• overview:通过窗口中的上下文单词计算
p
(
w
t
+
j
∣
w
t
)
p(w_t+j|w_t)
p(wt+j∣wt)
我们以skip-gram为例。
a. 对于skip-gram模型,给出中心词
w
j
w_j
wj,求相邻单词出现的概率
b. 对概率做处理,得到目标函数。我们试图最小化目标函数,也就是最大化预测
c. 那怎么计算公式中的
p
(
w
t
+
j
∣
w
t
)
p(w_t+j|w_t)
p(wt+j∣wt)呢?
首先明白几个符号,下标表示单词:
▪
v
c
v_c
vc :单词v作为中心词的向量
▪
u
o
u_o
uo:单词o作为环境词的向量
▪
u
w
u_w
uw:单词w作为环境词的向量
这里首先进行点积,因为能计算出两个向量的相似性。再回忆softmax的形式,Softmax函数,或称归一化指数函数,是逻辑函数的一种推广。它能将一个含任意实数的K维向量 “压缩”到另一个K维实向量中,使得每一个元素的范围都在之间,并且所有元素的和为1:
再经过softmax就得到了我们要的概率值:
d. 对所有向量组成的参数 做梯度下降,注意每个单词都有中心词和环境词两种向量表示
e. 总体模型如下所示
一开始
θ
\theta
θ是随机的,所以会跟ground truth(真实邻近文本)产生误差,于是我们通过链式求导法则优化目标函数,就能更新参数
θ
\theta
θ。
具体的过程没有手推,后面有兴趣再补上~
为什么要两个向量(U&V)?
答:训练两组词向量是为了计算梯度的时候求导更方便。
• 如果只用一组词向量 ,那么Softmax计算的概率公式里分母会出现一项平方项Vc*Vc ,那么再对Vc 求导就会比较麻烦。相反如果用两套词向量,求导结果就会很干净。
• 如果用两组词向量,就能利用以下公式简化计算
为什么要进行负采样?
🔗链接
答:如果词汇表有10,000个单词。模型输出层,我们期望一个单词的概率是1,其他9,999个单词的输出是0,那我们需要计算9999次。而通过负采样,对5个负样本(也就是其他9,999单词中的5个)进行权重更新,就能大幅减少计算量。
这种思想有点类似SGD,全部计算开销大,每次只计算一小部分的,重复多次。
代码来自华为云实验平台
🔗链接
实验效果:
可以发现总体还是比较准确滴~