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

2018 年 1 月 4 日 AI前线 紧跟开源信息的
译者|薛命灯
编辑|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

https://arxiv.org/abs/1609.03193

(2)Letter-Based Speech Recognition with Gated ConvNets

https://arxiv.org/abs/1712.09444

论文引述

如果要使用 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 文件,加入如下内容:

# 我们假设 Torch 安装在 $HOME/usr 目录.
export PATH=$HOME/usr/bin:$PATH

# 在编译期间检测 MKL
# 同时确保在运行时也能找到它
INTEL_DIR=/opt/intel/lib/intel64
MKL_DIR=/opt/intel/mkl/lib/intel64
MKL_INC_DIR=/opt/intel/mkl/include

if [ ! -d "$INTEL_DIR" ]; then
  echo "$ warning: INTEL_DIR out of date"
fi
if [ ! -d "$MKL_DIR" ]; then
  echo "$ warning: MKL_DIR out of date"
fi
if [ ! -d "$MKL_INC_DIR" ]; then
  echo "$ warning: MKL_INC_DIR out of date"
fi

# 确保 Torch 可以找到 MKL
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$INTEL_DIR:$MKL_DIR
export CMAKE_LIBRARY_PATH=$LD_LIBRARY_PATH
export CMAKE_INCLUDE_PATH=$CMAKE_INCLUDE_PATH:$MKL_INC_DIR
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 了:

MPI_CXX_COMPILER=$HOME/usr/bin/mpicxx ~/usr/bin/luarocks install torchmpi
Torch 及其他库
luarocks install torch
luarocks install cudnn # 支持 GPU
luarocks install cunn # 支持 GPU
wav2letter 包

训练 wav2letter 模型
数据预处理

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

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

训练

在多 GPU 上训练

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

运行解码器(推理)

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

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

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

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

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

build_binary 3-gram.pruned.3e-7.arpa 3-gram.pruned.3e-7.bin

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

接下来运行解码器:

预训练模型

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

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

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


登录查看更多
1

相关内容

【Google】无监督机器翻译,Unsupervised Machine Translation
专知会员服务
35+阅读 · 2020年3月3日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
开源自动语音识别系统wav2letter (附实现教程)
七月在线实验室
9+阅读 · 2018年1月8日
快讯 | Facebook开源语音识别工具包wav2letter
大数据文摘
6+阅读 · 2018年1月2日
深度学习人脸检测和识别系统 DFace | 软件推介
开源中国
7+阅读 · 2017年12月9日
一文读懂语音识别史
机械鸡
9+阅读 · 2017年10月16日
语音识别之--扑朔迷“离”
微信AI
6+阅读 · 2017年8月9日
Arxiv
6+阅读 · 2020年4月14日
Arxiv
8+阅读 · 2018年11月27日
Arxiv
6+阅读 · 2018年7月29日
Arxiv
4+阅读 · 2016年9月20日
VIP会员
相关VIP内容
【Google】无监督机器翻译,Unsupervised Machine Translation
专知会员服务
35+阅读 · 2020年3月3日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
相关资讯
开源自动语音识别系统wav2letter (附实现教程)
七月在线实验室
9+阅读 · 2018年1月8日
快讯 | Facebook开源语音识别工具包wav2letter
大数据文摘
6+阅读 · 2018年1月2日
深度学习人脸检测和识别系统 DFace | 软件推介
开源中国
7+阅读 · 2017年12月9日
一文读懂语音识别史
机械鸡
9+阅读 · 2017年10月16日
语音识别之--扑朔迷“离”
微信AI
6+阅读 · 2017年8月9日
Top
微信扫码咨询专知VIP会员