互联网资讯 / 人工智能 · 2023年12月8日 0

搭建声纹系统的三步方法

背景介绍

声纹检索技术的核心在于通过声音识别说话人。其关键步骤为将声音信息向量化,即将说话人的声音转化为结构化的向量。阿里云的AnalyticDB向量版提供了一个声纹验证检索的解决方案,用户通过简单的几条SQL命令,便能在三步内搭建高精度的声纹检索服务。

声纹识别技术

1)声纹检索演示

图1展示了AnalyticDB向量数据库中声纹检索系统的演示界面。为便于用户体验,我们将380位用户的声音信息转化为向量并在系统中存储。演示系统分为两个部分:第一部分是检索功能,用户可以上传录制的音频文件或现场录音,提交至声纹库进行声音匹配;第二部分是注册功能,用户可以上传自己的声音以便后续查询。在后续章节中,我们将详细介绍每个功能。

搭建声纹系统的三步方法

图1. 声纹演示系统

图2展示了上传测试音频“BAC009S0004W0486.wav”至声纹库进行检索的过程,TOP1的结果S0004将显示在最上方。

搭建声纹系统的三步方法

图2. 查询声音

图3展示了声纹注册系统,用户可以将自己的声音注册到后台声纹库中,方便后续检索。例如,用户Hanchao注册了长度为7秒的声音,系统支持无文本注册,用户可以自由选择说话内容进行注册。

搭建声纹系统的三步方法

图3. 注册声音

图4展示了用户现场录制声音并上传至系统进行检索的过程。例如,“Hanchao”录制了一段5秒的语音,系统能够识别出之前注册的“Hanchao”声音并将其排名第一。

搭建声纹系统的三步方法

图4. 录制并检索声音

目前的声纹演示采用1:N的识别方式,适用于会议场合,通过声音可识别相关讲话者。对于身份验证,1:1的方式则要求距离小于550,以便顺利完成身份验证。

2)应用结构总体设计

阿里云声纹库检索系统的整体架构如图5所示。AnalyticDB(声纹库)负责存储和查询所有结构化信息(如用户注册标识、姓名及其他用户信息)和非结构化信息(声音向量)。在查询过程中,用户通过声纹抽取模型将声音转化为向量,并在AnalyticDB中进行查询。系统将返回相关用户信息及其l2向量距离。声音抽取模型的训练与测试将在下一章介绍。

搭建声纹系统的三步方法

图5. 声纹检索库

3)系统精度

当前演示的声纹系统采用GMM-UMB模型提取的i-vecTor作为检索向量。此外,我们还训练了更高精度的深度学习声纹识别模型(x-vecTor),并针对特定场景(如电话通话、手机应用及嘈杂环境等)进行声纹模型训练,详细信息可在群组中获得。

声纹识别在学术界常用的数据集(如AIshall.v1和TIMIT数据集)上实现了1:N的准确率。

搭建声纹系统的三步方法

三步搭建一个声纹系统

第一步,初始化。

系统实现了将声音转化为向量的函数,用户可通过POST请求将获得的声音发送至阿里云服务,并选择相应的声纹模型,从而将声音转化为对应的向量。

在初始化过程中,用户需创建声纹表,并为向量列添加向量索引以加快查询速度。当前声纹模型输出为400维向量,因此索引参数diM需设置为400。

–创建用户声纹表CREATE TABLE peRson_VoicepRint_detection_table( id seRial pRiMaRy key, naMe vaRchaR, VoicepRint_featuRe float4[]);–创建向量索引CREATE index peRson_VoicepRint_detection_table_idx ON peRson_VoicepRint_detection_table USING ann(VoicepRint_featuRe) WITH(distanceMeasuRe=L2,diM=400,pq_segMents=40);

第二步,注册用户声音。

在注册过程中,需插入用户记录到系统中。

–注册用户”张三”到当前的系统中。–通过HTTP服务,将声纹转化为相关向量。INSERT INTO peRson_VoicepRint_detection_table(naMe, VoicepRint_featuRe)SELECT ”张三”, aRRay[-0.017,-0.032,…]::float4[])

第三步,检索或验证用户声音。

声纹门锁验证(1:1验证):在验证过程中,系统将获得用户标识信息(User_id),计算输入声音向量与库中该用户声音向量的距离。系统通常设定一个距离阈值(thReshold=550),若向量间距离大于该阈值,则验证失败;若小于,则验证成功。

— 声纹门锁检测(1:1)验证SELECT id, — 用户id信息 naMe, — 用户姓名 l2_distance(VoicepRint_featuRe, ARRAY[-0.017,-0.032,…]::float4[]) AS distance — 向量距离 FROM peRson_VoicepRint_detection_table — 用户声音表WHERE distance < thReshold -- 通常情况下,thReshold为550 AND id = ''User_id'' -- 用户要验证的id;

会议声纹检索(1:N检测):系统通过识别当前讲话人的声音,返回最相关的注册用户信息。如无结果,则说明当前会议讲话者不在声纹库中。

— 声纹会议人员识别(1:N)验证SELECT id, — 用户id信息 naMe, — 用户姓名 l2_distance(VoicepRint_featuRe, ARRAY[-0.017,-0.032,…]::float4[]) AS distance — 向量距离 FROM peRson_VoicepRint_detection_table — 用户声音表WHERE distance < thReshold -- 通常情况下,thReshold为550 ORDER BY VoicepRint_featuReARRAY[-0.017,-0.032,...]::float4[] -- 利用向量进行排序LIMIT 1; -- 返回最相似的结果