引言
在本文中,我们将探讨如何将扬声器的声音与现有的声音集进行匹配。你可以把它想象成一种生物识别系统,但使用的是人类的声音,而不是指纹或眼睛等物理感官。为了实现这一点,我们将利用向量嵌入和开源技术的魔力。
这种技术在 Google Assistant 或 Siri 中被广泛使用。当你购买一部新设备(如 Android 手机)时,在设置 Google 时,它会要求你录入声音以捕捉其模式和语音等信息,以确保只有你可以通过说“Ok, google”来访问 Google Assistant。
在深入细节之前,让我们先了解什么是向量嵌入,以及它是如何用于音频的。
音频的向量嵌入
向量嵌入是一种将对象(例如单词、句子或在我们案例中的音频数据)表示为数学空间中的向量的方式。音频数据可以表示为向量,其中音频的不同方面(如频率、幅度等特征)被映射到向量的特定位置。
在音频数据的上下文中,可以训练机器学习模型来学习这些嵌入。模型分析音频数据的模式和特征,以生成有意义的向量表示。一旦模型训练完成,它可以通过将音频数据转换为向量表示来编码音频数据。这个向量现在捕捉了音频内容和特征的重要信息。
音频内容的向量在嵌入空间中会彼此靠近。这允许进行音频相似性比较等任务,你可以通过测量各自嵌入之间的距离快速识别两个音频片段的相似程度。为了生成向量嵌入,我们将使用一个名为 Resemblyzer 的开源工具,并将这些向量存储在 Qdrant DB 中。
我们有一组一些名人(克里斯蒂亚诺·罗纳尔多、唐纳德·特朗普和霍默·辛普森)的音频片段(是的,他很有名)。
Resemblyzer 概述
Resemblyzer 允许我们通过深度学习模型获取声音的高级表示。它简化了开发人员的工作,使他们能够用几行代码将音频片段转换为向量,消除了对神经网络的需求。查看官方 GitHub 仓库。
安装适用于 Python(3.5+)的 Resemblyzer:
pip install resemblyzer
我正在使用 Google Colab 和免费的 T4 GPU 进行此任务。你也可以使用 CPU,但可能需要很长时间。点击这里获取音频数据。
让我们开始编码部分:
from resemblyzer import preprocess_wav, VoiceEncoder
from pathlib import Path
from tqdm import tqdm
import numpy as np
from IPython.display import Audio
from itertools import groupby
import heapq
audio_sample = Audio('path-to-audio-folder/train/Trump.mp3', autoplay=True)
display(audio_sample)
播放: Trump.mp3
让我们从训练文件夹中获取音频片段。
wav_fpaths = list(Path(