SVD based Method
- Word-Document Matrix————我们做一个大胆的推测:常出现在同一篇文章中的单词是相关联的。例如,“banks”、”bonds”,”stocks”,“money”等可能一起出现,但是“banks”,”octopus”,”banana”,and “hockey”常常并不会一起出现。我们根据这个事实去构建一个word-document matrix X,X∈$R^{|V|×M}$,其中M是document的数量,|V|是单词数。
- Window based Co-occurrence Matrix————在这里矩阵X存储的是单词的共现次数。
应用SVD到共现矩阵中
现在我们将SVD应用到X上,观察奇异值,并根据给定的百分数,截断k个奇异值。
我们可以得到$U_{1:|V|,1:k}$的子矩阵作为我们的word embedding 矩阵。因此单词表中的每个单词给出了k维的表达。
原来:
降低维度通过选择前k个特征向量
该方法方法能让我们得到的词向量表示单词的隐性和语义信息。
SVD的问题
- 1.计算量大(m×n的矩阵计算量为$O(mn^2)$)
- 2.很难包含新的词或文档,很难及时更新
- 3.矩阵是稀疏的
Word Window分类
窗口分类
开始分类:
- 一般我们有训练集$\{x_i,y_i\}^{N}_{i=1}$
- $x_i$——输入,例如单词(索引或向量!),上下文窗口,句子,文档等
- $y_i$——我们试图去预测的标签,例如1.类:情感、命名实体、买/卖决策;2.其他单词;3.后续:多词序列
分类直观表现
- 训练数据:$\{x_i,y_i\}_{i=1}^N$
- 简单解释:
固定二维词向量来分类
使用逻辑回归
用线性决策边界 - 一般的ML:假定x是固定的,训练逻辑回归权重W,只修正决策边界
- 目标:预测每个x:P(y|x)=$\frac{exp(W_yx)}{\sum_{c=1}^Cexp(W_cx)}$其中W∈$R^{C×d}$
softmax
如上所述,我们会采用softmax将输出表示成一种概率的形式。显然我们的目标就是要最大化目标类别的概率。
在机器学习里,我们往往会用最小化负对数的方法代替原来的最大化问题。
这就是我们的损失函数,其实就是交叉熵的结果。
交叉熵可以表述为:
其中p是正确类的概率,q是我们计算的概率。由于p的onehot特点所以最后的结果就是我们前面所写的。
对于N个数据点来说:
加上正则化项有:
这里的$\theta$就是权值矩阵所有参数(c×d)+词向量参数(|V|×d),这里相比较传统分类问题,增加了词向量所有参数,这也是和传统分类问题的最大区别。
上述红线是test error,蓝线是training error,横轴为模型复杂度或迭代次数。直线是方差偏差均衡点。
基于词向量的分类优化
一般的ML问题,参数由权重矩阵的列组成维度不会太大。而在词向量或其他深度学习中,需要同时学习权值矩阵和词向量。 参数一多就容易过拟合。
因为同时需要学习权值矩阵和词向量,所以基于词向量的分类问题参数拟合,还会造成re-training词向量失去泛化效果。比如针对电影评价情感数据训练逻辑回归模型,在训练集里我们有单词”TV”和“telly”,在测试集里我们有单词”television”,原本它们是相似的单词(来自于已经训练的词向量模型)。
当我们重新训练词向量模型的时候会发生什么?
- 1.在训练集中的单词会被重新安排到合适的位置
- 2.在已经训练的词向量模型中但是不在训练集中的单词将保留在原来的位置
对于上例,”TV”和”telly”会被重新安排,而”television”则保留在原位,尴尬的事就发生了。
于是在测试集上导致television被误分。
这个例子说明:
1)如果你只有一个很小的训练集,不要训练词向量模型。
2)如果你有一个足够大的训练集,那么对于相应的任务来说训练词向量模型是有益的。
基础知识
词向量矩阵L常被称作lookup table:
Word Vectors=Word embeddings=word respresentations(mostly)
通常通过词向量矩阵L和one-hot向量e相乘得到单个的词向量
$x=Le ∈d×V·V×1$
Window classification
背景:单个单词的分类任务很少,比较多的是在上下文中解决歧义问题,这是一种根据上下文给单个单词分类的任务,可以用于消歧或命名实体分类。例子如下:
Windows_classification的思路是:将对一个单词进行分类的问题扩展到对其临近词和上下文窗口进行分类,就是对窗口中的单词打上标签同时把它前后的单词向量进行拼接然后训练一个分类器。
这是对于一个句子上下文中的“Paris”进行分类,窗口长度为2,得到的是一个窗口向量,是一个列向量,可表示为:
结合前面的思路,使用softmax:
J对x求导
于是就可以更新词向量了。
另一方面对W求偏导,将所有参数的偏导数写到一起有:
最后结论:
softmax(=逻辑回归)并不是强有力的
- softmax仅仅在原有空间上给出线性决策边界
- 在少量的数据上(正则化)效果会不错
- 在大量的数据上效果会有限
- softmax仅仅给出线性决策边界举例:
神经网络更胜一筹,它可以学习更复杂的函数和非线性决策边界基于神经网络的分类
从上述可以看出window classification 在少量的数据(正则化)效果会不错,在大量的数据上效果有限。
这主要是因为softmax仅仅给出线性决策边界,为了能解决一些非线性决策边界的问题,我们会采用神经网络。
从逻辑回归到神经网络
我们从上述的softmax的运行机制中已经可以看出了一个基本的神经元的运行机制。
一个神经元:
一个神经网络等价于同时运行许多逻辑回归单元,神经网络同时运行多个逻辑回归,但不需要提前指定它具体预测什么。
接着把预测结果输入到下一级逻辑回归单元,由损失函数自动决定它们预测什么。
然后我们就有了多层神经网络
更厉害的窗口分类器
- 基于神经网络进行修正:
- 单个(神经网络)层是一个线性层(函数)和非线性函数的组合
- 神经网络激活函数可以用来计算一些函数
- 例如,一个softmax概率分布或者一个没有归一化的打分函数可以是这样的:
总结:前馈网络计算
- 通过一个三层神经网络计算这个窗口向量的得分:s=score(museums in Paris are amazing)
参考文献
1.我爱自然语言处理