如何使用Deep Speech做流式转录

750 阅读7分钟

使用深度语音的语音到文本转录模型

语音转文字模型使用户在使用在线语音服务时更加舒适。企业现在可以在其运营中使用语音识别模型。

语音转文字是自然语言处理的一个子集,用于将语音转换成文字。语音可能是视频或音频文件的形式。该模型分析语音并将其转换为相应的文本。

语音转文本模型被应用于各个领域,如:

  • 音频和视频文件中的字幕生成。
  • 医疗部门将口语转换为文本。
  • 在线语音服务。它被应用于使用在线客户支持的企业。
  • 自动生成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_alphalm_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 。我们将bufferrate 作为参数传递。我们还添加了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

输出显示如下。

Dowloaded audio

从上面的图片来看,工作目录中有两个模型(声学和语言模型)。它还显示下载的音频文件保存为speech.wav

播放音频文件

要在Google Colab中播放音频文件,请使用这段代码。

Audio('speech.wav')

当我们运行这段代码时,它将提供一个界面,允许你在Google Colab中播放音频。该界面如下图所示。

Audio interface

该界面有一个播放按钮,我们可以按下该按钮并收听音频。当我们调用real_time_transcription 函数时,我们将传递speech.wav 作为一个参数。

调用该函数

要调用real_time_transcription 函数,请运行这段代码。

real_time_transcription('speech.wav')

这段代码将实时产生一个文本转录。其输出结果如下所示。

Text transcription output

从上面的输出,我们可以看到该模型能够进行实时转录。随着音频处理的继续,该模型产生了一个逐位的输出。声学和语言模型产生了一个准确的转录。

总结

在本教程中,我们已经学会了如何使用Deep Speech做流式转录。我们讨论了转录模型的类型。我们探索了预训练的Deep Speech模型的类型。我们使用声学和语言模型来建立一个能够进行实时转录的模型。