我知道 Google 的 WebRTC VAD 算法使用的是高斯混合模型 (GMM),但我的数学知识很薄弱,所以我不太明白这意味着什么。说它是一种基于统计的机器学习模型是否正确,对于 VAD 来说,它是经过训练可以识别语音与噪声的模型吗?
我正在写一篇论文,并且我创建了一个脚本,该脚本利用 API 来区分声音和噪音。它有效,但我需要在我的论文中从一个非常基本的层面解释它用于做出决定的机制。
最紧迫的是,我需要在某种程度上知道“积极性”设置对算法的作用。它真的只是规定了一个置信度阈值吗?它有任何声学影响吗?
更新:
我的超基本理解是:谷歌可能在一堆预先标记的“噪音”和“语音”上训练他们的模型,并存储每个的特征;然后它会获取一个未知样本,看看它更像是噪声数据还是语音数据。我不知道测量的特征是什么,但我假设至少测量了音高和幅度。
它使用 GMM 来计算它属于一个群体或另一个群体的概率。
进取心可能会设置它用于做出决定的阈值,但我并不完全知道这部分是如何工作的。
相关代码在这里:https ://chromium.googlesource.com/external/webrtc/+/refs/heads/master/common_audio/vad/vad_core.c
“aggressiveness”设置决定了以下常数(我显示模式 0 和 3 进行比较):
// Constants used in WebRtcVad_set_mode_core().
//
// Thresholds for different frame lengths (10 ms, 20 ms and 30 ms).
//
// Mode 0, Quality.
static const int16_t kOverHangMax1Q[3] = { 8, 4, 3 };
static const int16_t kOverHangMax2Q[3] = { 14, 7, 5 };
static const int16_t kLocalThresholdQ[3] = { 24, 21, 24 };
static const int16_t kGlobalThresholdQ[3] = { 57, 48, 57 };
// Mode 3, Very aggressive.
static const int16_t kOverHangMax1VAG[3] = { 6, 3, 2 };
static const int16_t kOverHangMax2VAG[3] = { 9, 5, 3 };
static const int16_t kLocalThresholdVAG[3] = { 94, 94, 94 };
static const int16_t kGlobalThresholdVAG[3] = { 1100, 1050, 1100 };
我不太明白悬垂和本地/全局阈值是如何发挥作用的。这些是严格的统计参数吗?