Transformers documentation
Moshi
このモデルは2024年9月17日にHF papersで公開され、2024年10月16日にHugging Face Transformersに貢献されました。
Moshi
概要
Moshiモデルは、Alexandre Défossez、Laurent Mazaré、Manu Orsini、Amélie Royer、Patrick Pérez、Hervé Jégou、Edouard Grave、Neil Zeghidour による Moshi: a speech-text foundation model for real-time dialogue で提案されました。
Moshi は、音声対話を音声から音声への生成として定式化する音声・テキスト基盤モデルです。テキスト言語モデルのバックボーンを起点とし、ニューラルオーディオコーデックの残差量子化器からトークンとして音声を生成します。同時に、モデル自身の音声とユーザーの音声を並列ストリームとして個別にモデル化します。これにより、明示的な話者ターンを不要にし、任意の会話ダイナミクスをモデル化できます。Moshi はまた、オーディオトークンのプレフィックスとして、時間整合性のあるテキストトークンを予測します。この「Inner Monologue」手法により、生成音書の言語品質が大幅に向上し、ストリーミング音声認識とテキストから音声への合成(TTS)を提供します。その結果、Moshi は理論上 160ms、実用上 200ms のレイテンシを持つ、初のリアルタイム全二重音声大規模言語モデルとなります。

論文の抄録は以下の通りです。
私たちは、音声・テキスト基盤モデルであり、フルデュプレックスの音声対話フレームワークである Moshi を紹介します。現在の音声対話システムは、音声活動検出、音声認識、テキスト対話、テキスト読み上げ(TTS)といった独立したコンポーネントのパイプラインに依存しています。このようなフレームワークでは、実際の会話の体験を模倣することができません。第一に、その複雑さにより、インタラクション間に数秒の遅延が生じます。第二に、対話の中間モダリティがテキストであるため、意味を修正する非言語情報(感情や非音声の音など)がインタラクションの過程で失われます。最後に、これらは話者のターンへのセグメンテーションに依存しており、重なり合う音声、割り込み、間投詞を考慮していません。Moshi は、音声対話を音声から音声への生成として定式化することで、これらの独立した問題をまとめて解決します。テキスト言語モデルのバックボーンを起点として、Moshi はニューラルオーディオコーデックの残差量子化器からトークンとして音声を生成し、自身の音声とユーザーの音声を並列ストリームとしてそれぞれ独立にモデル化します。これにより、明示的な話者のターンを排除し、任意の会話ダイナミクスをモデル化することが可能になります。さらに、Moshi は先行研究の階層的な意味論トークンから音響トークンへの生成を拡張し、音声トークンのプレフィックスとして時間整合されたテキストトークンを先に予測します。この「Inner Monologue」手法は、生成される音声の言語的品質を大幅に向上させるだけでなく、ストリーミング音声認識やテキスト読み上げ(TTS)を提供する方法も示しています。その結果得られたモデルは、理論上の遅延が 160ms、実用上 200ms の、初のリアルタイムフルデュプレックス音声大規模言語モデルであり、github.com/kyutai-labs/moshi で利用可能です。
Moshi は 3 つの情報ストリームを扱います:
- ユーザーの音声
- Moshiのオーディオ
- Moshiのテキスト出力
~MusicgenModelと同様に、音声は音声コードブックで表現され、トークンと同様に解釈できます。テキストトークンと音声コードブックの主な違いは、音声コードブックが情報の追加の次元を導入することです。
テキストトークンは通常、次元が(batch_size, sequence_length)ですが、音声トークンは次元が(batch_size, num_codebooks, sequence_length)です。
Moshi は3つのコンポーネントで構成されています:
1. メインのデコーダー(論文では Helium と呼ばれる)
これは MoshiForCausalLM に対応します。これは ~GemmaForCausalLM と同様のアーキテクチャを使用する、純粋なテキスト LLM です。つまり、テキストトークンを受け取り、埋め込みを行い、デコーダーと言語ヘッドを通過させることで、テキストのロジットを取得します。
2. 深度デコーダー
単体では、これもまたクラシックなLLMですが、今回は時間次元ではなく、コードブック次元に沿って生成を行います。
また、そのコンテキスト長はnum_codebooksであるため、num_codebooksを超える生成はできません。
各タイムスタンプ、つまり各コードブックには、それぞれ固有のLinear LayersとEmbeddingsのセットが割り当てられる点に注意してください。
3. MimiModel
これは、Kyutai によるオーディオエンコーダーで、最近 transformers に統合されました。音声の「トークン化」に使用されます。~MusicgenModel における ~EncodecModel と同じ用途を持ちます。
ヒント
元のチェックポイントは、変換スクリプトsrc/transformers/models/moshi/convert_moshi_transformers.pyを使用して変換できます。
モデルの使用方法
この実装には、主に2つの目的があります。
- 元のAPIを簡略化して、モデルの生成を素早くテストします
- トレーニングを簡素化します。トレーニングガイドは近日公開予定ですが、ユーザーからの貢献を歓迎しています!
中級者向けの使用を想定して設計されています。リアルタイムストリーミングでモデルを推論する場合は、元の実装の使用を強く推奨します。
1. モデルの生成
Moshi は、2 つの音声ストリームを持つストリーミング型自己回帰モデルです。言い換えれば、1 つの音声ストリームはモデルが話した/話す内容に対応し、もう 1 つの音声ストリームはユーザーが話した/話す内容に対応します。
したがって、MoshiForConditionalGeneration.generate() には3つの入力が必要です:
input_ids- テキストのトークン履歴に対応moshi_input_valuesまたはmoshi_audio_codes- モデルの音声履歴に対応user_input_valuesまたはuser_audio_codes- ユーザーの音声履歴に対応
これら3つの入力は同期させる必要があります。つまり、それらの長さが同じトークン数に対応している必要があります。
テストしたい内容に応じて、3つの入力を動的に使用できます。
- ユーザープロンプトに対するモデルの応答を確認するだけで十分です。その場合、
input_idsにはパッドトークンを、user_input_valuesにはユーザープロンプトと同じ形状のゼロテンソルを設定できます。 - より複雑な動作をテストする場合は、入力トークンとオーディオの同期方法に注意する必要があります。
元のモデルでは、各トークンの発話の間にテキストをパディングすることで、テキストとオーディオを同期しています。
次の図の例に従うと、
"Hello, I'm Moshi"は"Hello,<pad><unk>I'm Moshi"に変換できます。

MoshiForConditionalGeneration.generate() は、自身の音声ストリームを自己回帰的に自身にフィードバックしますが、transformers を使用している間はユーザーの入力ストリームにアクセスできないため、ユーザーが空白の音声を出力していると仮定します。
import math
import torch
from datasets import Audio, load_dataset
from transformers import AutoFeatureExtractor, AutoTokenizer
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
feature_extractor = AutoFeatureExtractor.from_pretrained("kyutai/moshiko-pytorch-bf16")
tokenizer = AutoTokenizer.from_pretrained("kyutai/moshiko-pytorch-bf16")
dtype = torch.bfloat16
# prepare user input audio
librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
audio_sample = librispeech_dummy[-1]["audio"]["array"]
user_input_values = feature_extractor(raw_audio=audio_sample, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt").to(device=device, dtype=dtype)
# prepare moshi input values - we suppose moshi didn't say anything while the user spoke
moshi_input_values = torch.zeros_like(user_input_values.input_values)
# prepare moshi input ids - we suppose moshi didn't say anything while the user spoke
num_tokens = math.ceil(moshi_input_values.shape[-1] * waveform_to_token_ratio)
input_ids = torch.ones((1, num_tokens), device=device, dtype=torch.int64) * tokenizer.encode("<pad>")[0]
# generate 25 new tokens (around 2s of audio)
output = model.generate(input_ids=input_ids, user_input_values=user_input_values.input_values, moshi_input_values=moshi_input_values, max_new_tokens=25)
text_tokens = output.sequences
audio_waveforms = output.audio_sequences2. モデルの学習
ストリームをアライン/同期させる必要があるため、ほとんどの作業はデータ作成/前処理の段階で行う必要があります。
完了後、通常の入力に加えてtext_labelsとaudio_labelsをMoshiForConditionalGeneration.forward()に渡すだけで、モデルの損失を取得できます。
トレーニングガイドは近日公開予定です。ユーザーからの貢献を歓迎しています!
モデルはどのようにして入力をフォワードし、生成を行うのですか
入力ストリームは埋め込まれ、
inputs_embedsに結合されます。inputs_embedsはメインのデコーダーに渡され、通常のLLMと同様に処理されます。メインのデコーダーは
text logitsを出力しますが、last hidden stateも出力します。これは論文ではtemporal contextと呼ばれています。深度デコーダーは、フォワード / 生成を行う次元を切り替えます(時間ではなくコードブック)。
text logitsから生成されたトークンとtemporal contextを使用して、オートレグレッシブにオーディオコードブックを生成します。
このモデルは、Yoach Lacombe (ylacombe) によって提供されました。
元のコードはこちらで確認できます。
MoshiConfig
クラス transformers.MoshiConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 32000hidden_size: int = 4096num_hidden_layers: int = 32num_attention_heads: int = 32num_key_value_heads: int | None = Noneaudio_vocab_size: int | None = Nonemax_position_embeddings: int = 3000rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonehidden_act: str = 'silu'head_dim: int | None = Noneinitializer_range: float = 0.02use_cache: bool = Truesliding_window: int = 3000attention_dropout: float | int = 0.0ffn_dim: int = 22528rms_norm_eps: float = 1e-08num_codebooks: int = 8tie_word_embeddings: bool = Falsepad_token_id: int | None = Nonebos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Noneaudio_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonedepth_decoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None )
パラメータ
- vocab_size (
int、任意、デフォルトは32000) — モデルの語彙サイズです。input_idsで表現できるトークンの種類数を定義します。 - hidden_size (
int、任意、デフォルトは4096) — 隠れ表現の次元数。 - num_hidden_layers (
int、任意、デフォルトは32) — Transformer デコーダーの隠れ層の数。 - num_attention_heads (
int、任意、デフォルトは32) — Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。 - num_key_value_heads (
int, 任意) — Grouped Query Attention を実装するために使用する key_value ヘッドの数です。num_key_value_heads=num_attention_headsの場合、モデルは Multi Head Attention (MHA) を使用し、num_key_value_heads=1の場合は Multi Query Attention (MQA) を使用し、それ以外の場合は GQA が使用されます。 マルチヘッドのチェックポイントを GQA チェックポイントに変換する際は、各グループの key ヘッドと value ヘッドは、そのグループ内の元のすべてのヘッドを平均プーリングして構築する必要があります。詳細については、この論文を参照してください。指定されない場合、デフォルトでnum_attention_headsが使用されます。 - audio_vocab_size (
int, 任意) — モデルの音声部分の語彙サイズです。Moshi モデルを呼び出す際に渡すaudio_codesで表せるトークンの種類数を定義します。 - max_position_embeddings (
int、任意、デフォルトは3000) — このモデルが使用される可能性のある最大シーケンス長です。 - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], 省略可) — RoPE 埋め込みの設定パラメータを含む辞書です。この辞書にはrope_thetaの値が含まれており、より長いmax_position_embeddingsで RoPE を使用する場合にスケーリングに使用されるパラメータが任意で含まれます。 - hidden_act (
str、任意、デフォルトはsilu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、"relu"、"silu"など。 - head_dim (
int、省略可) — アテンションヘッドの次元です。None の場合、hidden_size // num_attention_heads がデフォルトとして使用されます。 - initializer_range (
float、任意、デフォルトは0.02) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。 - use_cache (
bool、任意、デフォルトはTrue) — モデルが最後のキー/バリューの注意を返すかどうか(すべてのモデルで利用されるわけではありません)。config.is_decoder=Trueの場合、またはモデルがデコーダー専用の生成モデルである場合にのみ関連します。 - sliding_window (
int、任意、デフォルトは3000) — スライディングウィンドウアテンションのウィンドウサイズ。Noneの場合、スライディングウィンドウは適用されません。 - attention_dropout (
Union[float, int]、任意、デフォルトは0.0) — アテンション確率のドロップアウト率です。 - ffn_dim (
int, 任意、デフォルトは 22528) — メインのデコーダーブロックにおける「中間」層(feed-forward 層とも呼ばれる)の次元数。偶数である必要があります。 - rms_norm_eps (
float、任意、デフォルトは1e-08) — RMS 正規化レイヤーで使用する epsilon です。 - num_codebooks (
int、任意、デフォルトは8) — モデルが使用する並列コードブックの数。 - tie_word_embeddings (
bool、任意、デフォルトはFalse) — モデルのtied_weights_keysマッピングに従って重み埋め込みを共有するかどうかを指定します。 - pad_token_id (
int, 任意) — 語彙内でパディングに使用されるトークン ID。 - bos_token_id (
int, 省略可) — 語彙におけるストリーム開始に使用されるトークン ID。 - eos_token_id (
Union[int, list[int]], 省略可) — 語彙内でストリーム終了に使用されるトークン ID。 - audio_encoder_config (
PreTrainedConfig | dict, 任意) — オーディオエンコーダーの設定です。 - depth_decoder_config (
PreTrainedConfig | dict、任意) — 深度デコーダーの設定です。
これは MoshiModel の設定を保存するための設定クラスです。指定された引数に基づいて Moshi モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、kmhf/hf-moshika と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
例:
>>> from transformers import (
... MoshiConfig,
... MoshiForConditionalGeneration,
... )
>>> configuration = MoshiConfig()
>>> # Initializing a MoshiForConditionalGeneration (with random weights) from the kmhf/hf-moshika style configuration
>>> model = MoshiForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # Saving the model, including its configuration
>>> model.save_pretrained("kmhf/hf-moshika")
>>> # loading model and config from pretrained folder
>>> moshi_config = MoshiConfig.from_pretrained("kmhf/hf-moshika")
>>> model = MoshiForConditionalGeneration.from_pretrained("kmhf/hf-moshika", config=moshi_config)from_audio_encoder_config
< source >( audio_encoder_config: PreTrainedConfig**kwargs ) → MoshiConfig
戻り値
設定オブジェクトのインスタンス
オーディオエンコーダーの設定から、MoshiConfig(または派生クラス)をインスタンス化します。
MoshiDepthConfig
クラス transformers.MoshiDepthConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 32000hidden_size: int = 1024input_size: int = 4096num_hidden_layers: int = 6num_attention_heads: int = 16num_key_value_heads: int | None = Noneaudio_vocab_size: int = 2048max_position_embeddings: int = 9hidden_act: str = 'silu'head_dim: int | None = Noneinitializer_range: float = 0.02use_cache: bool = Truesliding_window: int = 8attention_dropout: float | int = 0.0ffn_dim: int = 5632rms_norm_eps: float = 1e-08num_codebooks: int = 8tie_word_embeddings: bool = Falsepad_token_id: int | None = Nonebos_token_id: int | None = Noneeos_token_id: int | list[int] | None = None )
パラメータ
- vocab_size (
int、任意、デフォルトは32000) — モデルの語彙サイズです。input_idsで表現できるトークンの種類数を定義します。 - hidden_size (
int、任意、デフォルトは1024) — 隠れ表現の次元数。 - input_size (
int、任意、デフォルト値は 4096) — 入力隠れ状態の次元数。メインデコーダーと深度デコーダーを接続するために使用されます。 - num_hidden_layers (
int、任意、デフォルトは6) — Transformer デコーダーの隠れ層の数。 - num_attention_heads (
int、任意、デフォルトは16) — Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。 - num_key_value_heads (
int, 任意) — Grouped Query Attention を実装するために使用する key_value ヘッドの数です。num_key_value_heads=num_attention_headsの場合、モデルは Multi Head Attention (MHA) を使用し、num_key_value_heads=1の場合は Multi Query Attention (MQA) を使用し、それ以外の場合は GQA が使用されます。 マルチヘッドのチェックポイントを GQA チェックポイントに変換する際は、各グループの key ヘッドと value ヘッドは、そのグループ内の元のすべてのヘッドを平均プーリングして構築する必要があります。詳細については、この論文を参照してください。指定されない場合、デフォルトでnum_attention_headsが使用されます。 - audio_vocab_size (
int、任意、デフォルト値は 2048) — モデルの音声部分の語彙サイズです。Moshi モデルを呼び出す際に渡すaudio_codesで表現できるトークンの種類数を定義します。 - max_position_embeddings (
int、任意、デフォルトは9) — このモデルが使用される可能性のある最大シーケンス長です。 - hidden_act (
str、任意、デフォルトはsilu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、"relu"、"silu"など。 - head_dim (
int、省略可) — アテンションヘッドの次元です。None の場合、hidden_size // num_attention_heads がデフォルトとして使用されます。 - initializer_range (
float、任意、デフォルトは0.02) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。 - use_cache (
bool、任意、デフォルトはTrue) — モデルが最後のキー/バリューの注意を返すかどうか(すべてのモデルで利用されるわけではありません)。config.is_decoder=Trueの場合、またはモデルがデコーダー専用の生成モデルである場合にのみ関連します。 - sliding_window (
int、任意、デフォルトは8) — スライディングウィンドウアテンションのウィンドウサイズ。Noneの場合、スライディングウィンドウは適用されません。 - attention_dropout (
Union[float, int]、任意、デフォルトは0.0) — アテンション確率のドロップアウト率です。 - ffn_dim (
int, 任意、デフォルト値は 5632) — 深度デコーダーブロック内の「中間」層(feed-forward 層と呼ばれることが多い)の次元数。偶数である必要があります。 - rms_norm_eps (
float、任意、デフォルトは1e-08) — RMS 正規化レイヤーで使用する epsilon です。 - num_codebooks (
int、任意、デフォルトは8) — モデルが使用する並列コードブックの数。 - tie_word_embeddings (
bool、任意、デフォルトはFalse) — モデルのtied_weights_keysマッピングに従って重み埋め込みを共有するかどうかを指定します。 - pad_token_id (
int, 任意) — 語彙内でパディングに使用されるトークン ID。 - bos_token_id (
int, 省略可) — 語彙におけるストリーム開始に使用されるトークン ID。 - eos_token_id (
Union[int, list[int]], 省略可) — 語彙内でストリーム終了に使用されるトークン ID。
これは MoshiModel の設定を保存するための設定クラスです。指定された引数に基づいて Moshi モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、kmhf/hf-moshika と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
例:
>>> from transformers import (
... MoshiDepthConfig,
... MoshiDepthDecoder,
... )
>>> configuration = MoshiDepthConfig()
>>> # Initializing a MoshiDepthDecoder (with random weights) from the kmhf/hf-moshika style configuration
>>> model = MoshiDepthDecoder(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMoshiModel
クラス transformers.MoshiModel
< source >( config: MoshiConfig )
パラメータ
- config (MoshiConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
特定のヘッドを上に載せずに、生の隠れ状態を出力する素の Moshi Model。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- position_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - use_cache (
bool、任意) —Trueに設定すると、past_key_valuesのキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_valuesを参照)。
戻り値
BaseModelOutputWithPast または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または BaseModelOutputWithPast。設定(MoshiConfig)や入力に応じて、さまざまな要素で構成されます。
MoshiModelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。past_key_valuesが使用されている場合、出力されるのは、形状(batch_size, 1, hidden_size)のシーケンスの最後の隠れ状態のみです。past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。自己アテンションブロック(および
config.is_encoder_decoder=Trueの場合、クロスカレンションブロック)の事前計算済みヒドゥンステート(キーとバリュー)を保持します。これらは逐次デコーディングを高速化するために使用できます(past_key_values入力参照)。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
MoshiForCausalLM
クラス transformers.MoshiForCausalLM
< source >( config: MoshiConfig )
パラメータ
- config (MoshiConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
テキスト言語モデリングヘッドを上部に備えた Moshi デコーダーモデルです。テキストの処理にのみ使用できます。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = Nonelabels: typing.Optional[torch.LongTensor] = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoshiCausalLMOutputWithPast or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- position_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲[0, config.n_positions - 1]. - past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - use_cache (
bool、任意) —Trueに設定すると、past_key_valuesのキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_valuesを参照)。 - labels (
torch.LongTensor、shape(batch_size, sequence_length)、任意) — マスク言語モデリング損失を計算するためのラベルです。インデックスは[0, ..., config.vocab_size]の範囲内であるか、-100 である必要があります(input_idsの docstring を参照)。インデックスが-100に設定されたトークンは無視(マスク)され、損失は[0, ..., config.vocab_size]の範囲内のラベルを持つトークンに対してのみ計算されます。 - logits_to_keep (
Union[int, torch.Tensor]、省略可、デフォルトは0) —intの場合、最後のlogits_to_keepトークンについて logits を計算します。0の場合、すべてのinput_idsについて logits を計算します(特殊ケース)。生成には最後のトークンの logits だけで十分であり、そのトークンのみについて計算することでメモリを節約できます。これは、長いシーケンスや大規模な語彙サイズの場合に特に顕著な効果があります。torch.Tensorの場合、シーケンス長次元で保持するインデックスに対応する 1 次元テンソルである必要があります。これは、パックされたテンソル形式(バッチとシーケンス長を単一の次元にまとめた形式)を使用する場合に有用です。
戻り値
MoshiCausalLMOutputWithPast または tuple(torch.FloatTensor)
MoshiCausalLMOutputWithPast、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(MoshiConfig)や入力に応じて、さまざまな要素で構成されます。
MoshiForCausalLM の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
loss (
torch.FloatTensor、shape(1,)、optional、labelsが指定された場合に返されます) — 言語モデリングの損失(次のトークン予測用)。logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)、optional) — モデルの最終層の出力における隠れ状態のシーケンス。past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。逐次デコーディングを高速化するために使用できる(
past_key_values入力参照)、事前計算済みの隠れ状態(自己注意ブロックのキーとバリュー)が含まれます。hidden_states (
tuple[torch.FloatTensor, ...]、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple[torch.FloatTensor, ...]、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)です。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
例:
>>> from transformers import AutoTokenizer, MoshiForCausalLM
>>> model = MoshiForCausalLM.from_pretrained("kmhf/hf-moshika")
>>> tokenizer = AutoTokenizer.from_pretrained("kmhf/hf-moshika")
>>> prompt = "What is your favorite condiment?"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"What is your favorite condiment?"MoshiForConditionalGeneration
クラス transformers.MoshiForConditionalGeneration
< source >( config: MoshiConfig )
パラメータ
- config (MoshiConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
The original Moshi model with an audio encoder, a Moshi depth decoder and a Moshi decoder, for speech-to-speech.
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.BoolTensor] = Noneuser_input_values: typing.Optional[torch.FloatTensor] = Noneuser_audio_codes: typing.Optional[torch.Tensor] = Nonemoshi_input_values: typing.Optional[torch.FloatTensor] = Nonemoshi_audio_codes: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonetext_labels: typing.Optional[torch.LongTensor] = Noneaudio_labels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs ) → MoshiConditionalGenerationOutputWithPast or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- attention_mask (
torch.BoolTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- user_input_values (
torch.Tensor、形状 `(batch_size, 1, audio_sequence_length)`、任意) — 生成のためのオーディオユーザープロンプトとして使用されるオーディオ波形です。 - user_audio_codes (
torch.Tensorof shape(batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio user prompt for the generation. Has priority overuser_input_valuesand represents the audio "tokens" ofuser_input_values` once passed through the audio encoder. - moshi_input_values (
torch.Tensor、形状 `(batch_size, 1, audio_sequence_length)`、任意) — 生成用のオーディオ Moshi プロンプトとして使用されるオーディオ波形です。 - moshi_audio_codes (
torch.Tensorof shape(batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio Moshi prompt for the generation. Has priority overmoshi_input_valuesand represents the audio "tokens" ofmoshi_input_values` once passed through the audio encoder. - past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.FloatTensorの形状(batch_size, sequence_length, hidden_size), 、任意) — 任意で、input_idsの代わりに、埋め込み表現を直接渡すこともできます。past_key_valuesが使用されている場合、最後のinputs_embedsのみを入力すればよい場合があります(past_key_values). これは、モデル内部の埋め込み参照行列よりも、input_idsインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に便利です。input_idsとinputs_embedsの両方が未設定の場合、inputs_embedsはinputs_embedsの値を採ります。 - text_labels (
torch.LongTensor、形状(batch_size, sequence_length)、任意) — テキスト言語モデリング用のラベルです。モデル内部ではラベルがシフトされるため、labels = input_idsと設定できます。インデックスは[-100, 0, ..., config.vocab_size]から選択されます。-100に設定されたすべてのラベルは無視(マスク)され、損失は[0, ..., config.vocab_size]内のラベルに対してのみ計算されます。 - audio_labels (
torch.LongTensor、shape(batch_size, num_codebooks, sequence_length)、任意) — 言語モデリング用のラベルです。モデル内部ではラベルがシフトされるため、labels = input_idsと設定できます。インデックスは[-100, 0, ..., config.vocab_size]から選択されます。-100に設定されたすべてのラベルは無視(マスク)され、損失は[0, ..., config.audio_vocab_size]内のラベルに対してのみ計算されます。 - use_cache (
bool、任意) —Trueに設定すると、past_key_valuesのキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_valuesを参照)。
戻り値
MoshiConditionalGenerationOutputWithPast または tuple(torch.FloatTensor)
MoshiConditionalGenerationOutputWithPast または、return_dict=False が渡された場合、または config.return_dict=False の場合に torch.FloatTensor のタプル。設定(MoshiConfig)や入力に応じて、さまざまな要素で構成されます。
MoshiForConditionalGenerationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
loss (
torch.FloatTensor、shape(1,)、optional、text_labelsが指定された場合に返されます) — テキスト言語モデリングの損失(次のトークン予測用)。logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — テキスト言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)、optional) — モデルの最終層の出力における隠れ状態のシーケンス。past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。逐次デコーディングを高速化するために使用できる(
past_key_values入力参照)、事前計算済みの隠れ状態(自己注意ブロックのキーとバリュー)が含まれます。hidden_states (
tuple[torch.FloatTensor, ...]、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple[torch.FloatTensor, ...]、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)です。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
depth_loss (
torch.FloatTensor、shape(1,)、optional、audio_labelsが指定された場合に返されます) — 音声言語モデリングの損失(次のトークン予測用)。audio_logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 音声言語モデリングヘッドの予測スコア。depth_past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます)— depth デコーダーの過去のキーとバリュー。depth_hidden_states (
tuple(torch.FloatTensor)、任意、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)— depth decoder の隠れ状態depth_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) — self-attention heads における加重平均を計算するために使用される、attention softmax 後の Depth decoder の Attentions 重み
例:
>>> from transformers import MoshiForConditionalGeneration
>>> import torch
>>> model = MoshiForConditionalGeneration.from_pretrained("kmhf/hf-moshika")
>>> inputs = moshi.get_unconditional_inputs()
>>> logits = model(**inputs, ).logits
>>> logits.shape # (bsz, seq_len, text_vocab_size)
torch.Size([1, 1, 32000])generate
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneuser_input_values: typing.Optional[torch.FloatTensor] = Noneuser_audio_codes: typing.Optional[torch.Tensor] = Nonemoshi_input_values: typing.Optional[torch.FloatTensor] = Nonemoshi_audio_codes: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonereturn_audio_waveforms: bool | None = Truereturn_audio_codes: bool | None = Noneconcat_unconditional_inputs: bool | None = True**kwargs )
パラメータ
- input_ids (
torch.Tensor、shape `(batch_size, sequence_length)`、任意) — 生成のテキストプロンプトとして使用されるシーケンスです。 - user_input_values (
torch.Tensor、形状 `(batch_size, 1, audio_sequence_length)`、任意) — 生成のためのオーディオユーザープロンプトとして使用されるオーディオ波形です。 - user_audio_codes (
torch.Tensorof shape(batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio user prompt for the generation. Has priority overuser_input_valuesand represents the audio "tokens" ofuser_input_values` once passed through the audio encoder. - moshi_input_values (
torch.Tensor、形状 `(batch_size, 1, audio_sequence_length)`、任意) — 生成用のオーディオ Moshi プロンプトとして使用されるオーディオ波形です。 - moshi_audio_codes (
torch.Tensorof shape(batch_size, num_codebooks, sequence_length), *optional*) -- The audio codes used as audio Moshi prompt for the generation. Has priority overmoshi_input_valuesand represents the audio "tokens" ofmoshi_input_values` once passed through the audio encoder. - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsとオーディオ入力を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込み参照行列よりも、入力を対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - return_audio_waveforms (
bool、省略可能、デフォルトはTrue) —Falseの場合、オーディオ波形を生成しません。 - return_audio_codes (
bool、省略可) —Trueの場合、生成されたオーディオコード、つまりオーディオデコーダを通過するとaudio_sequencesに変換される中間のオーディオ「トークン」も返します。 - concat_unconditional_inputs (
bool、省略可、デフォルトはTrue) —Falseの場合、初期の音声トークンとテキストトークンを連結しません。 - kwargs (
dict[str, Any], 省略可) —generateメソッドに渡される残りのキーワード引数の辞書です。これらの使用方法の詳細については、元のgenerateのドキュメント文字列 を参照してください。 depth_ プレフィックス付きのキーワードは、depth decoder のgenerateメソッドへの入力として使用されます。それ以外のキーワードについては、後者がデフォルトの生成設定を使用します。
テキストトークンIDとオーディオトークンIDのシーケンスを生成します。
get_unconditional_inputs
< source >( num_samples = 1 )
無条件生成用の null 入力を取得するためのヘルパー関数です。これにより、feature extractor や tokenizer を使用せずにモデルを利用できます。
例:
>>> from transformers import MoshiForConditionalGeneration
>>> model = MoshiForConditionalGeneration.from_pretrained("kmhf/hf-moshika")
>>> # get the unconditional (or 'null') inputs for the model
>>> unconditional_inputs = model.get_unconditional_inputs(num_samples=1)
>>> audio_samples = model.generate(**unconditional_inputs, max_new_tokens=256)