Facebook 发布 wav2letter 工具包,用于端到端自动语音识别

AI 研习社消息,日前, Facebook 人工智能研究院发布 wav2letter 工具包,它是一个简单高效的端到端自动语音识别(ASR)系统,实现了 Wav2Letter: an End-to-End ConvNet-based Speech Recognition System 和 Letter-Based Speech Recognition with Gated ConvNets 这两篇论文中提出的架构。如果大家想现在就开始使用这个工具进行语音识别,Facebook 提供 Librispeech 数据集的预训练模型。

以下为对系统的要求,以及这一工具的安装教程, AI 研习社整理如下:

安装要求:

系统:MacOS 或 Linux

Torch:接下来会介绍安装教程

在 CPU 上训练:Intel MKL

在 GPU 上训练:英伟达 CUDA 工具包 (cuDNN v5.1 for CUDA 8.0)

音频文件读取:Libsndfile

标准语音特征:FFTW

安装:

MKL

如果想在 CPU 上进行训练,强烈建议安装 Intel MKL

执行如下代码更新 .bashrc file

# We assume Torch will be installed in $HOME/usr.

# Change according to your needs.

export PATH=$HOME/usr/bin:$PATH



# This is to detect MKL during compilation

# but also to make sure it is found at runtime.

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



# Make sure MKL can be found by Torch.

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

执行如下代码可以在 $HOME/usr 下安装 LuaJIT 和 LuaRocks,如果你想要进行系统级安装,删掉代码中的 -DCMAKE_INSTALL_PREFIX=$HOME/usr 即可。

git clone https://github.com/torch/luajit-rocks.git

cd luajit-rocks
mkdir build; cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/usr -DWITH_LUAJIT21=OFF
make -j 4
make install

cd ../..

接下来,我们假定 luarocks 和 luajit 被安装在 $PATH 下,如果你把它们安装在 $HOME/usr 下了,可以执行 ~/usr/bin/luarocks 和 ~/usr/bin/luajit 这两段代码。

KenLM 语言模型工具包(https://kheafield.com/code/kenlm)

如果你想采用 wav2letter decoder,需要安装 KenLM。

这里需要用到 Boost:

# make sure boost is installed (with system/thread/test modules)

# actual command might vary depending on your system

sudo apt-get install libboost-dev libboost-system-dev libboost-thread-dev libboost-test-dev

Boost 安装之后就可以安装 KenLM 了:

wget https://kheafield.com/code/kenlm.tar.gz
tar xfvz kenlm.tar.gzcd kenlm
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/usr -DCMAKE_POSITION_INDEPENDENT_CODE=ON
make -j 4
make install
cp -a lib/* ~/usr/lib # libs are not installed by default :(cd ../..

OpenMPI (https://www.open-mpi.org/)和 TorchMPI(https://github.com/facebookresearch/TorchMPI)

如果计划用到多 CPU/GPU(或者多设备),需要安装 OpenMPI 和 TorchMPI

免责声明:我们非常鼓励大家重新编译 OpenMPI。标准发布版本中的 OpenMPI 二进制文件编译标记不一致,想要成功编译和运行 TorchMPI,确定的编译标记至关重要。

先安装 OpenMPI:

wget https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.2.tar.bz2
tar xfj openmpi-2.1.2.tar.bz2

cd openmpi-2.1.2; mkdir build; cd build
./configure --prefix=$HOME/usr --enable-mpi-cxx --enable-shared --with-slurm --enable-mpi-thread-multiple --enable-mpi-ext=affinity,cuda --with-cuda=/public/apps/cuda/9.0
make -j 20 all
make install

注意:也可以执行 openmpi-3.0.0.tar.bz2,但需要删掉 --enable-mpi-thread-multiple。

接下来可以安装 TorchMPI 了:

MPI_CXX_COMPILER=$HOME/usr/bin/mpicxx ~/usr/bin/luarocks install torchmpi

Torch 和其他 Torch 包

luarocks install torch
luarocks install cudnn # for GPU supportluarocks install cunn # for GPU support

wav2letter 包

git clone https://github.com/facebookresearch/wav2letter.git
cd wav2letter
cd gtn && luarocks make rocks/gtn-scm-1.rockspec && cd ..
cd speech && luarocks make rocks/speech-scm-1.rockspec && cd ..
cd torchnet-optim && luarocks make rocks/torchnet-optim-scm-1.rockspec && cd ..
cd wav2letter && luarocks make rocks/wav2letter-scm-1.rockspec && cd ..
# Assuming here you got KenLM in $HOME/kenlm
# And only if you plan to use the decoder:
cd beamer && KENLM_INC=$HOME/kenlm luarocks make rocks/beamer-scm-1.rockspec && cd ..

训练 wav2letter 模型

数据预处理

数据文件夹中有预处理不同数据集的多个脚本,现在我们只提供预处理 LibriSpeech 和 TIMIT 数据集的脚本。

下面是预处理 LibriSpeech ASR 数据集的案例:

wget http://www.openslr.org/resources/12/dev-clean.tar.gz
tar xfvz dev-clean.tar.gz

# repeat for train-clean-100, train-clean-360, train-other-500, dev-other, test-clean, test-other

luajit ~/wav2letter/data/librispeech/create.lua ~/LibriSpeech ~/librispeech-proc
luajit ~/wav2letter/data/utils/create-sz.lua librispeech-proc/train-clean-100 librispeech-proc/train-clean-360 librispeech-proc/train-other-500 librispeech-proc/dev-clean librispeech-proc/dev-other librispeech-proc/test-clean librispeech-proc/test-other

训练

mkdir experiments
luajit ~/wav2letter/train.lua --train -rundir ~/experiments -runname hello_librispeech -arch ~/wav2letter/arch/librispeech-glu-highdropout -lr 0.1 -lrcrit 0.0005 -gpu 1 -linseg 1 -linlr 0 -linlrcrit 0.005 -onorm target -nthread 6 -dictdir ~/librispeech-proc  -datadir ~/librispeech-proc -train train-clean-100+train-clean-360+train-other-500 -valid dev-clean+dev-other -test test-clean+test-other -gpu 1 -sqnorm -mfsc -melfloor 1 -surround "|" -replabel 2 -progress -wnorm -normclamp 0.2 -momentum 0.9 -weightdecay 1e-05

多 GPU 训练

利用 OpenMPI

mpirun -n 2 --bind-to none  ~/TorchMPI/scripts/wrap.sh luajit ~/wav2letter/train.lua --train -mpi -gpu 1 ...

运行 decoder(推理阶段)

为了运行 decoder,需要做少量预处理。

首先创建一个字母词典,其中包括在 wav2letter 中用到的特殊重复字母:

cat ~/librispeech-proc/letters.lst >> ~/librispeech-proc/letters-rep.lst && echo "1" >> ~/librispeech-proc/letters-rep.lst && echo "2" >> ~/librispeech-proc/letters-rep.lst

然后将得到一个语言模型,并对这个模型进行预处理。这里,我们将使用预先训练过的 LibriSpeech 语言模型,大家也可以用 KenLM 训练自己的模型。然后,我们对模型进行预处理,脚本可能会对错误转录的单词给予警告,这不是什么大问题,因为这些词很少见。

wget http://www.openslr.org/resources/11/3-gram.pruned.3e-7.arpa.gz luajit

~/wav2letter/data/utils/convert-arpa.lua ~/3-gram.pruned.3e-7.arpa.gz ~/3-gram.pruned.3e-7.arpa ~/dict.lst -preprocess ~/wav2letter/data/librispeech/preprocess.lua -r 2 -letters letters-rep.lst

可选项:利用 KenLM 将模型转换成二进制格式,加载起来将会更快。

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

现在运行 test.lua lua,可以生成 emission。下面的脚本可以显示出字母错误率 (LER) 和单词错误率 (WER)。

luajit ~/wav2letter/test.lua ~/experiments/hello_librispeech/001_model_dev-clean.bin -progress -show -test dev-clean -save

一旦存储好 emission,可以执行 decoder 来计算 WER:

luajit ~/wav2letter/decode.lua ~/experiments/hello_librispeech dev-clean -show -letters ~/librispeech-proc/letters-rep.lst  -words ~/dict.lst -lm ~/3-gram.pruned.3e-7.arpa -lmweight 3.1639 -beamsize 25000 -beamscore 40 -nthread 10 -smearing max -show

预训练好的模型:

我们提供训练充分的 LibriSpeech 模型:

wget https://s3.amazonaws.com/wav2letter/models/librispeech-glu-highdropout.bin

注意:该模型是在 Facebook 的框架下训练好的,因此需要用稍微不同的参数来运行 test.lua

luajit ~/wav2letter/test.lua ~/librispeech-glu-highdropout.bin -progress -show -test dev-clean -save -datadir ~/librispeech-proc/ -dictdir ~/librispeech-proc/ -gfsai

大家可以加入 wav2letter 社群

Facebook:https://www.facebook.com/groups/717232008481207/

Google 社群:https://groups.google.com/forum/#!forum/wav2letter-users

via:https://github.com/facebookresearch/wav2letter

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-01-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

ONOS:负载均衡路由算法及应用开发(一)

一、应用介绍 当新流量发起时,本应用将为其选择一条路由路径,这条路径具有全局负载均衡意义上的最小权值(Weight/Cost)。 本应用即将开源在笔者的Gith...

38870
来自专栏mantou大数据

【元数据管理】Atlas术语(Glossary)

Atlas的术语表(Glossary)提供了一些适当的“单词”,这些“单词”能彼此进行关连和分类,以便业务用户在使用的时候,即使在不同的上下文中也能很好的理解它...

16120
来自专栏吉浦迅科技

如何在Jetson TK1上安装Caffe深度学习库

        Caffe的创造者 Yangqing Jia,最近花了些时间在NVIDIA Jetson 开发板上运行caffe框架。Jetson TK1 有1...

37270
来自专栏AI研习社

深度学习界的 “吃鸡挂”——目标检测 SSD 实验

“卧槽,又被 LYB 干了!” 背后传来一声哀嚎。 哈哈,看来,沉迷吃鸡的室友又被戒网瘾了。作为一个充满着正义的 LYB 的游戏,这人不长点眼力还真的不行啊。不...

52050
来自专栏张善友的专栏

负载均衡的基本算法

负载均衡的基本算法,主要有以下几种(参考F5产品): 随机:负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给...

31270
来自专栏机器之心

学界 | 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷

选自Github 机器之心编译 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了 Easy Machine Learning 系统,其通过交互式图...

35050
来自专栏FreeBuf

使用Python和Tesseract来识别图形验证码

各位在企业中做Web漏洞扫描或者渗透测试的朋友,可能会经常遇到需要对图形验证码进行程序识别的需求。很多时候验证码明明很简单(对于非互联网企业,或者企业内网中的应...

83450
来自专栏深度学习入门与实践

【原】python中文文本挖掘资料集合

这些网址是我在学习python中文文本挖掘时觉得比较好的网站,记录一下,后期也会不定期添加: 1.http://www.52nlp.cn/python-%E7%...

310100
来自专栏瓜大三哥

VS2详细设计(二)

DVIIN1_CLK为输入视频源的随路时钟,用于检测分辨率的时钟,行分辨率的检测从视频源的数据有效信号DVIIN1_DE的上升沿开始计数,直到DVIIN1_DE...

12230
来自专栏WeTest质量开放平台团队的专栏

UPA深度性能报告解读

UPA作为腾讯WeTest与Unity官方联合打造的客户端性能分析工具,为开发者提供了极大的便利和效能提升。产出的分析报告内容详尽,但您是否真的读懂了报告?是否...

9020

扫码关注云+社区

领取腾讯云代金券