Facebook 發布 wav2letter 工具包,用於端到端自動語音識別

2020-12-06 雷鋒網

雷鋒網 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/intel64MKL_DIR=/opt/intel/mkl/lib/intel64MKL_INC_DIR=/opt/intel/mkl/includeif [ ! -d "$INTEL_DIR" ]; then echo "$ warning: INTEL_DIR out of date"fiif [ ! -d "$MKL_DIR" ]; then echo "$ warning: MKL_DIR out of date"fiif [ ! -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_DIRexport CMAKE_LIBRARY_PATH=$LD_LIBRARY_PATHexport 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-rocksmkdir build; cd buildcmake .. -DCMAKE_INSTALL_PREFIX=$HOME/usr -DWITH_LUAJIT21=OFFmake -j 4make installcd ../..

接下來,我們假定 luarocks 和 luajit 被安裝在 $PATH 下,如果你把它們安裝在 $HOME/usr 下了,可以執行 ~/usr/bin/luarocks 和 ~/usr/bin/luajit 這兩段代碼。

KenLM 語言模型工具包

如果你想採用 wav2letter decoder,需要安裝 KenLM。

這裡需要用到 Boost:

# make sure boost is installed (with system/thread/test modules)# actual command might vary depending on your systemsudo apt-get install libboost-dev libboost-system-dev libboost-thread-dev libboost-test-dev

Boost 安裝之後就可以安裝 KenLM 了:

wget https://kheafield.com/code/kenlm.tar.gztar xfvz kenlm.tar.gzcd kenlmmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=$HOME/usr -DCMAKE_POSITION_INDEPENDENT_CODE=ONmake -j 4make installcp -a lib/* ~/usr/lib # libs are not installed by default :(cd ../..

OpenMPITorchMPI

如果計劃用到多 CPU/GPU(或者多設備),需要安裝 OpenMPI 和 TorchMPI

免責聲明:我們非常鼓勵大家重新編譯 OpenMPI。標準發布版本中的 OpenMPI 二進位文件編譯標記不一致,想要成功編譯和運行 TorchMPI,確定的編譯標記至關重要。

先安裝 OpenMPI:

wget https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.2.tar.bz2tar xfj openmpi-2.1.2.tar.bz2cd 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.0make -j 20 allmake 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 torchluarocks install cudnn # for GPU supportluarocks install cunn # for GPU support

wav2letter 包

git clone https://github.com/facebookresearch/wav2letter.gitcd wav2lettercd 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.gztar xfvz dev-clean.tar.gz# repeat for train-clean-100, train-clean-360, train-other-500, dev-other, test-clean, test-otherluajit ~/wav2letter/data/librispeech/create.lua ~/LibriSpeech ~/librispeech-procluajit ~/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 experimentsluajit ~/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:GitHub

雷鋒網 AI 科技評論編譯整理。

相關焦點

  • Facebook開源物體識別工具Detectron,加速計算機視覺研究
    就在2天前,紐約大學教授Yann LeCun剛剛宣布卸任Facebook人工智慧實驗室(FAIR)主任,並擔任AI首席科學家。不久前,FAIR才開源了語音識別的工具wav2letter,戳這裡看大數據文摘介紹《快訊 | Facebook開源語音識別工具包wav2letter》。
  • 語音識別新範式:完全的「端到端」模型,優勢在哪裡?
    語音識別新範式以自然語言處理的子領域「語音識別」為例,從 2012 年引入深度學習技術開始,語音識別的研究熱點經歷了三個階段:2011年前後,基於 DNN+HMM(深度神經網絡+隱馬爾科夫模型)的語音識別 2014年前後,基於 LSTM+CTC(長短時記憶網絡+連接時序分類)的不完全端到端語音識別
  • 百度ICML論文:端對端中英文語音識別
    簡介幾十年來手工設計領域積累的知識已經進入最先進的自動語音識別(ASR)等的管道。一個簡單但有效的替代解決方案是訓練出端對端語音自動識別模式,使用深度學習的方法用一個模型來代替大多數模式。如同Hannun et al., 2014a and Graves & Jaitly, 2014b在他們的論文所提及一樣。
  • 專注E2E語音識別,騰訊AILab開源語音處理工具包PIKA
    機器之心報導作者:魔王、杜偉PyTorch + Kaldi,騰訊 AI Lab 開源輕量級語音處理工具包 PIKA,專注於端到端語音識別任務。Kaldi 是一個開源的語音識別系統,由 Daniel Povey 主導開發,在很多語音識別測試和應用中廣泛使用。
  • 語音識別第一課:基於Tensorflow的端到端語音識別技術
    全文共6655字,預計學習時長13分鐘本文闡述了如何利用Tensorflow編寫一個基本的端到端自動語音識別(Automatic Speech Recognition,ASR)系統,詳細介紹了最小神經網絡的各個組成部分以及可將音頻轉為可讀文本的前綴束搜索解碼器。
  • 端到端聲源分離研究:現狀、進展和未來
    (圖1)目前,端到端音源分離已經有了一些在時域和頻域上的研究,羅藝老師以「WSJ0-2mix」數據集為例,並以在語音分離任務中使用十分廣泛的SI-SDR為指標,為我們展示了目前端到端音源分離研究的進展。
  • 智能語音識別技術入門系列(上)
    本系列文章開始,我們將一起探索自動識別、語言處理技術所包含的核心算法、模型及未來的發展趨勢。本篇文章我們主要討論語音識別的基本概念。並理解語音識別技術的流程。(一) 自動語音識別技術ASR自動語音識別,簡稱ASR。
  • Facebook開源TTS神經網絡VoiceLoop:基於室外聲音的語音合成
    與其他文本轉語音的系統不同,我們的解決方案能夠處理公眾演講中獲取的非約束樣本(unconstrained sample)。該網絡架構比現有的架構簡單,基於新型的移位緩衝工作儲存器(shifting buffer working memory)。同樣的緩衝用於評估注意力、計算輸出音頻以及更新緩衝。
  • 橫評:五款免費開源的語音識別工具
    為此,我們對比了五款基於 HMM 和 N-gram 模型的語音識別工具:CMU Sphinx,Kaldi,HTK,Julius 和 ISIP。它們都是開源世界的頂級項目,與 Dragon 和 Cortana 等商業語音識別工具不同,這些開源、免費的工具可以為開發者提供更大的自由度以及更低的開發成本,因此在開發圈始終保持著強大的生命力。
  • 應用、算法、晶片,「三位一體」淺析語音識別
    但是在智能問答方面,Echo表現一般,Google以此為突破口,發布Google Home,從亞馬遜手中搶奪23.8%的智能音箱市場份額。2017年9月,亞馬遜發布了多款Echo二代產品,相比一代在音質上有明顯的提升,且Echo Plus具備更加強大的家居控制功能,能夠自動搜索到附件的智能家居設備,並進行控制。
  • 基於DeepSpeech2實現中文語音識別,實施全流程講解,拿來即用
    你是否在苦苦尋找能識別中文的語音識別模型?那認真看完本文,你也能實現,本文可能為您節省少則幾小時多則數天的工作時間。DeepSpeech2由百度矽谷AI實驗室在2015年發布,是一個採用PaddlePaddle深度學習框架實現的端到端自動語音識別系統,它能通過簡單學習算法較準確的識別英語和中文。
  • 基於語音識別的移動電子病歷應用探索
    隨著網際網路的快速發展、移動終端的普及應用,藉助人工智慧、數據挖掘等信息技術,語音識別技術得到了突飛猛進的發展。特別是在醫療領域,語音識別技術在歐美國家醫院已得到了廣泛應用,主要用於醫療文書的錄入,節省醫生的錄入時間,將更多的時間留給醫生與患者溝通交流。而這幾年在中國醫院,語音識別的應用也得到了深入的探索與研究,但由於醫生使用習慣、錄入識別率等因素影響,並未廣泛地開展起來。
  • Shopify工具介紹:Facebook messenger使用方法-雨果網
    Messenger 是一款類似微信的即時通信 APP,是Facebook衍生出來的獨立產品, 支持消息發送功能,包括交換照片、視頻、表情包、音頻和文件,支持語音和視頻通話,同時具備端到端加密的對話以及小遊戲的功能。 2019年5月初,Facebook舉行了2019年F8開發者大會。
  • 構建端到端ML框架的經歷啟示錄
    為什麼需要端到端ML框架大多數人(Cortex貢獻者)都有devops和web開發的背景,他們習慣於將應用程式的不同層抽象成單一接口的框架。每個剛剛開始學習機器學習的人,都會感慨工具的脫節。雖然有些問題歸結於設計,但很大一部分問題實際上是構建端到端工具的固有問題——只是在構建之後才發現。端到端ML框架的問題簡單地說,機器學習生態系統產品對於端到端框架來說尚未成熟。ML工程師希望使用更好的UX工具,這當然無可厚非。
  • 使用Python和Keras創建簡單語音識別引擎
    得益於深度學習方面令人難以置信的最新進展,計算機也可以從經驗中學習理解語音。語音識別通過聲學和語言建模使用算法來工作。聲學建模表示語音和音頻信號的語言單元之間的關係;語言建模將聲音與單詞序列進行匹配,以幫助區分聽起來相似的單詞。通常,基於循環層的深度學習模型用於識別語音中的時間模式,以提高系統內的準確性。也可以使用其他方法,例如隱馬爾可夫模型(第一個語音識別算法是使用這種方法)。
  • 語音識別揭秘:你的手機究竟有多理解你?
    在語音識別中,豐富的樣本數據是推動系統性能快速提升的重要前提,但是語料的標註需要長期的積累和沉澱,大規模語料資源的積累需要被提高到戰略高度。今天,語音識別在移動端和音箱的應用上最為火熱,語音聊天機器人、語音助手等軟體層出不窮。許多人初次接觸語音識別可能歸功於蘋果手機的語音助手Siri。
  • 連接C端用戶、B端企業,騰訊雲服務金融的四層次
    在王慧星看來,金融機構的數位化全面建設和轉型可以分為兩個層次:一是在零售金融,與C端用戶建立數位化的交互和連接;二是在B端通過技術平臺和產品業務合作類的平臺,進行金融和企業的互聯。他表示,騰訊云為金融行業提供的解決方案是全場景的。
  • Facebook AI 年度總結來啦
    2018 年,我們希望給 PyTorch 社區提供一套更統一的工具,重點是將他們的人工智慧實驗轉化為生產就緒的應用程式。我們在 2018 年 5 月的第 8 次會議上宣布了框架的更新,詳細說明了它如何集成 Caffe2(https://caffe2.ai/) 的模塊化、面向生產的功能以及新擴展的 ONNX,以簡化從原型系統到部署的整個 AI 開發流程。
  • AI浪潮下,語音識別建模技術的演進 | 雷鋒網公開課
    搜狗知音引擎是搜狗公司自主研發的一項專注於自然交互的智能語音技術,於2016年8月3日正式對外發布,該技術集合了語音識別、語義理解、語音交互、以及提供服務等多項功能,不僅能聽會說,還能理解會思考, 本文將結合知音引擎中語音識別建模技術的使用來為大家講解。
  • 科普丨一文看懂語音識別的技術原理
    簡要給大家介紹一下語音怎麼變文字的吧。希望這個介紹能讓所有同學看懂。首先,我們知道聲音實際上是一種波。常見的mp3、wmv等格式都是壓縮格式,必須轉成非壓縮的純波形文件來處理,比如Windows PCM文件,也就是俗稱的wav文件。wav文件裡存儲的除了一個文件頭以外,就是聲音波形的一個個點了。