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

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

5-6-3.gif

背景介绍

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

声纹识别技术

1)声纹检索演示

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

image.png


图1. 声纹演示系统

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

image.png


图2. 查询声音

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

image.png


图3. 注册声音

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

image.png


图4. 录制并检索声音

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

2)应用结构总体设计

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

image.png


图5. 声纹检索库

3)系统精度

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

声纹识别在学术界常用的数据集(Aishall.v1 [1]数据集和TIMIT [2]数据集)上面的(1:N)的准确率(>99.5%,见表1)。

表1. Top 1 精度测试结果

321.png

三步搭建一个声纹系统

第一步,初始化。

当前系统实现了声音转向量的函数,用户将前端得到的声音通过POST请求,发给阿里云服务系统,选择对应的声纹模型,就可以将声音转成对应的向量。

import requests
import json
import numpy as np


# sound: 声音二进制文件。
# model_id:模型id。
def get_vector(sound, model_id='i-vector'):
    url = 'http://47.111.21.183:18089/demo/vdb/v1/retrieve'
    d = {'resource': sound,
         'model_id': model_id}
    r = requests.post(url, data=d)
    js = json.loads(r.text)
    return np.array(js['emb'])

# 读取用户文件。
file = 'xxx.wav'
data = f.read()
print(get_vector(data))
f.close()

在初始化的过程中,用户创建相关的用户声纹表。同时,给表的向量列加入向量索引,来加速查询过程。当前声纹模型输出的都是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_feature <-> ARRAY[-0.017,-0.032,...]::float4[] -- 利用向量进行排序
LIMIT 1; -- 返回最相似的结果

结尾

详细的声纹模型以及相关的AnalyticDB系统请加我们的钉钉群,欢迎大家讨论和使用。2

image.png

参考文献:

[1] Aishell Data set. https://www.openslr.org/33/

[2] TIMIT Data set.
http://academictorrents.com/details/34e2b78745138186976cbc27939b1b34d18bd5b3/

[3] Najim Dehak, Patrick Kenny, Réda Dehak, Pierre Dumouchel, and Pierre Ouellet, “Front-end factor analysis for speaker verification,” IEEE Transactions on Audio, Speech, and Language Processing, vol. 19, no. 4, pp. 788–798, 2011.

[4] David Snyder, Daniel Garcia-Romero, Daniel Povey and Sanjeev Khudanpur, “Deep Neural Network Embeddings for Text-Independent Speaker Verification”, Interspeech , 2017 :999-1003.

[5] Anton, Howard (1994), Elementary Linear Algebra (7th ed.), John Wiley & Sons, pp. 170–171, ISBN 978-0-471-58742-2

往期文献:

[1] 戴口罩也能刷门禁?疫情下AnalyticDB亮出社区管理的宝藏神器!https://developer.aliyun.com/article/745160

[2] 阿里云提供高效基因序列检索功能,助力冠状病毒序列快速分析
https://developer.aliyun.com/article/753097

[3] 阿里云提供高效病原体检测工具助力精准医疗
https://yq.aliyun.com/articles/761891
图片.gif

相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
存储 资源调度 监控
|
移动开发 缓存 前端开发
一年前端社招面试总结,入职阿里菜鸟
前言 本篇文章也是认识的一位好朋友「东仔」,也是和Fly一年的前端,最近在面试和他交流了很多,还有雨哥,后面继续约他写一份面试题。最近Fly哥也在疯狂面试,差不多大中厂小厂、得物、B站、爱奇艺、蚂蚁、字节、阿里「有的面完了,有的offer有的还在流程中。等我确定了,我也写一份面经,给大家参考,整体和下面差不多,但是我会有点可视化的,所以最近」更新的可视化文章比较少,精力有限,等我「调整结束」了依旧是高质量文章送上。 介绍 ❝ 个人背景:2020年毕业,二本学校科班前端,一年出头前端经验。上家公司主要做的是 Vue2 PC端的产品,捎带一些可视化方向的技术。技术栈以 Vue2 为主,有自
|
算法
10分钟小白都可以看懂的光度立体法以及运用到项目
10分钟小白都可以看懂的光度立体法以及运用到项目
1616 0
10分钟小白都可以看懂的光度立体法以及运用到项目
|
2月前
|
SQL 人工智能 自然语言处理
当Agent涌入企业,阿里云如何补齐RAG这关键一环?
对企业来说,智能体能否真正落地,除了模型能力,还要能安全、准确、可追溯地使用企业自己的知识。
306 0
|
11月前
|
资源调度 监控 测试技术
《SaaS多租户实战指南:从灰度发布到故障容错的全链路架构设计》
本文聚焦企业级团队协作SaaS应用的多租户架构迭代实践,针对租户规模差异大、资源冲突、定制化与标准化矛盾等核心痛点展开。初期简易多租户模式因资源共享导致故障后,作者重构架构:采用“独立数据库+共享数据库+租户标识”的混合隔离方案,解决数据隔离与成本平衡问题;搭建基于租户画像的弹性资源调度体系,通过预测式调度与实时调整提升资源利用率;以“核心标准化+定制插件化”架构,缩短定制需求响应时间;构建分层灰度发布与故障容错机制,将版本故障发生率大幅降低。最终总结出SaaS多租户架构需“以租户为中心”,在隔离、共享、定制间找到精细化平衡点的核心经验。
986 6
|
10月前
|
人工智能 监控 数据可视化
2025 年适合制造业、零售、汽车、互联网、电商的 BI 产品推荐
本文为 2025 年制造业、零售、汽车、互联网、电商行业 BI 产品选型指南,聚焦行业专属 BI 工具需求,基于 70 万 + 跨行业实战数据精选 5 款产品。核心介绍阿里云旗下瓴羊 Quick BI,其作为国内唯一连续 6 年入选 Gartner ABI 魔力象限的产品,服务超 5 万家企业,具备 “智能小 Q” AI 功能、40 + 可视化组件、0.3 秒 10 亿级数据处理能力,且有五大行业专项适配方案,搭配极氪、洋河股份等真实案例。同时介绍葡萄城 Wyn(制造业适配)、微软 Power BI(轻量通用)、Tableau(可视化强)、Sisense(嵌入式)四款产品。
|
机器学习/深度学习 生物认证 语音技术
声纹识别入门:原理与基础知识
【10月更文挑战第16天】声纹识别(Voice Biometrics)是生物特征识别技术的一种,它通过分析个人的语音特征来验证身份。与指纹识别或面部识别相比,声纹识别具有非接触性、易于远程操作等特点,因此在电话银行、客户服务、智能家居等领域得到了广泛应用。
3885 0
课时6:Path环境变量
今天给大家带来分享的是 Path 环境变量,其主要分为以下五部分。 1.了解 Path 环境变量 2.Path 的作用 3.如何改 path 环境变量 4.删除 path 路径 5.注意事项
679 0
|
机器学习/深度学习 存储 人工智能
《LSTM与HMM:序列建模领域的双雄对决》
长短期记忆网络(LSTM)和隐马尔可夫模型(HMM)是序列建模中的重要工具。两者都能处理序列数据并基于概率预测,且都使用状态概念建模。然而,LSTM通过门控机制捕捉复杂长期依赖,适用于长序列任务;HMM基于马尔可夫假设,适合短期依赖关系。LSTM训练复杂、适应性强但解释性差,而HMM训练简单、解释性好,适用于离散数据。两者在不同场景中各有优势。
472 7

热门文章

最新文章