回忆:word2vec的主要思想
Word2vec参数和计算
n × d ⋅ d → 1 → n × 1 → softmax n × 1 n \times d \cdot d \rightarrow 1 \rightarrow n \times 1 \stackrel{\text { softmax }}{\rightarrow} n \times 1 n×d⋅d→1→n×1→ softmax n×1
Word2vec通过将相似的词放在附近的空间来最大化目标函数
详见上一篇:【CS224n】1斯坦福大学深度学习自然语言处理课程笔记
随机梯度与词向量!
负采样的skip-gram(跳格)模型(HW2)
“Distributed Representations of Words and Phrases and their Compositionality” (Mikolovet al. 2013)
总体目标函数(他们最大化)
J t ( θ ) = log σ ( u o T v c ) + ∑ i = 1 k E j ∼ P ( w ) [ log σ ( − u j T v c ) ] J_{t}(\theta)=\log \sigma\left(u_{o}^{T} v_{c}\right)+\sum_{i=1}^{k} \mathbb{E}_{j \sim P(w)}\left[\log \sigma\left(-u_{j}^{T} v_{c}\right)\right] Jt(θ)=logσ(uoTvc)+i=1∑kEj∼P(w)[logσ(−ujTvc)]
J ( θ ) = 1 T ∑ t = 1 T J t ( θ ) J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J_{t}(\theta) J(θ)=T1t=1∑TJt(θ)
Logistic/sigmoid函数: σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1
我们最大限度地提高两个词在第一对数中共同出现的概率,并使噪声词的概率最小化
符号更类似于toclass和HW2:
J neg-sample ( u o , v c , U ) = − log σ ( u o T v c ) − ∑ k ∈ { K sampled indices } log σ ( − u k T v c ) J_{\text {neg-sample }}\left(\boldsymbol{u}_{o}, \boldsymbol{v}_{c}, U\right)=-\log \sigma\left(\boldsymbol{u}_{o}^{T} \boldsymbol{v}_{c}\right)-\sum_{k \in\{K \text { sampled indices }\}} \log \sigma\left(-\boldsymbol{u}_{k}^{T} \boldsymbol{v}_{c}\right) Jneg-sample (uo,vc,U)=−logσ(uoTvc)−k∈{K sampled indices }∑logσ(−ukTvc)
我们取k个负样本(用词概率)
最大限度地提高真实外字出现的概率,最大限度地降低中心字周围随机字出现的概率
取样, P ( w ) = U ( w ) 3 / 4 / Z \mathrm{P}(w)=\mathrm{U}(w)^{3 / 4} / Z P(w)=U(w)3/4/Z,单字分布U(w)提高到3/4次方(我们在入门代码中提供了这个函数)
U ( w ) \mathrm{U}(w) U(w)是 unigram 分布通过3/4次方,相对减少常见单词的频率,增大稀有词的概率。 Z Z Z用于生成概率分布
Power使频率较低的词被抽查的频率更高
为什么不直接抓取共现次数?
构建共现矩阵X
例子:基于窗口的共同出现矩阵
共现向量
经典方法:X上的尺寸缩小法(HW1)
共同发生矩阵X的奇异值分解
使用SVD方法将X分解成 U Σ V ⊤ U \Sigma V^{\top} UΣV⊤,其中U和V是正交的
Σ \Sigma Σ是对角线矩阵,对角线上的值是矩阵的奇异值,U、V是对应于行和列的正交基
只保留k个奇异值,以便归纳
X ^ \hat{X} X^ 是X的最佳秩k近似,用最小二乘法表示
经典的线性代数结果。对于大矩阵来说,计算成本很高
Hacks to X(Rohde等人2005年在COALS中使用的几种方法)
按比例调整 counts 会很有效
缩放向量中出现了有趣的语义模式
基于计数 | 直接预测 |
---|---|
LSA, HAL (Lund & Burgess) | Skip-gram/CBOW (Mikolovet al) |
COALS, Hellinger-PCA (Rohde et al, Lebret& Collobert) | NNLM, HLBL, RNN (Bengioet al; Collobert& Weston; Huang et al; Mnih & Hinton) |
训练速度快 | 随语料库大小而伸缩 |
高效使用统计数据 | 统计资料的使用效率低下 |
主要用于捕捉词的相似性 | 提高其他任务的性能 |
对大数的重视程度不成比例 | 可以捕捉到超越词语相似性的复杂模式 |
在向量差异中编码意义成分
矢量差异的编码意义
将两个流派的想法结合起来,在神经网络中使用计数矩阵
[Pennington, Socher, and Manning, EMNLP 2014]
关键性见解:共现概率的比率可以对meaning component进行编码
例如我们想区分热力学上两种不同状态ice冰与蒸汽steam,它们之间的关系可通过与不同的单词 x 的co-occurrence probability 的比值来描述,所以相较于单纯的co-occurrence probability,实际上co-occurrence probability的相对比值更有意义
问:在词向量空间中,我们如何捕捉共现概率的比率作为线性意义分量?
答:对数双线性模型: w i ⋅ w j = log P ( i ∣ j ) w_{i} \cdot w_{j}=\log P(i \mid j) wi⋅wj=logP(i∣j)
with vector differences(有向量差的): w x ⋅ ( w a − w b ) = log P ( x ∣ a ) P ( x ∣ b ) w_{x} \cdot\left(w_{a}-w_{b}\right)=\log \frac{P(x \mid a)}{P(x \mid b)} wx⋅(wa−wb)=logP(x∣b)P(x∣a)
如果使向量点积等于共现概率的对数,那么向量差异变成了共现概率的比率
结合了两个的优点——GloVe
[Pennington, Socher, and Manning, EMNLP 2014]
w i ⋅ w j = log P ( i ∣ j ) w_{i} \cdot w_{j}=\log P(i \mid j) wi⋅wj=logP(i∣j)
J = ∑ i , j = 1 V f ( X i j ) ( w i T w ~ j + b i + b ~ j − log X i j ) 2 J=\sum_{i, j=1}^{V} f\left(X_{i j}\right)\left(w_{i}^{T} \tilde{w}_{j}+b_{i}+\tilde{b}_{j}-\log X_{i j}\right)^{2} J=i,j=1∑Vf(Xij)(wiTw~j+bi+b~j−logXij)2
GloVe结果
与frog(青蛙)最接近的词
1.frogs(青蛙)
2.toad (蟾蜍)
3.litoria (利托里亚)
4.leptodactylidae(细足亚科)
5.rana (林蛙)
6.lizard (蜥蜴)
7.eleutherodactylus(指甲虫)
与NLP中的一般评价相关:内在与外在的评价
内在 | 外在 |
---|---|
对某一具体/中间子任务的评价 | 对实际任务的评价 |
计算速度快 | 可能需要很长的时间来计算精度 |
有助于了解该系统 | 不清楚是子系统出了问题,还是子系统之间的互动或其他子系统出了问题 |
不清楚是否真的有用,除非建立与实际任务的关联性 | 如果用一个子系统替换另一个子系统来提高精度→Winning! |
本质词向量评价
词向量类比
d = arg max i ( x b − x a + x c ) T x i ∥ x b − x a + x c ∥ d=\arg \max _{i} \frac{\left(x_{b}-x_{a}+x_{c}\right)^{T} x_{i}}{\left\|x_{b}-x_{a}+x_{c}\right\|} d=argimax∥xb−xa+xc∥(xb−xa+xc)Txi
通过其加法后的余弦距离对直观语义和句法类比问题的捕捉程度来评价词向量的好坏
抛弃搜索中的输入词!
问题:如果信息有但不是线性的怎么办?
Glove可视化
Glove可视化: 公司 - CEO
Glove可视化: 比较级和最高级
类比评估和超参数
外在词向量评价
词义和词义歧义
通过全局上下文和多词原型来改进词的表示方法
Huang et al. 2012
思想:围绕着单词进行集群,每个单词都被分配到多个不同的集群 b a n k 1 \mathrm{bank}_{1} bank1, b a n k 2 \mathrm{bank}_{2} bank2等,进行再训练
词义的线性代数结构,与多义词的应用
Arora, …, Ma, …, TACL 2018
分类直觉
训练集: { x i , y i } i = 1 N \left\{x_{i}, y_{i}\right\}_{i=1}^{N} {xi,yi}i=1N
简单示例:
固定二维字向量输入分类
使用softmax/逻辑回归
线性决策边界
传统ML/统计方法:假设 x i x_i xi是固定的,训练(即设置)softmax/logistic回归权重 W ∈ R C × d W \in \mathbb{R}^{C \times d} W∈RC×d来确定如图所示的判定边界(超平面)
方法:对于每个固定的x,预测:
p ( y ∣ x ) = exp ( W y ⋅ x ) ∑ c = 1 C exp ( W c ⋅ x ) p(y \mid x)=\frac{\exp \left(W_{y} \cdot x\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x\right)} p(y∣x)=∑c=1Cexp(Wc⋅x)exp(Wy⋅x)
Softmax 分类器
同样,我们可以将预测函数分为三个步骤:
cross entropy loss 交叉熵损失”训练
对完整数据集进行分类
全数据集 { x i , y i } i = 1 N \left\{x_{i}, y_{i}\right\}_{i=1}^{N} {xi,yi}i=1N上的交叉熵损失函数:
J ( θ ) = 1 N ∑ i = 1 N − log ( e f y i ∑ c = 1 C e f c ) J(\theta)=\frac{1}{N} \sum_{i=1}^{N}-\log \left(\frac{e^{f_{y_{i}}}}{\sum_{c=1}^{C} e^{f_{c}}}\right) J(θ)=N1i=1∑N−log(∑c=1Cefcefyi)
而不是:
f y = f y ( x ) = W y ⋅ x = ∑ j = 1 d W y j x j f_{y}=f_{y}(x)=W_{y} \cdot x=\sum_{j=1}^{d} W_{y j} x_{j} fy=fy(x)=Wy⋅x=j=1∑dWyjxj
我们将用矩阵表示法写出f:
f = W x f=Wx f=Wx
传统ML优化
对于统计机器学习,通常只包含 W W W的元素:
θ = [ W ⋅ 1 ⋮ W ⋅ d ] = W ( : ) ∈ R C d \theta=\left[\begin{array}{l}W_{\cdot 1} \\ \vdots \\ W_{\cdot d}\end{array}\right]=W(:) \in \mathbb{R}^{C d} θ=⎣⎢⎡W⋅1⋮W⋅d⎦⎥⎤=W(:)∈RCd
因此,我们仅通过更新 W W W来更新决策边界:
∇ θ J ( θ ) = [ ∇ W ⋅ 1 ⋮ ∇ W ⋅ d ] ∈ R C d \nabla_{\theta} J(\theta)=\left[\begin{array}{l}\nabla_{W_{\cdot 1}} \\ \vdots \\ \nabla_{W \cdot d}\end{array}\right] \in \mathbb{R}^{C d} ∇θJ(θ)=⎣⎢⎡∇W⋅1⋮∇W⋅d⎦⎥⎤∈RCd
神经网络分类器的胜利!
词向量分类差异#1
NLP深度学习中通常:
神经计算
神经元可以建模为二元逻辑回归单元
f f f=非线性激活函数(如sigmoid函数), w w w=权重, b b b=偏差, h h h=隐藏, x x x=输入
h w , b ( x ) = f ( w ⊤ x + b ) f ( z ) = 1 1 + e − z \begin{array}{l} h_{w, b}(x)=f\left(w^{\top} x+b\right) \\ f(z)=\frac{1}{1+e^{-z}} \end{array} hw,b(x)=f(w⊤x+b)f(z)=1+e−z1
b: 我们可以有一个 "总是在 "的偏置特征,它给出了一个类的先决条件,或者把它分开,作为一个偏置项
w、b是这个神经元的参数,即这个逻辑回归模型的参数
区别二:神经网络=同时运行多个逻辑回归
如果我们把一个输入的向量通过一堆逻辑回归函数输入,那么我们就会得到一个输出的向量…。
但我们不必提前决定这些逻辑回归要预测的变量是什么!
…我们可以将其输入到另一个逻辑回归函数中
它是损失函数,会指导中间隐藏变量应该是什么,所以要做好下一层的目标预测等工作
在我们知道之前,我们已经有了一个多层神经网络…
我们有:
a 1 = f ( W 11 x 1 + W 12 x 2 + W 13 x 3 + b 1 ) a 2 = f ( W 21 x 1 + W 22 x 2 + W 23 x 3 + b 2 ) \begin{array}{l} a_{1}=f\left(W_{11} x_{1}+W_{12} x_{2}+W_{13} x_{3}+b_{1}\right) \\ a_{2}=f\left(W_{21} x_{1}+W_{22} x_{2}+W_{23} x_{3}+b_{2}\right) \end{array} a1=f(W11x1+W12x2+W13x3+b1)a2=f(W21x1+W22x2+W23x3+b2)
等等
在矩阵符号中:
z = W x + b a = f ( z ) \begin{array}{l} z=W x+b \\ a=f(z) \end{array} z=Wx+ba=f(z)
激活 f f f是按元素来应用的:
f ( [ z 1 , z 2 , z 3 ] ) = [ f ( z 1 ) , f ( z 2 ) , f ( z 3 ) ] f\left(\left[z_{1}, z_{2}, z_{3}\right]\right)=\left[f\left(z_{1}\right), f\left(z_{2}\right), f\left(z_{3}\right)\right] f([z1,z2,z3])=[f(z1),f(z2),f(z3)]
非线性(也就是 “f”)为什么需要非线性
例如:函数逼近,如回归或分类
回忆word2vec模型,计算成本很高,采用负采样。不通过计数而是降低维度的方法,包括奇异值分解、按比例调整计数。介绍GloVe模型,结合两者优点,以及如何评价词向量、多语义、神经网络知识