文章目录

  • 0. 前言
  • 1. one-hot向量
  • 2. SVD(奇异值分解)
  • 3. Word2Vec
  • 3.0. 语言模型——n-gram
  • 3.1. Skip-Gram Model


0. 前言

与图像或相比,语言是一种经过人类智力处理后的、更为抽象的数据对象,因此nlp相比cv相比有许多独特之处,研究起来也比较复杂,其中词的表征方式就是一个重要方面。

1. one-hot向量

词(Word)最简单粗暴的一种表征方式(representation)就是one-hot vector。记NLP关键词检索 nlp 词库_自然语言处理为词库,NLP关键词检索 nlp 词库_词向量_02为词库大小,则每个词可以表征为一个NLP关键词检索 nlp 词库_监督学习_03的向量,其中第NLP关键词检索 nlp 词库_中心词_04维为1,其他维为0 ,NLP关键词检索 nlp 词库_中心词_04是该词在词库中的位置。这种方式的缺点在于:

  • 维数可能会很大,词向量会很稀疏
  • 无法衡量词与词之间的相似性(任何两个词之间的内积或者余弦相似度都为0)
    因此,我们自然而然地想能否将词向量的空间NLP关键词检索 nlp 词库_自然语言处理_06降维成一个子空间,并且这个子空间可以表征出词与词之间的关系。

2. SVD(奇异值分解)

先遍历一个大的文档集,统计每两个词是否配对出现。例如,设文档集里面的句子为如下:

  1. I enjoy flying.
  2. I like NLP.
  3. I like deep learning.

则可以都得到这样的共现矩阵(Co-occurrence Matrix):

NLP关键词检索 nlp 词库_NLP关键词检索_07

NLP关键词检索 nlp 词库_NLP关键词检索_08进行SVD分解:
NLP关键词检索 nlp 词库_自然语言处理_09
假设选取前NLP关键词检索 nlp 词库_中心词_04个奇异值对应主要成分,则应该选择NLP关键词检索 nlp 词库_自然语言处理_11作为降维后的词嵌入矩阵,这样就得到了词库中每个词的NLP关键词检索 nlp 词库_中心词_04维表征。
这种方法的缺点是:

  • 随着新词的引入,共现矩阵的大小会经常变化
  • 共现矩阵很高维,而且很稀疏
  • SVD分解需要很大的时间开销(约NLP关键词检索 nlp 词库_中心词_13
  • SVD的可解释性较差

3. Word2Vec

前面提到的方法需要存储和计算整个语料库的所有信息,而Word2Vec通过上下文来预测词的概率,用迭代学习参数的方法,可以降低复杂度。

Word2Vecd相比one-hot向量的词表示方法,优点在于:

  1. 降低了向量的维度
  2. 能够表示词与词之间的关系

为了得到词向量,通常需要用一定的学习算法在大量语料上进行监督学习。随着时代的发展,算法的复杂性越来越小,尤其是在数据集越来越大的趋势下。事实上,我们的目的并不是为了让监督学习有多好的表现,而是为了更好地学习到词嵌入。

它包含两种算法:continuous baf-of-words(CBOW)和skip-gram,两种训练方法:负采样和层级softmax。

3.0. 语言模型——n-gram

NLP关键词检索 nlp 词库_词向量_14表示一个具有n个词的序列(句子)的概率。Unigram模型假设每个词之间都是相互独立的,也即
NLP关键词检索 nlp 词库_词向量_15
Bigram模型假设每个词只与它前面的词有关:
NLP关键词检索 nlp 词库_中心词_16
类似地可以得到n-gram的表达式。CBOW和Skip-gram方法的理论基础与n-gram的假设类似,即给定句子内某些词的条件下,去预测另一些词,通过学习出词向量参数,使得最大化一个句子的概率。
简而言之,CBOW的目的是通过上下文来预测中心词,而Skip-gram是通过中心词来预测上下文的分布。它们的作用都是将one-hot表示的词“嵌入”到一个低维空间中,这个方法也叫“词嵌入”(Word Embedding)

3.1. Skip-Gram Model

基本思想是,对于每个句子(记长度为NLP关键词检索 nlp 词库_中心词_17),给定一个大小为NLP关键词检索 nlp 词库_词向量_18的窗口,利用窗口中心词去预测窗口内其他的词(语境词),目标是最大化所有预测的语境词的概率。似然函数为:

NLP关键词检索 nlp 词库_词向量_19

其中NLP关键词检索 nlp 词库_NLP关键词检索_20是待求参数,在这里就是每个词的词向量

对上述似然函数取对数并取负号,再处于句子长度,得到代价函数:

NLP关键词检索 nlp 词库_自然语言处理_21

有了上述代价函数的定义,接下来的关键就是如何计算条件概率。一种符合直觉的假设是,中心词与语境词的相似度应该相对非语境词的相似度更高。因此,可以用经过softmax归一化过后的相似度来近似条件概率,也即:

NLP关键词检索 nlp 词库_监督学习_22

其中NLP关键词检索 nlp 词库_监督学习_23分别代表语境词和中心词,NLP关键词检索 nlp 词库_自然语言处理_24分别代表它们对应的词向量。

上式有一个问题是,在后续反向传播过程中求导时,会比较复杂,因为有可能在一个句子里面,某个词既在语境词里面出现也在中心词里面出现,这样求导之后就会保留一个变量,会比较复杂。因此,为了简化计算,每个词具有两个词向量(理论上这种方法精度没前者高,但是计算简单。有时候会把求得的两个词向量取平均作为最终的词向量):一个是作为中心词的词向量,另一个是作为语境词的词向量。对应的条件概率表达式为:

NLP关键词检索 nlp 词库_词向量_25

对上述概率的对数求偏导(用于后续反向传播):

NLP关键词检索 nlp 词库_词向量_26

注意到上式其实就是观测值减去期望值,符合求导的物理意义。

下图是skip-gram的模型结构(窗口大小为C):

NLP关键词检索 nlp 词库_自然语言处理_27

注意到,NLP关键词检索 nlp 词库_中心词_28是没有区分一个窗口内部的词的顺序的,因此word2vec模型很难学习到语序信息。