理论:
embedding简单来说就是用向量表示词汇,最早使用的都是one-hot向量,一个维度代表一个单词,长度为词典的长度。优点是简单明了,缺点是占用空间大,无法表示词与词之间的相似度。2013年google提出了word2vec,主要包含两个模型CBOW(continuous bag of word)和skip-gram。通过模型将词向量减小到特定的维度,这种方法一定程度上可以通过余弦相似度等方法表示词与词的相似度。有个例子比较有名: 'king' - 'queen' 近似与 'man' - 'woman' 相等。
- CBOW:
CBOW考虑一个词(中心词)周围几个词(背景词)对这个词的影响,具体考虑周围几个词由窗口(window size)决定。模型的输入是这些背景词,期望的输出是中心词。 - skip-gram:
skip-gram与CBOW相反,希望通过中心词来预测背景词。模型输入是中心词,希望输出的是周围的背景词。
算法上的改进:
- Hierarchical Softmax:先将所有词构造成一个霍夫曼树。CBOW将原本的DNN改成三层,输入层是窗口内的词向量,投影层是对这些词向量做平均得到X,输出层是一个霍夫曼树。skip-gram类似,没有投影层,输出层也是一个霍夫曼树,但方向相反,从根节点出发。
当字典维度非常大时softmax计算相对困难,时间很长,Hierarchical Softmax提高了计算效率,从O(N)到O(logN)。
但缺点是对于生僻词,计算成本仍然很高(霍夫曼树词频越高越靠近根节点)
霍夫曼树可以视为一个二分类的树,对于每一个非叶节点(即除了最低那层节点),节点的向量表示为θ,会有两个子节点,选择路径可以当做一个二分类的过程,正类为1,负类为0,用sigmoid函数判断,归为正类概率是1/[1+exp(-X^T * θ)],反之为exp(-X^T * θ) / [1+exp(-X^T * θ)]。
-
Nagative Sampling:负采样的本质思想是既然维度大,权重多,每次更新成本大,那就随机