Facebook開源端到端自動語音識別系統wav2letter

AI前線發表於2018-01-05
本文由 「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 或相關的預訓練模型,請引述下面兩篇論文。

Facebook開源端到端自動語音識別系統wav2letter
Facebook開源端到端自動語音識別系統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 檔案,加入如下內容:

Facebook開源端到端自動語音識別系統wav2letter

LuaJIT 和 LuaRocks

下面將 LuaJIT 和 LuaRocks 安裝在 $HOME/user 目錄,如果要在系統級別安裝,請去掉 DCMAKE_INSTALL_PREFIX=$HOME/user 選項。

Facebook開源端到端自動語音識別系統wav2letter

下面我們假設 luarocks 和 luajit 已經被包含在 $PATH 中,如果沒有,那麼請用正確的路徑呼叫 luarocks 和 luajit。假設它們安裝在 $HOME/usr 目錄,那麼請呼叫~/usr/bin/luarocks 和~/usr/bin/luajit。

KenLM 語言模型工具

如果要使用 wav2letter 解碼器,需要安裝 KenLM,而安裝 KenLM 需要使用 Boost。

Facebook開源端到端自動語音識別系統wav2letter


OpenMPI 和 TorchMPI

如果你要使用多個 CPU/GPU(或多臺機器)訓練模型,就需要 OpenMPI 和 TorchMPI。

提示:建議重新編譯 OpenMPI,因為標準發行版使用了大量可變的編譯標籤,某些標籤對於成功執行 TorchMPI 來說是至關重要的。

首先安裝 OpenMPI:

Facebook開源端到端自動語音識別系統wav2letter

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

現在可以安裝 TorchMPI 了:

Facebook開源端到端自動語音識別系統wav2letter

Torch 及其他庫

Facebook開源端到端自動語音識別系統wav2letter

wav2letter 包

Facebook開源端到端自動語音識別系統wav2letter


訓練 wav2letter 模型

資料預處理

資料目錄包含了一些用於預處理各種資料集的指令碼,目前只提供了 LibriSpeech 和 TIMIT。

下面是如何預處理 LibriSpeech ASR 語料庫的例子:

Facebook開源端到端自動語音識別系統wav2letter

訓練

Facebook開源端到端自動語音識別系統wav2letter

在多 GPU 上訓練

使用 OpenMPI 來啟動多個訓練程式,每個 GPU 執行一個,我們假設 mpirun 已經包含在 $PATH 路徑中。

Facebook開源端到端自動語音識別系統wav2letter

執行解碼器(推理)

在執行解碼器之前,我們需要做一些預處理。

首先,建立字母詞典,包括在 wav2letter 中使用的重複字母。

Facebook開源端到端自動語音識別系統wav2letter

這樣我們就有了語言模型,然後對它進行預處理。在這裡,我們使用預訓練的 LibriSpeech 語言模型,當然,我們也可以使用 KenLM 來訓練其他模型。然後我們將單詞轉成小寫,併為它們生成音標。預處理指令碼可能會發出一些警告,告訴你有些單詞因為重複字母(這裡是 2,因為使用了引數 -r 2)而無法正確生成音標,不過這種情況很少見,所以在我們看來不是什麼問題。

Facebook開源端到端自動語音識別系統wav2letter

注意:我們也可以使用 4gram.arpa.gz,不過它需要更長的預處理的時間。

額外步驟:使用 KenLM 將模型轉換成二級制的檔案可以加快後續的載入速度,我們假設 KenLM 已經被包含在 $PATH 中:

Facebook開源端到端自動語音識別系統wav2letter

現在,我們在資料集上執行 test.lua。這個指令碼還會顯示字母錯誤率(Letter Error Rate)和單詞錯誤率(Word Error Rate)——後者沒有使用後處理的聲學模型進行計算。

Facebook開源端到端自動語音識別系統wav2letter

接下來執行解碼器:

Facebook開源端到端自動語音識別系統wav2letter


預訓練模型

我們提供了用於 LibriSpeech 的預訓練模型:

Facebook開源端到端自動語音識別系統wav2letter

要使用預訓練模型,需要執行 README 中提到的安裝和解碼步驟。

注意:預訓練模型是基於 Facebook 的基礎設施進行訓練的,所以在執行時需要給 test.lua 傳入適當的引數:

Facebook開源端到端自動語音識別系統wav2letter

更多幹貨內容,可關注AI前線,ID:ai-front,後臺回覆「AI」、「TF」、「大資料」可獲得《AI前線》系列PDF迷你書和技能圖譜。


相關文章