声纹识别 | 快速概览 + 详细了解N:N聚类算法是如何应用的

0 评论 11284 浏览 12 收藏 13 分钟

编辑导语:如今的识别功能越来越强大,比如:指纹识别、人脸识别、虹膜识别、声纹识别等等,声纹识别多用于金融行业和刑侦场景,进行声音匹配;本文作者详细介绍和分析了声纹识别中N:N聚类算法是如何应用的,我们一起来看一下。

笔者前段时间有幸了解到声纹的概念:声纹识别,作为生物识别技术的一种,跟脸象、指纹、虹膜等一样,是每个人独一无二的特征;在金融行业、刑侦场景应用中,对于说话人身份的鉴别认证,应用颇多。

作为产品功能设计,一般有三个类别,分别是1:1(说话人确认)、1:N(说话人辨认)、N:N(在声纹1:N的基础上,进行大规模、自动化和高效的声纹匹配,类似声海中找特定声音,或者找相似声音)。

本文从声纹识别的基本概念入手,科普知识;同时分享笔者思考的声纹识别的N:N聚类算法的流程与应用场景,希望可以和大家多多交流。

本文将从如下方面为你一一解读:

  • 什么是声纹?
  • 声纹识别的原理。
  • 声纹识别的三个应用大类:1:1、1:N、N:N。
  • N:N聚类分析的技术原理与应用流程、应用场景。
  • 声纹识别的几类攻击。

一、什么是声纹?

声纹(Voiceprint),是用电声学仪器显示的携带言语信息的声波频谱,是由波长、频率以及强度等百余种特征维度组成的生物特征,具有稳定性、可测量性、唯一性等特点。

人类语言的产生是人体语言中枢与发音器官之间一个复杂的生理物理过程,发声器官——舌、牙齿、喉头、肺、鼻腔在尺寸和形态方面每个人的差异很大,所以任何两个人的声纹图谱都有差异。

每个人的语音声学特征既有相对稳定性,又有变异性,不是一成不变的;这种变异可来自生理、病理、心理、模拟、伪装,也与环境干扰有关;尽管如此,由于每个人的发音器官都不尽相同,因此在一般情况下,人们仍能区别不同的人的声音或判断是否是同一人的声音。

二、声纹识别的原理

想要通过声音识别某个人,或者从声海中辨认出谁是谁,有两个核心的问题:就是特征提取和模式匹配了。

数据收集阶段,提取并提取并选择对说话人的声纹具有可分性强、稳定性高等特性的声学或语言特征;之后选择合适的模型(具体大家可以自行搜索,这里不多赘述)在进行声音识别。

三、声纹识别的三个应用大类:1:1、1:N、N:N

1. 说话人确认 1:1

1:1 说话人确认是确认说话人身份的方法,针对“对于同样的文本内容,有两段录音,这两段录音到底是不是出自一人之口”这样的问题,也就是“两句话到底是不是一个人说“的问题。

该类场景相对简单,主要应用于用户的注册和验证,以及APP内的声纹核身。

2. 说话人确认 1:N

1:N 说话人辨认是辨认说话人身份的方法,针对“对于一段语音,需要迅速在样本库中进行搜寻比对,以确认这段语音与样本库中哪段语音相似度最高”,也就是说“给定的一段语音属于样本库中谁说的”的问题。

该类场景比较常见,主要应用于黑名单用户进线检测、提高安防能力等。

3. 说话人聚类 N:N

在声纹 1:N 的基础上,进行大规模、自动化和高效的声纹匹配。

举个例子,如果吉尼斯举行一个比赛,5万个人都录制一段文字内容相同的语音;作为吉尼斯的审核方,如果想要快速鉴别这5万个数据有没有造假、或者重复(比如将一段语音复制无数次,冒充数据);那么雇佣业务员一条一条语音听,是有点不科学的,语音听多了也会混乱,而且很低效。

那么有什么好的办法呢?那就是N:N说话人聚类,下文会详细介绍如何解决此类问题。

四、N:N聚类分析的技术原理与应用流程,应用场景

对于千亿级别的无标签录音文件,如何做有效的处理?

举个例子,假如说你有很多的语音片段(语音的文本内容是相同的),这些语音片段分别归属于甲乙丙丁等人;仅凭人耳辨识是无法分辨出哪些语音片段属于甲,哪些语音片段属于乙。

通过N:N聚类的算法,进行声纹的相似度检测,将属于同一个人说话的语音片段不断进行合并归类;最后属于甲说话的语音片段全部被归为一类,属于乙说话的语音片段全部被归为一类;以此类推,类内语音的相似度极高,类间语音的相似度较低,达到将这些语音片段分人整理的目的。

简单介绍一下聚类分析:聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。

目的是——组内的对象相互之间是相似的(相关的),而不同组中的对象是不同的(不相关的);组内相似性越大,组间差距越大,说明聚类效果越好。

聚类效果的好坏依赖于两个因素:

  • 衡量距离的方法(distance measurement) ;
  • 聚类算法(algorithm)。

目前主流的说话人聚类算法是在说话人分割的基础上,基于贝叶斯信息判据,采用凝聚分层聚类算法,直接对说话人分割后的语音段进行判决,将属于同一个说话人的语音段合并为一类。

其基本思想是从每个语片段中提取特征参数,例如梅尔倒谱参数,计算每两个语音段之间特征参数的相似度,并利用BIC判断相似度最高的两个语音段是否合并为同一类。

对任意两段语音都进行上述判决,直到所有的语音段不再合并。

——摘自“说话人聚类的初始类生成方法”

聚类&声纹识别的主要场景:在跨渠道、跨场景收集语音同时建立声纹库的时候;由于各场景应用的客户账号或许不同,说话人在不同场景中分别注册过声纹,难以筛除重复注册语音,建立统一声纹库。

我们如何快速的去筛除属于某一个人在不同情况下录制的多条录音文件?也就是如何保证最终留下的录音文件(声纹库)是唯一的?

每一个人只对应一条音频,这就要用到聚类的算法;利用声纹识别N:N说话人聚类,对所有收集到的语音进行语音相似度检测,将同一说话人在不同场景中的多次录制的语音筛选出来;并只保留其中一条,从而保证了声纹库的独特性,节省了大量的人力成本、资源成本。

对于目前的场景,我们选择凝聚层次聚类算法,在这种场景下,我们是要筛除重复人说话;那么我们可以将每一个录音文件都当作一个独立的数据点,看最后有凝聚出多少个独立的数据簇,此时可以理解为类内都是同一个人在说话。

1)我们首先将每个数据点(每一条录音文件)视为一个单一的类,即如果我们的数据集中有 X 个数据点,那么我们就有 X 个类;然后,我们选择一个测量两个类之间距离的距离度量标准;作为例子,我们将用 average linkage,它将两个类之间的距离定义为第一个类中的数据点与第二个类中的数据点之间的平均距离(这个距离度量标准可以选择其他的)。

2)在每次迭代中,我们将两个类合并成一个;这两个要合并的类应具有最小的 average linkage,即根据我们选择的距离度量标准,这两个类之间的距离最小;因此是最相似的,应该合并在一起。

3)重复步骤 2 直到我们到达树根,即我们只有一个包含所有数据点的类。这样我们只需要选择何时停止合并类,即何时停止构建树,来选择最终需要多少个类(摘自知乎)。

按照实际的场景,如果我们最终要得到1000个不重复的录音文件,为了防止过度合并,定义的退出条件是最后想要得到的录音文件数目。

声纹识别 N:N聚类算法

处理的流程图

声纹识别 N:N聚类算法

聚类模拟图

五、声纹识别的几类攻击及其策略

1. 录音重放攻击

攻击者录制目标说话人的语音进行播放,以目标人身份试图通过声纹识别系统的认证。

策略:基于随机内容声纹的检测技术,利用随机数字的不确定性,用户在规定的时间内(5-10S)需要念出指定的随机内容,如果超时,则随机内容更新;因为对于录音重放的内容是固定的,很不灵活,所以比较容易做限制。

2. 波形拼接攻击

攻击者将目标说话人的语音录制下来,通过波形编辑工具,拼接出指定内容的语音数据,以放音的方式假冒目标说话人,试图以目标人身份通过声纹识别系统的认证。

策略:同录音重放。

3. 语音合成攻击

攻击者用语音合成技术生成目标说话人的语音,以放音的方式假冒目标说话人,试图以目标人的身份通过声纹识别系统的认证。

策略:同录音重放;利用活体检测技术,加强算法的识别度。

以上,是关于声纹识别的一些分享,希望大家可以多多交流,一同进步。

 

本文由@寒白 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!