🚀 SeamlessM4T Large
SeamlessM4Tは、高品質な翻訳を提供するために設計されたモデル群です。これにより、異なる言語コミュニティの人々が音声とテキストを通じて円滑にコミュニケーションできます。
このリポジトリには、🤗 Hugging FaceによるSeamlessM4Tの実装が含まれています。
🌟 SeamlessM4T v2、このバージョンの改良版で新しいアーキテクチャを持つものがこちらでリリースされました。この新しいモデルは、SeamlessM4T v1よりも品質と音声生成タスクにおける推論速度が向上しています。
SeamlessM4T v2は🤗 Transformersでもサポートされており、詳細はこの新バージョンのモデルカードまたは直接🤗 Transformersのドキュメントを参照してください。
SeamlessM4T Largeは以下をカバーしています:
- 📥 音声入力に対応する101言語
- ⌨️ テキスト入力/出力に対応する96言語
- 🗣️ 音声出力に対応する35言語
これは統一モデルの「large」バリアントで、複数の個別モデルに依存することなく複数のタスクを実行できます:
- 音声から音声への翻訳 (S2ST)
- 音声からテキストへの翻訳 (S2TT)
- テキストから音声への翻訳 (T2ST)
- テキストからテキストへの翻訳 (T2TT)
- 自動音声認識 (ASR)
1つのモデルであるSeamlessM4TModel
で上記のすべてのタスクを実行できますが、各タスクには専用のサブモデルもあります。
🚀 クイックスタート
まず、プロセッサとモデルのチェックポイントをロードします。
>>> from transformers import AutoProcessor, SeamlessM4TModel
>>> processor = AutoProcessor.from_pretrained("facebook/hf-seamless-m4t-large")
>>> model = SeamlessM4TModel.from_pretrained("facebook/hf-seamless-m4t-large")
このモデルは、テキストまたは音声に対してシームレスに使用でき、翻訳されたテキストまたは翻訳された音声を生成できます。
以下は、プロセッサを使用してテキストと音声を処理する方法です。
>>>
>>> from datasets import load_dataset
>>> dataset = load_dataset("arabic_speech_corpus", split="test", streaming=True)
>>> audio_sample = next(iter(dataset))["audio"]
>>>
>>> audio_inputs = processor(audios=audio_sample["array"], return_tensors="pt")
>>>
>>> text_inputs = processor(text = "Hello, my dog is cute", src_lang="eng", return_tensors="pt")
💻 使用例
基本的な使用法
音声
SeamlessM4TModel
は、ほとんどまたはまったく変更を加えることなく、テキストまたは音声をシームレスに生成できます。ロシア語の音声翻訳をターゲットにしてみましょう。
>>> audio_array_from_text = model.generate(**text_inputs, tgt_lang="rus")[0].cpu().numpy().squeeze()
>>> audio_array_from_audio = model.generate(**audio_inputs, tgt_lang="rus")[0].cpu().numpy().squeeze()
基本的に同じコードで、英語のテキストとアラビア語の音声をロシア語の音声サンプルに翻訳しました。
テキスト
同様に、同じモデルを使用して、音声ファイルまたはテキストから翻訳されたテキストを生成できます。SeamlessM4TModel.generate
にgenerate_speech=False
を渡すだけです。今回は、フランス語に翻訳してみましょう。
>>>
>>> output_tokens = model.generate(**audio_inputs, tgt_lang="fra", generate_speech=False)
>>> translated_text_from_audio = processor.decode(output_tokens[0].tolist(), skip_special_tokens=True)
>>>
>>> output_tokens = model.generate(**text_inputs, tgt_lang="fra", generate_speech=False)
>>> translated_text_from_text = processor.decode(output_tokens[0].tolist(), skip_special_tokens=True)
高度な使用法
1. 専用モデルの使用
SeamlessM4TModel
は、音声とテキストを生成するためのTransformersのトップレベルモデルですが、追加のコンポーネントなしでタスクを実行する専用モデルを使用することもできます。これにより、メモリ使用量を削減できます。
たとえば、音声から音声への生成スニペットをS2STタスク用の専用モデルに置き換えることができます。残りのコードはまったく同じです。
>>> from transformers import SeamlessM4TForSpeechToSpeech
>>> model = SeamlessM4TForSpeechToSpeech.from_pretrained("facebook/hf-seamless-m4t-large")
または、テキストからテキストへの生成スニペットをT2TTタスク用の専用モデルに置き換えることができます。generate_speech=False
を削除するだけです。
>>> from transformers import SeamlessM4TForTextToText
>>> model = SeamlessM4TForTextToText.from_pretrained("facebook/hf-seamless-m4t-large")
SeamlessM4TForSpeechToText
とSeamlessM4TForTextToSpeech
も自由に試してみてください。
2. 話者の識別を変更する
spkr_id
引数を使用して、音声合成に使用する話者を変更することができます。一部の言語では、一部のspkr_id
の方がうまく機能します!
3. 生成戦略を変更する
音声とテキストの生成には、異なる生成戦略を使用できます。たとえば、.generate(input_ids=input_ids, text_num_beams=4, speech_do_sample=True)
は、テキストモデルでビームサーチデコードを、音声モデルで多項サンプリングを順次実行します。
4. 音声とテキストを同時に生成する
SeamlessM4TModel
でreturn_intermediate_token_ids=True
を使用すると、音声とテキストの両方を返すことができます!
📄 ライセンス
このプロジェクトは、CC BY-NC 4.0ライセンスの下で提供されています。