基于典型相关分析的词向量

简介:

本文首发于雷锋网

前言

在NLP领域中,为了能表示人类的语言符号,一般会把这些符号转成一种数学向量形式以方便处理,我们把语言单词嵌入到向量空间中就叫词嵌入(word embedding)。

比如有比较流行的谷歌开源的 word2vec ,它能生成词向量,通过该词向量在一定程度上还可以用来度量词与词之间的相似性。word2vec采用的模型包含了连续词袋模型(CBOW)和Skip-Gram模型,并通过神经网络来训练。

但这篇文章不深入讲 word2vec 的内容,而是看看另外一种词向量生成方式——基于典型相关分析的词向量。

one-hot形式的词向量

说到词向量就必须先看词向量的形式,一般有两类,分别是 one-hot 形式和分布式形式。前面我们说过词向量就是用来表示人类语言的一种数学化的方式,最简单的向量方式即是one-hot形式。

它的处理方式简单粗暴,一般就是统计词库包含的所有V个词,然后将这V个词固定好顺序,然后每个词就可以用一个V维的稀疏向量来表示,向量中只有在该词出现的位置的元素才为1,其它元素全为0。比如下面这几个词,第一个元素为1的表示中国,第六个元素为1的表示美国,第五个元素为1的表示日本。

中国 [1,0,0,0,0,0,0,0,0,……,0,0,0,0,0,0,0]
美国 [0,0,0,0,0,1,0,0,0,……,0,0,0,0,0,0,0]
日本 [0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0]

从中可以看到one-hot形式的维数通常会很大,因为词数量一般在10W级别,这会导致训练时难度大大增加,造成维数灾难。另外这么多维只以顺序信息并且只用1和0来表示单词,很浪费空间。再一个是这种方式的任意两个词都是孤立的,没法看出两个词之间的相似性。于是看看有没有改进的方法。

分布式词向量

鉴于one-hot形式词向量的缺点,出现了另外一种词向量表示方式——分布式词向量(distributed word representation)。 分布式词向量则干脆直接用普通的向量来表示词向量,而元素的值为任意实数,该向量的维数可以在事前确定,一般可以为50维或100维。这时的词向量类似如下(这里假设用5维来表示):

中国 [1.25, 0.2, 0.3, 0.5, 0.6]
美国 [0.1, 0.3, 0.5, 0.1, 1.5]
日本 [2.2, 0.2, 0.4, 0.6, 1.0]

其中每个元素的具体数值则由训练来确定。这样一来就克服了在深度学习中可能的维度灾难,而且充分利用了空间,如果使用适当的训练方法训练出来的词向量还可以直接根据两个词之间的距离来计算相似性。

典型相关分析

典型相关分析主要用于分析两组变量之间的关系,通过该方法能有效分析相关关系。

传统简单的分析方式是直接用协方差矩阵,比如我们有两组变量$X=[X_1,X_2,...,X_m]$和$Y=[Y_1,Y_2,...,Y_n]$,那么最原始的方法就是直接计算X和Y的协方差矩阵,矩阵有m*n个值。有了协方差矩阵就得到了两两变量之间的相关性,比如$c_{ij}$就是变量$X_i$和$Y_j$的相关性。但这种方式存在缺点,只考虑了变量之间单个维度之间的相关性,于是可采用经典相关分析改进。

经典相关分析是分别在两组变量中找出第一对线性组合,使他们具有最大相关性;接着再分别在两组变量中找出第二对线性组合,使他们具有第二大的相关性,并且它们分别与本组内的第一线性组合不相关。以此类推找出其他线性组合。

该方法的思想与主成分分析的思想相似,而其本质就是从两组变量中选取若干个有代表性的变量线性组合,用这些线性组合的相关性来表示原来两组变量的相关性。

核心思想

基于典型相关分析的词向量的核心思想,它认为一段文字中某个词的左右两边指定长度的窗口内的词组应该具有关联,也就是说某个词的左边若干单词组成上文,右边若干单词组成下文,从而应该让上下文的关系尽可能紧密。如图,假设窗口大小为2,则 w4 的左右两窗口包含的词组为上下文,类似的 w5 也有对应的上下文,每个词都有一个对应的词向量,那么要做的事就是最大化上下文两个矩阵的协方差。

这里写图片描述

模型训练

假设我们的语料包含了 n 个单词,表示为{w1,w2,...wn},我们的词典大小为 v,窗口大小为 h,再设词向量的维度为 k。单词左右两边的上下文组成的矩阵我们分别定义为,$L_{n \times vh}$ 和 $R_{n \times vh}$,而整个语料的矩阵定义为$W_{n \times v}$。

这里写图片描述

现在我们要做的就是找出两个分别能最好代表左边窗口的矩阵 L 和右边窗口矩阵 R 的方向$\Phi _l$和$\Phi _r$,这两个方向应该使得这两个矩阵分别在对应方向上的投影的协方差最大,投影可以看成是在这两个方向保留了两个窗口矩阵的最具代表性的信息。于是最大化目标可以表示为,

$$ \underset {\Phi _l,\Phi _r}{max} \frac{E [ ] }{\sqrt{E [ ^2^2 ] }} $$

其中 E 表示经验期望,另外我们用 $C_{lr}$ 表示矩阵 L 和矩阵 R 的协方差矩阵,用 $C_{ll}$ 表示矩阵 L 和矩阵 L 之间的协方差矩阵,用 $C_{rr}$ 表示矩阵 R 和矩阵 R 之间的协方差矩阵,则有 $C_{lr}=L^TR$,$C_{ll}=L^TL$,$C_{rr}=R^TR$,

这里写图片描述

通过转换,上述最大化目标的解可以由下面等式给出,

$$ C_{ll}^{-1}C_{lr}C_{rr}^{-1}C_{rl}\Phi_l = \lambda \Phi_l \\ C_{rr}^{-1}C_{rl}C_{ll}^{-1}C_{lr}\Phi_r = \lambda \Phi_r $$

解上述方程,分别取得 k 个最大特征值的特征向量,组成左右窗口两个方向向量$\Phi _L \Phi _R$,它们的结构为(vh × k)。然后将左窗口矩阵 L 和右窗口矩阵 R 分别投影到两个方向向量上,即$S= [L\Phi_lR\Phi_r]$,得到单词对应的隐状态 S 矩阵,S 则是用 k 个最相关的成分来表示单词。最后再对 S 和语料矩阵 W 做典型相关分析,即 CCA(S,W),得到最终的词向量嵌入矩阵,结构为(v × k),此即为用 k 维向量表示原来的 v 个单词,实现词嵌入。

这里写图片描述

-------------推荐阅读------------

2017文章汇总——机器学习篇

2017文章汇总——Java及中间件

2017文章汇总——深度学习篇

2017文章汇总——JDK源码篇

------------------广告时间----------------

公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

欢迎关注:

这里写图片描述

目录
相关文章
|
7月前
|
机器学习/深度学习 算法 Python
K最近邻算法:简单高效的分类和回归方法(三)
K最近邻算法:简单高效的分类和回归方法(三)
|
5天前
|
机器学习/深度学习
用SPSS估计HLM多层(层次)线性模型模型
用SPSS估计HLM多层(层次)线性模型模型
11 1
|
6天前
|
运维 算法 C++
R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
12 2
|
5天前
|
机器学习/深度学习
R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
11 0
|
6天前
回归分析与相关分析的区别和联系
回归分析与相关分析的区别和联系
14 0
|
7月前
|
数据采集 存储 运维
K最近邻算法:简单高效的分类和回归方法
K最近邻算法:简单高效的分类和回归方法
|
4月前
|
算法
朴素贝叶斯典型的三种算法
朴素贝叶斯主要有三种算法:贝努利朴素贝叶斯、高斯贝叶斯和多项式贝叶斯三种算法
|
8月前
|
机器学习/深度学习 算法 数据可视化
机器学习-特征选择:如何使用相关性分析精确选择最佳特征?
本文致力于利用相关性分析来辅助特征选择过程。相关性分析作为一种用于量化特征之间关系的方法,可以帮助我们理解数据中的潜在模式和相互作用。通过分析特征之间的相关性,我们可以更加准确地选择具有高预测能力和独立性的特征,从而提高特征选择的效果和结果。
863 0
|
7月前
|
机器学习/深度学习 数据采集 并行计算
K最近邻算法:简单高效的分类和回归方法(二)
K最近邻算法:简单高效的分类和回归方法(二)
|
10月前
|
资源调度 Python
R语言-建模(广义)线性(加性、混合)模型
本分分享了在R语言中不同 线性、非线性方法进行建模的使用指南,以供参考
423 0