HowToガイド¶
音声コーパス¶
日本語音声コーパスにアクセスする¶
重要
コーパスの利用目的は著作権法30条の4に定める情報解析に限ります。
ReazonSpeechプロジェクトでは、35,000時間の日本語音声コーパスを公開しています。
データセットには Hugging Face Datasets 経由でアクセスできます。
データセットにアクセスするには、Hugging Face上で規約に同意してください。 |
|
Hugging Faceにアクセスできる環境を作成します。 |
$ # Pythonのvenv環境作成
$ python3 -m venv venv
$ source venv/bin/activate
$ # 環境セットアップ
$ pip install datasets soundfile librosa
$ huggingface-ctl login
|
Hugging Faceからデータセットを取得します。 |
>>> # 約600MBのダウンロードが発生します。
>>> from datasets import load_dataset
>>> ds = load_dataset("reazon-research/reazonspeech", trust_remote_code=True)
|
ダウンロードが完了すれば成功です! |
>>> ds["train"][0]["name"]
'000/000734dcb35d6.flac'
|
データ形式
FLAC形式の音声ファイル(16khzサンプリング)と、テキストラベルのペアから構成されています。
{
'name': '000/0000000000000.flac',
'audio': {
'path': '/path/to/000/0000000000000.flac',
'array': array([ 0.01000000, ...], dtype=float32),
'sampling_rate': 16000
},
'transcription': '今日のニュースをお伝えします。'
}
ReazonSpeechでは5種類のデータセットのサイズを提供しています。 デフォルトではtinyが選択されます。
タグ |
サイズ |
収録時間数 |
---|---|---|
tiny |
600MB |
8.5 時間 |
small |
6GB |
100 時間 |
medium |
65GB |
1000 時間 |
large |
330GB |
5000 時間 |
all |
2.3TB |
35000 時間 |
データセットを参照するコード例のパターンは以下の通りです。
from datasets import load_dataset
# 1000時間のmediumデータを取得する
ds = load_dataset("reazon-research/reazonspeech", "medium", trust_remote_code=True)
# 全件データを取得する
ds = load_dataset("reazon-research/reazonspeech", "all", trust_remote_code=True)
# 全件データにストリームアクセスする
ds = load_dataset("reazon-research/reazonspeech", "all", streaming=True, trust_remote_code=True)
ReazonSpeech v1データセット
旧バージョンのReazonSpeechコーパスは次のタグから参照できます。
タグ |
サイズ |
収録時間数 |
---|---|---|
small-v1 |
350MB |
5 時間 |
medium-v1 |
22GB |
300 時間 |
all-v1 |
1TB |
19000 時間 |
注記
本データセットは、雑音に強いロバストなデータを得るため
strategy=lax
で抽出しています。詳しくは
reazonspeech.espnet.oneseg.get_utterances
を参照下さい。
音声認識¶
NeMoモデルで日本語の音声を認識する¶
ReazonSpeechのNeMoモデルを利用して、Pythonから音声認識を行う方法を解説します。
実行環境をセットアップします。 |
$ # Pythonのvenv環境作成
$ python3 -m venv venv
$ source venv/bin/activate
$ # ffmpegとCythonをインストール
$ sudo apt install ffmpeg
$ pip install Cython
|
ReazonSpeechをインストールします。 |
$ git clone https://github.com/reazon-research/ReazonSpeech
$ pip install ReazonSpeech/pkg/nemo-asr
|
右のスクリプトを
|
from reazonspeech.nemo.asr import load_model, transcribe, audio_from_path
# 実行時にHugging Faceからモデルを取得します (2.3GB)
model = load_model(device='cuda')
# ローカルの音声ファイルを読み込む
audio = audio_from_path('speech-001.wav')
# 音声認識を適用する
ret = transcribe(model, audio)
print(ret.text)
|
結果が出力されれば成功です! |
$ python3 test.py
気象庁は雪や路面の凍結による交通への影響、暴風雪や高波に警戒するとともに雪崩や屋根からの落雪にも十分注意するよう呼びかけています。
|
各関数の詳細な使い方は、APIリファレンス reazonspeech.nemo.asr を参照ください。
K2モデルで日本語の音声を認識する¶
ReazonSpeechのK2モデルを利用して、Pythonから音声認識を行う方法を解説します。
K2モデルを利用するには shepra-onnx (K2モデルの評価エンジン)が必須です。
また、K2モデルが扱える入力音声の長さは、概ね30秒が上限になります。
最初に、sherpa-onnxの公式サイトの手順に従って、パッケージをインストールします。 |
|
ReazonSpeechをインストールします。 |
$ git clone https://github.com/reazon-research/ReazonSpeech
$ pip install ReazonSpeech/pkg/k2-asr
|
右のスクリプトを
|
from reazonspeech.k2.asr import load_model, transcribe, audio_from_path
# 実行時にHugging Faceからモデルを取得します (1.5GB)
model = load_model(device='cuda')
# ローカルの音声ファイルを読み込む
audio = audio_from_path('speech-001.wav')
# 音声認識を適用する
ret = transcribe(model, audio)
print(ret.text)
|
結果が出力されれば成功です! |
$ python3 test.py
気象庁は雪や路面の凍結による交通への影響暴風雪や高波に警戒するとともに雪崩や屋根からの落雪にも十分注意するよう呼びかけています
|
各関数の詳細な使い方は、APIリファレンス reazonspeech.k2.asr を参照ください。
ESPnetモデルで日本語の音声を認識する¶
ReazonSpeechのESPnetモデルを利用して、Pythonから音声認識を行う方法を解説します。
実行環境をセットアップします。 |
$ # Pythonのvenv環境作成
$ python3 -m venv venv
$ source venv/bin/activate
|
ReazonSpeechをインストールします。 |
$ git clone https://github.com/reazon-research/ReazonSpeech
$ pip install ReazonSpeech/pkg/espnet-asr
|
右のスクリプトを
|
from reazonspeech.espnet.asr import load_model, transcribe, audio_from_path
# 実行時にHugging Faceからモデルを取得します (1.6GB)
model = load_model(device='cuda')
# ローカルの音声ファイルを読み込む
audio = audio_from_path('speech-001.wav')
# 音声認識を適用する
ret = transcribe(model, audio)
print(ret.text)
|
結果が出力されれば成功です! |
$ python3 test.py
気象庁は雪や路面の凍結による交通への影響、暴風雪や高波に警戒するとともに雪崩や屋根からの落雪にも十分注意するよう呼びかけています。
|
各関数の詳細な使い方は、APIリファレンス reazonspeech.espnet.asr を参照ください。
データ解析¶
ワンセグ放送から字幕情報を抽出する¶
ReazonSpeechをインストールします。 |
$ # Pythonのvenv環境作成
$ python3 -m venv venv
$ source venv/bin/activate
$ # ReazonSpeechインストール
$ git clone https://github.com/reazon-research/ReazonSpeech
$ pip install ReazonSpeech/pkg/espnet-oneseg
|
|
>>> import reazonspeech as rs
>>> captions = rs.get_captions("test.m2ts")
|
|
>>> print(captions[0])
Caption(start_seconds=3.1605,
end_seconds=5.1291,
text='今日のニュースをお伝えします')
|
ワンセグ放送からコーパスを作成する¶
ReazonSpeech ライブラリを利用して、 実際に録画データから音声コーパスを作成する方法を示します。
以下の手順はUbuntu 20.04で動作を確認しています。
|
$ # 作業用の環境を作成する
$ sudo apt install ffmpeg libsndfile1 git-lfs
$ python3 -m venv venv
$ source venv/bin/activate
$ # ReazonSpeechインストール
$ git clone https://github.com/reazon-research/ReazonSpeech
$ pip install ReazonSpeech/pkg/espnet-oneseg
|
|
$ git clone https://huggingface.co/reazon-research/reazonspeech-espnet-v2
$ ln -s reazonspeech-espnet-v1/exp
|
|
$ python3 create_corpus.py ../test.m2ts
|
|
$ # corpus.zip には音声データと、対応する字幕情報を
$ # 収録したファイルが含まれています。
$ unzip -l corpus.zip
0001.flac --+
0002.flac | 音声ファイル
... --+
dataset.json ... 各々の発話に対応する字幕データ
|
- コーパス作成スクリプト (create_corpus.py):
import sys import reazonspeech as rs from espnet2.bin.asr_align import CTCSegmentation # ESPnetのCTCSegmentationを用意します ctc_segmentation = CTCSegmentation( "exp/asr_train_asr_conformer_raw_jp_char/config.yaml", "exp/asr_train_asr_conformer_raw_jp_char/valid.acc.ave_10best.pth", kaldi_style_text=False, fs=16000, ) # 発話情報(字幕と音声のペア)を抽出します utterances = rs.get_utterances(sys.argv[1], ctc_segmentation) # 抽出した情報をZIP形式で保存します rs.save_as_zip(utterances, "corpus.zip")