CS224N笔记——词向量表示

one hot 表示

image.png

主要问题

  • 所有的向量都是正交的,无法准确表达不同词之间的相似度,没有任何语义信息
  • 向量维度是语料库中所有单词的数量,维度太大。

以下内容主要摘抄自

分布假说(distributional hypothesis)

Harris 在 1954 年提出的分布假说(distributional hypothesis):上下文相似的词,其语义也相似 。Firth 在 1957 年对分布假说进行了进一步阐述和明确:词的语义由其上下文决定(a word is characterized by the company it keeps)。到目前为止,基于分布假说的词表示方法,根据建模的不同,主要可以分为三类:基于矩阵的分布表示、基于聚类的分布表示和基于神经网络的分布表示。从广义上看,所有基于分布假说得到的表示均可称为分布表示(distributional representation),如上述的三种。而狭义的分布表示通常指基于矩阵的分布表示 。
而十分接近的一个术语是Distributed Representation,而Distributed Representation中的distributed 没有统计上的“分布”含义,而是“分散”、“分配”的意思。一段文本的语义分散在一个低维空间的不同维度上,相当于将不同的文本分散到空间中不用的区域。Distributed Representation是文本的一种表示形式,具体为稠密、低维、连续的向量。向量的每一维都表示文本的某种潜在的语法或语义特征。Distributed Representation翻译为分散式表示可能理解起来会更明确些。总之,Distributional Representation指的是一类获取文本表示的方法,而Distributed Representation指的是文本表示的形式,就是低维、稠密的连续向量。但这两个并不对立。比如Skip-Gram、CBOW和glove等模型得到词向量,即是Distributional Representation,又是Distributed Representation参见

image.png

基于神经网络的分布表示——Word2vec

基于神经网络的分布表示一般称为词向量(word vector)、词嵌入(word embedding)或分布式表示(distributed representation)。
几个重要模型

  • 神经网络语言模型(Neural Network Language Model ,NNLM)
  • log双线性语言模型(Log-Bilinear Language Model,LBL)
  • 循环神经网络语言模型(Recurrent Neural Network based Language Model,RNNLM)
  • word2vec

下面主要介绍Word2vec,这也是现在最流行的表示方法之一。
Word2vec不是一个单一模型,实际是两个表示模型 CBOW(Continuous Bag of Words)、Skip-Gram和两个优化训练的方法Negative-Sampling、Hierarchical Softmax的方法组成的。one hot表示得到的是一个高维稀疏向量,现在我们想要构建的是dense vector即大多数元素不为零且维度较小的向量,并且希望在相似的context下的word vector也较为相似。

image.png

skip-gram

跳字模型(skip-gram)基于某个词来生成它在文本序列周围的词。且假设给定中心词(center word)的情况下,背景词(context word)的生成是相互独立的,算法如下:

表示说明:
词库大小设为|V|
w_i:词库中的第i个单词
\mathcal{V} \in \mathbb{R}^{n \times|V|}:输入矩阵
v_{i}:输入矩阵的第i列,实际就是w_i的向量表示。
\mathcal{U} \in \mathbb{R}^{[V| \times n}:输出矩阵
u_i:输出矩阵的第i行,w_i的输出向量表示
步骤:

  1. 生成输入中心词的one-hot表示 x \in \mathbb{R}^{|V|}
  2. 词嵌入v_{c}=\mathcal{V} x \in \mathbb{R}^n
  3. z=\mathcal{U} v_{c}
  4. \hat{y}=\operatorname{softmax}(z)
  5. \hat{y}_{c-m}, \ldots, \hat{y}_{c-1}, \hat{y}_{c+1}, \dots, \hat{y}_{c+m}作比较

PS:

  • 在实践中步骤一通常是一个随机向量
  • 每个词实际上有两个向量来表示,一个是它作为中心词时,另一个是作为背景词时,即算法中的\mathcal{V}\mathcal{U}

目标函数,单个单词时:
\begin{aligned} \text { minimize } J &=-\log P\left(w_{c-m}, \ldots, w_{c-1}, w_{c+1}, \ldots, w_{c+m} | w_{c}\right) \\ &=-\log \prod_{j=0, j \neq m}^{2 m} P\left(w_{c-m+j} | w_{c}\right) \\ &=-\log \prod_{j=0, j \neq m}^{2 m} P\left(u_{c-m+j} | v_{c}\right) \\ &=-\log \prod_{j=0, j \neq m}^{2 m} \frac{\exp \left(u_{c-m+j}^{T} v_{c}\right)}{\sum_{k=1}^{T} \exp \left(u_{k}^{T} v_{c}\right)} \\ &=-\sum_{j=0, j \neq m}^{2 m} u_{c-m+j}^{T} v_{c}+2 m \log \sum_{k=1}^{|V|} \exp \left(u_{k}^{T} v_{c}\right) \end{aligned}
另一种表达:
\begin{aligned} J &=-\sum_{j=0, j \neq m}^{2 m} \log P\left(u_{c-m+j} | v_{c}\right) \\ &=\sum_{j=0, j \neq m}^{2 m} H\left(\hat{y}, y_{c-m+j}\right) \end{aligned}
H\left(\hat{y}, y_{c-m+j}\right)表示交叉熵
利用了独立性假设,然后梯度下降更新参数即可。

skip gram.png

CBOW

连续词袋模型与跳字模型类似。与跳字模型最大的不同在于,连续词袋模型假设基于某中心词在文本序列前后的背景词来生成该中心词。因为连续词袋模型的背景词有多个,我们将这些背景词向量取平均,然后使用和跳字模型一样的方法来计算条件概率。

表示说明:
词库大小设为|V|
w_i:词库中的第i个单词
\mathcal{V} \in \mathbb{R}^{n \times|V|}:输入矩阵
v_{i}:输入矩阵的第i列,实际就是w_i的向量表示。
\mathcal{U} \in \mathbb{R}^{[V| \times n}:输出矩阵
u_i:输出矩阵的第i行,w_i的输出向量表示
步骤:

  1. 输入:根据窗口大小生成one-hot的上下文向量 \left(x^{(c-m)}, \ldots, x^{(c-1)}, x^{(c+1)}, \ldots, x^{(c+m)} \in \mathbb{R}^{|V|}\right)
  2. 得到上下文的embedded word vectors(v_{c-m} = \mathcal{V} x^{(c-m)}, v_{c-m+1}=\mathcal{V} x^{(c-m+1)}, \ldots, v_{c+m}=\mathcal{V} x^{(c+m)} \in \mathbb{R}^{n} )
  3. 求平均\hat{v}=\frac{v_{c-m}+v_{c-m+1}+\ldots+v_{c+m}}{2 m} \in \mathbb{R}^{n}
  4. 生成score vector z=\mathcal{U} \hat{v} \in \mathbb{R}^{|V|}
  5. softmax,\hat{y}=\operatorname{softmax}(z) \in \mathbb{R}^{|V|},实际就是给定中心词,产生上下文的概率。与真实作比较,定义损失函数,一般是交叉熵。groundtruth是样本对应的那个词的one-hot表示。

对于每个单词,我们想要得到的是两个向量,v: (input vector) when the word is in
the context,u: (output vector) when the word is in the center,输入和输出矩阵是我们想要学习的参数。一个问题是我们究竟用哪一个作为embedding呢?实际上输入和输出矩阵都可以作为embedding,但是原文中使用的是输入矩阵作为embedding。
如何计算:
\begin{aligned} \text { minimize } J &=-\log P\left(w_{c} | w_{c-m}, \ldots, w_{c-1}, w_{c+1}, \ldots, w_{c+m}\right) \\ &=-\log P\left(u_{c} | \hat{v}\right) \\ &=-\log \frac{\exp \left(u_{c}^{T} \hat{v}\right)}{\sum_{j=1}^{|V|} \exp \left(u_{j}^{T} \hat{v}\right)} \\ &=-u_{c}^{T} \hat{v}+\log \sum_{j=1}^{|V|} \exp \left(u_{j}^{T} \hat{v}\right) \end{aligned}
然后用梯度下降的方法更新参数即可。

image.png

Negative Sampling

基于skip-gram,上面推导的两个目标函数最大的问题是连加那里,要对整个词库进行计算,对于大词库,这是很大运算量,所以想办法近似求解。负采样(negative sampling)解决了这个问题,它是用来提高训练速度并且改善所得到词向量的质量的一种方法。不同于原本每个训练样本更新所有的权重,负采样每次让一个训练样本仅仅更新一小部分的权重,这样就会降低梯度下降过程中的计算量。负采样修改了原来的目标函数。给定中心词 c 的一个背景窗口,我们把背景词 w 出现在该背景窗口看作一个事件
考虑(w,c)是否来自训练数据,来自训练数据的概率可以表示为:
P(D=1 | w, c, \theta)=\sigma\left(v_{c}^{T} v_{w}\right)=\frac{1}{1+e^{\left(-v_{c}^{T} v_{w}\right)}}
转变优化目标为,当中新词和上下文来自训练数据时最大化其概率,不来自的时候,最大化不来自的概率。然后简单的用极大似然估计:
\begin{align} \theta &= \underset{\theta}{\operatorname{argmax}} \prod_{(w, c) \in D} P(D=1 | w, c, \theta) \prod_{(w, c) \in \tilde{D}} P(D=0 | w, c, \theta) \\ &=\underset{\theta}{\operatorname{argmax}} \prod_{(w, c) \in D} P(D=1 | w, c, \theta) \prod_{(w, c) \in \tilde{D}}(1-P(D=1 | w, c, \theta)) \\ & =\underset{\theta}{\operatorname{argmax}} \sum_{(w, c) \in D} \log P(D=1 | w, c, \theta)+\sum_{(w, c) \in \tilde{D}} \log (1-P(D=1 | w, c, \theta)) \\ &=\underset{\theta}{\operatorname{argmax}} \sum_{(w, c) \in D} \log \frac{1}{1+\exp \left(-u_{w}^{T} v_{c}\right)}+\sum_{(w, c) \in \tilde{D}} \log \left(1-\frac{1}{1+\exp \left(-u_{w}^{T} v_{c}\right)}\right) \\ &=\underset{\theta}{\operatorname{argmax}} \sum_{(w, c) \in D} \log \frac{1}{1+\exp \left(-u_{w}^{T} v_{c}\right)}+\sum_{(w, c) \in \tilde{D}} \log \left(\frac{1}{1+\exp \left(u_{w}^{T} v_{c}\right)}\right) \end{align}
极大似然也就等价于极小以下函数:
J=-\sum_{(w, c) \in D} \log \frac{1}{1+\exp \left(-u_{w}^{T} v_{c}\right)}-\sum_{(w, c) \in \tilde{D}} \log \left(\frac{1}{1+\exp \left(u_{w}^{T} v_{c}\right)}\right)
对于skip-gram得到新的目标函数
-\log \sigma\left(u_{c-m+j}^{T} \cdot v_{c}\right)-\sum_{k=1}^{K} \log \sigma\left(-\tilde{u}_{k}^{T} \cdot v_{c}\right)

如何选择negative words

使用“一元模型分布(unigram distribution)”来选择“negative words”。
P\left(w_{i}\right)=\frac{f\left(w_{i}\right)^{3 / 4}}{\sum_{j=0}^{n}\left(f\left(w_{j}\right)^{3 / 4}\right)}
每个单词被赋予一个权重,即f(w_i), 它代表着单词出现的频次。
关于负采样的详细解释,可以参考Yoav Goldberg的那篇paper。

Hierarchical Softmax

层序softmax是另一种近似训练法。它使用了二叉树这一数据结构,树的每个叶结点代表词典 \mathcal{V} 中的每个词。
[图片上传失败...(image-2ea297-1580910479330)]
假设 L(w) 为从二叉树的根结点到词 w 的叶结点的路径(包括根结点和叶结点)上的结点数。设 n(w,j) 为该路径上第 j个结点,并设该结点的背景词向量为 \boldsymbol{u}_{n(w,j)}。如图L(w_3)=4 。层序softmax将跳字模型中的条件概率近似表示为P(w_o \mid w_c) = \prod_{j=1}^{L(w_o)-1} \sigma\left( [\![ n(w_o, j+1) = \text{leftChild}(n(w_o,j)) ]\!] \cdot \boldsymbol{u}_{n(w_o,j)}^\top \boldsymbol{v}_c\right)
其中\text{leftChild}(n)是是结点 n 的左子结点,如果判断 x 为真, [\![x]\!] = 1,反之为-1。例子:给定词 w_c 生成词 w_3 的条件概率
P(w_3 \mid w_c) = \sigma(\boldsymbol{u}_{n(w_3,1)}^\top \boldsymbol{v}_c) \cdot \sigma(-\boldsymbol{u}_{n(w_3,2)}^\top \boldsymbol{v}_c) \cdot \sigma(\boldsymbol{u}_{n(w_3,3)}^\top \boldsymbol{v}_c).
时间复杂度降低至\mathcal{O}(\text{log}_2|\mathcal{V}|)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容