NLP笔记 CS224n(1)—— 词向量
词向量
自然语言处理(NLP)技术用于处理文本内容,在执行处理操作前,请先对文本进行表示转换。文本的基本单位是词语,在本文中探讨了多种关于如何表达词汇的技术方案。
WordNet
这种方法遵循以下理论基础:采用词汇的意义来代表词。因此我们能够构建多个集合组别(每个组别对应一组同义词),使得每一个单词都被归类到特定的集合内,并对应该单词的意义域。
其优点在于良好的管理可以通过有效的协调和组织来实现, 即通过建立稳定的工作关系网络来促进各项工作的顺利进行;然而,该方法同样存在明显的缺陷
- 未区分同义词间的细微差别而忽视了它们之间的细微差异,在处理词汇多义性上也表现得不够完善。
- 不易用于迭代更新的过程,并且忽视了词语在不同语境中的新含义。
- 系统分析受限于主观认知框架下的判断标准。
- 必须依赖专业人员的手工构建过程来完成这一任务。
- 缺乏对词汇间关联关系的精确量化能力。
Discrete Symbols (one-hot code)
此方法采用独热编码策略对词汇进行表示,在信息处理领域是一种经典的特征提取方式。然而,在这种方法中各码之间彼此独立且互不干扰,在信息处理过程中可能无法有效捕捉到不同代码之间的潜在联系。尽管如此,在自然语言系统中词语间的相互关联对于准确理解其含义具有决定性作用
Word Vector
我们旨在寻求一种简洁且能有效地捕捉词汇间关系的编码方式。为此,我们可以将先前两种方案的思想进行融合,从而形成词向量形式。这种方法建立在以下假设基础之上:一个词语的意义通常由其周边频繁出现的词语来共同决定。
思想
基于这种编码方式,我们有Word2Vec框架的核心思想如下:
- 能够提供一个庞大的语料库。
- 每一单个词汇都被分配了一个固定长度的向量表示。
- 在处理过程中:
a) 对于每一个待处理的词汇c来说,
b) 在它周围的固定范围内包含了一些其他的关键词汇o。 - 通过将概率转换为低维空间中的向量来建模。
- 通过迭代地优化各个词语对应的向量从而提升整体性能。

根据下文图表,在句子中,“into”的意义主要由与之相邻的words such as problems、turning、banking、crises等所决定。具体而言,在中心word的位置发生改变时,在上下文中会产生一系列这样的关联。
定义式
接下来给出这种概念的定量描述:
设词汇空间由符号V表示其全部词汇之集,则其中第i号词记作v_i。其对应的高维空间由符号θ表示。令语料库用符号T标记,则其中每个样本用w_i表示(i=1,2,…,n)。称L(θ,T)即为此语料库下对训练数据的拟合能力。假设给定固定不变的语料库T,则问题转化为研究参数向量θ的变化情况下的优化目标函数表达式如下:
L(\theta) = \Pi_{t=1}^{|T|}\Pi_{-m\leq j\leq m,j\not=0}P(w_{t+j}|w_{t},\theta)
为了实现标准化管理的目的,在计算阶段可引入平均值指标;而对于连乘形式的目标函数来说,log方法具有良好的适用性,并且能够得到最终的优化解:
J(\theta) = -\frac{1}{|T|}\log(L_\theta)
我们致力于提升词向量集合与该语料库之间的匹配程度,并由此建立起优化目标
\theta = \arg\max_\theta J(\theta)
如此便可得到词向量的计算方式。
从语料库到词向量
具体来说
到目前为止看来,并没有关于这个词向量的具体情况。其原因在于只需定义为边权重。需要注意的是,在这种情况下定义后,在顺序排序的情况下就能得到一个与向量空间长度一致的词向量,并且这种情况下会自动具备标准化的特性。
具体来说,在提高相似性检测的标准时(即当我们要提高相似性检测的标准时),我们可以将其定义得更为严格一些(即更精确)。例如,在其后特定位置出现相同的词语时(如当我们在其后特定位置找到相同的词语时),这将允许我们在此基础上建立更多的连接(即更多数量的关系)。同时,在这种情况下形成的连接可能包括以下几种:例如下一个词之间的关系、下两个词之间的关系、以及上一个词之间的关系等(这些情况分别对应于长度不同的上下文窗口)。此外,在这种情况下形成的连接可能还包括其他类型的组合(如跨越多个层级的关系等)。需要注意的是,在某些情况下可能会有重叠或重复的关系出现(即存在多个相同或类似的连接),这时我们可以采取加权合并的方式将它们整合到同一条主要的边上(从而减少冗余)。类似地,在这种框架下还可以进一步扩展我们的模型以适应不同需求的情况(即通过调整参数来实现不同的功能)。
该方法通过构建向量空间模型来描述词语之间的相似程度。例如,在 he 后常接 has ,而 she 后也常接 has 的情况下,在与 has 相连的位置上,这些位置的数值可能均为1。从而将这种相似关系编码化地存储起来。然而,在上述情况下,这种分类标准过于严格可能会导致一些频率次高的词或相近的词汇被遗漏。
然而,在这种情况下,存储这些词向量所需的空间为O(n^2)级别。由于n通常会达到百万甚至更大的数量级,因此我们考虑对信息进行压缩。也就是说,在这种情况下给每个词分配一个向量以实现隐式的存储,并计算条件概率值W(c\rightarrow o)=P(o|c)。假设给每个词分配长度为|V|的向量,则该方案即上文所述的概率模型就是一个全局最优解。然而实际上我们可以将这个长度减少到远小于|V|的数量级如100个单位这样就可以将时间复杂度降低到O(200n)的时间复杂度因为一个词不仅有中心词还有上下文区别的一种解决方案就是将其拆分为两个部分用v_c表示中心词而用v_u表示上下文的位置关系就可以通过以下公式来替代原来的条件概率计算:
P(o|c,\theta)=\frac{exp(u_o^T\cdot v_c)}{\sum_{w\in V}exp(u_{w}^T\cdot v_c)}
即一个softmax函数,其有如下优势:
- 原始顺序得以保持。
- 概率计算遵循归一化条件。
- 结果具有软属性,并能有效避免信息过载。

结果
采用梯度下降法等优化方法进行求解,在特定的o情况下,可以通过链式法则详细推导出其偏导数。
\frac{\partial}{\partial v_c} = u_o-\sum_{x\in V}P(x|c)u_x
这个偏导数准确地代表o自身的向量与从c转移一步后的期望状态向量之间的差异。通过梯度下降算法旨在减少这一差异。
而关于J关于v_c的偏导数,在基于取对数的结果下,则可以直接计算所有o对应的∂/∂v_c之和。
