Facebook开源端到端自动语音识别系统wav2letter

1,208 阅读2分钟
本文由 「AI前线」原创,原文链接:Facebook开源端到端自动语音识别系统wav2letter
译者|薛命灯
编辑|Natalie

wav2letter 是由 Facebook AI 研究团队开源的一款简单而高效的端到端自动语音识别系统,它实现了在 WavLetter:an End-to-End ConvNet-based Speed Recognition System 和 Letter-Based Speech Recognition with Gated ConvNets 这两篇论文中提到的架构。

论文地址:

(1)WavLetter:an End-to-End ConvNet-based Speed Recognition System

arxiv.org/abs/1609.03…

(2)Letter-Based Speech Recognition with Gated ConvNets

arxiv.org/abs/1712.09…


论文引述

如果要使用 wav2letter 或相关的预训练模型,请引述下面两篇论文。


运行需求

  • 一台运行 MacOS 或 Linux 的电脑。
  • Torch 框架。
  • 在 CPU 上训练:Intel MKL。
  • 在 GPU 上训练:NVIDIA CUDA Toolkit(cuDNN v5.1 for CUDA 8.0)。
  • 读取声音文件:Libsndfile。
  • 标准语音特征:FFTW。

安装

MKL

如果打算在 CPU 上训练,强烈建议安装 Intel MKL。

修改.bashrc 文件,加入如下内容:

LuaJIT 和 LuaRocks

下面将 LuaJIT 和 LuaRocks 安装在 $HOME/user 目录,如果要在系统级别安装,请去掉 DCMAKE_INSTALL_PREFIX=$HOME/user 选项。

下面我们假设 luarocks 和 luajit 已经被包含在 $PATH 中,如果没有,那么请用正确的路径调用 luarocks 和 luajit。假设它们安装在 $HOME/usr 目录,那么请调用~/usr/bin/luarocks 和~/usr/bin/luajit。

KenLM 语言模型工具

如果要使用 wav2letter 解码器,需要安装 KenLM,而安装 KenLM 需要使用 Boost。


OpenMPI 和 TorchMPI

如果你要使用多个 CPU/GPU(或多台机器)训练模型,就需要 OpenMPI 和 TorchMPI。

提示:建议重新编译 OpenMPI,因为标准发行版使用了大量可变的编译标签,某些标签对于成功运行 TorchMPI 来说是至关重要的。

首先安装 OpenMPI:

注意:可以使用 openmpi-3.0.0.tar.bz2,但需要移除—enable-mpi-thread-multiple 选项。

现在可以安装 TorchMPI 了:

Torch 及其他库

wav2letter 包


训练 wav2letter 模型

数据预处理

数据目录包含了一些用于预处理各种数据集的脚本,目前只提供了 LibriSpeech 和 TIMIT。

下面是如何预处理 LibriSpeech ASR 语料库的例子:

训练

在多 GPU 上训练

使用 OpenMPI 来启动多个训练进程,每个 GPU 运行一个,我们假设 mpirun 已经包含在 $PATH 路径中。

运行解码器(推理)

在运行解码器之前,我们需要做一些预处理。

首先,创建字母词典,包括在 wav2letter 中使用的重复字母。

这样我们就有了语言模型,然后对它进行预处理。在这里,我们使用预训练的 LibriSpeech 语言模型,当然,我们也可以使用 KenLM 来训练其他模型。然后我们将单词转成小写,并为它们生成音标。预处理脚本可能会发出一些警告,告诉你有些单词因为重复字母(这里是 2,因为使用了参数 -r 2)而无法正确生成音标,不过这种情况很少见,所以在我们看来不是什么问题。

注意:我们也可以使用 4gram.arpa.gz,不过它需要更长的预处理的时间。

额外步骤:使用 KenLM 将模型转换成二级制的文件可以加快后续的加载速度,我们假设 KenLM 已经被包含在 $PATH 中:

现在,我们在数据集上运行 test.lua。这个脚本还会显示字母错误率(Letter Error Rate)和单词错误率(Word Error Rate)——后者没有使用后处理的声学模型进行计算。

接下来运行解码器:


预训练模型

我们提供了用于 LibriSpeech 的预训练模型:

要使用预训练模型,需要执行 README 中提到的安装和解码步骤。

注意:预训练模型是基于 Facebook 的基础设施进行训练的,所以在运行时需要给 test.lua 传入适当的参数:

更多干货内容,可关注AI前线,ID:ai-front,后台回复「AI」、「TF」、「大数据」可获得《AI前线》系列PDF迷你书和技能图谱。