From Count Vectors to Word2Vec
Word Embeddings可以广义的分为以下两种:
- Frequency based Embedding.
- Prediction based Embedding.
1. Frequency based Embedding
给予频率的Word Embedding可以分为以下三种:
- Count Vector.
- TF-IDF Vector.
- Co-Occurrence Vector.
1.1 Count Vector
Count Vector工作原理:Count Vector是将一个语料库中的每个文档中每个word出现的次数分别统计起来,这样一个语料库就形成了一个words-documents矩阵,words是整个语料库出现的所有单词,而documents是语料库中的所有文档,最终形成的W-D Matrix如下:

1.2 TF-IDF vectorization
这是另一种基于频率方法的方法,但与Count Vector不同的是,它不仅考虑单个文档中单词的出现,还考虑整个语料库中的单词。理想情况下,我们希望减少在几乎所有文档中出现的常用单词,并更加重视出现在文档子集中的单词。
TF-IDF工作原理:通过给这些常用词分配较低的权重来对其进行惩罚,同时在特定文档中重视特别出现的词。

下面是一些与TF-IDF相关的术语:
如$ TF(This,document1)=\frac{1}{8}$,它表示单词对文档的贡献,即与文档相关的单词应经常出现。
如$ IDF(This)=\log(\frac{2}{2})=0$,$IDF(Messi)=\log(\frac{2}{1})=0.301$
理想情况下,如果一个单词出现在所有文档中,则该单词可能与特定文档无关。但是,如果它出现在一部分文档中,则该单词可能与其所在的文档有些相关。
如上所见,对于Document1,TF-IDF方法严重惩罚了单词’This’,但为’Messi’分配了更大的权重。因此,从整个语料库的上下文来看,“Messi”对于Document1来说是一个重要的词。
1.3 Co-Occurrence Matrix with a fixed context window
伟大的想法 -相似的词往往会在一起出现,并且具有类似的上下文-例如,苹果是一种水果。芒果是一种水果。苹果和芒果倾向于具有相似的背景,即水果。
一对单词w1和w2的共现是它们在上下文窗口中一起出现的次数。
对于如下上下文窗口为2(实际整个窗口大小为2*2+1=5)的共现矩阵:

红色框-这是上下文窗口2中出现“他”和“是”的次数,可以看出计数结果为4。

1.3.1 Variations of Co-occurrence Matrix
我们可以对共现矩阵做处理:
- 最初的贡献矩阵是一个$V\times V$的方阵,当语料库很大时,维度非常高,我们可以通过删除不想关的词来降低一下维度获得$V\times N$的矩阵;
- 对于上面的$V\times N$的共现矩阵,维度仍然很高。我们可以通过对共现矩阵$V\times V$做PCA降维处理获得一个$V\times K$的共现矩阵;
- 接下来要做的就是对共现矩阵$V\times K$做奇异值分解(SVD),获得三个分接矩阵$U,S和V$,其中$U和V$都是正交矩阵。其中$U和S$的点乘是单词的向量表示,$V$是单词的上下文表示。
1.3.2 共现矩阵的优点
- 它保留了单词之间的语义关系。即男人和女人往往比男人和苹果更接近。
- 它以SVD为核心,比现有方法产生更准确的单词向量表示。
- 它使用因式分解,这是一个明确定义的问题,可以有效解决。
- 它必须计算一次,并且可以在计算后随时使用。从这个意义上讲,它比其他方法更快。
1.3.3 共现矩阵的缺点
- 它需要大量内存来存储共现矩阵。但是,可以通过将矩阵分解到系统外(例如在Hadoop集群等中)来解决此问题,并可以将其保存下来。
2. Word2vec(Prediction based Vector)
2.1 N-Gram统计语言模型
2.1.1 Unigram Model(1-gram)
这里,我们可以在给定的包含n个单词的序列得出一个如下的概率:
我们可以通过假设序列中每个单词出现是完全独立的,并采用一元语言模型来计算这个概率:
因此,对于上面两个句子$S1$和$S2$,$P(S1)$应该是一个高概率($S1$是一个有效的句子),$P(S2)$应该是一个低概率($S2$是一个无效的句子)
2.1.2 Bigram Model(2-gram)
在现实中,一个单词出现在一个句子中是高度依赖于前面的单词序列的,所以Unigram Model太武断了,并不能很好的计算句子有效的概率,所以提出了Bigram Model。Bigram Model假设一个单词的出现高度依赖于它前面的那个单词,概率的计算公式如下:
Bigram Model也有缺陷,因为它只是关注了与单词紧邻的那个单词,并没有考虑到整个句子,但这种计算概率的方法使我们走的更远。
Word2vec不是单个算法,而是两种技术的组合-CBOW(连续词袋)和Skip-gram模型。这两个都是浅层神经网络,它们将单词映射到目标变量,目标变量也是单词。这两种技术都学习用作词向量表示的权重。让我们分别讨论这两种方法,并直观地了解它们的工作原理。
2.2 CBOW(连续词袋)模型
CBOW的工作方式是在给定上下文的情况下倾向于预测单词的概率。上下文可以是单个单词或一组单词。但为简单起见,我将使用单个上下文词并尝试预测单个目标词。
假设我们有一个语料库C =“Hey, this is sample corpus using only one context word.”并且我们定义了一个上下文窗口1。可以将该语料库转换为CBOW模型的训练集,如下所示。输入如下所示。下图右侧的矩阵包含左侧输入的one-hot编码。

上表一行代表一个样本。
CBOW模型如下:

该网络具有三层:输入层,隐藏层和输出层。输出层是softmax层,用于将在输出层中获得的概率求和为1。现在让我们看一下正向传播如何计算隐藏层激活。
下面是单个样本数据作为CBOW模型输入的流程:

- 输入层和目标都进行了一次one-hot编码,大小为[1 XV]。在上面的示例中,V = 10;
- 有两组权重。一个在输入层与隐藏层之间,第二个在隐藏层与输出层之间。输入隐藏层矩阵大小$U=[V\times N]$,隐藏输出层矩阵大小$V= [N\times V]$:其中N是我们选择用来表示单词的维数。它是神经网络的任意参数和超参数。同样,N是隐藏层中神经元的数量。在此,N = 4;
- 任何层之间都没有激活功能;
- 输入乘以输入隐藏权重$U$,称为隐藏激活。它只是复制的输入隐藏矩阵中的相应行;
- 计算隐藏层的输入和隐藏权重$V$;
- 计算输出和目标之间的误差,并传播回去以重新调整权重;
- 隐藏层和输出层之间的权重被用作单词的单词向量表示。
下图使用了三个上下文词作为输入,CBOW模型计算如下:

输入层在输入中将具有3 [1 XV]个向量,在输出层中将具有1 [1 XV]个向量。
步骤保持不变,只是隐藏激活的计算发生了变化。不仅将输入隐藏的权重矩阵的对应行复制到隐藏层,还对矩阵的所有对应行取平均值。通过上图我们可以理解这一点。计算出的平均向量成为隐藏的激活。因此,如果我们针对单个目标词具有三个上下文词,则我们将具有三个初始隐藏激活,然后将其按元素进行平均以获得最终激活。
2.2.1 CBOW的训练过程
CBOW模型一些参数:
$ x^{(c)} $: 输入上下文的one-hot编码向量;
$ y^{(c)} $: 预测单词的one-hot编码向量;
$ \mathcal{V}\in R^{n\times |V|} $: 输入层-隐藏层权重矩阵;
$ \mathcal{U}\in R^{|V|\times n} $: 隐藏层-输出层权重矩阵;
$ w_i $: 词典的地$i$个单词;
$ \mathcal{v}_i $: 输入层-隐含层权重矩阵的第$i$列,代表词典中第$i$个单词的word embedding;
$ \mathcal{u}_i $: 隐藏层-输出层权重矩阵的第$i$行,表示词典中第$i$个单词的向量表示。

我们把计算步骤细化为如下步骤:
- 生成上下文窗口为m的one-hot编码词向量,$x^{(c-j)}$是维度为$V$的one-hot编码向量:
- 取得上下文单词的word embeddings:
- 对word embeddings取均值 $ \hat{v}=\frac{\sum_{j=-m}^{j=m}v_{c+j}}{2m}\in R^n$;
- 生成分数向量 $z=\mathcal{U}\hat\in R^{|V|}$ 。相似单词点乘越高,它将会促进相似单词更加接近以获得更高分数;
- 将分数转成概率 $\hat{y}=softmax(z)\in R^{|V|}$;
- 我们希望生成的概率,$\hat{y}\in R^{|V|}$ , t去匹配真实概率, $y\in R^{|V|}$。
怎么获得 $\mathcal{V}$ 和 $\mathcal{U}$ 这两个矩阵?
我们使用交叉熵 $H(\hat{y},y)$作为代价函数:
让我们关注当前的情况,即$y$是一个one-hot向量。 因此,我们知道上述损失简化为:
我们生成了优化的目标函数:
2.2.2 CBOW优点
- 概率是自然,它应该表现出比确定性方法更好的(通常)。
- 内存不足。它不需要像共现矩阵那样需要巨大的RAM需求,因为它需要存储三个巨大的矩阵。
2.2.3 CBOW缺点
- CBOW取一个单词上下文的平均值(如上图所示,用于计算隐藏激活)。例如,苹果既可以是水果,也可以是公司,但CBOW会同时获取两种情况的平均值,并将其置于水果和公司的集群之间。
- 如果未进行适当的优化,从头开始培训CBOW可能会花费很多时间。
2.3 Skip-Gram模型
Skip-Gram的工作方式是根据给定的单词预测该单词的上下文。


我们把Skip-Gram模型训练过程分为如下步骤:
- 生成中心词的one-hot输入向量 $x\in R^{|V|}$ ;
- 通过点乘获取中心词的word embedding $ v_c = \mathcal{V} x\in R^n$;
- 计算分数向量 $ z = \mathcal{U} v_c $;
- 将分数向量转换成概率, $\hat{y}=\operatorname{softmax}(z)$ . 注意 $\hat{y}_{c-m}, \ldots, \hat{y}_{c-1}, \hat{y}_{c+1}, \ldots, \hat{y}_{c+m}$ 是每个关注的上下文单词的概率;
- 我们希望生成的上下文单词概率能够匹配真实上下文单词的概率 $y^{(c-m)}, \ldots, y^{(c-1)}, y^{(c+1)}, \ldots, y^{(c+m)}$;
像CBOW模型一样,Skip-Gram模型也需要一个目标函数来评估该模型。和CBOW模型评估函数的主要区别在于,Skip-Gram调用了朴素贝叶斯假设来得出概率 。如果您以前没有看过,那么简单地说,这是一个强有力的(本机)条件独立假设。 换句话说,给定中心词,所有输出词都是完全独立的。
$H\left(\hat{y}, y_{c-m+j}\right)$ 是概率向量 $\hat{y}$ 和one-hot向量 $y_{c-m+j}$的交叉熵损失函数。
2.3.2 Skip-Gram模型的优点
- Skip-Gram模型可以捕获单个单词的两种语义。即它将具有Apple的两个矢量表示。一个用于公司,另一个用于水果。
- 带有负采样的Skip-Gram模型通常胜过其他所有方法。
- 本文作者: 程序猪-渔枫
- 本文链接: https://over-shine.github.io/2020/08/21/word2vec/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!