带有NLP with DL Stanford标签的都是来自 斯坦福课程(CS224n: Natural Language Processing with Deep Learning)的课程笔记。
Word Vector
自然语言处理本质上采用的依然是一个数学模型,单纯的文字文本对于大部分的模型来说是不可识别或者难以计算的,所以在处理之前我们必须将文本转化成模型可识别的输入。词向量(Word Vector)便是一种把词处理成向量的技术,也被称为Word Embedding。
其中最简单的一种表示被称为one-hot vector,即将每一个词表示为 R|V|×1 的向量,(所有词排成一定顺序,称为词典顺序)除了该词的词典序处的数字置为1,其余位置为0。 |V| 是我们词汇集合(词典)的大小。举例如下:
但是该表示方法有两个很明显的劣势,一是现实世界词汇量之大,容易造成维数灾难(Curse of Dimensionality),二是词汇之间是不相关的,这并不利于我们后续的一些进展。除了one-hot vector , 还有一些词向量的算法被提出,流行的比如Word2Vec,以及接下来介绍的SVD Based Methods生成的词向量。
SVD Based Methods
其中一种得到词向量的方法,是通过遍历数据集得到某种形式的矩阵
X
,通过对
步骤如下:
1. 构造矩阵X:一般构造的是Word-Word Co-occurrence Matrix,即每一个词在行和列中按顺序各出现一次,数值代表每个词出现在目标词一个窗口长度内的次数(窗口长度1即是相邻)大小为
2. 对X进行奇异值分解,得到
X=USVT
3. 选择
U
前k列作为词向量
4.
以上方法构造出来的词向量包含着足够的语义和句法信息,但也有不少问题:
1. 矩阵维数经常需要改变(新的词会不断产生)
2. 矩阵及其稀疏,因为绝大多数词不会共同出现
3. 矩阵总体上维数非常高(
≈106×106
)
4. 训练的时间复杂度为平方
5. 需要在X中做一些修正以解决字频率极大的不平衡(Requires the incorporation of some hacks on X to account for the drastic imbalance in word frequency)
有一些现有的方案可以去解决上述问题:
1. 忽略诸如“the”,“he”,“has”等等功能词
2. 应用斜坡窗口(ramp window),即根据文档中单词之间的距离赋予次数权重。
3. 使用Pearson相关性并将负数设置为0而不是使用原始计数。
Next Up
下一节将介绍Word2Vec的一个模型The Skip-Gram Model
参考:
http://web.stanford.edu/class/cs224n/lecture_notes/cs224n-2017-notes1.pdf