🚀 SeamlessM4T Medium
SeamlessM4Tは、高品質な翻訳を提供するために設計されたモデル群です。これにより、異なる言語コミュニティの人々が音声とテキストを通じてスムーズにコミュニケーションすることができます。
このリポジトリには、🤗 Hugging FaceによるSeamlessM4Tの実装が含まれています。元の重みや、それらを実行する方法のガイドは、元のハブリポジトリ(large と medium のチェックポイント)で見つけることができます。
🌟 新しいアーキテクチャを持つこのバージョンの改良版であるSeamlessM4T v2が こちら でリリースされました。
この新しいモデルは、音声生成タスクにおける品質と推論速度の両方でSeamlessM4T v1を上回っています。
SeamlessM4T v2は🤗 Transformersでもサポートされており、詳細はこの新しいバージョンのモデルカード または直接 🤗 Transformersのドキュメント で確認できます。
SeamlessM4T Mediumは以下をカバーしています。
- 📥 音声入力に対応する101言語
- ⌨️ テキスト入力/出力に対応する 196言語
- 🗣️ 音声出力に対応する 35言語
これは統一モデルの「medium」バリアントで、複数の個別のモデルに依存することなく、複数のタスクを実行できます。
- 音声から音声への翻訳 (S2ST)
- 音声からテキストへの翻訳 (S2TT)
- テキストから音声への翻訳 (T2ST)
- テキストからテキストへの翻訳 (T2TT)
- 自動音声認識 (ASR)
単一のモデルであるSeamlessM4TModel
を使用して上記のすべてのタスクを実行できますが、各タスクには専用のサブモデルもあります。
🚀 クイックスタート
まずは、プロセッサとモデルのチェックポイントをロードします。
>>> from transformers import AutoProcessor, SeamlessM4TModel
>>> processor = AutoProcessor.from_pretrained("facebook/hf-seamless-m4t-medium")
>>> model = SeamlessM4TModel.from_pretrained("facebook/hf-seamless-m4t-medium")
このモデルを使って、テキストや音声をシームレスに処理し、翻訳されたテキストや音声を生成することができます。
以下は、プロセッサを使ってテキストと音声を処理する方法です。
>>>
>>> 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
は、音声とテキストを生成するためのトップレベルのモデルですが、追加のコンポーネントなしでタスクを実行する専用モデルを使用することもできます。これにより、メモリ使用量を削減することができます。
例えば、音声から音声への生成コードを、S2STタスクに特化したモデルで置き換えることができます。それ以外のコードはまったく同じです。
>>> from transformers import SeamlessM4TForSpeechToSpeech
>>> model = SeamlessM4TForSpeechToSpeech.from_pretrained("facebook/hf-seamless-m4t-medium")
また、テキストからテキストへの生成コードを、T2TTタスクに特化したモデルで置き換えることもできます。generate_speech=False
を削除するだけです。
>>> from transformers import SeamlessM4TForTextToText
>>> model = SeamlessM4TForTextToText.from_pretrained("facebook/hf-seamless-m4t-medium")
SeamlessM4TForSpeechToText
と SeamlessM4TForTextToSpeech
も試してみてください。
2. 話者のIDを変更する
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 ライセンスの下で提供されています。