三、Word2Vec

3.1 CBOW 模型

  1. CBOW 模型(continuous bag-of-word):根据上下文来预测下一个单词。

3.1.1 一个单词上下文

  1. 在一个单词上下文的CBOW 模型中:输入是前一个单词,输出是后一个单词,输入为输出的上下文。

    由于只有一个单词作为输入,因此称作一个单词的上下文。

  2. 一个单词上下文的CBOW 模型如下:

    三、Word2Vec - 图1

    其中:

    • 三、Word2Vec - 图2 为隐层的大小,即隐向量 三、Word2Vec - 图3

    • 网络输入 三、Word2Vec - 图4 ,它是输入单词(即上下文单词)的 one-hote 编码,其中只有一位为 1,其他位都为 0 。

    • 网络输出 三、Word2Vec - 图5,它是输出单词为词汇表各单词的概率。

    • 相邻层之间为全连接:

      • 输入层和隐层之间的权重矩阵为 三、Word2Vec - 图6
      • 隐层和输出层之间的权重矩阵为 三、Word2Vec - 图7
  3. 假设没有激活函数,没有偏置项。给定输入 三、Word2Vec - 图8,则其对应的隐向量 三、Word2Vec - 图9 为: 三、Word2Vec - 图10

    令:

    三、Word2Vec - 图11

    由于 三、Word2Vec - 图12 是个one-hot编码,假设它为词表 三、Word2Vec - 图13 中第 三、Word2Vec - 图14 个单词 三、Word2Vec - 图15,即:

    三、Word2Vec - 图16

    则有:三、Word2Vec - 图17

    即:三、Word2Vec - 图18 的第 三、Word2Vec - 图19三、Word2Vec - 图20 就是词表 三、Word2Vec - 图21 中第 三、Word2Vec - 图22 个单词 三、Word2Vec - 图23 的表达,称作单词 三、Word2Vec - 图24 的输入向量。

  4. 给定隐向量 三、Word2Vec - 图25,其对应的输出向量 三、Word2Vec - 图26为: 三、Word2Vec - 图27 。令:

    三、Word2Vec - 图28

    则有:三、Word2Vec - 图29

    • 三、Word2Vec - 图30 表示词表 三、Word2Vec - 图31 中,第 三、Word2Vec - 图32 个单词 三、Word2Vec - 图33 的得分。
    • 三、Word2Vec - 图34 为矩阵 三、Word2Vec - 图35 的第 三、Word2Vec - 图36 列,称作单词 三、Word2Vec - 图37 的输出向量。
  5. 三、Word2Vec - 图38 之后接入一层 softmax 层,则有:

    三、Word2Vec - 图39

    三、Word2Vec - 图40 表示词汇表 三、Word2Vec - 图41 中第 三、Word2Vec - 图42 个单词 三、Word2Vec - 图43 为真实输出单词的概率。

    假设输入单词为 三、Word2Vec - 图44 (它称作上下文) ,观测到它的下一个单词为 三、Word2Vec - 图45 。令输入单词的对应的网络输入为 三、Word2Vec - 图46 ,其隐向量为 三、Word2Vec - 图47,输入输出单词对应的输出单元为 三、Word2Vec - 图48,则采用交叉熵的损失函数为:

    三、Word2Vec - 图49

    考虑语料库 三、Word2Vec - 图50 中所有的样本,则整体经验损失函数为:

    三、Word2Vec - 图51

    则网络的优化目标为:

    三、Word2Vec - 图52

    设张量 三、Word2Vec - 图53 为某个网络参数,则有:

    三、Word2Vec - 图54

    则该参数的单次更新 三、Word2Vec - 图55 ,可以表示为单个样本的多次更新:

    三、Word2Vec - 图56

    因此本节的参数更新推导是关于单个样本的更新:三、Word2Vec - 图57

3.1.2 参数更新

  1. 定义 三、Word2Vec - 图58 ,即第 三、Word2Vec - 图59 个输出单元对应于真实的输出单词 三、Word2Vec - 图60 时,它为1;否则为0。定义:

    三、Word2Vec - 图61

    它刻画了每个输出单元的预测误差:

    • 三、Word2Vec - 图62 时: 三、Word2Vec - 图63,它刻画了输出概率 (三、Word2Vec - 图64) 与真实概率 三、Word2Vec - 图65 之间的差距。小于 0 表示预测不足。
    • 三、Word2Vec - 图66 时:三、Word2Vec - 图67,它刻画了输出概率 (三、Word2Vec - 图68) 与真实概率 三、Word2Vec - 图69 之间的差距。大于 0 表示预测过量。
  2. 根据:三、Word2Vec - 图70 ,则有:

    三、Word2Vec - 图71

    三、Word2Vec - 图72 更新规则为:

    三、Word2Vec - 图73

    其物理意义为:

    • 当估计过量 (三、Word2Vec - 图74) 时, 三、Word2Vec - 图75 会减去一定比例的 三、Word2Vec - 图76 。 这发生在第 三、Word2Vec - 图77 个输出单元不对应于真实的输出单词时。
    • 当估计不足 (三、Word2Vec - 图78) 时, 三、Word2Vec - 图79 会加上一定比例的 三、Word2Vec - 图80 。这发生在第 三、Word2Vec - 图81 个输出单元刚好对应于真实的输出单词时。
    • 三、Word2Vec - 图82 时,更新的幅度将非常微小。
  3. 定义:

    三、Word2Vec - 图83

    根据:三、Word2Vec - 图84 ,则有:三、Word2Vec - 图85

    三、Word2Vec - 图86 的物理意义为:词汇表 三、Word2Vec - 图87 中所有单词的输出向量的加权和,其权重为 三、Word2Vec - 图88

  4. 考虑到 三、Word2Vec - 图89 ,则有:

    三、Word2Vec - 图90

    写成矩阵的形式为:三、Word2Vec - 图91 ,其中 三、Word2Vec - 图92 为克罗内克积。

    由于 三、Word2Vec - 图93one-hote 编码,所以它只有一个分量非零,因此 三、Word2Vec - 图94 只有一行非零,且该非零行就等于 三、Word2Vec - 图95 。因此得到更新方程:

    三、Word2Vec - 图96

    其中 三、Word2Vec - 图97三、Word2Vec - 图98 非零分量对应的 三、Word2Vec - 图99 中的行,而 三、Word2Vec - 图100 的其它行在本次更新中都保持不变。

  5. 考虑更新 三、Word2Vec - 图101三、Word2Vec - 图102 行的第 三、Word2Vec - 图103 列,则:

    三、Word2Vec - 图104

    • 三、Word2Vec - 图105 时,三、Word2Vec - 图106 趋近于 0 ,则更新的幅度将非常微小。
    • 三、Word2Vec - 图107三、Word2Vec - 图108 差距越大,三、Word2Vec - 图109 绝对值越大, 则更新的幅度越大。
  6. 当给定许多训练样本(每个样本由两个单词组成),上述更新不断进行,更新的效果在不断积累。

    • 根据单词的共现结果,输出向量与输入向量相互作用并达到平衡。

      • 输出向量 三、Word2Vec - 图110 的更新依赖于输入向量 三、Word2Vec - 图111三、Word2Vec - 图112

        这里隐向量 三、Word2Vec - 图113 等于输入向量 三、Word2Vec - 图114

      • 输入向量 三、Word2Vec - 图115 的更新依赖于输出向量 三、Word2Vec - 图116三、Word2Vec - 图117

        这里 三、Word2Vec - 图118 为词汇表 三、Word2Vec - 图119 中所有单词的输出向量的加权和,其权重为 三、Word2Vec - 图120

    • 平衡的速度与效果取决于单词的共现分布,以及学习率。

3.1.3 多个单词上下文

  1. 考虑输入为目标单词前后的多个单词(这些单词作为输出的上下文),输入为 三、Word2Vec - 图121 个单词:三、Word2Vec - 图122 。对于每个输入单词,其权重矩阵都为 三、Word2Vec - 图123,这称作权重共享。这里的权重共享隐含着:每个单词的表达是固定的、唯一的,与它的上下文无关。

    隐向量为所有输入单词映射结果的均值:

    三、Word2Vec - 图124

    其中:三、Word2Vec - 图125 表示第 三、Word2Vec - 图126 个输入单词在词汇表 三、Word2Vec - 图127 中的编号,三、Word2Vec - 图128 为矩阵 三、Word2Vec - 图129 的第 三、Word2Vec - 图130 行,它是对应输入单词的输入向量。

    三、Word2Vec - 图131

  2. 假设给定一个单词序列 三、Word2Vec - 图132 (它称作上下文),观测到它的下一个单词为 三、Word2Vec - 图133三、Word2Vec - 图134 对应的网络输出编号为 三、Word2Vec - 图135

    定义损失函数为交叉熵:

    三、Word2Vec - 图136

    它的形式与一个单词上下文中推导的完全相同,除了这里的 三、Word2Vec - 图137 不同。

    考虑语料库 三、Word2Vec - 图138 中所有的样本,则整体经验损失函数为:

    三、Word2Vec - 图139

    则网络的优化目标为:

    三、Word2Vec - 图140

    .

  3. 一个单词上下文中推导的结果相同,这里给出参数更新规则:

    • 更新 三、Word2Vec - 图141

      三、Word2Vec - 图142

      其中 三、Word2Vec - 图143

    • 更新 三、Word2Vec - 图144

      三、Word2Vec - 图145

      其中 :

      • 三、Word2Vec - 图146 ,它是词汇表 三、Word2Vec - 图147 中所有单词的输出向量的加权和,其权重为 三、Word2Vec - 图148
      • 三、Word2Vec - 图149 为第 三、Word2Vec - 图150 个输入单词在词表 三、Word2Vec - 图151 中的编号。
  4. 在更新 三、Word2Vec - 图152 时,如果有相同的输入单词(如: 三、Word2Vec - 图153 ),则在参数更新时认为它们是不同的。最终的效果就是在 三、Word2Vec - 图154 中多次减去同一个增量 三、Word2Vec - 图155

    你也可以直接减去 三、Word2Vec - 图156, 其中 三、Word2Vec - 图157 为词汇表中单词 三、Word2Vec - 图158 在输入中出现的次数。

3.2 Skip-Gram

  1. Skip-Gram 模型是根据一个单词来预测其前后附近的几个单词(即:上下文)。

3.2.1 网络结构

  1. Skip-Gram 网络模型如下。其中:

    • 网络输入 三、Word2Vec - 图159 ,它是输入单词的 one-hote 编码,其中只有一位为 1,其他位都为 0 。

    • 网络输出 三、Word2Vec - 图160 ,其中 三、Word2Vec - 图161是第 三、Word2Vec - 图162 个输出单词为词汇表各单词的概率。

    • 对于网络的每个输出 三、Word2Vec - 图163 ,其权重矩阵都相同,为 三、Word2Vec - 图164。这称作权重共享。

      这里的权重共享隐含着:每个单词的输出向量是固定的、唯一的,与其他单词的输出无关。

      三、Word2Vec - 图165

  2. Skip-Gram 网络模型中,设网络第 三、Word2Vec - 图166 个输出的第 三、Word2Vec - 图167 个分量为 三、Word2Vec - 图168 ,则有:

    三、Word2Vec - 图169

    三、Word2Vec - 图170 表示第 三、Word2Vec - 图171 个输出中,词汇表 三、Word2Vec - 图172 中第 三、Word2Vec - 图173 个单词 三、Word2Vec - 图174 为真实输出单词的概率。

  3. 因为 三、Word2Vec - 图175 在多个单元之间共享,所以对于网络每个输出,其得分的分布 三、Word2Vec - 图176 是相同的。但是这并不意味着网络的每个输出都是同一个单词。

    并不是网络每个输出中,得分最高的单词为预测单词。因为每个输出中,概率分布都相同,即: 三、Word2Vec - 图177Skip-Gram 网络的目标是:网络的多个输出之间的联合概率最大

  4. 假设输入为单词 三、Word2Vec - 图178 ,输出单词序列为 三、Word2Vec - 图179 。定义损失函数为:

    三、Word2Vec - 图180

    其中 三、Word2Vec - 图181 为输出单词序列对应于词典 三、Word2Vec - 图182 中的下标序列。

    由于网络每个输出的得分的分布都相同,令 三、Word2Vec - 图183,则上式化简为:

    三、Word2Vec - 图184

    .

3.1.2 参数更新

  1. 定义 三、Word2Vec - 图185 ,即网络第 三、Word2Vec - 图186 个输出的第 三、Word2Vec - 图187 个分量对应于第 三、Word2Vec - 图188 个真实的输出单词 三、Word2Vec - 图189 时,它为 1;否则为0。

    定义:

    三、Word2Vec - 图190

    它刻画了网络第 三、Word2Vec - 图191 个输出的第 三、Word2Vec - 图192 个分量的误差:

    • 三、Word2Vec - 图193 时: 三、Word2Vec - 图194,它刻画了输出概率 三、Word2Vec - 图195 与真实概率 三、Word2Vec - 图196 之间的差距。小于 0 表示预测不足。
    • 三、Word2Vec - 图197 时:三、Word2Vec - 图198,它刻画了输出概率 三、Word2Vec - 图199 与真实概率 三、Word2Vec - 图200 之间的差距。大于 0 表示预测过量。
  2. 根据:三、Word2Vec - 图201 ,则有:

    三、Word2Vec - 图202

    定义 三、Word2Vec - 图203 ,它为网络每个输出的第 三、Word2Vec - 图204 个分量的误差之和。于是有:

    三、Word2Vec - 图205

    则有更新方程:

    三、Word2Vec - 图206

  3. 定义:

    三、Word2Vec - 图207

    根据:

    三、Word2Vec - 图208

    则有:

    三、Word2Vec - 图209

    三、Word2Vec - 图210 的物理意义为:词汇表 三、Word2Vec - 图211 中所有单词的输出向量的加权和,其权重为 三、Word2Vec - 图212

  4. 考虑到 三、Word2Vec - 图213 ,则有:

    三、Word2Vec - 图214

    写成矩阵的形式为:三、Word2Vec - 图215 ,其中 三、Word2Vec - 图216 为克罗内克积。

    由于 三、Word2Vec - 图217one-hote 编码,所以它只有一个分量非零,因此 三、Word2Vec - 图218 只有一行非零,且该非零行就等于 三、Word2Vec - 图219 。因此得到更新方程:

    三、Word2Vec - 图220

    其中 三、Word2Vec - 图221三、Word2Vec - 图222 非零分量对应的 三、Word2Vec - 图223 中的行,而 三、Word2Vec - 图224 的其它行在本次更新中都保持不变。

3.3 优化

  1. 原始的CBOW 模型和Skip-Gram 模型的计算量太大,非常难以计算。

    • 模型在计算网络输出的时候,需要计算误差 。对于CBOW 模型,需要计算 三、Word2Vec - 图225 个误差(词汇表的大小),对于 Skip-Gram 模型,需要计算 三、Word2Vec - 图226 个误差。

      另外,每个误差的计算需要用到 softmax 函数,该 softmax 函数涉及到 三、Word2Vec - 图227 复杂度的运算: 三、Word2Vec - 图228

    • 每次梯度更新都需要计算网络输出。

    如果词汇表有 100万 单词,模型迭代 100 次,则计算量超过 1 亿次。

  2. 虽然输入向量的维度也很高,但是由于输入向量只有一位为 1,其它位均为 0,因此输入的总体计算复杂度较小。

  3. word2vec 优化的主要思想是:限制输出单元的数量。

    事实上在上百万的输出单元中,仅有少量的输出单元对于参数更新比较重要,大部分的输出单元对于参数更新没有贡献。

  4. 有两种优化策略:

    • 通过分层 softmax 来高效计算 softmax 函数。
    • 通过负采样来缩减输出单元的数量。

3.3.1 分层 softmax

  1. 分层 softmax 是一种高效计算 softmax 函数的算法。

    经过分层 softmax 之后,计算 softmax 函数的算法复杂度从 三、Word2Vec - 图229 降低到 三、Word2Vec - 图230 ,但是仍然要计算 三、Word2Vec - 图231 个内部节点的向量表达 。

a) 网络结构
  1. 在分层softmax 中,字典 三、Word2Vec - 图232 中的 三、Word2Vec - 图233 个单词被组织成二叉树。

    • 叶子结点值为某个具体单词的概率(如下图中的白色结点)

    • 中间节点值也代表一个概率(如下图中的灰色结点)。它的值等于直系子节点的值之和,也等于后继的叶子结点值之和,也等于从根节点到当前节点的路径的权重的乘积。

      之所以有这些性质,是由于结点值、权重都是概率,满足和为1的性质

    • 根据定义,根节点的值等于所有叶子结点的值之和,即为 1.0

    • 二叉树的每条边代表分裂:

      • 向左的边:表示选择左子节点,边的权重为选择左子节点的概率
      • 向右的边:表示选择右子节点,边的权重为选择右子节点的概率

    三、Word2Vec - 图234

  2. 对于任意一个中间节点 三、Word2Vec - 图235, 假设其向量表达为 三、Word2Vec - 图236 ,它是待求的参数。

    • 选择左子节点的概率为:

      三、Word2Vec - 图237

    • 选择右子节点的概率为 :

      三、Word2Vec - 图238

    • 如果求得所有中间节点的向量表达,则根据每个中间节点的分裂概率,可以很容易的求得每个叶节点的值。

  3. 在分层softmax 中,算法并不直接求解输出向量 三、Word2Vec - 图239,而是求解二叉树的 三、Word2Vec - 图240 个中间节点的向量表达 。

    当需要计算某个单词的概率时,只需要记录从根节点到该单词叶子结点的路径。给定单词 三、Word2Vec - 图241

    • 定义 三、Word2Vec - 图242 为从根节点到单词 三、Word2Vec - 图243 的路径的第 三、Word2Vec - 图244 个节点(从 1 计数)。
    • 定义 三、Word2Vec - 图245 为从根节点到单词 三、Word2Vec - 图246 的路径的长度。
    • 定义 三、Word2Vec - 图247 表示节点 三、Word2Vec - 图248 的左子节点。

    三、Word2Vec - 图249

    输出为单词 三、Word2Vec - 图250 的概率为:

    三、Word2Vec - 图251

    其中:

    • 三、Word2Vec - 图252 表示:从根节点到单词 三、Word2Vec - 图253 的路径上,第 三、Word2Vec - 图254 个节点是第 三、Word2Vec - 图255 个节点的左子节点。

    • 三、Word2Vec - 图256 是一个函数。当 三、Word2Vec - 图257 是个事实时,其值为 1;当 三、Word2Vec - 图258 不成立时,其值为 -1。

      三、Word2Vec - 图259

    • 三、Word2Vec - 图260 表示:从根节点到单词 三、Word2Vec - 图261 的路径上:

      • 当第 三、Word2Vec - 图262 个节点是第 三、Word2Vec - 图263 个节点的左子节点时,函数值为 1
      • 当第 三、Word2Vec - 图264 个节点是第 三、Word2Vec - 图265 个节点的右子节点时,函数值为 -1
    • 三、Word2Vec - 图266 表示:从根节点到单词 三、Word2Vec - 图267 的路径上,第 三、Word2Vec - 图268 个节点的向量表达

    • 对于从根节点到单词 三、Word2Vec - 图269 的路径上,从第 三、Word2Vec - 图270 个节点到第 三、Word2Vec - 图271 个节点的概率为:

      三、Word2Vec - 图272

      因此 三、Word2Vec - 图273 刻画了:从根节点到单词 三、Word2Vec - 图274 的路径上,每条边的权重(也就是分裂概率)的乘积。

  4. 对于所有的叶子节点,有 三、Word2Vec - 图275

    利用数学归纳法,可以证明:左子节点的值+右子节点的值=父节点的值。上式最终证明等于根节点的值,也就是 1.0 。

b) 参数更新
  1. 为了便于讨论,这里使用CBOW一个单词上下文模型。

    三、Word2Vec - 图276三、Word2Vec - 图277, 定义损失函数对数似然:

    三、Word2Vec - 图278

    则有:

    三、Word2Vec - 图279

    其中:

    三、Word2Vec - 图280

    定义:

    三、Word2Vec - 图281

    • 三、Word2Vec - 图282 为预测选择 三、Word2Vec - 图283 的左子节点的概率。

    • 三、Word2Vec - 图284 的物理意义为:从根节点到单词 三、Word2Vec - 图285 的路径上,第 三、Word2Vec - 图286 个节点的选择误差:

      • 如果下一个节点选择第 三、Word2Vec - 图287 个节点的左子节点,则 三、Word2Vec - 图288, 此时 三、Word2Vec - 图289 表示预测的不足。
      • 如果下一个节点选择第 三、Word2Vec - 图290 个节点的右子节点,则 三、Word2Vec - 图291, 此时 三、Word2Vec - 图292 表示预测的过量。
  2. 考虑内部节点 三、Word2Vec - 图293,其向量表达为 三、Word2Vec - 图294。则有:

    三、Word2Vec - 图295

    得到向量表达为 三、Word2Vec - 图296 的更新方程:

    三、Word2Vec - 图297

    • 对于每个单词 三、Word2Vec - 图298 ,由于它是叶节点,因此可以更新 三、Word2Vec - 图299 个内部节点的向量表达。

    • 当模型的预测概率较准确,即 三、Word2Vec - 图300 时,则 三、Word2Vec - 图301 接近0 。此时梯度非常小,三、Word2Vec - 图302 的更新幅度也会非常小。

      当模型的预测概率较不准,则 三、Word2Vec - 图303 较大。此时梯度会较大,三、Word2Vec - 图304 的更新幅度也会较大。

  3. 对于内部结点的向量表达 三、Word2Vec - 图305 的更新方程适用于 CBOW 模型和 Skip-Gram 模型。但是在 Skip-Gram 模型中,需要对 三、Word2Vec - 图306 个输出的每一个单词进行更新。

  4. CBOW 输入参数更新:对于 CBOW 模型,定义:

    三、Word2Vec - 图307

    三、Word2Vec - 图308 的物理意义为:二叉树中所有内部节点向量表达的加权和,其权重为 三、Word2Vec - 图309

    考虑到 三、Word2Vec - 图310 ,则有:

    三、Word2Vec - 图311

    写成矩阵的形式为:三、Word2Vec - 图312 ,其中 三、Word2Vec - 图313 为克罗内克积。

    三、Word2Vec - 图314 的更新分解为 三、Word2Vec - 图315 次,每次对应于一个输入 三、Word2Vec - 图316 。因此得到 三、Word2Vec - 图317 的更新方程:

    三、Word2Vec - 图318

    其中三、Word2Vec - 图319 为第 三、Word2Vec - 图320 个输入单词在词表 三、Word2Vec - 图321 中的编号。

  5. Skip-Gram 输入参数更新:对于 Skip-Gram 模型,定义:

    三、Word2Vec - 图322

    其中:三、Word2Vec - 图323 表示网络第 三、Word2Vec - 图324 个输出的输出单词。

    注意:由于引入分层softmax,导致更新路径因为输出单词的不同而不同。因此 三、Word2Vec - 图325 会因为 三、Word2Vec - 图326 的不同而不同。

    Skip-Gram 中推导相同, 三、Word2Vec - 图327 的更新方程为:

    三、Word2Vec - 图328

    其中 三、Word2Vec - 图329三、Word2Vec - 图330 非零分量对应的 三、Word2Vec - 图331 中的行,而 三、Word2Vec - 图332 的其它行在本次更新中都保持不变。

3.3.2 负采样

a) 原理
  1. 在网络的输出层,真实的输出单词对应的输出单元作为正向单元,其它所有单词对应的输出单元为负向单元。

    • 正向单元的数量为 1,毋庸置疑,正向单元必须输出。

    • 负向单元的数量为 三、Word2Vec - 图333,其中 三、Word2Vec - 图334 为词表的大小,通常为上万甚至百万级别。如果计算所有负向单元的输出概率,则计算量非常庞大。

      可以从所有负向单元中随机采样一批负向单元,仅仅利用这批负向单元来更新。这称作负采样。

  2. 负采样的核心思想是:利用负采样后的输出分布来模拟真实的输出分布。

    对于真实的输出分布,有:

    三、Word2Vec - 图335

    对于负采样后的输出分布,假设真实输出单词 三、Word2Vec - 图336 对应于输出单元 三、Word2Vec - 图337 ,负采样的 三、Word2Vec - 图338 个单词对应的输出单元 三、Word2Vec - 图339,则有:

    三、Word2Vec - 图340

    • 在参数的每一轮更新中,负采样实际上只需要用到一部分单词的输出概率。

    • 对于未被采样到的负向单元 三、Word2Vec - 图341,其输出单元的预测误差 三、Word2Vec - 图342, 则 三、Word2Vec - 图343 不会被更新。

    • 三、Word2Vec - 图344 中仅有负采样的单元 三、Word2Vec - 图345 起作用,因此 三、Word2Vec - 图346 的更新仅仅依赖于正向单元和负采样的单元。

    • 随着训练的推进,概率分布 三、Word2Vec - 图347 逐渐接近于真实的分布 三、Word2Vec - 图348 (第 三、Word2Vec - 图349 位为 1),其绝大部分概率接近 0 、 三、Word2Vec - 图350 接近 1 。

      而概率分布 三、Word2Vec - 图351 也有类似的性质,因此用概率分布 三、Word2Vec - 图352 去模拟概率分布 三、Word2Vec - 图353 效果较好。

  3. 负采样时,每个负向单元是保留还是丢弃是随机的。负向单元采样的概率分布称作noise 分布,记做 三、Word2Vec - 图354

    三、Word2Vec - 图355 可以为任意的概率分布(通常需要根据经验来选择)。谷歌给出的建议是挑选 5~10 个负向单元,根据下面公式来采样:

    三、Word2Vec - 图356

    其中:三、Word2Vec - 图357 为单词在语料库中出现的概率,分母仅考虑负向单元(不考虑正向单元)。

    三、Word2Vec - 图358 的物理意义为:单词在语料库中出现的概率越大,则越可能被挑中。

b) 参数更新
  1. 假设输出的单词分类两类:

    • 正类:只有一个,即真实的输出单词 三、Word2Vec - 图359
    • 负类:从 三、Word2Vec - 图360 采样得到的 三、Word2Vec - 图361 个单词 三、Word2Vec - 图362

    论文word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method 的作者指出:下面的训练目标能够得到更好的结果:

    三、Word2Vec - 图363

    其中:

    • 三、Word2Vec - 图364 为真实的输出单词对应的输出向量,三、Word2Vec - 图365 为负采样的单词得到的输出向量。
    • 三、Word2Vec - 图366 :在单词 三、Word2Vec - 图367 上输出为正类的概率;三、Word2Vec - 图368 :在单词 三、Word2Vec - 图369 上输出为负类的概率。

    该目标函数是一个经验公式,而不是采用理论上的交叉熵 三、Word2Vec - 图370 。其物理意义为:在正类单词上取正类的概率尽可能大,在负类单词上取负类的概率尽可能大。

    它是从另一个角度考虑:输出为正向单元的概率 * 输出为负向单元的概率。

    三、Word2Vec - 图371

    其负的对数似然为:

    三、Word2Vec - 图372

    仅仅考虑负采样,则可得到:三、Word2Vec - 图373

  2. 根据 三、Word2Vec - 图374 的定义,有:

    三、Word2Vec - 图375

    其中 三、Word2Vec - 图376 标记了单词 三、Word2Vec - 图377 的标签:

    三、Word2Vec - 图378

  3. 三、Word2Vec - 图379 ,它刻画了网络在正类单词和负类单词上的预测误差。

    • 三、Word2Vec - 图380 时,三、Word2Vec - 图381 表示对正类单词预测概率的不足。
    • 三、Word2Vec - 图382 时,三、Word2Vec - 图383 表示对负类单词预测概率的过量。

    根据:

    三、Word2Vec - 图384

    则有输出向量的更新方程:

    三、Word2Vec - 图385

  4. 给定一个样本,在更新输出向量时,只有 三、Word2Vec - 图386 个输出向量( 1 个输出单词 三、Word2Vec - 图387三、Word2Vec - 图388 个负采样单词对应的输出向量)得到更新,其中 三、Word2Vec - 图389 通常数量很小。其它所有单词对应的输出向量未能得到更新。

    相比较而言:

    • 原始算法中,给定一个样本在更新输出向量时,所有输出向量(一共 三、Word2Vec - 图390 个)都得到更新
    • 分层softmax 算法中,给定一个样本在更新输出向量时,三、Word2Vec - 图391 个内部节点的向量表达得到更新。
  5. 输出向量的更新方程可以用于CBOW 模型和 Skip-Gram 模型。

    若用于Skip-Gram 模型,则对每个输出依次执行输出向量的更新。

  6. CBOW 输入向量参数更新:对于 CBOW 模型,定义:

    三、Word2Vec - 图392

    三、Word2Vec - 图393 的物理意义为:负采样单词、输出单词对应输出向量的加权和,其权重为 三、Word2Vec - 图394

    分层softmax: CBOW 输入向量参数更新 中的推导相同, 三、Word2Vec - 图395 的更新方程为:

    三、Word2Vec - 图396

    其中三、Word2Vec - 图397 为第 三、Word2Vec - 图398 个输入单词在词表 三、Word2Vec - 图399 中的编号。

  7. Skip-Gram 输入向量参数更新:对于 Skip-Gram 模型,定义:

    三、Word2Vec - 图400

    其中:三、Word2Vec - 图401 表示网络第 三、Word2Vec - 图402 个输出的输出单词,三、Word2Vec - 图403 表示网络第 三、Word2Vec - 图404 个输出的负采样单词集。

    注意:由于引入负采样,导致网络每个输出中,对应的输出单词有所不同,负采样单词也有所不同。因此 三、Word2Vec - 图405 会因为 三、Word2Vec - 图406 的不同而不同。

    Skip-Gram 中推导相同, 三、Word2Vec - 图407 的更新方程为:

    三、Word2Vec - 图408

    其中 三、Word2Vec - 图409三、Word2Vec - 图410 非零分量对应的 三、Word2Vec - 图411 中的行,而 三、Word2Vec - 图412 的其它行在本次更新中都保持不变。

3.3.3 降采样

  1. 对于一些常见单词,比如 the,我们可以在语料库中随机删除它。这有两个原因(假设使用 CBOW ):

    • the 出现在上下文时,该单词并不会为目标词提供多少语义上的信息。
    • the 作为目标词时,该单词从语义上本身并没有多大意义,因此没必要频繁更新。

    降采样过程中,单词 三、Word2Vec - 图413 被保留的概率为:

    三、Word2Vec - 图414

    其中 三、Word2Vec - 图415 为单词 三、Word2Vec - 图416 在语料库中出现的概率,三、Word2Vec - 图417 为降采样率(默认为 0.001)。

    可以看到:随着单词在语料库中出现的词频越来越大,该单词保留的概率越来越低。

    三、Word2Vec - 图418

3.4 subword embedding

  1. 论文 《Enriching Word Vectors with Subword Information》 中,作者提出通过增加字符级信息来训练词向量。

    下图给出了该方法在维基百科上训练的词向量在相似度计算任务上的表现(由人工评估模型召回的结果)。sisg-sisg 模型均采用了 subword embedding,区别是:对于未登录词,sisg- 采用零向量来填充,而 sisg 采用 character n-gram embedding 来填充。

    三、Word2Vec - 图419

  2. 单词拆分:每个单词表示为一组 character n-gram 字符(不考虑顺序),以单词 wheren=3 为例:

    • 首先增加特殊的边界字符 < (单词的左边界)和 > (单词的右边界)。
    • 然后拆分出一组 character n-gram 字符:<wh, whe,her,ere,re>
    • 最后增加单词本身:<where>

    为了尽可能得到多样性的 character n-gram 字符,作者抽取了所有 3<= n <= 6character n-gram 。以单词 mistake 为例:

    1. <mi,mis,ist,sta,tak,ake,ke>, // n = 3
    2. <mis,mist,ista,stak,take,ake>, // n = 4
    3. <mist,mista,istak,stake,take>, // n = 5
    4. <mista,mistak,istake,stake>, // n = 6
    5. <mistake> // 单词本身

    注意:这里的 take<take> 不同。前者是某个character n-gram,后者是一个单词。

  3. 一旦拆分出单词,则:

    • 词典 三、Word2Vec - 图420 扩充为包含所有单词和 N-gram 字符。
    • 网络输入包含单词本身以及该单词的所有 character n-gram ,网络输出仍然保持为单词本身。

    模型采用 word2vec ,训练得到每个character n-gram embedding 。最终单词的词向量是其所有 character n-gram embedding包括其本身 embedding 的和(或者均值)。

    如:单词 where 的词向量来自于下面embedding 之和:

    • 单词 <where> 本身的词向量。
    • 一组 character n-gram 字符 <wh, whe,her,ere,re> 的词向量。
  4. 利用字符级信息训练词向量有两个优势:

    • 有利于低频词的训练。

      低频词因为词频较低,所以训练不充分。但是低频词包含的 character n-gram 可能包含某些特殊含义并且得到了充分的训练,因此有助于提升低频词的词向量的表达能力。

    • 有利于获取 OOV 单词(未登录词:不在词汇表中的单词)的词向量。

      对于不在词汇表中的单词,可以利用其 character n-gramembedding 来获取词向量。

3.5 应用

  1. 模型、语料库、超参数这三个方面都会影响词向量的训练,其中语料库对训练结果的好坏影响最大。

    根据论文 How to Generate a Good Word Embedding? ,作者给出以下建议:

    • 模型选择:所有的词向量都是基于分布式分布假说:拥有相似上下文的单词,其词义相似。根据目标词和上下文的关系,模型可以分为两类:

      • 通过上下文来预测目标词。这类模型更能够捕获单词之间的可替代关系。
      • 通过目标词来预测上下文。

      通过实验发现:简单的模型(Skip-Gram) 在小语料库下表现较好。复杂的模型在大语料库下略有优势。

    • 语料库:实际上语料库并不是越大越好,语料库的领域更重要。

      • 选择了合适的领域,可能只需要 1/10 甚至 1/100 的语料就能够得到一个大的、泛领域语料库的效果。
      • 如果选择不合适的领域,甚至会导致负面效果,比随机词向量效果还差。
    • 超参数:

      • 词向量的维度:

        • 做词向量语义分析任务时,一般维度越大,效果越好。
        • 做具体NLP 任务时(用作输入特征、或者网络初始化),50 维之后效果提升就比较少了。
      • 迭代次数:由于训练词向量的目标是尽可能精确地预测目标词,这个优化目标和实际任务并不一致。因此最好的做法是:直接用实际任务的验证集来挑选迭代次数。

        如果实际任务非常耗时,则可以随机挑选某个简单任务(如:情感分类)及其验证集来挑选迭代次数。

  2. word2vec 还有一些重要的超参数:

    • 窗口大小:该超参数通常和语料库中句子长度有关,可以统计句子长度分布来设置。
    • min-count:最小词频训练阈值,词频低于该阈值的词被过滤。
    • 降采样率 subsampling_rate:降采样率越低,高频词保留的越少低频词保留的越多。
  3. word2vec 结果评估:

    • 通过 kmeans 聚类,查看聚类的簇分布。
    • 通过词向量计算单词之间的相似度,查看相似词。
    • 通过类比来查看类比词:a 之于 b,等价于 c 之于 d
    • 使用 tsne 降维可视化查看词的分布。
  4. word2vec 中实际上存在两种类型的embedding 向量:三、Word2Vec - 图421 的第 三、Word2Vec - 图422三、Word2Vec - 图423 称作单词 三、Word2Vec - 图424 的输入向量, 三、Word2Vec - 图425 的第 三、Word2Vec - 图426三、Word2Vec - 图427 称作单词 三、Word2Vec - 图428 的输出向量。

    大多数论文中都采用输入向量 三、Word2Vec - 图429 作为单词 三、Word2Vec - 图430 的表达,而论文 Using the Output Embedding to Improve Language Models 综合了输入向量和输出向量。在该论文中,作者得出结论:

    • skip-gram 模型中,在常见的衡量词向量的指标上,输出向量略微弱于输入向量。
    • 在基于 RNN 的语言模型中,输出向量反而强于输入向量。
    • 通过强制要求 三、Word2Vec - 图431,这可以使得输入向量等于输出向量。这种方式得到的词向量能够提升语言模型的困惑度perplexity
  5. word2vec 可以用于计算句子相似度。博客 Comparing Sentence Similarity Methods 总结了 6 种计算句子相似度的方法:

    • 无监督方法:

      • 对句子中所有的词的词向量求平均,获得sentence embedding

      • 对句子中所有的词的词向量加权平均,每个词的权重为 tf-idf ,获得sentence embedding

      • 对句子中所有的词的词向量加权平均,每个词的权重为 smooth inverse frequency:SIF ;然后考虑所有的句子,并执行主成分分析;最后对每个句子的词向量加权平均减去first principal componet,获得sentence embedding

        SIF 定义为: 三、Word2Vec - 图432,其中 三、Word2Vec - 图433 是一个超参数(通常取值为 0.001), 三、Word2Vec - 图434 为数据集中单词 三、Word2Vec - 图435 的词频。

      • 通过 Word Mover's Distance:WMD ,直接度量句子之间的相似度。

        WMD 使用两个句子中单词的词向量来衡量一个句子中的单词需要在语义空间中移动到另一个句子中的单词的最小距离。

    • 有监督方法:

      • 通过分类任务来训练一个文本分类器,取最后一个 hidden layer 的输出作为 sentence embedding

        其实这就是使用文本分类器的前几层作为 encoder

      • 直接训练一对句子的相似性,其优点是可以直接得到 sentence embeding

    最终结论是:简单加权的词向量平均已经可以作为一个较好的 baseline