【一】 Word2Vec(词向量)
- Word2Vec,作为 NLP 领域深度学习的基础,是每个工程师都绕不过的重点话题。虽然从18年年底就诞生出了 Bert,GPT 等预训练模型,横扫 NLP 领域,但其还是基于 Word2Vec 的向量和思想训练出来的。
【1.1】 Skip-Gram(通过 中心词 预测 上下文)
-
U(Context,作为上下文),
V(Center,作为中心词) 两个矩阵
-
f(U,V)=P(Wi∣Wj),基于假设,
Wi,Wj 的相似度越高,概率值越大
- 直接思路
Softmax 形式算出概率最大的那个单词 (
∣V∣ 表示词库)
P(Wi∣Wj;θ)=∑cϵ∣V∣eUc×VWjeUWi×VWj
- 目标函数 (
∣V∣ 表示词库,不好优化,
∣V∣ 词库可能非常大,通常采用 Negative Sampling)
L=argmaxθwϵcenter∏cϵcontext∏∑c′ϵ∣V∣eUc′×VWeUc×Vw
=argmaxθwϵcenter∑cϵcontext∑Uc×Vw−logc′ϵ∣V∣∑eUc′×Vw
- 巧妙思路(表示成 LR 的分类形式)
P(Wi∣Wj;θ)→P(D=1∣Wi,Wj;θ)=1+e(−UWi×VWj)1
- 目标函数(
D=1 表示
Wi 和
Wj 同时出现,
D′=0 表示
Wi 和
Wj 不能同时出现)
L=argmaxθ(w,c)ϵD∏P(D=1∣Wi,Wj;θ)(w,c)ϵD′∏P(D′=0∣Wi,Wj;θ)
=argmaxθ(w,c)ϵD∏1+e(−Uc×Vw)1(w,c)ϵD′∏1+e(−Uc×Vw)1
=argmaxθ(w,c)ϵD∑logσ(Uc,Vw)+(w,c)ϵD′∑logσ(−Uc,Vw)
- Negative Sampling(负采样方法,解决 负样本太大的问题,
c′ϵN(w) 表示 随机采样负样本)
L=argmaxθ(w,c)ϵD∑【logσ(Uc,Vw)+c′ϵN(w)∑logσ(−Uc′,Vw)】
【1.2】 CBOW(通过 上下文 预测 中心词)
【1.3】 训练代码(GitHub)
已传到 GitHub 上
python word2vec.py -train wiki.final.txt -model output_10_dim -dim 10 -cbow 0 -negative 10 -window 5 -min-count 5
【1.4】 Disadvantage(缺点)
- (无)一词多义
- (无)全局视角
- (不)考虑语序
- (高)不确定性(Gaussian Embedding,高斯嵌入,加了个斜方差矩阵,与原向量形成高斯分布,KL-Diverge 计算分布的相似度)
- (低)可解释性
- (不解决)未登记的词(OOV,Out-of-Vocab)
【1.5】 Subword Model(拆分单词,解决 OOV 问题)
going=>go+ingreader=>read+er...
【二】 Glove(Global Vectors)