Word2vec算法原理详解:从one-hot到词向量
Word2vec算法原理详解:从one-hot到词向量
Word2vec是一种将单词转换为向量形式的工具,通过将文本处理简化为向量空间中的运算,可以计算出词向量间的相似度,从而表示文本语义上的相似度。本文将详细介绍Word2vec算法的原理,特别是CBOW模型的结构和实现细节。
一、背景知识:one-hot向量
独热向量(one-hot vector)是指使用N位0或1来对N个状态进行编码,每个状态都有它独立的表示形式,并且其中只有一位为1,其他位都为0。
例如,编码单词"apple"、"bag"、"cat"、"dog"、"elephant",可以使用5位向量:
apple [1 0 0 0 0]
bag [0 1 0 0 0]
cat [0 0 1 0 0]
dog [0 0 0 1 0]
elephant [0 0 0 0 1]
使用独热向量虽然能够很好地对各种内容进行编码,但存在以下问题:
- 没有考虑编码内容之间的关联性
- 特征矩阵非常稀疏,占用空间大
二、Word2vec的核心思想
Word2vec的核心思想是:上下文语境相似的词,其语义也相似。它采用n元语法模型(n-gram model),假设一个词只与周围n个词有关,而与文本中的其他词无关。通过将这n个词映射到K维向量空间,可以为文本数据寻求更深层次的特征表示。
三、CBOW模型结构
CBOW模型分为三层:输入层、隐藏层和输出层。其主要特点如下:
输入层到隐藏层的映射:采用简单的对所有输入词向量求和并取平均的方法。例如,输入三个4维词向量(1,2,3,4)、(9,6,11,8)、(5,10,7,12),映射后的词向量为(5,6,7,8)。
隐藏层到输出层的改进:为了避免计算所有词的softmax概率,Word2vec使用霍夫曼树(Huffman Tree)来优化计算。
霍夫曼树的构造方法
霍夫曼树是一种带权路径最短的二叉树,构造方法如下:
- 先用权重最小的两个作为最底层叶子结点
- 然后权重次小的,以此类推
- 保证权重越大的越早被遍历到,节省时间和空间
- 遍历叶子结点的路径可以用哈夫曼编码表示,例如左节点是0,右节点是1
使用霍夫曼树的好处:
- 计算量从V减少到log2V
- 高频词靠近树根,减少查找时间
四、算法核心:最大化预测词的哈夫曼编码概率
以简单的文档{I drink coffee everyday}为例,选"coffee"作为中心词,根据单词"I"、"drink"和"everyday"来预测单词。将这三个单词的one-hot向量作为输入层的输入。
输入层到隐藏层的计算
- 将输入向量x与初始权重w相乘:w*x=v
- 将向量v求和并平均得到隐藏层的输出向量c
隐藏层到输出层的计算
使用逻辑回归二分类算法判断走左子树还是右子树的概率。逻辑回归的sigmoid函数及其导数如下:
输出层的哈夫曼树可以表示为:
假设目标词是"足球",其哈夫曼编码是1001。这里我们指定负例是1,正例是0,那么可以得到如下结果:
目标词的概率可以写成如下似然函数p:
通过求偏导数得到参数c的更新公式,同样可以得到x的更新公式。
五、负采样优化
负采样是一种提升训练速度的方法,其核心思想是不直接让模型从整个词表中找最可能的词,而是给定这个词(正例)和几个随机采样的噪声词(负例),只要模型能从这里面找出正确的词就认为完成目标。
常用的负采样策略包括均匀负采样和按词频率采样。比较常用的是基于一元分布模型的3/4次幂采样方法,该方法中一个词被采样的概率取决于其在语料中的词频,满足一元分布模型。
例如,对于三个词"我"、"和平"、"觊觎",其权重分别为0.9、0.01、0.003,经过3/4幂后:
- "我": 0.9^3/4 = 0.92
- "和平": 0.01^3/4 = 0.03
- "觊觎": 0.003^3/4 = 0.012
通过这种方式,适当提升了低频词、罕见词被抽到的概率。
最终的优化目标是最大化g函数:
通过求偏导数得到更新的步长。
总结
本文详细介绍了Word2vec算法的原理,特别是CBOW模型的结构和实现细节。从one-hot向量的局限性引入,逐步讲解了Word2vec的核心思想、CBOW模型的三层结构、霍夫曼树的应用、逻辑回归在预测中的作用,以及负采样的优化方法。这些内容对于理解和应用Word2vec算法具有重要参考价值。