【聚类分析】降维聚类判断是谁在说话

在上一篇文章 【降维分析】 声音的可视化探索:从鸟叫到声纹识别 中我们进行了声音可视化分析的初步探索,提出了能否用这种特性来进行语音识别的假设。下面我们就将完整走完整个语音聚类分析过程、操作方法与结果分析。

在研究材料上,我们不再麻烦亲友录制了,而是使用大型开源语言数据集。在全球大型语音语料库中,VoxCeleb1 是一个具有代表性的语音数据集,包含了来自全球范围的语音样本集。每个说话人身份信息标记得非常完整和清晰,为语音聚类分析提供了良好的基础。


一、语音数据聚类是什么?

语音数据聚类是一种无监督学习问题,其目标是通过语音特征,将语音数据视为“样本”,依据相似性将它们自动划分为若干簇(Cluster)。这些簇可能代表同一个说话人的声音分布

在语音识别与语音数据研究领域,聚类技术可用于推测语音的来源,尤其是在没有明确标签信息的情况下,是一项非常实用的数据挖掘技术。我们选取 VoxCeleb1 数据集的一部分,尝试通过聚类分析找出说话人身份的分布边界,并探索声音是否具有“声音指纹”的特性。


二、语音特征提取:MFCC 与 Fbank

为了提出录音设备差异背景噪音干扰,更好地表征语音数据,我们使用了两种常用的音频特征:MFCC(梅尔频率倒谱系数)和 Fbank

1. MFCC(梅尔频率倒谱系数)

  • MFCC 是一种广泛用于语音分析的特征,通过计算语音的频谱能量分布并将其映射到梅尔频率尺度(近似人类听觉感知特性)。
  • 每个 MFCC 特征向量包括 20 个主频段 + 两个差分(delta 和 delta2),总共形成 60 维的语音表征。
  • 能够捕捉时间上的动态变化,是语音识别中常用的特征。

2. Fbank

  • 与 MFCC 类似,但采用对数梅尔能量(Log-Mel Spectrogram)来表示语音的频谱特征。
  • 更关注频段能量分布,包含了更多信息,对发音时间变化的捕捉不如 MFCC 灵敏。

针对说话人聚类任务结果:

  • MFCC 处理的平均 ARI 得分为 0.1459
  • Fbank 处理的平均 ARI 得分为 0.0317

这表明:MFCC 更适合用于说话人聚类,推测它能更准确地表达语音的个性化特征。


三、降维方法:PCA 和 t-SNE

为了将高维语音特征(60 维)映射为可视化的 2D 结构,我们采用了两种经典的降维技术:PCA(主成分分析)t-SNE(t-分布随机邻域嵌入)

1. PCA(主成分分析)

  • 是一种线性降维方法,通过最大化数据的方差来提取主要成分。
  • 优点是运行速度快、可解释性好;缺点是可能丢失非线性结构信息,对复杂空间关系表达有限。

2. t-SNE(t-分布随机邻域嵌入)

  • 是一种非线性降维方法,擅长保留高维数据的局部关系,适合可视化数据分布
  • 结果更贴近人类感知,对于不同说话人在高维空间中的分布关系更能体现出来。

针对说话人聚类任务结果:

  • t-SNE 处理的平均 ARI 得分为 0.1034
  • PCA 处理的平均 ARI 得分为 0.0742

虽然结果表明:t-SNE 在保留语音特征分布细节方面表现更为出色,因而 ARI 和轮廓系数都更好。但从下图可以看出,其都没能呈现出明显的聚类,各类都混杂在了一起,只能期待其通过聚类算法能够有较好的表现。


四、聚类方法:KMeans、DBSCAN、层次聚类

为了评估语音数据的聚类效果,代码中运行了三种主流的聚类方法:KMeansDBSCAN(密度聚类)和层次聚类

1. KMeans 聚类

  • 一种基于均值的聚类方法,将数据划分为若干个中心明确的簇
  • 在该实验中,我们选择了 10 个聚类簇,并基于真实标签评估了聚类效果。

关键结果:

  • MFCC + t-SNE 空间下表现最佳,获得 ARI 得分 0.2384
  • 聚类数 10,轮廓系数 0.4266

2. DBSCAN(密度聚类)

  • DBSCAN 假设数据为不同密度的区域,自动识别噪声点。
  • 举个例子就像在沙滩上寻找人群和孤立的个体,非常适合复杂、异构的数据集。

关键结果:

  • MFCC + t-SNE 下“拟合”出 8 个簇(ARI = 0.0445)
  • 噪声占比高达 76.61%,说明语音数据存在较大的异质性和噪声干扰。

3. 层次聚类(Hierarchical Clustering)

  • 通过构建树状结构(Dendrogram),揭示语音样本之间的层次关系,理解不同说话人、不同语音之间的关联。

关键结果:

  • 在所有方法中表现不如下克莱斯的 KMeans
  • 但轮廓系数良好(MFCC PCA 下为 0.432)

五、结果分析:为何 KMeans 在 MFCC t-SNE 下表现最佳?

从代码运行结果来看,MFCC + t-SNE 的组合下,KMeans 在语音聚类中表现最佳,其 ARI 得分高达 0.2384,意味着该方法在识别说话人之间聚类结构上具有一定的能力。

假设一:MFCC 更能捕捉声音的语义信息

  • MFCC 更注重语音的频谱和时间动态变化,捕捉声学特征时比 Fbank 更贴近人对声音的感知机制。
  • 因此,MFCC 更具代表性,能够更清晰地划分说话人边界。

假设二:t-SNE 在 MFCC 空间表现出更强的聚类分离能力

  • t-SNE 通过非线性映射保留了不同说话人之间的分布关系,使得 KMeans 在 t-SNE 空间中的聚类边界更清晰、更优雅。
  • 这也解释了为何 ARI 和轮廓系数在 t-SNE 空间下更高。

假设三:KMeans 在聚类中更稳健

  • KMeans 能适配相对清晰的语音分布,尤其在 MFCC + t-SNE 的交织下能准确识别说话人身份。
  • DBSCAN 在 t-SNE 空间下噪点占比较高(76.61%),说明语音数据混杂度较高,很多样本无法准确归类到某个说话人。

六、每个说话人的表现差异:纯度、同质性、完整性

KMeans + MFCC + t-SNE 为例,我们对每一位说话人的聚类效果进行了评估。

分析:

  • 纯度(Purity) 从中低(<0.3)到中高(>0.7)差异明显,反映不同说话人的语音差异程度不一,部分说话人更容易被识别。
  • 除此之外,所有说话人分类结果的同质性(Homogeneity)均为 1,说明每个说话人的样本都被分到一个簇中,无跨说话人混淆。
  • 除此之外,所有说话人分类结果的完整性(Completeness) 全为 0,表明未能完全划分所有说话人的语音,说明数据分布可能存在不均衡,或部分语音被错误地归到其他说话人下。

七、结果解读:语音聚类的问题与意义

1. 语音聚类效果非绝对,存在个体差异

  • 语音聚类不是完全一针见血的识别任务。每个人的声音都独一无二,但某些人语音风格更显著,更容易在孟弗特空间中被分离。
  • 聚类结果可能会受到发音习惯、语境、情绪等多种因素影响,导致某些说话人的语音分布较为模糊。

2. DBSCAN 擅长处理噪声,但也带来了“模糊”的问题

  • DBSCAN 具有处理噪声点的能力,适合对语音数据进行初步筛查或重点关注真实样本。
  • 然而,在本实验中,76% 的样本被判定为噪声,说明语音数据的一致性不足,配音、背景混音等情况可能导致聚类效果受损。

3. ARI 和 Silhouette 系数反映聚类能力的现状

  • 尽管 KMeans 在 MFCC + t-SNE 空间中达成的最佳 ARI 得分为 0.2384,说明这个方法基本识别出某些说话人的聚类结构
  • 但由于语音样本之间的差异并非完全可区分,且数据可能包含混淆样本,因此聚类质量仍有提升空间。

八、语音可视化:图像蕴含的声音边界

从代码跑出的可视化图表我们不难发现,即便采用 MFCC + t-SNE 技术,语音数据中的不同说话人仍然存在较大重叠区域,说明:

项目说明
最佳聚类配置mfcc_tsne_kmeans(0.2384 ARI)
语音特征MFCC 更具代表性,能准确捕捉说话人音色特征
降维方式t-SNE 优于 PCA,保留了更好的簇间关系
聚类算法KMeans 是最稳健的选择,层次聚类和 DBSCAN 存在噪声干扰
噪声比例一些方法(如 DBSCAN)发现超过 70% 的样本为噪声
整体分离度(Separation Ratio)仅 0.97,分离度良好但仍有提升空间

九、未来优化方向

  • 使用深度学习特征:如 CNN、DNN 或预训练语音模型(如 VGGish)提取的嵌入特征,可能更接近人类听觉的感知方式。
  • 优化降维参数:t-SNE 的参数选择对结果影响显著,可以通过调优保留更多的结构信息。
  • 增加样本量:每位说话人仅使用了少量语音片段,数据稀疏可能影响聚类效果。
  • 调整算法超参数:如 KMeans 的簇数、DBSCAN 的 epsmin_samples 等参数,需要根据实际数据分布进行优化。