文章目录
- 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。记为词库,为词库大小,则每个词可以表征为一个的向量,其中第维为1,其他维为0 ,是该词在词库中的位置。这种方式的缺点在于:
- 维数可能会很大,词向量会很稀疏
- 无法衡量词与词之间的相似性(任何两个词之间的内积或者余弦相似度都为0)
因此,我们自然而然地想能否将词向量的空间降维成一个子空间,并且这个子空间可以表征出词与词之间的关系。
2. SVD(奇异值分解)
先遍历一个大的文档集,统计每两个词是否配对出现。例如,设文档集里面的句子为如下:
- I enjoy flying.
- I like NLP.
- I like deep learning.
则可以都得到这样的共现矩阵(Co-occurrence Matrix):
对进行SVD分解:
假设选取前个奇异值对应主要成分,则应该选择作为降维后的词嵌入矩阵,这样就得到了词库中每个词的维表征。
这种方法的缺点是:
- 随着新词的引入,共现矩阵的大小会经常变化
- 共现矩阵很高维,而且很稀疏
- SVD分解需要很大的时间开销(约)
- SVD的可解释性较差
3. Word2Vec
前面提到的方法需要存储和计算整个语料库的所有信息,而Word2Vec通过上下文来预测词的概率,用迭代学习参数的方法,可以降低复杂度。
Word2Vecd相比one-hot向量的词表示方法,优点在于:
- 降低了向量的维度
- 能够表示词与词之间的关系
为了得到词向量,通常需要用一定的学习算法在大量语料上进行监督学习。随着时代的发展,算法的复杂性越来越小,尤其是在数据集越来越大的趋势下。事实上,我们的目的并不是为了让监督学习有多好的表现,而是为了更好地学习到词嵌入。
它包含两种算法:continuous baf-of-words(CBOW)和skip-gram,两种训练方法:负采样和层级softmax。
3.0. 语言模型——n-gram
用表示一个具有n个词的序列(句子)的概率。Unigram模型假设每个词之间都是相互独立的,也即
Bigram模型假设每个词只与它前面的词有关:
类似地可以得到n-gram的表达式。CBOW和Skip-gram方法的理论基础与n-gram的假设类似,即给定句子内某些词的条件下,去预测另一些词,通过学习出词向量参数,使得最大化一个句子的概率。
简而言之,CBOW的目的是通过上下文来预测中心词,而Skip-gram是通过中心词来预测上下文的分布。它们的作用都是将one-hot表示的词“嵌入”到一个低维空间中,这个方法也叫“词嵌入”(Word Embedding)
3.1. Skip-Gram Model
基本思想是,对于每个句子(记长度为),给定一个大小为的窗口,利用窗口中心词去预测窗口内其他的词(语境词),目标是最大化所有预测的语境词的概率。似然函数为:
其中是待求参数,在这里就是每个词的词向量
对上述似然函数取对数并取负号,再处于句子长度,得到代价函数:
有了上述代价函数的定义,接下来的关键就是如何计算条件概率。一种符合直觉的假设是,中心词与语境词的相似度应该相对非语境词的相似度更高。因此,可以用经过softmax归一化过后的相似度来近似条件概率,也即:
其中分别代表语境词和中心词,分别代表它们对应的词向量。
上式有一个问题是,在后续反向传播过程中求导时,会比较复杂,因为有可能在一个句子里面,某个词既在语境词里面出现也在中心词里面出现,这样求导之后就会保留一个变量,会比较复杂。因此,为了简化计算,每个词具有两个词向量(理论上这种方法精度没前者高,但是计算简单。有时候会把求得的两个词向量取平均作为最终的词向量):一个是作为中心词的词向量,另一个是作为语境词的词向量。对应的条件概率表达式为:
对上述概率的对数求偏导(用于后续反向传播):
注意到上式其实就是观测值减去期望值,符合求导的物理意义。
下图是skip-gram的模型结构(窗口大小为C):
注意到,是没有区分一个窗口内部的词的顺序的,因此word2vec模型很难学习到语序信息。