😸

JTubeSpeech: YouTubeによる日本語音声コーパスの構築方法

2022/08/11に公開

はじめに

こんにちは、わっしーです。この記事では、JTubeSpeechの日本語音声認識コーパスをローカル環境に構築する方法を解説します。

※ masterが一部動作しなかったため、実行を確認したコードを、k-washi/jtubespeech/tree/dev_kwashiに置いています。もしかしたら、音声認識ライブラリなどのバージョンの違いで動作しなかったかもしれません。

※内容は、2022年8月11日に作成しました。

JTubeSpeech とは

JTubeSpeech: 音声認識と話者照合のために YouTube から構築される日本語音声コーパスのスライドがわかりやすいです。

  1. 音声言語研究に必要なオープンな日本語音声コーパスです
  2. YouTube動画をベースにコーパスを自動構築しています
  3. 音声認識・話者照合用のコーパスです

多言語対応だが、本記事では、日本語のコーパス構築に関してのみ解説します。

JTubeSpeechの環境構築

git lfsにより、./data/ja/*.csvをダウンロードする必要があります。
このcsvに、日本語音声コーパスのyoutubeのVideoIdが記載されています。

git clone https://github.com/sarulab-speech/jtubespeech.git
sudo apt install git-lfs
git lfs pull

pythonのライブラリをインストールします。以下、必要なライブラリです。

requiremnts.txt
espnet==202205
espnet-model-zoo==0.1.7
youtube-dl==2021.12.17
joblib==1.1.0
pydub==0.25.1
pandas==1.4.2
num2words==0.5.11
neologdn==0.5.1
romkan==0.2.1

requirements.txtに記載して、インストールしてください。

pip install -r requirements.txt

Youtubeから音声と字幕をダウンロード

Youtubeから、./data/ja/*.csvに記載してあるVideoIdのビデオをダウンロードし、音声と字幕を抽出します。この操作は、READMEのstep4にあたります。

引数を適当に設定して、以下のコマンドで実行してください。

python scripts/download_video.py ja ./data/ja/202103.csv --outdir /audio/downloads

かなり時間がかかるので、注意してください。私の環境では、2週間ほどかかりました。途中実行が落ちないように、以下のようにコマンドを実行するのもおすすめです。

nohup python scripts/download_video.py ja ./data/ja/202103.csv --outdir /audio/downloads > ./nohop.out &

ダウンロードしたデータ数は、以下のコマンドで確認できます。

ls -1 /audio/downloads/ja/wav16k/*/ | wc -l

日本語音声認識コーパスデータセットの構築

ダウンロードした音声と字幕に対して、CTCスコアを計算することで、コーパスを作成します。この操作は、READMEのstep5にあたります。

動作確認済みのコードを、k-washi/jtubespeech/tree/dev_kwashiに置いているので、コピーしてください。

  1. まず、必要な音声認識モデルをダウンロードします。
    ./scripts/align_model_download.pyでダウンロードします。こちらも上記のgithubにコードを追加しています。
python ./scripts/align_model_download.py
  1. 次に、字幕テキストと音声のアライメントによりCTCスコアを計算します。
    scripts/align.pyでエラーが発生したため、別のブランチに、scripts/align2.pyを作成しています。

また、CUDAのメモリエラー対策のため、longest_audio_segments=160としています。(24564MiBの環境です。)

以下のように、処理を実行しています。

nohup python scripts/align.py --wavdir=/audio/downloads/ja/wav16k/ --txtdir=/audio/downloads/ja/txt/ --output=/audio/downloads/ja/asr/ --longest_audio_segments=160 --ngpu=1 > ./nohup/align.out & 

ログは以下で確認できます。

tail  /audio/downloads/ja/asr/segments.log 

また、実行結果は、以下で確認できます。

tail  /audio/downloads/ja/asr/segments.txt

# 以下のような出力です
# ファイル名_ID ファイル名 開始時間 終了時間 CTCスコア テキスト
LY9ewzIY8iQ_0114 LY9ewzIY8iQ 559.37 560.76 -1.8345 そうですね。今は
LY9ewzIY8iQ_0115 LY9ewzIY8iQ 560.76 564.70 -4.8862 ドゥーチェのお見合い相手、とでも言っておきますか

CTCスコアの閾値をmsとして設定し、別のsegments.txtファイルに出力します。

awk -v ms=-0.3 '{ if ($5 > ms) {print} }' /audio/downloads/ja/asr/segments.txt > ./.data/segments.txt &

これが、音声認識コーパスとなります。

最後に

今回は、JTubeSpeechの日本語音声認識コーパスの作成方法を記事にしました。試行錯誤しながら実行したので、誤っている部分があったらご指摘のほど、お願いいたします。

また、音声合成などもやっていきたいので、話者式別用のコーパスの作成も、今後やっていければと思います。


画像・自然言語・音声に関する機械学習の研究開発やMLOpsを行っています。もし、機械学習に関して、ご相談があれば、@kwashizzzのアカウントまでDMしてください!
これまでの、機械学習記事のまとめです。

GitHubで編集を提案

Discussion