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

三步搭建声纹系统的方法

背景介绍

声纹检索,顾名思义就是说话人识别,通过声音来验证或者识别说话人的声音。声纹识别的关键步骤就是声音向量化,将说话人的声音将其转化成结构化的向量。阿里云AnalyticDB向量版,提供了一套声纹验证检索的解决方案。用户只需要使用简单的几条SQL命令,三步之内就可以搭建一套高精度的声纹检索验证服务。

声纹识别技术

1)声纹检索演示

图1展示了AnalyticDB向量数据库的声纹检索系统的演示界面。为了方便用户体验,我们将380个人的声音信息,转化成向量存储在系统中。当前演示系统分成两部分,第一部分是检索部分,用户输入录制好的声音文件或者用户现场进行录音上传声音文件,提交到声纹库进行声音的匹配检索。第二部分是注册部分,用户可以注册上传自己的声音到当前的声纹库里面,方便后期的查询验证。在接下来的章节中,我们分别介绍各个功能。

如何三步搭建一套声纹系统

图1. 声纹演示系统

图2上传一段S0004的测试音频“BAC009S0004W0486.wav”到声纹库里面进行检索,可以看到TOP1的结果S0004就会在最上面进行展示。

如何三步搭建一套声纹系统

图2. 查询声音

图3展示了声纹注册系统,用户可以注册自己的声音到后台声纹库里面,方便检索。比方说,用户Hanchao注册自己的声音(只有7s长度),到当前的系统里面来。当前系统支持无文本注册,用户可以说任何话来进行注册。

如何三步搭建一套声纹系统

图3. 注册声音

图4演示用户现场录制声音,上传到系统中,进行检索。比方说,“Hanchao”录制了一段5秒的语音到声纹系统中进行检索。之前注册过“Hanchao”的声音,当前系统可以看到排名第一的声音就是“Hanchao”的声音。

如何三步搭建一套声纹系统

图4. 录制并检索声音

当前对于声纹演示,我们采用的是1:N的演示结果,可以用在会议室中的识别,通过声音可以找到相关的会议说话人。当前,对于身份验证,这种1:1的演示,我们只用限制距离小于550,就可以方便的进行身份验证。

2)应用结构总体设计

阿里云声纹库检索的系统框架的总体架构如图5所示,AnalyticDB(声纹库)负责整个声纹检索应用的全部结构化信息(用户注册标识,用户姓名,以及其他的用户信息)和非结构化信息(声音产生的向量)的存储和查询。在查询的过程中,用户通过声纹抽取模型,将声音转成向量,在AnalyticDB中进行查询。系统返还回来相关的用户信息,以及l2向量距离。其中声音抽取模型的训练和测试,我们在下一章进行讲解。

如何三步搭建一套声纹系统

图5. 声纹检索库

3)系统精度

当前演示声纹系统,采用的是GMM-UMB模型抽取的i-vecTor作为检索向量。另外,我们还训练了精度更高的深度学习声纹识别模型(x-vecTor)。并且,可以针对特定的场景,比方说电话通话场景,手机app场景,嘈杂噪声场景等相关的场景进行声纹模型训练,详细信息可以加我们的群进行了解。

声纹识别在学术界常用的数据集(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; -- 返回最相似的结果

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册