使用深度语音的语音到文本转录模型
语音转文字模型使用户在使用在线语音服务时更加舒适。企业现在可以在其运营中使用语音识别模型。
语音转文字是自然语言处理的一个子集,用于将语音转换成文字。语音可能是视频或音频文件的形式。该模型分析语音并将其转换为相应的文本。
语音转文本模型被应用于各个领域,如:
- 音频和视频文件中的字幕生成。
- 医疗部门将口语转换为文本。
- 在线语音服务。它被应用于使用在线客户支持的企业。
- 自动生成word文档。使用音频和制作word文档,而不是打字。
语音转文字模型使用户在使用在线语音服务时更加舒适。企业现在可以在其业务中使用语音识别模型。
在本教程中,我们将使用Deep Speech库来建立模型。Deep Speech将数字音频或视频文件作为输入并输出文本。
前提条件
要跟上本教程,读者应该。
- 熟悉[Python编程]。
- 理解[机器学习模型]。
- 使用[谷歌Colab笔记本]。
转录模型的类型
在语音到文本转录中,我们有两种类型的模型。流式转录和批量流。
流式转录
这是一种处理实时音频或视频文件的转录类型。在流式转录中,它把输入的音频分成几块。然后该模型在处理音频时实时输出转录的文本。当你有现场活动而你想要实时转录的文本时,它是有效的。
流媒体转录可应用于以下领域。
- 现场播客、网络研讨会和视频。
- 实时在线活动和电话会议。
- 实时电话。
批量流媒体
这是一种处理离线音频和视频文件的转录类型。当我们有大量录制的视频和音频文件时,它最适合。该模型只在完成处理后产生转录的文本。
在本教程中,我们将处理音频数据的流式转录。
开始使用Deep Speech
Deep Speech是一个用于语音到文本转录的库。Deep Speech库使用深度学习神经网络。它将语音谱图转换为文本转录。Deep Speech是使用TensorFlow框架构建的。我们使用以下命令来安装Deep Speech。
!pip install deepspeech==0.8.2
在上面的代码中,我们已经安装了Deep Speech的版本0.8.2 。
Deep Speech是由两个预训练的模型组成的,我们必须下载。它是由声学模型和语言模型组成的。
声学模型
它是一个预训练的模型,将原始音频转换成波形或频谱图。它分析频谱图并将其转换为相应的文本抄本。这就是用于语音识别的模型。
要下载声学模型,请运行此代码。
!wget https://github.com/mozilla/DeepSpeech/releases/download/v0.8.2/deepspeech-0.8.2-models.pbmm
语言模型
它是一个预训练的,用于微调和指导声学模型。它提炼输出文本并确保其有效。它检查句子中单词的语法和上下文关系。这增加了转录输出的准确性。
要下载语言模型,请运行此代码。
!wget https://github.com/mozilla/DeepSpeech/releases/download/v0.8.2/deepspeech-0.8.2-models.scorer
我们还需要安装一些更多的依赖项。
安装依赖性
我们将安装I/O库。I/O库是用于跨平台的音频和视频支持。这将使我们能够使用任何操作系统进行音频和视频处理。
要安装所有的I/O库,请使用这段代码。
!apt install libasound2-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg
下一步是导入我们将用于建立转录模型的包和函数。
导入重要的包
要导入必要的包和函数,使用这段代码。
from deepspeech import Model
import numpy as np
import os
import wave
from IPython.display import Audio
模型- 它是用来初始化我们下载的预训练模型的函数。它将被用来初始化下载的声学模型。
numpy- 它用于将音频文件转换为数组。它也对我们的音频文件进行数学计算。
os- 它使我们能够与操作系统互动。它将使我们能够在笔记本中执行核心操作功能
wave- 这个库使我们能够读取WAV 的音频格式。
IPython.display- 这将使我们能够在Google Colab笔记本中显示和播放音频文件。
添加模型文件路径
我们添加声学和语言的文件路径,以便我们能够使用它们。
model_file_path = 'deepspeech-0.8.2-models.pbmm'
lm_file_path = 'deepspeech-0.8.2-models.scorer'
添加完文件路径后,我们还要初始化以下内容。
beam_width = 100
lm_alpha = 0.93
lm_beta = 1.18
在上面的代码中beam_width ,用来格式化我们的音频文件,使其易于使用。lm_alpha 和lm_beta 指定了我们的语言模型的alpha和beta版本。
接下来,我们现在把上面的参数添加到我们的模型中。
初始化模型
我们使用下面的代码。
model = Model(model_file_path)
model.enableExternalScorer(lm_file_path)
model.setScorerAlphaBeta(lm_alpha, lm_beta)
model.setBeamWidth(beam_width)
在上面的代码中,我们已经添加了声学和语言模型,以便我们可以开始使用它们。我们已经添加了我们的语言模型的alpha和beta版本。
模拟流媒体音频
音频数据将被分割成若干块。这模拟了从实时录音中收到的数据。这将使我们能够实现实时转录。
stream = model.createStream()
下一步是创建一个用于读取音频文件的函数。
读取音频文件的函数
该函数是用以下代码创建的。
def read_audio_file(filename):
with wave.open(filename, 'rb') as w:
rate = w.getframerate()
frames = w.getnframes()
buffer = w.readframes(frames)
return buffer, rate
使用的函数被命名为read_audio_file 。我们在这个模型中使用的音频文件是WAV 音频格式。wave.open 方法将被用来读取WAV 音频文件。
该函数还指定了音频帧率和帧数。这已经用getframerate() 和getnframes() 方法完成。buffer 变量将保存最后的音频块。
我们现在需要创建另一个函数,用来执行转录。
执行转录的函数
这个函数是用以下代码创建的。
def real_time_transcription(audio_file):
buffer, rate = read_audio_file(audio_file)
offset=0
batch_size=8196
text=''
while offset < len(buffer):
end_offset=offset+batch_size
chunk=buffer[offset:end_offset]
data16 = np.frombuffer(chunk, dtype=np.int16)
stream.feedAudioContent(data16)
text=stream.intermediateDecode()
print(text)
offset=end_offset
return True
使用的函数被命名为real_time_transcription 。我们将buffer 和rate 作为参数传递。我们还添加了read_audio_file 函数,用于读取WAV 的音频文件。我们设置batch_size=8196 ,批量大小代表音频的大小。一个破碎的音频块将是8196字节。
该函数也有一个while 循环。while 循环是用来循环播放音频文件的。在每个循环中,它把音频文件分成所需的大小(8196字节)。
feedAudioContent 方法将音频块送入模型进行转录。intermediateDecode() 将对模型的输出进行解码并产生相应的文本。最后,该函数将返回结果并打印转录的文本。
在我们调用这个函数之前,我们需要下载一个模型将使用的样本音频文件。
下载一个音频文件
要下载音频文件,使用以下命令。
!wget -O speech.wav https://github.com/EN10/DeepSpeech/blob/master/man1_wb.wav?raw=true
要查看音频文件是否已被添加到我们的工作目录中,使用这个命令。
!ls
输出显示如下。

从上面的图片来看,工作目录中有两个模型(声学和语言模型)。它还显示下载的音频文件保存为speech.wav 。
播放音频文件
要在Google Colab中播放音频文件,请使用这段代码。
Audio('speech.wav')
当我们运行这段代码时,它将提供一个界面,允许你在Google Colab中播放音频。该界面如下图所示。

该界面有一个播放按钮,我们可以按下该按钮并收听音频。当我们调用real_time_transcription 函数时,我们将传递speech.wav 作为一个参数。
调用该函数
要调用real_time_transcription 函数,请运行这段代码。
real_time_transcription('speech.wav')
这段代码将实时产生一个文本转录。其输出结果如下所示。

从上面的输出,我们可以看到该模型能够进行实时转录。随着音频处理的继续,该模型产生了一个逐位的输出。声学和语言模型产生了一个准确的转录。
总结
在本教程中,我们已经学会了如何使用Deep Speech做流式转录。我们讨论了转录模型的类型。我们探索了预训练的Deep Speech模型的类型。我们使用声学和语言模型来建立一个能够进行实时转录的模型。