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

三步搭建声纹系统的方法

背景介绍

声纹检索,顾名思义就是说话人识别,通过声音来验证或者识别说话人的声音。声纹识别的关键步骤就是声音向量化,将说话人的声音将其转化成结构化的向量。阿里云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; -- 返回最相似的结果