0%

cs224n-1.如何在计算机中表示词语

想要通过计算机解决NLP问题,首先要解决的就是词语表示问题,由于一个词语在不同语境以及不同文化背景下含义的多样性,如何在计算机中有效的存储,表示不同词语的不同含义,是需要解决的重要问题。

传统表示方式

WordNet (discrete representation)

上义词是对事物的概括性、抽象性说明;下义词是事物的具体表现形式或更为具体的说明

采用同义词(synonym)和上义词(hypernym)两个相关词语集合来描述当前词语的含义,当前方法一定程度上能够正确表示词语含义,但是存在一定问题

  1. 忽略了词语在不同语境中的细微语义差异(比如 “中” 只有在河南话中和 “好” 是同义词)
  2. 词语的新的词义的添加较为困难
  3. 同义词和上义词定义较为主观,需要人工来整理两个词语集合

one-hot 词向量

引入神经网络的向量思想,使用词的位置独热编码表示作为词在计算机中的表示形式,其中词向量的维度就是词典中词语的个数,这就导致了如果词典中词语数量增加,会导致词向量维度不断增加。

另一问题是所有独热编码表示的词语,均正交,无法表示词语之间的关联关系,由此引出 要将词语的相似度表示在词向量中的想法。

Word Vector

Distributional semantics:一个词语的含义由其上下文的词语所决定

为了解决独热编码词向量的稀疏问题,引入分布式语义,根据上下文确定当前词语的dense vector,即Word Vector(Word Embedding)

Word2Vec(跳词模型为例)

通过上下文相关性,确定当前词语的含义,即向量表示,这种相关性定义为某一单词上下文出现另一个单词的概率,如下图表示的为以C为中心词,周围出现单词o的概率。

为了方便计算为每个词典中的词语定义了 中心词向量$v_i$​ 和背景词$u_i$​​两个特征向量。根据由中心词确定上下文的思想,因此整个上下文句子的似然函数为

即以上下文中所有词语作为中心词,在窗口大小为2m的条件下,出现背景词概率乘积的连,对应的损失函数形式为

带入概率公式求损失函数(2)关于特定中心词向量$v_c$​​​​​的偏导数,可得

即损失函数以中心词$v_c$​ 背景词$u_{c+j}$​​​​的部分偏导数为:

  • 当前背景词的背景向量 - 当前词库所有背景词以$v_c$为中心词概率分布的背景向量$u$的加权平均和

为什么设置两个向量(背景向量$u$ 和 中心向量 $v$)

为了便于损失函数求偏导计算,在真正使用时,使用两个向量的平均值作为词语的表征向量

如何解决计算量过大的问题

由条件概率公式可得,分母的计算需要遍历整个语料库,计算量过大

随机梯度下降(Stochastic Gradient Descent)

按照特定抽样方法,每个训练epoch从语料库中抽取一部分的作为当前训练语料库,抽样能否代表整体,取决于抽样方法的设计

负采样

样本量大时,k一般选择2-5,样本量小时,k一般选择5-20

负采样通过两个思路解决计算量较大的问题:

  1. 将概率公式从softmax替换为sigmoid
  2. 概率公式的计算范围为负采样空间内

以词袋模型为例,当 $context(w)$ 预测 $w$ 时,以{ $context(w)$ , $w$ }作为正样本,并从语料库库中选取k个非 $w$ 词语,与 $w$ 上下文构成{ $context(w)$ , $w_i$​​​​ }负样本,以正负样本集对模型进行训练。

替换后的概率公式(D=1或0 1表示该情况出现,0表示该情况不出现)

其中 $\sigma$ 为sigmoid函数

新的概率计算公式为,P(w)为随机负采样的概率分布

推导可得

随之而来的问题是如何进行负采样才能保证训练是有效的?(trick)

word2vec论文作者通过观察测试发现最佳采样概率分布是采用特殊的独立分布,概率公式为$p(w_i) = \frac{count(wi)^{\frac{3}{4}}}{\sum_{j= 0}^{total}w_j}$

层序softmax

首先按照单词在语料库中出现的频率构建haffman树,每个叶子节点为语料库中的词语,将softmax概率函数转化为每个二叉树节点的二分类逻辑回归(sigmoid)函数,我们的目标就是最大化从根节点到目标词语叶子节点路径的似然函数。(类似于负采样的概率函数)

词袋模型的概率公式

已经知上下文,推导中心词,概率公式如下(窗口大小为2m)

即背景词出现情况下中心词出现的条件概率(背景词向量取了平均值)

词共现矩阵(co-occurence matrix)

首先限定句子窗口长度后,统计每个词在窗口长度内其他词出现的次数,记录在共现矩阵中,记录完成后以行作为每个词的特征向量

虽然一定程度上解决了独热编码的过于系数,无法表示词语之间关系的问题,仍存在向量维度爆炸,且过于稀疏的问题,课程中提发了集中解决方案:

  1. 使用SVD分解后的矩阵作为特征向量,以降低向量维度

Glove

Glove算法通过结合传统计数思路对word2vec模型进行了改进,词与词之间的关系不再通过神经网络式的预测模拟,而是通过拟合词与词之间共同出现的条件概率,实现词向量的构建。

Glove为了实现计算出来向量满足线性计算,将 两个词语的词向量乘积 与 共现条件概率 对应起来

通过拟合共现条件概率,实现词向量的学习

动手学习机器学习中的讲解(另一个角度理解)

如何评估一组词向量

  1. 通过后续任务(文本分类,问答系统)等的效果评估
  2. 词向量是否易于构建(维度低,效果好)
  3. 通过余弦相似度,衡量词语之间的相似度