音声認識と音声生成

Hugging Face で学ぶマルチモーダルモデル

James Chapman

Curriculum Manager, DataCamp

音声

 

音声波形の重要な要素は何か?

  • ピッチ: 男性の平均85–180Hz、女性は165–255Hz
  • ストレス: 言語・訛り・感情に依存
  • リズム: 文脈・感情・言語に影響

 

ソーシャルメディアの投稿

Hugging Face で学ぶマルチモーダルモデル

自動音声認識

音声はエンコードされ、音声またはテキストにデコードされる。

  • テキストと音声はどちらも「系列」データ
  • : 音声認識、翻訳、音声合成
Hugging Face で学ぶマルチモーダルモデル

自動音声認識

  • Tinyモデル: 3,900万パラメータ、モデルサイズ150MB
  • 学習データ: 68万時間(ラベル付き)
from transformers import WhisperProcessor, WhisperForConditionalGeneration
processor = WhisperProcessor.from_pretrained("openai/whisper-tiny")
model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny")
1 https://github.com/openai/whisper
Hugging Face で学ぶマルチモーダルモデル

自動音声認識

from datasets import load_dataset, Audio
dataset = load_dataset("CSTR-Edinburgh/vctk")["train"]
dataset = dataset.cast_column("audio", Audio(sampling_rate=16_000))

sample = dataset[0]["audio"]
input_preprocessed = processor(sample["array"], sampling_rate=sample["sampling_rate"], return_tensors="pt")
predicted_ids = model.generate(input_preprocessed.input_features)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True) print(transcription)
['Please cool Stella.']
Hugging Face で学ぶマルチモーダルモデル

音声生成

音声生成の3要素:

  • 前処理器: リサンプリングと特徴抽出
  • モデル: 特徴量の変換
  • ボコーダ: 波形を生成する別モデル
from transformers import SpeechT5Processor, SpeechT5ForSpeechToSpeech, SpeechT5HifiGan

processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_vc") model = SpeechT5ForSpeechToSpeech.from_pretrained("microsoft/speecht5_vc") vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")
Hugging Face で学ぶマルチモーダルモデル

話者埋め込み

話者埋め込みが音声生成パイプラインにどう入るかの図

Hugging Face で学ぶマルチモーダルモデル

話者埋め込みの生成

  • 事前学習エンコーダ: 音声波形配列 → 埋め込み配列(典型的に512次元)
from speechbrain.inference.speaker import EncoderClassifier
speaker_model = EncoderClassifier.from_hparams(source="speechbrain/spkrec-xvect-voxceleb")
speaker_embeddings = speaker_model.encode_batch(torch.tensor(dataset[0]["audio"]["array"]))

speaker_embeddings = torch.nn.functional.normalize(speaker_embeddings, dim=2).unsqueeze(0)
Hugging Face で学ぶマルチモーダルモデル

音声生成

inputs = processor(audio=dataset[0]["audio"], 
                   sampling_rate=dataset[0]["audio"]["sampling_rate"], 
                   return_tensors="pt")


speech = model.generate_speech(inputs["input_values"], speaker_embedding, vocoder=vocoder)

前後のスペクトログラム

Hugging Face で学ぶマルチモーダルモデル

Let's practice!

Hugging Face で学ぶマルチモーダルモデル

Preparing Video For Download...