Word2vec看我这一篇就足够应付面试了
Word2vec是一种用于生成词嵌入的神经网络模型,主要通过连续词袋模型(CBOW)和 Skip-gram 模型实现对词语的理解与表示。CBOW 模型基于上下文预测当前单词,其工作流程包括输入层(上下文单词的一热表示)、权重矩阵计算、相加求平均并得到预测向量的过程;而 Skip-gram 则逆转了 CBOW 的因果关系,在已知当前单词的情况下预测上下文。为了提高训练效率,在实际操作中采用了负采样策略(仅更新一小部分权重参数)以及一元分布策略(更倾向于选择高频词作为负样本),从而显著降低了计算复杂度并加快了训练速度。
Word2vec原理解析
- 1. 向量表示方法
- 2. Word2vec采用的连续词袋模型(CBOW)
- 3. Word2vec采用的Skip-gram结构
- 4. 训练过程的优化
1. 词向量表示
一种常见的文本编码方法是将每个词汇映射到其在词汇表中的唯一位置。One-hot表示是一种这样的编码方式,在这种方案中,整个词汇表被赋予了一定数量的维度(即向量空间),每个维度对应一个特定的词语。具体来说,在这种编码方式下,“中午”这个词语会被分配到第3个维度上(假设从左到右依次编号),因此它的One-hot表示可以被定义为一个长度等于 vocabulary size 的向量,在第3个位置上标有1值(即 [v_1, v_2, \dots, v_n] 其中 v_3=1)。值得注意的是,在这种编码方式下,在这种编码方式下,“中午”对应的One-hot编码就是 [v₁=0, v₂=0, v₃=1, v₄=0, v₅=0] 这样的形式。然而,在这种编码方式下,“单词之间的联系仅仅体现在它们是否被包含在训练数据中”——也就是说,“单词之间的联系仅仅体现在它们是否被包含在训练数据中”,这可能导致计算资源的巨大消耗——这可能导致计算资源的巨大消耗——在这种情况下,“当 vocabulary size 十分庞大的时候”,会占用大量的内存资源而导致性能下降等问题
分布式表示:经过训练, 将每个词汇都被映射到一个较短的低维词向量中, 并由人工设定其维度. 每个神经元节点则表示该词汇隶属于该类别的程度.

词向量表示法(word embedding):基于神经网络的分布式表达方式亦被称作词向量或词语嵌入技术,其核心目的是通过这种分布式表示方法实现词语之间的语义关联和语义相似性计算。
2. Word2vec中的连续词袋模型(CBOW)
该模型由三层人工神经网络构成。其主要功能是基于输入的已知语境信息来推断当前单词的身份。例如“我 今天 中午 吃的 米饭”这一语段,在采用滑动窗口大小为2的方式进行训练时,则通过分析“我”、“中午”和“吃的”这三个词来推断“今天”的存在。

输入层中包含了上下文单词的一热编码表示。图中所示上下文单词共有C=3个,在该模型中每个单词的一热编码长度均为V。接下来,在每一层都设置了多个神经元来处理信息传递过程中的复杂性问题。每一个一热编码向量都会与预定义输入权重矩阵中的对应行进行计算操作,并对这些计算结果进行累加求和后取平均值作为最终的词嵌入表达形式。然后在这一过程中继续经过多轮迭代运算之后,在最后一层神经网络节点处会生成一个大小为V维的结果数值集合作为最终预测结果输出。
对预测向量施加sigmoid激活函数激活函数后生成概率分布,在利用交叉熵损失函数进行反向传播的过程中优化模型参数。值得注意的是,在实际应用中我们并不关注输出的具体数值结果,而是重点关注经过训练后的输入权重矩阵W(即word embedding矩阵),该矩阵中每一行都对应着词汇表中的一个词,并记录其d维词向量表示的信息。
3. Word2vec中的Skip-gram模型
Skip-gram只是逆转了CBOW的因果关系而已,即已知当前词语,预测上下文。
4. 训练优化
在实际训练过程中,词汇表规模非常庞大。这使得word embedding矩阵的参数数量显著增加。梯度下降算法对所有参数进行更新的过程因而显得效率低下。
Negative Sampling:在每一次训练迭代中,每个训练样本仅负责调整少部分权重参数,在这种机制下能够有效降低梯度下降过程中的计算量。以一个具体的例子来说,在输入词是'吃的'的情况下,在输出层中只有与'米饭'相关的神经元被设定为1值(其余输出层中的数值设为零)。那些被设定为零的目标节点所对应的那些情况就被视为属于负面类别(negative samples),因此在实际应用中通常会随机选择少量的正类与负类神经元进行权值调整。
一元分布:在负样本选取过程中采用了一元分布策略,即高频词被优先选为负样本。
