词向量系列(2):VSM和主题模型思路
主题模型思路是基于VSM构建共现矩阵,并通过矩阵分解获得语义的稠密表示。
主题模型:
- LSA(latent semantic analysis,潜在语义分析,共现矩阵的SVD分解)
- pLSA(概率潜在语义分析)
- LDA(Latent Dirichlet Allocation)
BOW与共现矩阵
共现矩阵(co-occurrence matrix)有两种,一种是词与词的共现矩阵(word-word matrix)通常用在信息检索中,如文档的相似匹配。另外一种的文档与词的共现矩阵(document-word matrix)通常用于构建词向量(Embedding)。共现矩阵的权重基于BOW(词袋模型)相关的计算获得,如TF、TF-IDF。
以下有文档与词的共现矩阵(document-word matrix),
其中$m$表示文档数量,$n$表示词汇表大小,$w_{i,j}$基于BOW通过文档与词的共现关系获得,以TF-IDF为例,
其中$N$ 为文档总数,$TF(D_{i},word_{j})$ 表示词 $word_{j}$ 在文档 $D_{i}$ 中的频次。$DF(word_{j})$ 表示包括词 $word_{j}$ 的文档数,称为逆文档频次。为避免数值问题,可以通过加一平滑,
这样可以避免OOV外的词出现数值计算问题。此外,更多权重可以是:
- boolean
- TF
- IDF
- TF-IDF
这样获得的矩阵$D$有两个问题:矩阵维度非常大,矩阵的每一行都表示一个文档的向量化表征,但是维度非常大;矩阵是稀疏的,文档的表征向量中元素有大量的0取值。主题模型的引入可以解决这个问题。
基于文档与词的共现矩阵这里还可以衍生两个矩阵:
- $D \times D^{\top}$ 表征文档矩阵
- $D^{\top} \times D$ 表征词矩阵
LSA主题模型
主题模型要做的事情是从文本表示中发现潜在的主题,同时获得稠密的文档表示与稠密的词表示,也就是说主题模型能够获得:
- 潜在的主题
- 稠密的文档表征
- 稠密的词表征
LSA主题模型依赖矩阵的奇异值分解(SVD),首先我们来说是SVD。对于任意矩阵$A \in R^{m,n}$,其SVD分解,
其中,$U \in R^{m \times m}, U U^{\top} = I; V \in R^{n \times n}, VV^{\top} = I$。$\Sigma \in R^{m \times n}$是广义对角矩阵,
这里$\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r \ge 0$称为奇异值。考虑到对角矩阵对角线有0元素,于是紧凑形式SVD分解为,
其中$r \le \min(n,m)$。
对于向量$x$关于矩阵$A$的线性变换可以分解为,
这启发我们,SVD具有明显的几何意义,先对向量$x$进行旋转变换,然后进行伸缩变换,然后再一次旋转变换。
于是,把SVD分解用到共现矩阵上就获得LSA主题模型。对于文档-单词矩阵,其SVD分解为,
分解获得的三个矩阵的意义非常明显:
- 矩阵$P \in R^{m \times r}$,每一行表示文档的主题分布,第$i$行表示文档$i$的向量化表征,每个表征向量的维度为$r \lt n$
- 矩阵$Q^{\top} \in R^{r \times n}$,每一行表示词的主题分布,第$i$行表示词$i$的向量化表征,每个表征向量的维度为$r \lt n$
- $\Sigma$是个对角矩阵,对角线元素依次为$\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r \ge 0$,表示潜在主题的强度,就是主题在数据集中出现的次数
矩阵$P$与矩阵$Q$分别得到文档与单词的Embedding,因此可以做文档匹配、聚类或分类,词相似度匹配、词同义、多义词问题。
矩阵分解是在全局中完成,因此能够有效的利用全局的统计信息,但是共现矩阵外的文档如何处理?根据SVD分解,有
其中$w_i$为文档-词向量。
LSA的局限
LSA基于共现矩阵的SVD分解,能够有效的利用全局的统计信息,可以理解为是一个无监督的聚类过程,但有如下局限:
- 获得的主题其实解释性较差
- 由于共现矩阵本质是BOW模型,无法解决词序及其相关问题
- 在单词类比任务(如:
国王 vs 王后
类比于男人 vs 女人
)中表现相对较差
总结
主题模型是个比较广泛的领域,使用范围广,如推荐系统,本文只是讲述LSA主题模型方法,此外还包括pLSA、LDA等。LSA的本质是对文档-词共现矩阵的SVD分解,并起到降维作用。
参考文献
[1] 统计自然语言处理
转载请包括本文地址:https://allenwind.github.io/blog/9116
更多文章请参考:https://allenwind.github.io/blog/archives/