确定音频与人类语音的相似程度


12

在寻找这个问题的答案时,我发现这个董事会决定从Stack Overflow 交叉发布我的这个问题


我正在寻找一种确定音频片段和人类语音之间相似性的方法,该相似性以数字表示。

我已经搜索了很多,但是到目前为止(以下详细介绍)我发现的内容并不完全符合我的需要:

  • 一种方法是使用语音识别软件从音频片段中获取单词。但是,这种方法无法提出与人类语音“相似”的音频。它通常可以判断音频中是否有单词,但是如果没有确定的单词,就无法判断音频是否包含这些单词。
    示例:CMU狮身人面像蜻蜓SHoUT

  • 更有希望的方法称为语音活动检测(VAD)。但是,这往往会有相同的问题:使用VAD的算法/程序倾向于仅返回是否已达到活动阈值,并且在该阈值之前或之后都没有“相似性”值。另外,许多人只是在寻找音量,而不是与人类语音相似。
    示例:SpeexListenerFreeSWITCH


有任何想法吗?


1
从您的问题尚不清楚您的问题是否是A /进行录音并说它是否包含人类语音(应用示例:从广播节目的录音中检测并删除DJ谈话);或B /进行语音输入,并说出它与参考音频片段的相似程度。如果是B,则您要根据哪个条件衡量相似度。在旋律轮廓上?(例如:将演唱的声音与歌曲匹配)。在节奏和类类上?(例如:将节拍/拟声词与鼓循环相匹配)。在音色上?(使声音与声音效果匹配)。请告诉我们您的申请。
pichenettes 2012年

抱歉,我的问题是您在A中详述的内容。我想确定音频片段是否是人类语音。
杰夫·戈特梅克

1
我一直在研究一个相关的问题-试图确定打speech /呼吸的声音何时被语音或音乐“污染”了。很难做到任何可靠性,并且不求助于“高级”语音识别算法(如果它们实际上甚至可以工作的话)。我的一个观察结果是,语音倾向于具有不规则的节奏,而音乐(通常)是规则的。可能还有“光谱平坦度”值得研究(我仍在出于自己的目的评估其优点)。
Daniel R Hicks 2012年

(详细一点:我发现,根据音频FFT计算出的频谱平坦度的归一化标准偏差似乎反映了某种音频质量。)
Daniel R Hicks

Answers:


6

通常使用机器学习技术解决此类问题。

将信号分解为20ms或50ms的帧序列。提取每个帧上的特征。MFCC通常对此类应用有好处,尽管它具有语音检测所特有的功能(4 Hz调制能量-大约是人们说话的速率;零交叉速率)。

然后,使用您已手动标记为语音/非语音的训练音频集,在帧特征上训练分类器(高斯混合模型,SVM ...)。

这将允许您将未标记的帧分类为语音/非语音类。最后一步在于平滑决策(例如,使用HMM或仅使用中值滤波器,将分类为无语音的帧(数百个语音帧所包围的帧很可能是分类错误))。

一些参考:

音频文档中可靠的语音/音乐分类(Pinquier等) 多媒体应用中的语音/音乐鉴别(El- Maleh等)语音/音乐鉴别功能的比较(Carey等)

请注意,它们描述的功能和分类技术也与检测语音的一类问题(而不是区分语音或其他)相关。在这种情况下,您可以使用1类建模技术(例如1类SVM),或者仅将针对语音数据训练的GMM中的似然度得分作为“语音”度量。

另一方面,如果您的问题是真正区分语音与其他内容(例如音乐),那么您也可以很好地使用无监督方法,这些方法专注于检测相似音频内容之间的边界,而不是识别此内容本身。


谢谢,这可以帮助很多!将信号分解为小窗口有什么好处?因为我正在寻找的输出是一个描述整个音频片段的数值,所以提取整个信号的特征而不是特定窗口的特征会更好吗?
Jeff Gortmaker 2012年

在非常长的窗口上计算特征(尤其是频谱特征或倒频谱特征)将平均或抵消某些使语音脱颖而出的属性。您可以通过将许多简短的语音片段混合在一起来验证自己的身份-很难将结果识别为语音。因此最好对小段进行分类; 并根据您的情况汇总得分(例如,计算GMM给出的似然得分的平均值;或计算由二进制分类器分类为语音的帧的百分比)。
pichenettes 2012年

更准确地说,请记住,当您查看频谱时,时间维是“折叠的”。例如,500 Hz音调的功率谱随时间跟随1kHz音调,类似于同时播放的这两个音调的功率谱;因此,在很长一段时间内,变化很大的信号的功率谱看上去并不能很好地代表信号的内容。
pichenettes 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.