deep-speaker

GitHub
940 237 中等 2 次阅读 5天前MIT开发框架
AI 解读 由 AI 自动生成,仅供参考

deep-speaker 是一个基于 TensorFlow/Keras 实现的端到端神经说话人嵌入系统。它能够将语音片段映射到一个高维向量空间中,在这个空间里,通过余弦相似度就可以判断两段语音是否来自同一个人。

这个工具主要解决了语音身份识别的问题。简单来说,当你有一句话的录音时,deep-speaker 可以把它转换成一个“声音指纹”(嵌入向量),然后用这个指纹去和数据库里的其他声音对比,从而实现说话人识别、说话人验证或说话人聚类等功能。

deep-speaker 特别适合以下用户:语音领域的研究人员可以基于它开展说话人相关的学术研究;需要开发语音身份验证功能的开发者可以直接调用它的预训练模型;甚至对语音识别感兴趣的学生也可以用它来学习深度学习在音频领域的应用。

技术上,deep-speaker 采用了 ResCNN(残差卷积神经网络)架构,并提供了 Softmax 和 Softmax+Triplet 两种训练策略。在 LibriSpeech 数据集上,经过 Triplet 训练的模型准确率可达 99.7%,等错误率(EER)低至 2.5%,表现相当不错。

如果想快速上手,项目提供了预训练模型可以直接下载使用;如果有特定需求,也可以用自己的数据集进行微调训练。环境方面需要 TensorFlow 2.3 以上版本、较大存储空间和 NVIDIA GPU 支持。

使用场景

某在线金融平台的智能客服系统需要通过语音验证客户身份,以确保账户安全。

没有 deep-speaker 时

  • 传统的说话人验证系统需要收集大量带标签的语音数据,并训练专门的分类模型,标注成本极高
  • 特征工程繁琐,需要手动提取 MFCC、PLP 等声学特征,且对特征维度选择依赖经验
  • 模型泛化能力差,训练数据中的说话人有限,无法有效识别新用户
  • 对噪声敏感,实际客服场景中常有背景噪音,导致验证失败率居高不下
  • 部署复杂,需要整合特征提取、模型推理、置信度判定等多个模块,维护成本大

使用 deep-speaker 后

  • 直接使用预训练的 ResCNN Triplet 模型提取说话人嵌入向量,省去标注和训练环节
  • 嵌入向量是 512 维的紧凑表示,直接用于余弦相似度计算,无需复杂特征工程
  • 基于 LibriSpeech 2484 位说话人训练的模型对未见过的用户也有良好的识别能力
  • 在预处理阶段使用 SOX 去除静音和背景噪声,可显著提升验证稳定性
  • 只需调用 embedding = deep_speaker.predict(audio_file) 即可完成嵌入提取,集成简单

deep-speaker 将说话人验证从复杂的模型训练简化为直接的嵌入提取与相似度计算,大幅降低了开发成本和部署难度。

运行环境要求

操作系统
  • Linux
GPU

需要 NVIDIA GPU(如 GTX1070、1080Ti),显存建议 8GB+

内存

32GB+

依赖
notes完整训练需要至少 300GB 自由磁盘空间(250GB 用于未压缩和处理后的数据),建议使用 SSD;需要安装 libsndfile-dev 系统库;音频文件需为 .flac 格式(可使用 ffmpeg 转换 .wav);如需运行 test-model 命令,建议使用 tensorflow==2.3;训练时间约一周(使用 GTX1070)
python3.6+
tensorflow>=2.0
keras>=2.3.1
numpy
scipy
scikit-learn
pandas
soundfile
deep-speaker hero image

快速开始

Deep Speaker:一个端到端的神经说话人嵌入系统。

非官方的 Tensorflow/Keras 实现 Deep Speaker | 论文 | 预训练模型

已在 Tensorflow 2.3、2.4、2.5 和 2.6 上测试。

示例结果

模型在干净语音数据上训练。需要注意的是,在噪声数据上的性能会有所下降。建议在计算嵌入(embedding)之前去除静音和背景噪声(例如使用 Sox 工具)。相关讨论请见:静音/背景噪声相似度

模型名称 测试数据集 说话人数量 F TPR ACC EER 训练日志 下载模型
ResCNN Softmax 训练 LibriSpeech all(*) 2484 0.789 0.733 0.996 0.043 点击 点击
ResCNN Softmax+Triplet 训练 LibriSpeech all(*) 2484 0.843 0.825 0.997 0.025 点击 点击

(*) all 包括:dev-clean、dev-other、test-clean、test-other、train-clean-100、train-clean-360、train-other-500。

Softmax+Triplet 检查点也可在微云上获取。

概述

Deep Speaker 是一个神经说话人嵌入系统,它将语音 utterances(语音片段)映射到一个超球面(hypersphere),在该空间中说话人相似度通过余弦相似度(cosine similarity)来衡量。Deep Speaker 生成的嵌入可以用于多种任务,包括说话人识别、验证和聚类。

入门指南

安装依赖

环境要求

  • tensorflow>=2.0
  • keras>=2.3.1
  • python>=3.6
pip install -r requirements.txt

如果遇到此错误:libsndfile not found,请运行:sudo apt-get install libsndfile-dev

训练

训练代码已包含在本仓库中。使用 GTX1070 训练模型大约需要不到一周的时间。

完整训练的系统要求:

  • 至少 300GB 的可用磁盘空间在高速 SSD 上(仅解压和处理后的数据就需要 250GB)
  • 32GB 内存和至少 32GB 交换空间(可以使用 SSD 空间创建交换分区)
  • NVIDIA GPU,例如 1080Ti
pip uninstall -y tensorflow && pip install tensorflow-gpu
./deep-speaker download_librispeech    # 如果下载太慢,可以考虑在 download_librispeech.sh 中将 [wget] 替换为 [axel -n 10 -a]。
./deep-speaker build_mfcc              # 将为 Softmax 预训练和 Triplet 训练构建 MFCC。
./deep-speaker build_model_inputs      # 将为 Softmax 预训练构建输入。
./deep-speaker train_softmax           # 大约需要 3 天。
./deep-speaker train_triplet           # 大约需要 3 天。

注意:如果您想使用自己的数据集,请确保遵循 librispeech 的目录结构。音频文件必须是 .flac 格式。如果您有 .wav 文件,可以使用 ffmpeg 进行转换。两种格式都是无损的(FLAC 是压缩的 WAV)。

使用预训练模型进行测试

  • 下载训练好的模型
模型名称 训练使用的数据集 说话人数量 模型链接
ResCNN Softmax 训练 LibriSpeech train-clean-360 921 点击
ResCNN Softmax+Triplet 训练 LibriSpeech all 2484 点击

注意:预训练是在我们所有说话人的一个子集上进行的。这是为了遵循论文的思路,即先用 Softmax 训练模型,然后在整个数据集上(比本仓库更大!)用 Triplet 进行训练。

  • 使用预训练模型运行
import random

import numpy as np

from deep_speaker.audio import read_mfcc
from deep_speaker.batcher import sample_from_mfcc
from deep_speaker.constants import SAMPLE_RATE, NUM_FRAMES
from deep_speaker.conv_models import DeepSpeakerModel
from deep_speaker.test import batch_cosine_similarity

# 可复现的结果。
np.random.seed(123)
random.seed(123)

# 在此处定义模型。
model = DeepSpeakerModel()

# 加载检查点。https://drive.google.com/file/d/1F9NvdrarWZNktdX9KlRYWWHDwRkip_aP
# 也可在此处获取:https://share.weiyun.com/V2suEUVh(中国用户)。
model.m.load_weights('ResCNN_triplet_training_checkpoint_265.h5', by_name=True)

# 为同一说话人的 WAV/FLAC 文件采样一些输入。
# 为了每次调用此函数时都能获得可复现的结果,请在每次调用前设置随机种子。
# np.random.seed(123)
# random.seed(123)
mfcc_001 = sample_from_mfcc(read_mfcc('samples/PhilippeRemy/PhilippeRemy_001.wav', SAMPLE_RATE), NUM_FRAMES)
mfcc_002 = sample_from_mfcc(read_mfcc('samples/PhilippeRemy/PhilippeRemy_002.wav', SAMPLE_RATE), NUM_FRAMES)

# 调用模型获取每个文件的形状为 (1, 512) 的嵌入。
predict_001 = model.m.predict(np.expand_dims(mfcc_001, axis=0))
predict_002 = model.m.predict(np.expand_dims(mfcc_002, axis=0))

# 对另一个不同说话人重复此操作。
mfcc_003 = sample_from_mfcc(read_mfcc('samples/1255-90413-0001.flac', SAMPLE_RATE), NUM_FRAMES)
predict_003 = model.m.predict(np.expand_dims(mfcc_003, axis=0))

# 计算余弦相似度。
similarity_same = batch_cosine_similarity(predict_001, predict_002)
similarity_diff = batch_cosine_similarity(predict_001, predict_003)

print('相同说话人的相似度:', similarity_same)
print('不同说话人的相似度:', similarity_diff)

计算余弦相似度并验证相同说话人的相似度更高

print('SAME SPEAKER', batch_cosine_similarity(predict_001, predict_002)) # SAME SPEAKER [0.81564593] print('DIFF SPEAKER', batch_cosine_similarity(predict_001, predict_003)) # DIFF SPEAKER [0.1419204]


* 训练后复现测试结果的命令

**注意**:由于某些原因,`test-model` 在 tensorflow>2.3 版本下无法运行。如果你想运行下面两条命令,请确保执行 `pip install tensorflow==2.3`。

```bash
$ export CUDA_VISIBLE_DEVICES=0; python cli.py test-model --working_dir ~/.deep-speaker-wd/triplet-training/ --
checkpoint_file checkpoints-softmax/ResCNN_checkpoint_102.h5
f-measure = 0.789, true positive rate = 0.733, accuracy = 0.996, equal error rate = 0.043
$ export CUDA_VISIBLE_DEVICES=0; python cli.py test-model --working_dir ~/.deep-speaker-wd/triplet-training/ --checkpoint_file checkpoints-triplets/ResCNN_checkpoint_265.h5
f-measure = 0.849, true positive rate = 0.798, accuracy = 0.997, equal error rate = 0.025

当三元组损失(triplet loss,一种用于度量学习的损失函数)选择困难样本时,训练损失并不会真正下降。因为困难样本始终是困难的,意味着它们平均高于阈值 alpha。然而,测试集的性能应该会下降。

后续工作

贡献者

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架