目录
- 离散语义 (discrete):
- 分布语义 (distribute):
- 分布的语言模型(distributional language model):
- 词嵌入模型
- Word2Vec
- Chain Rule: 链式法则
离散语义 (discrete):
每个词都是离散的、正交的,每多一个词,向量都增加一个维度(dimension,dim)
类似于编码,很难描述相关性
分布语义 (distribute):
上下文决定语义,多个词决定一个词
一个词的搭配、上下文、一组词 中来理解词义
哲学意义:
- 如果一个词不出现在它的上下文上,那么它将毫无意义
- 不能孤立静止的看待事物
words that occur in context as vectors
我们在 real value vector 本身中编码相似性,where we encode similarity in real value vector themselves
当一个词出现在文本中,他有一个上下文,即一组词
tokens、types
- token是词本身
- type是词指代的意义
bank crises,此时是 a token of the word bank
bank 还可以表示 a type which refer to the uses and meanings
分布的语言模型(distributional language model):
将上下文中出现的单词视为向量,并对每个词(each word)建立 密集的实值向量(dense real value vector)
\["banking" = \begin{Bmatrix}0.286\\0.793\\-0.177\\ \cdots 共300维 \\0.271\end{Bmatrix} \]词嵌入模型
分布式词表示(distributed representation):
神经词表示(neural word representations)、 词嵌入(word embeddings)、词向量(word vectors)
每一个词 == 300 dimensional vector
- embeddings 的含义是词被嵌入到 300 维的空间中
- dimensional 的含义是词所在的空间有多少个行 / 正交基
常用词向量设置:每一个词都对应一个 \(300\times1\) 的词向量
想象:有一个坐标系空间,空间里面每一个 点 都是一个 词,
也就是说每一个词都在这个300维的空间中有一个 坐标 / 向量
二维投影:将300维空间的点投影到2维空间,在这个2维空间中,可以看到意思相近的点聚集在一起
注意:投影 / 降维 会丢失很多信息,也会 错误 真实的空间相邻关系
这个词"banking"是“distributed”而不是“localized”,是因为他是300维向量共同表示的,而不是一个维度独有的
Word2Vec
一个形成、计算词向量的算法,或者说是学习词向量的框架
be introduced at 2013
- 思路是什么?
- 语料库 text corpus
- 选定一些常用、难分的词,舍弃罕见词
- 为选定词计算出词向量
create vector for each word 找出每个词的好向量
-
From a pile of text
by doing the distributional simlarity \task\ of being able to predict \what words\ occur in the context of other word (做\任务\,什么任务呢 - 预测\什么词\将出现在其他词的上下文中的任务)
to 学习这些向量 -
So in particular, iterate through 循环访问 in the texts 在文本中,and so at any moment在任何时候 have a center word C and context words outside of C 有一个\中心词及其之外的上下文(周围的)词(注释:词之间的相似性、词和词围绕在一起)
we called O (c的上下文词)
计算上下文词 \O\ 出现的概率 -- 基于当前词向量 (注释:预测 邻近的下一个词)
不断地调整词向量 - to 最大化概率 -- 什么概率呢 -- 分配给实际出现的词的概率 -
公式:\(P(w_{t+j}|w_t)\),t 表示 C 的position,j 表示 O 的size
-
如果能给O更多的概率 -- 通过调整 词向量wv
-
如何调整词向量达到目的?
-
做什么 -- to 训练O在C中出现的概率
-
Word2vec: objective function
-
参数:
- m:固定窗口大小
- t:C 的位置
- j:对窗口 m 遍历的迭代器
- T:文本长度、文本次数
Objective func (目标函数)
目标函数 = 似然函数:
\[Objective = Likelihood = L(\theta) \]\[L(\theta) = \prod_{t=1}^{T} \prod_{m\leq j\leq m, j\neq 0}P(w_{t+j}|w_t;\theta) \]Loss func (损失函数)
损失函数:
\[J(\theta) = -\frac{1}{T}\log L(\theta)=-\frac{1}{T}\sum_{t=1}^{T} \sum_{-m\leq j\leq m, j\neq 0} \log P(w_{t+j}|w_t;\theta) \]为什么这样设计损失函数:
- 目标函数的最优解:最大化似然函数,即:最大化在 中心词周围 看到 它的上下文 的可能性(如果一个词不出现在它的上下文上,那么它将毫无意义)
- 优化计算 -- 对数似然度 (log likelihood),累加更利于 计算、求偏导数,同时除 T 是为了取平均值 -- 为了降低 文本长度 对损失函数的影响;
- 最小化目标函数:加一个 “-” 号,\(J(\theta)\) 可以最大限度地提高预测的准确性 -- 取负号可以将对数似然函数转化为 \凸函数\,从而使用 \梯度下降\ 等算法进行优化
P(O|C) 和 Softmax(x)
首先,每个词要对应、学习两个词向量,而不是一词对一词向量:
- when it is C, \(v_w\)
- when it is O, \(u_w\)
- 注:\(exp(x)\) 等于 \(a^{x}, a \in R\),常见的 \(a\) 的取值是 \(a=e\)
而实际也是这样:
list -- V , size=w, 当前迭代元素位置是 O:
对于 \(softmax(x_O)\) 函数:
- 分子:exp一下当前迭代位置
- 分母:遍历一遍 list - V,exp 每个迭代位置并求和;
对于 \(P(O|C)\):
- 分子:exp 一下(当前迭代位置的 \(u\) 向量 \(\times\) C 位置的 \(v\) 向量)
- 分母:遍历一遍 list - V,
exp 一下(每个迭代位置的 \(u\) 向量 \(\times\) C 位置的 \(v\) 向量)并求和;
可以理解为:
\[u_{\textcolor{pink}{O}}v_C=x_{\textcolor{pink}{O}},\,\,u_{\textcolor{brown}{w}}v_C=x_{\textcolor{brown}{w}} \]P(O|C) 的概率分布
\(Softmax(x_O)\) 可以把一组独立变量(这里指词向量)的值映射成一组 \([0,1)\) 的值,并且它们的和 == 1:
- 也就是说,对于 W 的 独立变量/各个词向量 的 集合 来说,可以通过 Softmax 计算出对 \(u_Ov_C\) 的概率分布
将损失函数展开
\[J(\theta)=上文所写=-\frac{1}{T}\sum_t\sum_j\log P(O|C) \]\[=-\frac{1}{T}\sum_t\sum_j\log \frac{\exp(u_O^Tv_C)}{\sum_{w\in V}\exp(u^T_wv_C)}\]\[=-\frac{1}{T}\sum_t\sum_j(\log \exp(u_O^Tv_C)-\log\sum_{w\in V}\exp(u^T_wv_C))\]求梯度公式
对 \(J(\theta)\) 求偏导前:
- 先对 \(\log P\) 求偏导:
所以最终的\(\log P\):
\[\log P=u_O-\sum_{x\in V}P(x|C)u_x \]所以梯度公式:
\[J(\theta)=-\frac{1}{T}\sum_{t=1}^{T}\sum_{-m\leq j\leq m}\log P=-\frac{1}{T}\sum_{t=1}^{T}\sum_{-m\leq j\leq m}(u_O-\sum_{x\in V}P(x|C)u_x) \]损失函数的时间复杂度
\(O(TmW)\)
Chain Rule: 链式法则
上面求梯度公式的时候用到了链式法则:
\[\frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx}=\frac{df(u)}{du}\frac{dg(x)}{x} \]- 另一种公式形式:
原函数:\(y=f(u)=f(g(x)),\,u=g(x)\)
原函数导数:\(y'=f'(g(x))g'(x)\)