基于词向量的文本可视化算法:t-SNE与UMAP降维技术详解
这是一个非常实用的自然语言处理算法,用于将高维词向量(如Word2Vec、GloVe生成的向量)降到2D或3D空间,以便进行可视化观察和分析。下面我将循序渐进地讲解。
一、问题描述
在自然语言处理中,词向量(例如一个300维的向量)捕获了丰富的语义信息,相似的词在向量空间中距离较近。但是,我们无法直接观察或理解一个300维的空间。文本可视化降维算法的目标,就是将这些高维向量非线性地映射到二维或三维空间,同时尽可能地保持原始高维空间中的局部或全局结构(如相似词之间的聚类关系),从而让我们能够用肉眼观察词与词之间的语义关系。
我们将重点讲解两种最流行的非线性降维方法:t-S分布邻域嵌入 和 均匀流形逼近与投影。
二、预备知识:为什么需要非线性降维?
在讲解具体算法前,需要理解一个核心概念:线性降维(如主成分分析PCA)的局限性。
- PCA通过找到数据方差最大的方向进行投影,它是一种线性变换。它擅长保持数据的全局结构(即数据点之间的远距离关系)。
- 问题:词向量在语义空间中的分布往往是非常非线性的(比如存在复杂的流形结构)。线性方法可能会将高维空间中相距较远但语义上可能有关联的词强行扭曲,或者无法很好地保持局部结构(即近邻关系)。
- 目标:我们需要一种方法,能同时兼顾局部结构(相似词应该被映射到很近的位置)和全局结构(不同语义簇之间应该保持相对位置)。
三、算法详解一:t-分布随机邻域嵌入
t-SNE是目前文本可视化中最经典、最常用的算法。
步骤1:构建高维空间(原始词向量空间)的概率分布
我们有一组高维词向量 \(\mathbf{x_1}, \mathbf{x_2}, ..., \mathbf{x_n}\)。
- 计算两两相似度:对于每个数据点 \(\mathbf{x_i}\),计算它与其他所有点 \(\mathbf{x_j}\) 的相似度。t-SNE使用高斯核(径向基函数)来定义这个相似度。
- 转换为条件概率:条件概率 \(p_{j|i}\) 表示在给定点 \(\mathbf{x_i}\) 的条件下,点 \(\mathbf{x_j}\) 是其邻居的概率。公式为:
\(p_{j|i} = \frac{\exp(-||\mathbf{x_i} - \mathbf{x_j}||^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-||\mathbf{x_i} - \mathbf{x_k}||^2 / 2\sigma_i^2)}\)
其中 \(\sigma_i\) 是围绕点 \(\mathbf{x_i}\) 的高斯核的带宽(或方差)。这个值不是固定的,它通过一个叫“困惑度”的参数来调节。困惑度可以理解为有效邻居数量的平滑度量,通常设置在5到50之间。t-SNE会为每个点自动搜索一个合适的 \(\sigma_i\),使得以该点为中心的分布具有指定的困惑度。 - 对称化:为了得到一个联合概率分布,我们对称化条件概率:\(p_{ij} = \frac{p_{j|i} + p_{i|j}}{2n}\)。这个 \(p_{ij}\) 就衡量了在高维空间中,点 \(i\) 和点 \(j\) 被选为邻居的联合概率。
这一步的目标:用概率分布 \(P\) 来刻画原始高维空间中所有点之间的相似性关系。
步骤2:构建低维空间(可视化空间)的概率分布
现在,我们需要将高维点映射到低维点 \(\mathbf{y_1}, \mathbf{y_2}, ..., \mathbf{y_n}\)(例如二维坐标)。
- 定义低维相似度:在低维空间中,t-SNE使用学生t分布(自由度为1,即柯西分布)来定义两点之间的相似度。公式为:
\(q_{ij} = \frac{(1 + ||\mathbf{y_i} - \mathbf{y_j}||^2)^{-1}}{\sum_{k \neq l} (1 + ||\mathbf{y_k} - \mathbf{y_l}||^2)^{-1}}\) - 为什么用t分布? 这是一个关键设计。t分布比高斯分布有更“厚重”的尾部。这意味着,在低维空间中,中等距离的点会被推得更远。这有助于缓解“拥挤问题”——即高维空间中许多中等距离的点,如果映射到低维(如2D)空间,会挤在中心区域,使得簇与簇之间难以区分。t分布的厚重尾部为这些点提供了“更多空间”。
这一步的目标:用概率分布 \(Q\) 来刻画低维空间中点之间的相似性。
步骤3:最小化分布差异(优化过程)
我们的目标是让低维空间的分布 \(Q\) 尽可能接近高维空间的分布 \(P\)。t-SNE使用KL散度来衡量两个概率分布之间的差异,并将其作为损失函数:
\(C = KL(P || Q) = \sum_{i} \sum_{j \neq i} p_{ij} \log \frac{p_{ij}}{q_{ij}}\)
优化方法:
- 初始化:低维点 \(\mathbf{y_i}\) 通常用随机高斯分布初始化。
- 梯度下降:通过梯度下降法迭代更新 \(\mathbf{y_i}\) 来最小化损失函数 \(C\)。损失函数对 \(\mathbf{y_i}\) 的梯度具有一个直观的物理意义:它相当于高维空间和低维空间中点之间“吸引力”和“排斥力”的合力。
- 吸引力:如果 \(p_{ij}\) 很大(高维邻居),而 \(q_{ij}\) 很小(在低维离得远),梯度会将 \(\mathbf{y_i}\) 和 \(\mathbf{y_j}\) 拉近。
- 排斥力:如果 \(p_{ij}\) 很小(高维不相似),但 \(q_{ij}\) 有一定大小(在低维离得不远),梯度会将它们推开。
- 优化过程中,通常会使用“早期放大”等技巧,帮助簇在初始阶段更好地分开。
最终结果:优化完成后,我们就得到了所有词向量在二维平面上的坐标,语义相近的词会聚集成簇。
四、算法详解二:均匀流形逼近与投影
UMAP是近年来出现的一个强大替代方案,它在保持局部结构的同时,计算效率通常比t-SNE更高,并且有时能更好地保持全局结构。
步骤1:在高维空间中构建加权图(拓扑表示)
UMAP从一个不同的视角出发:它将高维数据视为一个拓扑空间(可以想象成一个由数据点连接成的图或流形)。
- 寻找最近邻:对于每个点 \(\mathbf{x_i}\),使用近似最近邻算法(如k-最近邻)找到它的 \(k\) 个最近邻。
- 计算局部连通性:UMAP并不计算一个全局概率分布,而是为每个点定义一个模糊集合(fuzzy simplicial set)。简单理解,它构建了一个加权图,图中每个点只与它的 \(k\) 个最近邻相连。
- 边的权重:点 \(i\) 和其邻居 \(j\) 之间的边权重,由它们之间的距离和一个自适应的局部距离尺度(类似于t-SNE的困惑度)共同决定,确保每个点与至少一个邻居的权重较高。这形成了一个表示高维数据局部拓扑结构的图。
关键思想:UMAP假设高维数据均匀地分布在一个低维流形上。它首先在高维空间中近似这个流形的拓扑结构(通过最近邻图)。
步骤2:在低维空间中构建一个相似的图
我们的目标是在低维空间(如2D)中找到一个布局,使得这些点构成的图在拓扑结构上与高维空间的图尽可能同构(即结构相同)。
- 初始化:低维点 \(\mathbf{y_i}\) 可以用随机初始化、PCA初始化,或者其他谱嵌入方法初始化。
- 定义低维吸引力/排斥力:
- 吸引力:只作用于那些在高维图中是近邻的点对 \((i, j)\)。UMAP使用一个交叉熵形式的损失函数。对于近邻点,它希望低维距离 \(d_{low}(i,j)\) 尽可能小。
- 排斥力:作用于非近邻的点对。与t-SNE不同,UMAP采用了一种负采样的近似方法:随机采样一些非近邻点对来施加排斥力,这大大降低了计算复杂度(从 \(O(N^2)\) 降到 \(O(kN)\))。
步骤3:优化布局
通过最小化交叉熵损失函数(衡量高维图和低维图之间的差异),利用梯度下降来优化低维点的位置 \(\mathbf{y_i}\)。
- 优势:由于UMAP明确地建模了数据的拓扑结构,并且通过负采样优化,它通常:
- 更快:计算复杂度线性于数据点数量 \(N\)。
- 更好的全局结构保持:在保持局部结构的同时,有时能更好地展示不同簇之间的相对位置和全局布局。
- 距离有意义:在某些情况下,低维空间中的欧氏距离能更好地反映原始空间的相似度。
五、两种算法的对比与应用建议
- t-SNE:
- 优点:可视化效果极佳,能产生非常紧密、分离清晰的簇,特别适合观察局部结构和发现类别。
- 缺点:计算较慢(\(O(N^2)\) 复杂度);对超参数(困惑度)敏感;不同的运行可能产生不同的结果(随机性);低维空间的距离没有绝对意义,主要看相对位置;基本不保持全局结构(一个簇在中心的远近不代表它在高维空间中的重要性或距离)。
- UMAP:
- 优点:速度快;在保持清晰局部结构的同时,能更好地反映全局结构(如簇间的相对位置和大小);低维距离有一定解释性;结果相对更稳定。
- 缺点:相对较新,其理论解释不如t-SNE直观;对最近邻参数 \(k\) 敏感,\(k\) 太小会破坏全局结构,太大会破坏局部结构。
应用建议:
- 对于初步探索和呈现清晰的语义聚类(如观察“国王-男人+女人≈女王”这类关系是否成立),t-SNE是久经考验的选择。
- 对于大型词向量集(如数万词),或希望在同一张图上同时看清局部聚类和全局布局(例如所有词向量大致形成一个语义谱系),UMAP是更高效、可能更佳的选择。
- 实践中,可以两种方法都尝试,从不同角度理解词向量的空间结构。
通过这两种算法,我们可以将抽象的高维词向量转化为直观的散点图,从而验证词向量的质量、探索语义关系、甚至发现未预料到的词义关联,是自然语言处理研究和分析中不可或缺的工具。