voxforge.orgの音声データおよび多くのソースからオーディオモデルと言語モデルを計算するためのpythonスクリプト。構築できるモデルは次のとおりです。
重要:これらのスクリプトは、エンドユーザー消費のために準備ができている完全なアプリケーションを決して形成しないことに注意してください。ただし、自然言語処理に興味のある開発者である場合、それらのいくつかは役立つかもしれません。貢献、パッチ、プルリクエストは大歓迎です。
この執筆時点で、ここのスクリプトは、英語とドイツのVoxforgeモデルの構築に焦点を当てています。ただし、他の言語モデルを構築するためにも使用できなかった理由はありません。これらのサポートを自由に提供してください。
GH-MD-TOCによって作成されました
さまざまなモデルに加えて、ダウンロードできるこれらのモデルを構築するために使用されるツールのソースコードとバイナリがあります。すべてが無料でオープンソースです。
私たちのすべてのモデルとデータのダウンロードはこちらにあります:ダウンロード
事前に構築されたASRモデルはこちらからダウンロードできます:ASRモデル
kaldi-generic-en-tdnn_f大型NNET3鎖因数分解TDNNモデルは、〜1200時間のオーディオでトレーニングされました。まともなバックグラウンドノイズ抵抗があり、電話の録音でも使用できます。最高の精度を提供する必要がありますが、他のモデルよりもリソースが少し集中しています。kaldi-generic-en-tdnn_spラージNNET3チェーンモデル、〜1200時間のオーディオでトレーニングされています。まともなバックグラウンドノイズ抵抗があり、電話の録音でも使用できます。より正確ではありませんが、 tddn_fモデルよりもリソース集中がわずかに少なくなります。kaldi-generic-en-tdnn_250 、より大きなモデルと同じですが、リソースが集中しておらず、埋め込みアプリケーションでの使用に適しています(例:Raspberrypi 3)。kaldi-generic-en-tri2b_chain gmmモデル。上記の2つのモデルと同じデータで訓練されています。これは、自動セグメンテーションタスク用です。kaldi-generic-de-tdnn_f大型NNET3チェーンモデル、〜400時間のオーディオでトレーニングされています。まともなバックグラウンドノイズ抵抗があり、電話の録音でも使用できます。kaldi-generic-de-tdnn_250大型モデルと同じですが、リソースが集中していないため、埋め込みアプリケーションでの使用に適しています(例:Raspberrypi 3)。kaldi-generic-de-tri2b_chain gmmモデル。上記の2つのモデルと同じデータでトレーニングされています。これは、自動セグメンテーションタスク用です。w2l-generic-de大規模モデル、400時間のオーディオでトレーニングされています。まともなバックグラウンドノイズ抵抗があり、電話の録音でも使用できます。注:これらのモデルは、アプリケーションドメインに適合させることができ、また適応する必要があることを認識することが重要です。詳細については、モデルの適応を参照してください。
辞書はここからダウンロードできます:辞書
dict-en.ipa SKITUR G2Pを介して生成された多くの追加エントリを備えています。dict-de.ipa wiktionaryから抽出された多くの追加の自動レビューされたエントリを使用して、手動で手動で作成されました。 事前に構築されたG2Pモデルはこちらからダウンロードできます:G2Pモデル
sequitur-dict-en.ipa Schequitur G2Pモデルは、英語IPA辞書(UTF8)で訓練されています。sequitur-dict-de.ipa Schequitur G2Pモデルは、ドイツIPA辞書(UTF8)で訓練されています。 事前に構築されたARPA言語モデルはこちらからダウンロードできます:言語モデル
generic_en_lang_model_smallgeneric_en_lang_model_largegeneric_de_lang_model_smallgeneric_de_lang_model_large いくつかのサンプルウェーブファイルをダウンロードします
$ wget http://goofy.zamia.org/zamia-speech/misc/demo_wavs.tgz
--2018-06-23 16:46:28-- http://goofy.zamia.org/zamia-speech/misc/demo_wavs.tgz
Resolving goofy.zamia.org (goofy.zamia.org)... 78.47.65.20
Connecting to goofy.zamia.org (goofy.zamia.org) | 78.47.65.20 | :80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 619852 (605K) [application/x-gzip]
Saving to: ‘demo_wavs.tgz’
demo_wavs.tgz 100%[ ==========================================================> ] 605.32K 2.01MB/s in 0.3s
2018-06-23 16:46:28 (2.01 MB/s) - ‘demo_wavs.tgz’ saved [619852/619852]それらを解き放つ:
$ tar xfvz demo_wavs.tgz
demo1.wav
demo2.wav
demo3.wav
demo4.wavデモプログラムをダウンロードします
$ wget http://goofy.zamia.org/zamia-speech/misc/kaldi_decode_wav.py
--2018-06-23 16:47:53-- http://goofy.zamia.org/zamia-speech/misc/kaldi_decode_wav.py
Resolving goofy.zamia.org (goofy.zamia.org)... 78.47.65.20
Connecting to goofy.zamia.org (goofy.zamia.org) | 78.47.65.20 | :80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2469 (2.4K) [text/plain]
Saving to: ‘kaldi_decode_wav.py’
kaldi_decode_wav.py 100%[ ==========================================================> ] 2.41K --.-KB/s in 0s
2018-06-23 16:47:53 (311 MB/s) - ‘kaldi_decode_wav.py’ saved [2469/2469]次に、デモWAVファイルでKaldi自動音声認識を実行します。
$ python kaldi_decode_wav.py -v demo ? .wav
DEBUG:root:/opt/kaldi/model/kaldi-generic-en-tdnn_sp loading model...
DEBUG:root:/opt/kaldi/model/kaldi-generic-en-tdnn_sp loading model... done, took 1.473226s.
DEBUG:root:/opt/kaldi/model/kaldi-generic-en-tdnn_sp creating decoder...
DEBUG:root:/opt/kaldi/model/kaldi-generic-en-tdnn_sp creating decoder... done, took 0.143928s.
DEBUG:root:demo1.wav decoding took 0.37s, likelyhood: 1.863645
i cannot follow you she said
DEBUG:root:demo2.wav decoding took 0.54s, likelyhood: 1.572326
i should like to engage just for one whole life in that
DEBUG:root:demo3.wav decoding took 0.42s, likelyhood: 1.709773
philip knew that she was not an indian
DEBUG:root:demo4.wav decoding took 1.06s, likelyhood: 1.715135
he also contented that better confidence was established by carrying no weapons Pulseaudioマイクの名前を決定します。
$ pactl list sources
Source # 0
State: SUSPENDED
Name: alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-mono
Description: CM108 Audio Controller Analog Mono
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^デモをダウンロードして実行します:
$ wget ' http://goofy.zamia.org/zamia-speech/misc/kaldi_decode_live.py '
$ python kaldi_decode_live.py -s ' CM108 '
Kaldi live demo V0.2
Loading model from /opt/kaldi/model/kaldi-generic-en-tdnn_250 ...
Please speak.
hallo computer
switch on the radio please
please switch on the light
what about the weather in stuttgart
how are you
thank you
good bye ローカルマシンでSTTサービスを開始するには、実行してください。
$ docker pull quay.io/mpuels/docker-py-kaldi-asr-and-model:kaldi-generic-en-tdnn_sp-r20180611
$ docker run --rm -p 127.0.0.1:8080:80/tcp quay.io/mpuels/docker-py-kaldi-asr-and-model:kaldi-generic-en-tdnn_sp-r201806112番目の端末で、サービスに転写のためにオーディオファイルを転送するには、次のことを実行します。
$ git clone https://github.com/mpuels/docker-py-kaldi-asr-and-model.git
$ conda env create -f environment.yml
$ source activate py-kaldi-asr-client
$ ./asr_client.py asr.wav
INFO:root: 0.005s: 4000 frames ( 0.250s) decoded, status=200.
...
INFO:root:19.146s: 152000 frames ( 9.500s) decoded, status=200.
INFO:root:27.136s: 153003 frames ( 9.563s) decoded, status=200.
INFO:root: *****************************************************************
INFO:root: ** wavfn : asr.wav
INFO:root: ** hstr : speech recognition system requires training where individuals to exercise political system
INFO:root: ** confidence : -0.578844
INFO:root: ** decoding time : 27.14s
INFO:root: *****************************************************************上記の例のDocker画像は、互いの上に4つの画像を積み重ねた結果です。
docker-py-kaldi-asr-and-model:ソース、画像
docker-py-kaldi-asr:ソース、画像
docker-kaldi-asr:ソース、画像
Debian:8:https://hub.docker.com/_/debian/
注:おそらく不完全です。
Debianの依存関係のインストール例:
apt-get install build-essential pkg-config python-pip python-dev python-setuptools python-wheel ffmpeg sox libatlas-base-dev
# Create a symbolic link because one of the pip packages expect atlas in this location:
ln -s /usr/include/x86_64-linux-gnu/atlas /usr/include/atlas
pip install numpy nltk cython
pip install py-kaldi-asr py-nltools
これらのスクリプトを実行するために必要な環境に関するいくつかの大まかなメモ。これは決して完全な一連の指示であり、あなたを始めるためのいくつかのヒントだけです。
~/.speechrc [speech]
vf_login = <your voxforge login>
speech_arc = /home/bofh/projects/ai/data/speech/arc
speech_corpora = /home/bofh/projects/ai/data/speech/corpora
kaldi_root = /apps/kaldi-cuda
; facebook's wav2letter++
w2l_env_activate = /home/bofh/projects/ai/w2l/bin/activate
w2l_train = /home/bofh/projects/ai/w2l/src/wav2letter/build/Train
w2l_decoder = /home/bofh/projects/ai/w2l/src/wav2letter/build/Decoder
wav16 = /home/bofh/projects/ai/data/speech/16kHz
noise_dir = /home/bofh/projects/ai/data/speech/corpora/noise
europarl_de = /home/bofh/projects/ai/data/corpora/de/europarl-v7.de-en.de
parole_de = /home/bofh/projects/ai/data/corpora/de/German Parole Corpus/DE_Parole/
europarl_en = /home/bofh/projects/ai/data/corpora/en/europarl-v7.de-en.en
cornell_movie_dialogs = /home/bofh/projects/ai/data/corpora/en/cornell_movie_dialogs_corpus
web_questions = /home/bofh/projects/ai/data/corpora/en/WebQuestions
yahoo_answers = /home/bofh/projects/ai/data/corpora/en/YahooAnswers
europarl_fr = /home/bofh/projects/ai/data/corpora/fr/europarl-v7.fr-en.fr
est_republicain = /home/bofh/projects/ai/data/corpora/fr/est_republicain.txt
wiktionary_de = /home/bofh/projects/ai/data/corpora/de/dewiktionary-20180320-pages-meta-current.xml
[tts]
host = localhost
port = 8300一部のスクリプトでは、すべてのスクリプトがライブ、つまり、すべてのディレクトリにあるALローカルtmpディレクトリが存在することを期待しています。
mkdir tmp次のリストには、このスクリプトコレクションでサポートされている音声コーパスが含まれています。
forschergeist(ドイツ語、2時間):
<~/.speechrc:speech_arc>/forschergeistダウンロードします<~/.speechrc:speech_corpora>/forschergeistに解除しますドイツのスピーチダタパッケージバージョン2(ドイツ語、148時間):
dev 、 test 、およびtrainが<~/.speechrc:speech_arc>/gspv2の直接のサブディレクトリです。./import_gspv2.pyはコーパスをVoxForge形式に変換します。得られたコーパスは<~/.speechrc:speech_corpora>/gspv2に書き込まれます。ノイズ:
<~/.speechrc:speech_corpora>/ (そこでnoiseディレクトリが生成されます)Librispeech ASR(英語、475時間):
LibriSpeech <~/.speechrc:speech_arc>の直接的なサブディレクトリになるようにアーカイブを開梱します。./import_librispeech.pyは、コーパスをVoxForge形式に変換します。得られたコーパスは<~/.speechrc:speech_corpora>/librispeechに書き込まれます。LJスピーチデータセット(英語、24時間):
LJSpeech-1.1 <~/.speechrc:speech_arc>の直接的なサブディレクトリになるようにアーカイブを開梱します。import_ljspeech.pyを実行して、コーパスをVoxForge形式に変換します。得られたコーパスは<~/.speechrc:speech_corpora>/lindajohnson-11に書き込まれます。Mozilla Common Voiceドイツ語(ドイツ語、140時間):
de.tar.gzをダウンロードしますcv_de <~/.speechrc:speech_arc>の直接的なサブディレクトリになるようにアーカイブを開梱します。./import_mozde.pyを実行して、コーパスをVoxForge形式に変換します。得られたコーパスは<~/.speechrc:speech_corpora>/cv_deに書き込まれます。Mozilla Common Voice V1(英語、252時間):
cv_corpus_v1.tar.gzをダウンロードしますcv_corpus_v1が<~/.speechrc:speech_arc>の直接サブディレクトリになるようにアーカイブを開梱します。./import_mozcv1.pyはコーパスをVoxforge形式に変換します。得られたコーパスは<~/.speechrc:speech_corpora>/cv_corpus_v1に書き込まれます。ミュンヘン人工知能研究所GmbH(M-IaLabs)音声データセット(英語、147時間、ドイツ語、237時間、フランス語、190時間):
de_DE.tgz 、 en_UK.tgz 、 en_US.tgz 、 fr_FR.tgzをダウンロード<~/.speechrc:speech_arc>にサブディレクトリm_ailabsを作成しますm_ailabsサブディレクトリ内にダウンロードしたターバルを開梱しますby_bookを作成し、アーカイブが正確に英語とドイツの構造に従うことはないため、 maleとfemaleディレクトリを移動します。./import_mailabs.pyを実行して、コーパスをVoxForge形式に変換します。得られたコーパスは<~/.speechrc:speech_corpora>/m_ailabs_en 、 <~/.speechrc:speech_corpora>/m_ailabs_deおよび<~/.speechrc:speech_corpora>/m_ailabs_frに書き込まれます。Ted-Liumリリース3(英語、210時間):
TEDLIUM_release-3.tgzをダウンロードしますTEDLIUM_release-3 <~/.speechrc:speech_arc>の直接サブディレクトリになるようにアーカイブを開梱します。./import_tedlium3.pyはコーパスをVoxForge形式に変換します。得られたコーパスは<~/.speechrc:speech_corpora>/tedlium3に書き込まれます。Voxforge(英語、75時間):
<~/.speechrc:speech_arc>/voxforge_enダウンロードします<~/.speechrc:speech_corpora>/voxforge_enに解除しますVoxforge(ドイツ語、56時間):
<~/.speechrc:speech_arc>/voxforge_de<~/.speechrc:speech_corpora>/voxforge_deVoxforge(フランス語、140時間):
<~/.speechrc:speech_arc>/voxforge_fr<~/.speechrc:speech_corpora>/voxforge_frザミア(英語、5分):
<~/.speechrc:speech_arc>/zamia_en<~/.speechrc:speech_corpora>/zamia_enに解除しますザミア(ドイツ語、18時間):
<~/.speechrc:speech_arc>/zamia_de<~/.speechrc:speech_corpora>/zamia_deに解除しますテクニカルノート:ほとんどのコーパスについてはdata/src/speech/<corpus_name>/transcripts_*.csv 。CSVにあるデータベースに転写産物を修正しました。これらは何時間もの(セミ)手動レビューによって作成されているため、元のプロンプトよりも高品質である必要があるため、ASRモデルのトレーニング中に使用されます。
ダウンロードして、必要に応じてコーパスを変換したら、実行する必要があります
./speech_audio_scan.py < corpus name >その上。これにより、不足しているプロンプトがCSVデータベースに追加され、オーディオファイルを16kHzモノウェーブ形式に変換します。
騒音抵抗を改善するには、騒音抵抗を既存のものから導き出すことができます。
./speech_gen_noisy.py zamia_de
./speech_audio_scan.py zamia_de_noisy
cp data/src/speech/zamia_de/spk2gender data/src/speech/zamia_de_noisy/
cp data/src/speech/zamia_de/spk_test.txt data/src/speech/zamia_de_noisy/
./auto_review.py -a zamia_de_noisy
./apply_review.py -l de zamia_de_noisy review-result.csv このスクリプトは、典型的な電話コーデックを通じて録音を実行します。このようなコーパスは、8kHzの電話録音をサポートするモデルをトレーニングするために使用できます。
./speech_gen_phone.py zamia_de
./speech_audio_scan.py zamia_de_phone
cp data/src/speech/zamia_de/spk2gender data/src/speech/zamia_de_phone/
cp data/src/speech/zamia_de/spk_test.txt data/src/speech/zamia_de_phone/
./auto_review.py -a zamia_de_phone
./apply_review.py -l de zamia_de_phone review-result.csv 次のリストには、このリポジトリに含まれるスクリプトを使用して言語モデルをトレーニングするために使用できるテキストコーパスが含まれています。
Europarl、具体的には並列コーパスドイツ語と英語と平行したコーパスフランス語 - 英語:
.speechrcの対応する変数: europarl_de 、 europarl_en 、 europarl_fr./speech_sentences.py europarl_de 、. ./speech_sentences.py europarl_en and。/speech_sentences.py ./speech_sentences.py europarl_frコーネル映画 - ダイアログスコーパス:
.speechrcの対応する変数: cornell_movie_dialogs./speech_sentences.py cornell_movie_dialogsドイツの仮釈放コーパス:
.speechrc : parole_deの対応する変数./speech_train_punkt_tokenizer.pyを使用してパンクトークンザーをトレーニングし、その後./speech_sentences.py parole_deを実行しますWebQuestions: web_questions
.speechrc : web_questionsの対応する変数./speech_sentences.py web_questions Yahoo!回答データセット: yahoo_answers
.speechrc : yahoo_answersの対応する変数./speech_sentences.py yahoo_answers CNRTL ESTRépublicainCorpus、CC BY-NC-SAライセンスの下で利用可能なニュース記事(4.3mの見出し/段落)の大規模なコーパス。 XMLファイルをダウンロードし、次のコマンドを使用してXMLファイルをダウンロードし、ヘッドラインと段落を次のコマンドでテキストファイルに抽出します: xmllint --xpath '//*[local-name()="div"][@type="article"]//*[local-name()="p" or local-name()="head"]/text()' Annee*/*.xml | perl -pe 's/^ +//g ; s/^ (.+)/$1n/g ; chomp' > est_republicain.txt
.speechrc : est_republicainの対応する変数./speech_sentences.py est_republicain文章は、スピーチコーパラから抽出することもできます。それを行うには、実行してください。
英語のスピーチコーパス
./speech_sentences.py voxforge_en./speech_sentences.py librispeech./speech_sentences.py zamia_en./speech_sentences.py cv_corpus_v1./speech_sentences.py ljspeech./speech_sentences.py m_ailabs_en./speech_sentences.py tedlium3ドイツのスピーチコーパス
./speech_sentences.py forschergeist./speech_sentences.py gspv2./speech_sentences.py voxforge_de./speech_sentences.py zamia_de./speech_sentences.py m_ailabs_de./speech_sentences.py cv_de前提条件:
europarl_en 、 cornell_movie_dialogs 、 web_questions 、 yahoo_answersがインストールされ、抽出された文です(上記の指示を参照)。librispeech 、 voxforge_en 、 zamia_en 、 cv_corpus_v1 、 ljspeech 、 m_ailabs_en 、 tedlium3から抽出されます。KENLMを使用してKENLMを使用してKALDIとWAV2LETTERの両方のビルドを使用して、注文4の小規模で剪定された英語モデルをトレーニングするには:
./speech_build_lm.py generic_en_lang_model_small europarl_en cornell_movie_dialogs web_questions yahoo_answers librispeech voxforge_en zamia_en cv_corpus_v1 ljspeech m_ailabs_en tedlium3より少ない剪定で注文6のより大きなモデルをトレーニングするには:
./speech_build_lm.py -o 6 -p " 0 0 0 0 1 " generic_en_lang_model_large europarl_en cornell_movie_dialogs web_questions yahoo_answers librispeech voxforge_en zamia_en cv_corpus_v1 ljspeech m_ailabs_en tedlium3注文5の中型モデルをトレーニングするには:
./speech_build_lm.py -o 5 -p " 0 0 1 2 " generic_en_lang_model_medium europarl_en cornell_movie_dialogs web_questions yahoo_answers librispeech voxforge_en zamia_en cv_corpus_v1 ljspeech m_ailabs_en tedlium3前提条件:
europarl_deとparole_deがインストールされ、抽出された文です(上記の指示を参照)。forschergeist 、 gspv2 、 voxforge_de 、 zamia_de 、 m_ailabs_de 、 cv_deから抽出されます。KENLMを使用してKENLMを使用してKALDIとWAV2LETTERの両方のビルドを使用して、注文4の小さく剪定されたドイツ語モデルをトレーニングするには:
./speech_build_lm.py generic_de_lang_model_small europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_deより少ない剪定で注文6のより大きなモデルをトレーニングするには:
./speech_build_lm.py -o 6 -p " 0 0 0 0 1 " generic_de_lang_model_large europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_de注文5の中型モデルをトレーニングするには:
./speech_build_lm.py -o 5 -p " 0 0 1 2 " generic_de_lang_model_medium europarl_de parole_de forschergeist gspv2 voxforge_de zamia_de m_ailabs_de cv_de前提条件:
europarl_frとest_republicainがインストールされ、文章が抽出されます(上記の指示を参照)。voxforge_frおよびm_ailabs_frから抽出されますKenlm Runを使用してフランス語モデルをトレーニングするには:
./speech_build_lm.py generic_fr_lang_model europarl_fr est_republicain voxforge_fr m_ailabs_fr提出レビュー、転写、および辞書拡張に使用される主なツールは次のとおりです。
./speech_editor.py注:このドキュメントとスクリプトでは、レキシコンと辞書という用語を交換可能に使用します。
現在、2つのLexicaがあります。1つは英語用、もう1つはドイツ語です( data/src/dicts ):
dict-en.ipa
dict-de.ipa
Lexicaのネイティブ形式は、セミコロンを分離器として(UTF8)IPAにあります。この形式は、対応するエクスポートスクリプトによってターゲットASRエンジンが使用する形式に変換されます。
多くのレキシコン関連ツールは、辞書から欠落している単語の発音を計算するために、SequiTur G2Pに依存しています。必要なモデルは、ファイルサーバーからダウンロードできます:http://goofy.zamia.org/zamia-sepeech/g2p/。インストールについては、それらをダウンロードして開梱してから、次のようなdata/modelsの下にリンクを配置します。
data/models/sequitur-dict-de.ipa-latest - > < your model dir > /sequitur-dict-de.ipa-r20180510
data/models/sequitur-dict-en.ipa-latest - > < your model dir > /sequitur-dict-en.ipa-r20180510独自のSchequitur G2Pモデルをトレーニングするには、提供されているエクスポートとトレーニングのスクリプトを使用します。
[guenter@dagobert speech]$ ./speech_sequitur_export.py -d dict-de.ipa
INFO:root:loading lexicon...
INFO:root:loading lexicon...done.
INFO:root:sequitur workdir data/dst/dict-models/dict-de.ipa/sequitur done.
[guenter@dagobert speech]$ ./speech_sequitur_train.sh dict-de.ipa
training sample: 322760 + 16988 devel
iteration: 0
..../speech_lex_edit.py word [word2 ...]主な呪いに基づいたインタラクティブなレキシコンエディターです。 Schepitur G2P、Marytts、およびEspeakngを使用して、新しい単語の候補エントリを自動的に作成します。その後、ユーザーはこれらのエントリを必要に応じて手動で編集し、Maryttsを介してさまざまな声で合成されるのを聞いて確認できます。
Lexicon Editorは、特にspeech_editor.pyのさまざまな他のツール、特に統合されているため、1つのツール内の新しいオーディオサンプルの不足している単語を転写、レビュー、追加できます。これは推奨されます。
また、時々、レキシコンエントリをランダムに確認する傾向があります。そのためには、Specitur G2Pがレキシコンの現在の転写に同意しない20のランダムエントリを選択する小さなスクリプトがあります。
./speech_lex_edit.py ` ./speech_lex_review.py `また、このコマンドを使用して、バッチモードのトランスクリプトから欠落している単語を追加します。
./speech_lex_edit.py ` ./speech_lex_missing.py ` ドイツ語の辞書では、一連のスクリプトを使用してドイツのウィクチオンからエントリを抽出できます。そのためには、最初のステップは、Wiktionary XMLダンプから候補エントリのセットを抽出することです。
./wiktionary_extract_ipa.py これによりdata/dst/speech/de/dict_wiktionary_de.txtへの抽出されたエントリが出力されます。ここで、これらのエントリを独自のIPAスタイルと音素セットに変換するSchequitur G2Pモデルをトレーニングする必要があります。
./wiktionary_sequitur_export.py
./wiktionary_sequitur_train.sh最後に、エントリを翻訳し、通常のSequitur G2Pモデルからの予測に対して確認してください。
./wiktionary_sequitur_gen.pyこのスクリプトは、 data/dst/speech/de/dict_wiktionary_gen.txt data/dst/speech/de/dict_wiktionary_rej.txt 2つの出力ファイルを生成します。
次のレシピは、英語用のカルディモデルを訓練します。
実行する前に、すべての前提条件が満たされていることを確認してください(これらの指示については上記を参照)。
generic_en_lang_model_small構築voxforge_en 、 librispeech 、 cv_corpus_v1 、 ljspeech 、 m_ailabs_en 、 tedlium3 、 zamia_enの一部またはすべてのスピーチコーパスがインストール、変換、スキャンされます。zamia_en_noisyでノイズ拡張コーパス: voxforge_en_noisy 、 voxforge_en_phone 、 librispeech_en_noisy 、 librispeech_en_phone 、 cv_corpus_v1_noisy 、 cv_corpus_v1_phone 、 zamia_en_phone ./speech_kaldi_export.py generic-en-small dict-en.ipa generic_en_lang_model_small voxforge_en librispeech zamia_en
cd data/dst/asr-models/kaldi/generic-en-small
./run-chain.shノイズ増強コーパスを使用して輸出実行が含まれています。
./speech_kaldi_export.py generic-en dict-en.ipa generic_en_lang_model_small voxforge_en cv_corpus_v1 librispeech ljspeech m_ailabs_en tedlium3 zamia_en voxforge_en_noisy librispeech_noisy cv_corpus_v1_noisy cv_corpus_v1_phone zamia_en_noisy voxforge_en_phone librispeech_phone zamia_en_phone次のレシピは、ドイツ語のカルディモデルを訓練します。
実行する前に、すべての前提条件が満たされていることを確認してください(これらの指示については上記を参照)。
generic_de_lang_model_smallビルドvoxforge_de 、 gspv2 、 forschergeist 、 zamia_de 、 m_ailabs_de 、 cv_deの一部またはすべてのスピーチコーパスがインストール、変換、スキャンされます。voxforge_de_noisy 、 voxforge_de_phone 、 zamia_de_noisy 、 zamia_de_phone ./speech_kaldi_export.py generic-de-small dict-de.ipa generic_de_lang_model_small voxforge_de gspv2 [ forschergeist zamia_de ...]
cd data/dst/asr-models/kaldi/generic-de-small
./run-chain.shノイズ増強コーパスを使用して輸出実行が含まれています。
./speech_kaldi_export.py generic-de dict-de.ipa generic_de_lang_model_small voxforge_de gspv2 forschergeist zamia_de voxforge_de_noisy voxforge_de_phone zamia_de_noisy zamia_de_phone m_ailabs_de cv_de完全なZamia-Speechセットアップを必要としないスタンドアロンのKaldiモデル適応ツールについては、参照してください
Kaldi-Adapt-LM
既存のkaldiモデル(ダウンロード用に提供するものだけでなく、スクリプトを使用してゼロからトレーニングすることもできます)は、(通常はドメイン固有の)言語モデル、JSGF文法、文法FSTに適合させることができます。
英語モデルを簡単なコマンドに適応させ、JSGFの文法を制御する方法の例を以下に示します。これは単なるおもちゃの例であることに注意してください - 現実世界の使用のために、おそらくあなたはおそらく文法にゴミの音素ループを追加するか、すぐに何らかのノイズ抵抗を組み込んだ言語モデルを作成したいでしょう。
これが私たちが使用する文法です:
#JSGF V1.0;
grammar org.zamia.control;
public <control> = <wake> | <politeCommand> ;
<wake> = ( good morning | hello | ok | activate ) computer;
<politeCommand> = [ please | kindly | could you ] <command> [ please | thanks | thank you ];
<command> = <onOffCommand> | <muteCommand> | <volumeCommand> | <weatherCommand>;
<onOffCommand> = [ turn | switch ] [the] ( light | fan | music | radio ) (on | off) ;
<volumeCommand> = turn ( up | down ) the ( volume | music | radio ) ;
<muteCommand> = mute the ( music | radio ) ;
<weatherCommand> = (what's | what) is the ( temperature | weather ) ;
次のステップは、このスクリプトを使用してKaldiモデル適応実験をセットアップすることです。
./speech_kaldi_adapt.py data/models/kaldi-generic-en-tdnn_250-latest dict-en.ipa control.jsgf control-enここでは、 data/models/kaldi-generic-en-tdnn_250-latest control.jsgfするモデルです。Dict dict-en.ipa control-en新しいモデルで使用される辞書です。JSGFはJSGFグラマーです。
実際の適応を実行するには、モデルディレクトリに変更して、そこで適応スクリプトを実行します。
cd data/dst/asr-models/kaldi/control-en
./run-adaptation.sh 最後に、新しく作成されたモデルからターボールを作成できます。
cd ../../../../..
./speech_dist.sh control-en kaldi adapt./wav2letter_export.py -l en -v generic-en dict-en.ipa generic_en_lang_model_large voxforge_en cv_corpus_v1 librispeech ljspeech m_ailabs_en tedlium3 zamia_en voxforge_en_noisy librispeech_noisy cv_corpus_v1_noisy cv_corpus_v1_phone zamia_en_noisy voxforge_en_phone librispeech_phone zamia_en_phone
pushd data/dst/asr-models/wav2letter/generic-en/
bash run_train.sh./wav2letter_export.py -l de -v generic-de dict-de.ipa generic_de_lang_model_large voxforge_de gspv2 forschergeist zamia_de voxforge_de_noisy voxforge_de_phone zamia_de_noisy zamia_de_phone m_ailabs_de cv_de
pushd data/dst/asr-models/wav2letter/generic-de/
bash run_train.sh自動レビューケースを作成します:
./wav2letter_auto_review.py -l de w2l-generic-de-latest gspv2実行:
pushd tmp/w2letter_auto_review
bash run_auto_review.sh
popd結果を適用します:
./wav2letter_apply_review.pyAbookスクリプトを使用して、オーディオブックやその他のオーディオソース(Librivoxから)をセグメント化および転写する方法に関するいくつかのメモ:
mp3
```bash
ffmpeg -i foo.mp3 foo.wav
```
MKV
mkvextract tracks foo.mkv 0:foo.ogg
opusdec foo.ogg foo.wavsox foo.wav -r 16000 -c 1 -b 16 foo_16m.wavこのツールは、沈黙検出を使用して、適切なカットポイントを見つけます。設定を調整して、ショートメントの良いバランスをとるが、半分に分割された単語はほとんどありません。
./abook-segment.py foo_16m.wav設定:
[guenter@dagobert speech]$ ./abook-segment.py -h
Usage: abook-segment.py [options] foo.wav
Options:
-h, --help show this help message and exit
-s SILENCE_LEVEL, --silence-level=SILENCE_LEVEL
silence level (default: 2048 / 65536)
-l MIN_SIL_LENGTH, --min-sil-length=MIN_SIL_LENGTH
minimum silence length (default: 0.07s)
-m MIN_UTT_LENGTH, --min-utt-length=MIN_UTT_LENGTH
minimum utterance length (default: 2.00s)
-M MAX_UTT_LENGTH, --max-utt-length=MAX_UTT_LENGTH
maximum utterance length (default: 9.00s)
-o OUTDIRFN, --out-dir=OUTDIRFN
output directory (default: abook/segments)
-v, --verbose enable debug outputデフォルトでは、結果のセグメントはAbook/Segmentsになります
転写ツールは、コマンドラインで指定できる最大2つのスピーカーをサポートします。結果のVoxForge-Packagesは、デフォルトでAbook/Outになります。
./abook-transcribe.py -s speaker1 -S speaker2 abook/segments/Kaldiを使用して、半自動のオーディオブックまたはその他のオーディオソース(Librivoxから)をセグメント化および転写する方法に関するいくつかのメモ:
スクリプトは、固定ディレクトリレイアウトに依存しています。 Librivox記録のセグメンテーションはこれらのスクリプトの主なアプリケーションの1つであるため、本とセクションの用語はここで使用されます。本の各セクションには、2つのソースファイルが必要です。オーディオを含むウェーブファイルと、トランスクリプトを含むテキストファイル。
この例で説明されているものには、固定命名スキームが使用されます。
abook/in/librivox/11442-toten-seelen/evak-11442-toten-seelen-1.txt abook/in/librivox/11442-toten-seelen/evak-11442-toten-seelen-1.wav abook/in/librivox/11442-toten-seelen/evak-11442-toten-seelen-2.txt abook/in/librivox/11442-toten-seelen/evak-11442-toten-seelen-2.wav ...
abook-librivox.pyスクリプトは、Librivox記録の取得とディレクトリ構造のセットアップに役立つように提供されます。とりあえず、このツールはトランスクリプトを自動的に取得するのではなく、手動で記入する必要がある空の.txtファイル(命名スキームに従って)を作成することに注意してください。
ただし、このツールは、セグメンテーションスクリプトで要求されるように、取得したオーディオを16kHzモノWAV形式に変換します。他のソースから素材をセグメント化する場合は、必ずその形式に変換してください。このステップに使用するツールについての提案については、前のセクションの手動セグメンテーションの指示を参照してください。
注:Kaldiプロセスは大量セグメンテーションのために並行しているため、プロセスが機能するためには、少なくとも4つのオーディオとプロンプトファイルが必要です。
このツールは、転写産物をトークン化し、OOVトークンを検出します。その後、それらを交換するか、辞書に追加できます。
./abook-preprocess-transcript.py abook/in/librivox/11442-toten-Seelen/evak-11442-toten-Seelen-1.txt自動セグメンテーションを機能させるには、現在の辞書に適合したGMMモデル(転写前の前処理中に拡張する必要がある可能性が高い)に加えて、プロンプトをカバーする言語モデルを使用します。
まず、目的のために調整された言語モデルを作成します。
./abook-sentences.py abook/in/librivox/11442-toten-Seelen/ * .prompt
./speech_build_lm.py abook_lang_model abook abook abook parole_deこれで、この言語モデルと現在のDICTを使用して、適応モデルを作成できます。
./speech_kaldi_adapt.py data/models/kaldi-generic-de-tri2b_chain-latest dict-de.ipa data/dst/lm/abook_lang_model/lm.arpa abook-de
pushd data/dst/asr-models/kaldi/abook-de
./run-adaptation.sh
popd
./speech_dist.sh -c abook-de kaldi adapt
tar xfvJ data/dist/asr-models/kaldi-abook-de-adapt-current.tar.xz -C data/models/次に、自動セグメンテーションのためにKaldiディレクトリ構造とファイルを作成する必要があります。
./abook-kaldi-segment.py data/models/kaldi-abook-de-adapt-current abook/in/librivox/11442-toten-Seelenこれで、セグメンテーションを実行できます。
pushd data/dst/speech/asr-models/kaldi/segmentation
./run-segmentation.sh
popd 最後に、セグメンテーションの結果をVoxForge形式で取得できます。
./abook-kaldi-retrieve.py abook/in/librivox/11442-toten-Seelen/Zamia-TTSは、(レビューされた)Zamia-Speechデータに基づいてTTSの声を訓練しようとする実験プロジェクトです。ここからダウンロード:
https://goofy.zamia.org/zamiapeech/tts/
このセクションでは、NvidiaのTacotron 2実装の声を訓練する方法について説明します。結果として得られる声は、ザミア音声ASRモデルトレーニングに使用されるデフォルトのサンプルレートであるため、16kHzのサンプルレートがあります。これは、ここで前提条件とサンプルWAVとともに、見つけることができる16kHzの波動モデルを使用する必要があることを意味します。
https://goofy.zamia.org/zamiaspeech/tts/tacotron2/
それが邪魔にならないように、タコトロン2モデルトレーニングは非常に簡単です。最初のステップは、訓練したい声のためにフィルリストをエクスポートすることです。
./speech_tacotron2_export.py -l en -o ../torch/tacotron2/filelists m_ailabs_en mailabselliotmiller次に、Tacotron 2トレーニングディレクトリに変更します
cd ../torch/tacotron2「hparams.py」でファイルリスト、サンプリングレート、バッチサイズを指定します。
diff --git a/hparams.py b/hparams.py
index 8886f18..75e89c9 100644
--- a/hparams.py
+++ b/hparams.py
@@ -25,15 +25,19 @@ def create_hparams(hparams_string=None, verbose=False):
# Data Parameters #
################################
load_mel_from_disk=False,
- training_files='filelists/ljs_audio_text_train_filelist.txt',
- validation_files='filelists/ljs_audio_text_val_filelist.txt',
- text_cleaners=['english_cleaners'],
+ training_files='filelists/mailabselliotmiller_train_filelist.txt',
+ validation_files='filelists/mailabselliotmiller_val_filelist.txt',
+ text_cleaners=['basic_cleaners'],
################################
# Audio Parameters #
################################
max_wav_value=32768.0,
- sampling_rate=22050,
+ #sampling_rate=22050,
+ sampling_rate=16000,
filter_length=1024,
hop_length=256,
win_length=1024,
@@ -81,7 +85,8 @@ def create_hparams(hparams_string=None, verbose=False):
learning_rate=1e-3,
weight_decay=1e-6,
grad_clip_thresh=1.0,
- batch_size=64,
+ # batch_size=64,
+ batch_size=16,
mask_padding=True # set model's padded outputs to padded values
)
そしてトレーニングを開始します:
python train.py --output_directory=elliot --log_directory=elliot/logs./ztts_prepare.py -l en m_ailabs_en mailabselliotmiller elliot./ztts_train.py -v elliot 2>&1 | tee train_elliot.logモデルからターボールを構築するには、 speech-dist.shスクリプトを使用します。
./speech_dist.sh generic-en kaldi tdnn_sp
私自身のスクリプトと私が作成したデータ(つまり、レキシコンと転写産物)は、スクリプトの著作権ヘッダーで特に記載されていない限り、LGPLV3がライセンスされています。
一部のスクリプトとファイルは、他の作品の作品に基づいています。そのような場合、元のライセンスをそのまま維持することが私の意図です。詳細については、内部の著作権ヘッダーを確認してください。