构建简单的语音识别系统

在日常生活中,经常使用Google Assistant、Apple的Siri或Amazon的Alexa来快速获取网络信息或简单地发出命令。这些人工智能助手以其理解语音命令并执行所需任务而闻名。它们能够迅速响应诸如“OK, Google. 冰岛的首都是哪里?”或“Hey, Siri. 给展示千层面的食谱。”等语音命令,并显示准确的结果。有没有想过它们是如何做到的?今天,将构建一个非常简单的语音识别系统,它将语音作为输入,并在听到输入后产生相应的文本。

如果像一样没有耐心,这是可以直接复制、粘贴并执行的完整源代码。确保有一个名为‘my-audio.wav’的文件作为语音输入。同时确保已经安装了所有库。在教程的后半部分,将讨论每一行代码的作用。

import torch import librosa import numpy as np import soundfile as sf from scipy.io import wavfile from IPython.display import Audio from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h") model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h") file_name = 'my-audio.wav' data = wavfile.read(file_name) framerate = data[0] sounddata = data[1] time = np.arange(0,len(sounddata))/framerate input_audio, _ = librosa.load(file_name, sr=16000) input_values = tokenizer(input_audio, return_tensors="pt").input_values logits = model(input_values).logits predicted_ids = torch.argmax(logits, dim=-1) transcription = tokenizer.batch_decode(predicted_ids)[0] print(transcription)

这就是Wave2Vec,一个自监督模型,旨在为多种语言和方言创建一个语音识别系统。用非常少的训练数据(大约是标记数据的100倍),该模型已经能够超越以前的最先进技术基准。这个模型,像BERT一样,是通过预测掩蔽音频段的语音单元来训练的。另一方面,语音音频是一个连续的信号,它捕获了许多录音的特征,而不是清晰地分割成单词或其他单元。Wav2vec 2.0通过学习25毫秒的基本单元来解决这个问题,以学习高级的上下文化表征。然后,这些单元被用来描述广泛的口语音频记录,增强了wav2vec的鲁棒性。有了100倍少的标记训练数据,可以创建超越最佳半监督方法的语音识别算法。多亏了自监督学习,Wav2vec 2.0是依赖于标记输入较少的机器学习模型的一部分。自监督已经帮助了图像分类、视频理解和内容理解系统的进展。该算法可能会导致语音技术在广泛的语言、方言和领域以及当前系统的进展。

将使用PyTorch,一个开源的机器学习框架,以及Transformers,一个由Hugging Face提供的最先进的自然语言处理库。以下是可能需要通过pip安装的所有要求的列表。建议在继续之前,在虚拟环境中安装所有这些包。

将使用Jupyter Notebook,在激活包含上述所有必需库的虚拟环境的同时打开它。一旦笔记本加载完成,创建一个新文件并开始导入库。

import torch import librosa import numpy as np import soundfile as sf from scipy.io import wavfile from IPython.display import Audio from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h") model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")

这可能需要一些时间来下载。完成后,可以录制声音并将wav文件保存在编写代码的文件旁边。可以将音频命名为“my-audio.wav”。

file_name = 'my-audio.wav' Audio(file_name) data = wavfile.read(file_name) framerate = data[0] sounddata = data[1] time = np.arange(0,len(sounddata))/framerate print('Sampling rate:',framerate,'Hz') input_audio, _ = librosa.load(file_name, sr=16000) input_values = tokenizer(input_audio, return_tensors="pt").input_values logits = model(input_values).logits predicted_ids = torch.argmax(logits, dim=-1) transcription = tokenizer.batch_decode(predicted_ids)[0] print(transcription)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485