# Moshi

## Tổng quan

Mô hình Moshi được đề xuất trong [Moshi: a speech-text foundation model for real-time dialogue](https://huggingface.co/papers/2410.00037) bởi Alexandre Défossez, Laurent Mazaré, Manu Orsini, Amélie Royer, Patrick Pérez, Hervé Jégou, Edouard Grave và Neil Zeghidour.

Moshi là một mô hình nền tảng cho giọng nói và văn bản, xem xét đối thoại bằng lời nói như một bài toán sinh giọng nói từ giọng nói. Bắt đầu từ một khung xương sống của mô hình ngôn ngữ văn bản, Moshi tạo ra giọng nói dưới dạng các token từ bộ lượng tử hóa phần dư của một codec âm thanh neural, trong khi mô hình hóa riêng biệt giọng nói của chính nó và giọng nói của người dùng trong các luồng song song. Điều này cho phép loại bỏ các lượt nói người nói rõ ràng và mô hình hóa các động lực hội thoại tùy ý. Moshi cũng dự đoán các token văn bản được căn chỉnh theo thời gian như một tiền tố cho các token âm thanh. Phương pháp “Inner Monologue” này cải thiện đáng kể chất lượng ngôn ngữ của giọng nói được tạo ra và cung cấp nhận dạng giọng nói theo luồng và chuyển đổi văn bản thành giọng nói. Kết quả là, Moshi là mô hình ngôn ngữ lớn bằng lời nói full-duplex thời gian thực đầu tiên, với độ trễ lý thuyết là 160ms, và 200ms trong thực tế.

Tóm tắt từ bài báo như sau:

*Chúng tôi giới thiệu Moshi, một mô hình nền tảng cho giọng nói-văn bản và một khung đối thoại giọng nói full-duplex. Các hệ thống hiện tại cho đối thoại giọng nói dựa vào các pipeline gồm các thành phần độc lập, cụ thể là phát hiện hoạt động giọng nói, nhận dạng giọng nói, đối thoại văn bản và tổng hợp giọng nói từ văn bản. Những khung như vậy không thể mô phỏng trải nghiệm của các cuộc trò chuyện thực. Thứ nhất, độ phức tạp của chúng gây ra độ trễ vài giây giữa các tương tác. Thứ hai, vì văn bản là phương thức trung gian cho đối thoại, thông tin phi ngôn ngữ làm thay đổi ý nghĩa— chẳng hạn như cảm xúc hoặc âm thanh không phải giọng nói— bị mất trong tương tác. Cuối cùng, chúng dựa vào việc phân đoạn theo lượt nói của người nói, điều này không tính đến giọng nói chồng chéo, sự ngắt lời và các từ chêm. Moshi giải quyết toàn bộ những vấn đề độc lập này bằng cách xem đối thoại giọng nói như bài toán sinh giọng nói từ giọng nói. Bắt đầu từ một khung xương mô hình ngôn ngữ văn bản, Moshi sinh giọng nói dưới dạng các token từ bộ lượng tử hóa phần dư của một codec âm thanh neural, trong khi mô hình hóa riêng biệt giọng nói của chính nó và của người dùng trong các luồng song song. Điều này cho phép loại bỏ các lượt nói người nói tường minh và mô hình hóa các động lực hội thoại tùy ý. Hơn nữa, chúng tôi mở rộng việc sinh token từ ngữ nghĩa đến âm thanh theo phân cấp của các công trình trước đó để trước tiên dự đoán các token văn bản căn chỉnh theo thời gian như một tiền tố cho các token âm thanh. Không chỉ phương pháp “Inner Monologue” này cải thiện đáng kể chất lượng ngôn ngữ của giọng nói được sinh ra, mà chúng tôi còn minh họa cách nó có thể cung cấp nhận dạng giọng nói streaming và tổng hợp giọng nói từ văn bản. Mô hình kết quả của chúng tôi là mô hình ngôn ngữ lớn đối thoại giọng nói full-duplex thời gian thực đầu tiên, với độ trễ lý thuyết là 160ms, 200ms trong thực tế, và có sẵn tại github.com/kyutai-labs/moshi.*

Moshi xử lý 3 luồng thông tin:

1. Âm thanh của người dùng
2. Âm thanh của Moshi
3. Đầu ra văn bản của Moshi

Tương tự như [~MusicgenModel](/docs/transformers/v5.23.0/vi/model_doc/musicgen#transformers.MusicgenModel), âm thanh được biểu diễn bằng các audio codebook, có thể được hiểu giống như các token. Sự khác biệt chính giữa token văn bản và audio codebook là audio codebook đưa vào một chiều thông tin bổ sung. Token văn bản thường có kích thước `(batch_size, sequence_length)` trong khi token âm thanh có kích thước `(batch_size, num_codebooks, sequence_length)`.

Moshi được tạo thành từ 3 thành phần:

**1. Bộ giải mã chính (Helium trong bài báo)**

Nó tương ứng với [MoshiForCausalLM](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiForCausalLM). Đây là một LLM văn bản cổ điển, sử dụng kiến trúc tương tự như [~GemmaForCausalLM](/docs/transformers/v5.23.0/vi/model_doc/gemma#transformers.GemmaForCausalLM). Nói cách khác, nó nhận các token văn bản, nhúng chúng, đưa chúng qua bộ giải mã và một đầu ngôn ngữ, để lấy ra các logits văn bản.

**2. Bộ giải mã độ sâu**

Tự thân, nó cũng là một LLM kinh điển, nhưng lần này, thay vì tạo ra theo chiều thời gian, nó tạo ra theo chiều codebook.

Điều này cũng có nghĩa là độ dài ngữ cảnh của nó là `num_codebooks`, do đó nó không thể tạo ra nhiều hơn `num_codebooks`.

Lưu ý rằng mỗi timestamp - tức là mỗi codebook - có một bộ Linear Layers và Embeddings riêng.

**3. [MimiModel](/docs/transformers/v5.23.0/vi/model_doc/mimi#transformers.MimiModel)**

Đây là bộ mã hóa âm thanh từ Kyutai, gần đây đã được tích hợp vào transformers, dùng để “tokenize” âm thanh. Nó có cùng vai trò mà [~EncodecModel](/docs/transformers/v5.23.0/vi/model_doc/encodec#transformers.EncodecModel) đảm nhận trong [~MusicgenModel](/docs/transformers/v5.23.0/vi/model_doc/musicgen#transformers.MusicgenModel).

## Mẹo

Các checkpoint gốc có thể được chuyển đổi bằng script chuyển đổi `src/transformers/models/moshi/convert_moshi_transformers.py`

### Cách sử dụng mô hình

Cài đặt này có hai mục tiêu chính:

1. nhanh chóng kiểm tra việc tạo mô hình bằng cách đơn giản hóa API gốc
2. đơn giản hóa quá trình huấn luyện. Hướng dẫn huấn luyện sẽ sớm được công bố, nhưng chúng tôi rất hoan nghênh sự đóng góp từ người dùng!

Sản phẩm này được thiết kế cho mục đích sử dụng ở mức trung gian. Chúng tôi khuyến nghị mạnh mẽ việc sử dụng [implementation](https://github.com/kyutai-labs/moshi) gốc để suy luận mô hình trong streaming thời gian thực.

**1. Tạo mô hình**

Moshi là một mô hình tự hồi quy dạng streaming với hai luồng âm thanh. Nói cách khác, một luồng âm thanh tương ứng với những gì mô hình đã nói/sẽ nói và luồng âm thanh còn lại tương ứng với những gì người dùng đã nói/sẽ nói.

Do đó, [MoshiForConditionalGeneration.generate()](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiForConditionalGeneration.generate) cần 3 đầu vào:

1. `input_ids` - tương ứng với lịch sử token của văn bản
2. `moshi_input_values` hoặc `moshi_audio_codes` - tương ứng với lịch sử âm thanh của mô hình
3. `user_input_values` hoặc `user_audio_codes` - tương ứng với lịch sử âm thanh của người dùng

Ba đầu vào này phải được đồng bộ hóa. Nghĩa là độ dài của chúng phải tương ứng với cùng một số lượng token.

Bạn có thể sử dụng động 3 đầu vào tùy thuộc vào những gì bạn muốn kiểm tra:

1. Chỉ cần kiểm tra phản hồi của mô hình đối với một prompt của người dùng - trong trường hợp đó, `input_ids` có thể được điền bằng các token pad và `user_input_values` có thể là một tensor bằng 0 có cùng hình dạng với prompt của người dùng.
2. Kiểm tra hành vi phức tạp hơn - trong trường hợp đó, bạn phải cẩn thận về cách các token đầu vào được đồng bộ hóa với các tệp âm thanh.

Mô hình gốc đồng bộ hóa văn bản với âm thanh bằng cách đệm văn bản giữa mỗi lần phát âm token.

Để làm theo ví dụ trong hình ảnh dưới đây, `"Hello, I'm Moshi"` có thể được chuyển đổi thành `"Hello,<pad><unk>I'm Moshi"`.

[MoshiForConditionalGeneration.generate()](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiForConditionalGeneration.generate) sau đó tự động hồi quy (auto-regressively) đưa vào chính nó luồng âm thanh của nó, nhưng vì không có quyền truy cập vào luồng đầu vào của người dùng khi sử dụng `transformers`, nên nó sẽ **giả định rằng người dùng đang tạo ra âm thanh trống**.

```python
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_sequences
```

**2. Huấn luyện mô hình**

Phần lớn công việc phải được thực hiện trong quá trình tạo tiền xử lý dữ liệu, do yêu cầu phải căn chỉnh đồng bộ hóa các luồng.

Khi hoàn tất, bạn chỉ cần truyền `text_labels` và `audio_labels` vào [MoshiForConditionalGeneration.forward()](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiForConditionalGeneration.forward), cùng với các đầu vào thông thường, để lấy loss của mô hình.

Hướng dẫn huấn luyện sẽ sớm được cập nhật, nhưng chúng tôi luôn hoan nghênh sự đóng góp từ người dùng!

### Mô hình truyền các đầu vào / tạo ra

1. Các luồng đầu vào được nhúng và kết hợp thành `inputs_embeds`.

2. `inputs_embeds` được truyền qua bộ giải mã chính, nơi nó được xử lý giống như một LLM thông thường.

3. Bộ giải mã chính xuất ra `text logits` nhưng cũng xuất ra `last hidden state` của nó, được gọi là `temporal context` trong bài báo.

3. Bộ giải mã chiều sâu chuyển đổi chiều mà chúng ta truyền / tạo ra (các codebook thay vì thời gian). Nó sử dụng token được tạo từ `text logits` và `temporal context` để tự hồi quy tạo ra các codebook âm thanh.

Mô hình này được đóng góp bởi [Yoach Lacombe (ylacombe)](https://huggingface.co/ylacombe).

Mã nguồn gốc có thể được tìm thấy [tại đây](https://github.com/kyutai-labs/moshi).

## MoshiConfig[[transformers.MoshiConfig]]

#### transformers.MoshiConfig[[transformers.MoshiConfig]]

```python
transformers.MoshiConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 32000, hidden_size: int = 4096, num_hidden_layers: int = 32, num_attention_heads: int = 32, num_key_value_heads: int | None = None, audio_vocab_size: int | None = None, max_position_embeddings: int = 3000, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, hidden_act: str = 'silu', head_dim: int | None = None, initializer_range: float = 0.02, use_cache: bool = True, sliding_window: int = 3000, attention_dropout: float | int = 0.0, ffn_dim: int = 22528, rms_norm_eps: float = 1e-08, num_codebooks: int = 8, tie_word_embeddings: bool = False, pad_token_id: int | None = None, bos_token_id: int | None = None, eos_token_id: int | list[int] | None = None, audio_encoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, depth_decoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/configuration_moshi.py#L93)

**Tham số:**

vocab_size (`int`, *tùy chọn*, mặc định là `32000`) : Kích thước từ vựng của mô hình. Xác định số lượng token khác nhau có thể được biểu diễn bởi `input_ids`.

hidden_size (`int`, *tuỳ chọn*, mặc định là `4096`) : Kích thước của các biểu diễn ẩn.

num_hidden_layers (`int`, *tuỳ chọn*, mặc định là `32`) : Số lượng lớp ẩn trong bộ giải mã Transformer.

num_attention_heads (`int`, *tùy chọn*, mặc định là `32`) : Số lượng đầu chú ý cho mỗi lớp chú ý trong bộ giải mã Transformer.

num_key_value_heads (`int`, *optional*) : Đây là số lượng key_value heads cần được sử dụng để triển khai Grouped Query Attention. Nếu `num_key_value_heads=num_attention_heads`, mô hình sẽ sử dụng Multi Head Attention (MHA), nếu `num_key_value_heads=1` mô hình sẽ sử dụng Multi Query Attention (MQA), ngược lại GQA sẽ được sử dụng. Khi chuyển đổi một checkpoint multi-head sang checkpoint GQA, mỗi nhóm key và value head nên được xây dựng bằng cách meanpooling tất cả các head gốc trong nhóm đó. Để biết thêm chi tiết, hãy xem [bài báo này](https://huggingface.co/papers/2305.13245). Nếu không được chỉ định, giá trị mặc định sẽ là `num_attention_heads`.

audio_vocab_size (`int`, *tuỳ chọn*) : Kích thước từ vựng của phần âm thanh của mô hình. Xác định số lượng token khác nhau có thể được biểu diễn bởi `audio_codes` được truyền khi gọi các mô hình Moshi.

max_position_embeddings (`int`, *tuỳ chọn*, mặc định là `3000`) : Độ dài tối đa của chuỗi mà mô hình này có thể được sử dụng.

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`, *optional*) : Từ điển chứa các tham số cấu hình cho các embedding RoPE. Từ điển phải chứa một giá trị cho `rope_theta` và tùy chọn các tham số được sử dụng để mở rộng trong trường hợp bạn muốn sử dụng RoPE với `max_position_embeddings` dài hơn.

hidden_act (`str`, *tùy chọn*, mặc định là `silu`) : Hàm kích hoạt phi tuyến tính (hàm hoặc chuỗi) trong bộ giải mã. Ví dụ, `"gelu"`, `"relu"`, `"silu"`, v.v.

head_dim (`int`, *optional*) : Kích thước chiều của đầu chú ý. Nếu là None, giá trị mặc định sẽ là hidden_size // num_attention_heads

initializer_range (`float`, *optional*, mặc định là `0.02`) : Độ lệch chuẩn của truncated_normal_initializer để khởi tạo tất cả các ma trận trọng số.

use_cache (`bool`, *tùy chọn*, mặc định là `True`) : Xác định xem mô hình có nên trả về các chú ý key/values cuối cùng hay không (không được sử dụng bởi tất cả các mô hình). Chỉ liên quan nếu `config.is_decoder=True` hoặc khi mô hình là mô hình sinh chỉ có decoder.

sliding_window (`int`, *tuỳ chọn*, mặc định là `3000`) : Kích thước cửa sổ của chú ý cửa sổ trượt. Nếu là `None`, sẽ không áp dụng cửa sổ trượt.

attention_dropout (`Union[float, int]`, *tùy chọn*, mặc định là `0.0`) : Tỷ lệ dropout cho các xác suất chú ý.

ffn_dim (`int`, *optional*, mặc định là 22528) : Độ chiều của lớp "intermediate" (thường được gọi là feed-forward) trong khối decoder chính. Phải là số chẵn.

rms_norm_eps (`float`, *tuỳ chọn*, mặc định là `1e-08`) : Epsilon được sử dụng bởi các lớp chuẩn hóa rms.

num_codebooks (`int`, *tuỳ chọn*, mặc định là `8`) : Số lượng codebook song song được mô hình sử dụng.

tie_word_embeddings (`bool`, *tùy chọn*, mặc định là `False`) : Có nên gắn kết các nhúng trọng số theo ánh xạ `tied_weights_keys` của mô hình hay không.

pad_token_id (`int`, *tùy chọn*) : Id của token được sử dụng để đệm (padding) trong từ vựng.

bos_token_id (`int`, *tùy chọn*) : Id của token được sử dụng cho đầu luồng trong bảng từ vựng.

eos_token_id (`Union[int, list[int]]`, *tùy chọn*) : Id của token được sử dụng cho end-of-stream trong bảng từ vựng.

audio_encoder_config (`PreTrainedConfig | dict`, *tùy chọn*) : Cấu hình cho bộ mã hóa âm thanh.

depth_decoder_config (`PreTrainedConfig | dict`, *tùy chọn*) : Cấu hình cho bộ giải mã độ sâu.

Đây là lớp cấu hình để lưu trữ cấu hình của một MoshiModel. Nó được sử dụng để khởi tạo một mô hình Moshi theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như của [kmhf/hf-moshika](https://huggingface.co/kmhf/hf-moshika)

Các đối tượng cấu hình kế thừa từ [PreTrainedConfig](/docs/transformers/v5.23.0/vi/main_classes/configuration#transformers.PreTrainedConfig) và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ [PreTrainedConfig](/docs/transformers/v5.23.0/vi/main_classes/configuration#transformers.PreTrainedConfig) để biết thêm thông tin.

Ví dụ:

```python
>>> 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[[transformers.MoshiConfig.from_audio_encoder_config]]

```python
from_audio_encoder_config(audio_encoder_config: PreTrainedConfig, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/configuration_moshi.py#L199)

**Trả về:** [MoshiConfig](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiConfig)

Một đối tượng cấu hình

Tạo một [MoshiConfig](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiConfig) (hoặc một lớp kế thừa) từ cấu hình bộ mã hóa âm thanh.

## MoshiDepthConfig[[transformers.MoshiDepthConfig]]

#### transformers.MoshiDepthConfig[[transformers.MoshiDepthConfig]]

```python
transformers.MoshiDepthConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 32000, hidden_size: int = 1024, input_size: int = 4096, num_hidden_layers: int = 6, num_attention_heads: int = 16, num_key_value_heads: int | None = None, audio_vocab_size: int = 2048, max_position_embeddings: int = 9, hidden_act: str = 'silu', head_dim: int | None = None, initializer_range: float = 0.02, use_cache: bool = True, sliding_window: int = 8, attention_dropout: float | int = 0.0, ffn_dim: int = 5632, rms_norm_eps: float = 1e-08, num_codebooks: int = 8, tie_word_embeddings: bool = False, pad_token_id: int | None = None, bos_token_id: int | None = None, eos_token_id: int | list[int] | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/configuration_moshi.py#L26)

**Tham số:**

vocab_size (`int`, *tùy chọn*, mặc định là `32000`) : Kích thước từ vựng của mô hình. Xác định số lượng token khác nhau có thể được biểu diễn bởi `input_ids`.

hidden_size (`int`, *tuỳ chọn*, mặc định là `1024`) : Kích thước của các biểu diễn ẩn.

input_size (`int`, *tuỳ chọn*, mặc định là 4096) : Độ chiều của các trạng thái ẩn đầu vào. Được dùng để kết nối bộ giải mã chính với bộ giải mã chiều sâu.

num_hidden_layers (`int`, *tuỳ chọn*, mặc định là `6`) : Số lượng lớp ẩn trong bộ giải mã Transformer.

num_attention_heads (`int`, *tuỳ chọn*, mặc định là `16`) : Số lượng đầu chú ý cho mỗi lớp chú ý trong bộ giải mã Transformer.

num_key_value_heads (`int`, *optional*) : Đây là số lượng key_value heads cần được sử dụng để triển khai Grouped Query Attention. Nếu `num_key_value_heads=num_attention_heads`, mô hình sẽ sử dụng Multi Head Attention (MHA), nếu `num_key_value_heads=1` mô hình sẽ sử dụng Multi Query Attention (MQA), ngược lại GQA sẽ được sử dụng. Khi chuyển đổi một checkpoint multi-head sang checkpoint GQA, mỗi nhóm key và value head nên được xây dựng bằng cách meanpooling tất cả các head gốc trong nhóm đó. Để biết thêm chi tiết, hãy xem [bài báo này](https://huggingface.co/papers/2305.13245). Nếu không được chỉ định, giá trị mặc định sẽ là `num_attention_heads`.

audio_vocab_size (`int`, *tuỳ chọn*, mặc định là 2048) : Kích thước từ vựng của phần âm thanh trong mô hình. Xác định số lượng token khác nhau có thể được biểu diễn bởi `audio_codes` được truyền khi gọi các mô hình Moshi.

max_position_embeddings (`int`, *tuỳ chọn*, mặc định là `9`) : Độ dài chuỗi tối đa mà mô hình này có thể được sử dụng.

hidden_act (`str`, *tùy chọn*, mặc định là `silu`) : Hàm kích hoạt phi tuyến tính (hàm hoặc chuỗi) trong bộ giải mã. Ví dụ, `"gelu"`, `"relu"`, `"silu"`, v.v.

head_dim (`int`, *optional*) : Kích thước chiều của đầu chú ý. Nếu là None, giá trị mặc định sẽ là hidden_size // num_attention_heads

initializer_range (`float`, *optional*, mặc định là `0.02`) : Độ lệch chuẩn của truncated_normal_initializer để khởi tạo tất cả các ma trận trọng số.

use_cache (`bool`, *tùy chọn*, mặc định là `True`) : Xác định xem mô hình có nên trả về các chú ý key/values cuối cùng hay không (không được sử dụng bởi tất cả các mô hình). Chỉ liên quan nếu `config.is_decoder=True` hoặc khi mô hình là mô hình sinh chỉ có decoder.

sliding_window (`int`, *tuỳ chọn*, mặc định là `8`) : Kích thước cửa sổ của chú ý cửa sổ trượt. Nếu là `None`, sẽ không áp dụng cửa sổ trượt.

attention_dropout (`Union[float, int]`, *tùy chọn*, mặc định là `0.0`) : Tỷ lệ dropout cho các xác suất chú ý.

ffn_dim (`int`, *optional*, mặc định là 5632) : Độ chiều của lớp "trung gian" (thường được gọi là feed-forward) trong khối depth decoder. Phải là số chẵn.

rms_norm_eps (`float`, *tuỳ chọn*, mặc định là `1e-08`) : Epsilon được sử dụng bởi các lớp chuẩn hóa rms.

num_codebooks (`int`, *tuỳ chọn*, mặc định là `8`) : Số lượng codebook song song được mô hình sử dụng.

tie_word_embeddings (`bool`, *tùy chọn*, mặc định là `False`) : Có nên gắn kết các nhúng trọng số theo ánh xạ `tied_weights_keys` của mô hình hay không.

pad_token_id (`int`, *tùy chọn*) : Id của token được sử dụng để đệm (padding) trong từ vựng.

bos_token_id (`int`, *tùy chọn*) : Id của token được sử dụng cho đầu luồng trong bảng từ vựng.

eos_token_id (`Union[int, list[int]]`, *tùy chọn*) : Id của token được sử dụng cho end-of-stream trong bảng từ vựng.

Đây là lớp cấu hình để lưu trữ cấu hình của một MoshiModel. Nó được sử dụng để khởi tạo một mô hình Moshi theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như của [kmhf/hf-moshika](https://huggingface.co/kmhf/hf-moshika)

Các đối tượng cấu hình kế thừa từ [PreTrainedConfig](/docs/transformers/v5.23.0/vi/main_classes/configuration#transformers.PreTrainedConfig) và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ [PreTrainedConfig](/docs/transformers/v5.23.0/vi/main_classes/configuration#transformers.PreTrainedConfig) để biết thêm thông tin.

Ví dụ:

```python
>>> 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.config
```

## MoshiModel[[transformers.MoshiModel]]

#### transformers.MoshiModel[[transformers.MoshiModel]]

```python
transformers.MoshiModel(config: MoshiConfig)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/modeling_moshi.py#L735)

**Tham số:**

config ([MoshiConfig](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiConfig)) : Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình sẽ không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức [from_pretrained()](/docs/transformers/v5.23.0/vi/main_classes/model#transformers.PreTrainedModel.from_pretrained) để tải trọng số mô hình.

Moshi Model cơ bản, xuất ra các hidden-states thô mà không có head cụ thể nào ở phía trên.

Mô hình này kế thừa từ [PreTrainedModel](/docs/transformers/v5.23.0/vi/main_classes/model#transformers.PreTrainedModel). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu ra, v.v.)

Mô hình này cũng là một lớp con của [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

#### forward[[transformers.MoshiModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/modeling_moshi.py#L754)

**Tham số:**

input_ids (`torch.LongTensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Chỉ số của các token trong chuỗi đầu vào theo từ vựng. Mặc định, các token đệm (padding) sẽ bị bỏ qua. Có thể lấy chỉ số bằng cách sử dụng [AutoTokenizer](/docs/transformers/v5.23.0/vi/model_doc/auto#transformers.AutoTokenizer). Xem [PreTrainedTokenizer.encode()](/docs/transformers/v5.23.0/vi/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) và [PreTrainedTokenizer.__call__()](/docs/transformers/v5.23.0/vi/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) để biết chi tiết. [ID đầu vào là gì?](../glossary#input-ids)

attention_mask (`torch.Tensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Mặt nạ để tránh thực hiện chú ý trên các chỉ số token đệm. Các giá trị mặt nạ được chọn trong `[0, 1]`:  - 1 cho các token **không bị che**, - 0 cho các token **bị che**.  [Mặt nạ chú ý là gì?](../glossary#attention-mask)

position_ids (`torch.LongTensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Chỉ số của vị trí các token trong mỗi chuỗi đầu vào trong các embedding vị trí. Được chọn trong khoảng `[0, config.n_positions - 1]`.  [Position IDs là gì?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *tùy chọn*) : Các hidden-states đã tính trước (key và values trong các khối self-attention và cross-attention) có thể được sử dụng để tăng tốc giải mã tuần tự. Điều này thường bao gồm `past_key_values` do mô hình trả về ở một giai đoạn giải mã trước đó, khi `use_cache=True` hoặc `config.use_cache=True`.  Chỉ cho phép [Cache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.Cache) instance làm đầu vào, xem [hướng dẫn kv cache](https://huggingface.co/docs/transformers/en/kv_cache) của chúng tôi. Nếu không truyền `past_key_values`, [DynamicCache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.DynamicCache) sẽ được khởi tạo theo mặc định.  Mô hình sẽ xuất ra cùng định dạng cache được đưa vào làm đầu vào.  Nếu sử dụng `past_key_values`, người dùng được kỳ vọng chỉ nhập các `input_ids` chưa được xử lý (những phần chưa có trạng thái key value quá khứ được cung cấp cho mô hình này) có shape `(batch_size, unprocessed_length)` thay vì tất cả `input_ids` có shape `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` có hình dạng `(batch_size, sequence_length, hidden_size)`, *tùy chọn*) : Tùy chọn, thay vì truyền `input_ids`, bạn có thể chọn cách truyền trực tiếp một biểu diễn nhúng. Điều này hữu ích nếu bạn muốn kiểm soát nhiều hơn cách chuyển đổi các chỉ số `input_ids` thành các vector liên quan so với ma trận tra cứu nhúng nội bộ của mô hình.

use_cache (`bool`, *tùy chọn*) : Nếu được đặt thành `True`, các trạng thái khóa và giá trị `past_key_values` sẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xem `past_key_values`).

**Trả về:** [BaseModelOutputWithPast](/docs/transformers/v5.23.0/vi/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) hoặc `tuple(torch.Tensor)`

Một [BaseModelOutputWithPast](/docs/transformers/v5.23.0/vi/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) hoặc một tuple của `torch.Tensor` (nếu `return_dict=False` được truyền hoặc khi `config.return_dict=False`) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình ([MoshiConfig](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiConfig)) và đầu vào.

Phương thức forward của [MoshiModel](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiModel) ghi đè lên phương thức đặc biệt `__call__`.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, bạn nên gọi instance của `Module` sau đó thay vì gọi hàm này, vì instance `Module` sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ bỏ qua chúng một cách im lặng.

- **last_hidden_state** (`torch.Tensor` có hình dạng `(batch_size, sequence_length, hidden_size)`) -- Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.

  Nếu `past_key_values` được sử dụng, chỉ có hidden-state cuối cùng của các chuỗi có shape `(batch_size, 1, hidden_size)` được xuất ra.
- **past_key_values** (`Cache`, *tùy chọn*, được trả về khi `use_cache=True` được truyền vào hoặc khi `config.use_cache=True`) -- Đây là một instance của [Cache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.Cache). Để biết thêm chi tiết, hãy xem [hướng dẫn về kv cache](https://huggingface.co/docs/transformers/en/kv_cache) của chúng tôi.

  Chứa các hidden-states đã được tính trước (key và values trong các khối self-attention và tùy chọn nếu `config.is_encoder_decoder=True` trong các khối cross-attention) có thể được sử dụng (xem đầu vào `past_key_values`) để tăng tốc độ giải mã tuần tự.
- **hidden_states** (`tuple(torch.Tensor)`, *tuỳ chọn*, được trả về khi `output_hidden_states=True` được truyền vào hoặc khi `config.output_hidden_states=True`) -- Bộ tuple của `torch.Tensor` (một cho đầu ra của các embedding, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng `(batch_size, sequence_length, hidden_size)`.

  Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.
- **attentions** (`tuple(torch.Tensor)`, *tuỳ chọn*, được trả về khi `output_attentions=True` được truyền vào hoặc khi `config.output_attentions=True`) -- Bộ tuple của `torch.Tensor` (một cho mỗi lớp) có hình dạng `(batch_size, num_heads, sequence_length, sequence_length)`.

  Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

## MoshiForCausalLM[[transformers.MoshiForCausalLM]]

#### transformers.MoshiForCausalLM[[transformers.MoshiForCausalLM]]

```python
transformers.MoshiForCausalLM(config: MoshiConfig)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/modeling_moshi.py#L807)

**Tham số:**

config ([MoshiConfig](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiConfig)) : Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình sẽ không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức [from_pretrained()](/docs/transformers/v5.23.0/vi/main_classes/model#transformers.PreTrainedModel.from_pretrained) để tải trọng số mô hình.

Mô hình giải mã Moshi có đầu mô hình hóa ngôn ngữ văn bản ở trên. Chỉ có thể sử dụng cho văn bản.

Mô hình này kế thừa từ [PreTrainedModel](/docs/transformers/v5.23.0/vi/main_classes/model#transformers.PreTrainedModel). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu ra, v.v.)

Mô hình này cũng là một lớp con của [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

#### forward[[transformers.MoshiForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, labels: typing.Optional[torch.LongTensor] = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/modeling_moshi.py#L820)

**Tham số:**

input_ids (`torch.LongTensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Chỉ số của các token trong chuỗi đầu vào theo từ vựng. Mặc định, các token đệm (padding) sẽ bị bỏ qua. Có thể lấy chỉ số bằng cách sử dụng [AutoTokenizer](/docs/transformers/v5.23.0/vi/model_doc/auto#transformers.AutoTokenizer). Xem [PreTrainedTokenizer.encode()](/docs/transformers/v5.23.0/vi/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) và [PreTrainedTokenizer.__call__()](/docs/transformers/v5.23.0/vi/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) để biết chi tiết. [ID đầu vào là gì?](../glossary#input-ids)

attention_mask (`torch.Tensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Mặt nạ để tránh thực hiện chú ý trên các chỉ số token đệm. Các giá trị mặt nạ được chọn trong `[0, 1]`:  - 1 cho các token **không bị che**, - 0 cho các token **bị che**.  [Mặt nạ chú ý là gì?](../glossary#attention-mask)

position_ids (`torch.LongTensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Chỉ số của vị trí các token trong mỗi chuỗi đầu vào trong các embedding vị trí. Được chọn trong khoảng `[0, config.n_positions - 1]`.  [Position IDs là gì?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *tùy chọn*) : Các hidden-states đã tính trước (key và values trong các khối self-attention và cross-attention) có thể được sử dụng để tăng tốc giải mã tuần tự. Điều này thường bao gồm `past_key_values` do mô hình trả về ở một giai đoạn giải mã trước đó, khi `use_cache=True` hoặc `config.use_cache=True`.  Chỉ cho phép [Cache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.Cache) instance làm đầu vào, xem [hướng dẫn kv cache](https://huggingface.co/docs/transformers/en/kv_cache) của chúng tôi. Nếu không truyền `past_key_values`, [DynamicCache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.DynamicCache) sẽ được khởi tạo theo mặc định.  Mô hình sẽ xuất ra cùng định dạng cache được đưa vào làm đầu vào.  Nếu sử dụng `past_key_values`, người dùng được kỳ vọng chỉ nhập các `input_ids` chưa được xử lý (những phần chưa có trạng thái key value quá khứ được cung cấp cho mô hình này) có shape `(batch_size, unprocessed_length)` thay vì tất cả `input_ids` có shape `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` có hình dạng `(batch_size, sequence_length, hidden_size)`, *tùy chọn*) : Tùy chọn, thay vì truyền `input_ids`, bạn có thể chọn cách truyền trực tiếp một biểu diễn nhúng. Điều này hữu ích nếu bạn muốn kiểm soát nhiều hơn cách chuyển đổi các chỉ số `input_ids` thành các vector liên quan so với ma trận tra cứu nhúng nội bộ của mô hình.

use_cache (`bool`, *tùy chọn*) : Nếu được đặt thành `True`, các trạng thái khóa và giá trị `past_key_values` sẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xem `past_key_values`).

labels (`torch.LongTensor` có shape `(batch_size, sequence_length)`, *tùy chọn*) : Nhãn để tính toán tổn thất mô hình hóa ngôn ngữ nhân quả. Chỉ số phải nằm trong `[-100, 0, ..., config.vocab_size]` (xem docstring của `input_ids`). Các token có chỉ số được đặt thành `-100` sẽ bị bỏ qua (bị mask), tổn thất chỉ được tính cho các token có nhãn trong `[0, ..., config.vocab_size]`.  Các nhãn được **lệch đi bên trong** để `labels[..., 1:]` được dùng để dự đoán `logits[..., :-1, :]`. Hãy truyền các nhãn chưa bị lệch, khớp với `input_ids` (tức là `labels = input_ids`). **Không** tự lệch các nhãn trước khi truyền chúng.  Nếu các nhãn đã bị lệch (ví dụ khi dùng sequence parallelism), hãy truyền chúng dưới dạng tham số từ khóa `shift_labels` và chúng sẽ được dùng nguyên vẹn. `labels` vẫn phải được truyền để tổn thất được tính toán.

logits_to_keep (`Union[int, torch.Tensor]`, *tùy chọn*, mặc định là `0`) : Nếu là `int`, tính logits cho `logits_to_keep` token cuối. Nếu là `0`, tính logits cho tất cả `input_ids` (trường hợp đặc biệt). Chỉ cần logits của token cuối cho quá trình sinh, và việc chỉ tính cho token đó có thể tiết kiệm bộ nhớ, điều này trở nên khá đáng kể với các chuỗi dài hoặc kích thước từ vựng lớn. Nếu là `torch.Tensor`, phải là 1 chiều tương ứng với các chỉ số cần giữ trong chiều độ dài chuỗi. Điều này hữu ích khi sử dụng định dạng tensor đóng gói (một chiều duy nhất cho batch và độ dài chuỗi).

**Trả về:** `MoshiCausalLMOutputWithPast` hoặc `tuple(torch.Tensor)`

Một `MoshiCausalLMOutputWithPast` hoặc một tuple của `torch.Tensor` (nếu `return_dict=False` được truyền hoặc khi `config.return_dict=False`) bao gồm các phần tử khác nhau tùy thuộc vào cấu hình ([MoshiConfig](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiConfig)) và đầu vào.

Phương thức forward của [MoshiForCausalLM](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiForCausalLM) ghi đè lên phương thức đặc biệt `__call__`.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, bạn nên gọi instance của `Module` sau đó thay vì gọi hàm này, vì instance `Module` sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ bỏ qua chúng một cách im lặng.

- **loss** (`torch.Tensor` có shape `(1,)`, *optional*, được trả về khi `labels` được cung cấp) -- Loss của language modeling (cho next-token prediction).
- **logits** (`torch.Tensor` có hình dạng `(batch_size, sequence_length, config.vocab_size)`) -- Điểm dự đoán của đầu mô hình hóa ngôn ngữ (điểm cho mỗi token từ vựng trước SoftMax).
- **last_hidden_state** (`torch.Tensor` có hình dạng `(batch_size, sequence_length, hidden_size)`, *tùy chọn*) -- Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.
- **past_key_values** (`Cache`, *tùy chọn*, được trả về khi `use_cache=True` được truyền vào hoặc khi `config.use_cache=True`) -- Đây là một instance của [Cache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.Cache). Để biết thêm chi tiết, hãy xem [hướng dẫn về kv cache](https://huggingface.co/docs/transformers/en/kv_cache) của chúng tôi.

  Chứa các hidden-states đã được tính trước (key và values trong các khối self-attention) có thể được sử dụng (xem đầu vào `past_key_values`) để tăng tốc độ giải mã tuần tự.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *tùy chọn*, được trả về khi `output_hidden_states=True` được truyền vào hoặc khi `config.output_hidden_states=True`) -- Bộ tuple các `torch.Tensor` (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng `(batch_size, sequence_length, hidden_size)`.

  Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.
- **attentions** (`tuple[torch.Tensor, ...]`, *tùy chọn*, được trả về khi `output_attentions=True` được truyền vào hoặc khi `config.output_attentions=True`) -- Bộ tuple của `torch.Tensor` (một cho mỗi lớp) có hình dạng `(batch_size, num_heads, sequence_length, sequence_length)`.

  Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

Ví dụ:

```python
>>> 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]]

#### transformers.MoshiForConditionalGeneration[[transformers.MoshiForConditionalGeneration]]

```python
transformers.MoshiForConditionalGeneration(config: MoshiConfig)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/modeling_moshi.py#L884)

**Tham số:**

config ([MoshiConfig](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiConfig)) : Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình sẽ không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức [from_pretrained()](/docs/transformers/v5.23.0/vi/main_classes/model#transformers.PreTrainedModel.from_pretrained) để tải trọng số mô hình.

Mô hình Moshi gốc với bộ mã hóa âm thanh, bộ giải mã chiều sâu Moshi và bộ giải mã Moshi, dành cho chuyển đổi giọng nói sang giọng nói.

Mô hình này kế thừa từ [PreTrainedModel](/docs/transformers/v5.23.0/vi/main_classes/model#transformers.PreTrainedModel). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu ra, v.v.)

Mô hình này cũng là một lớp con của [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

#### forward[[transformers.MoshiForConditionalGeneration.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.BoolTensor] = None, user_input_values: typing.Optional[torch.Tensor] = None, user_audio_codes: typing.Optional[torch.Tensor] = None, moshi_input_values: typing.Optional[torch.Tensor] = None, moshi_audio_codes: typing.Optional[torch.Tensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, text_labels: typing.Optional[torch.LongTensor] = None, audio_labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/modeling_moshi.py#L911)

**Tham số:**

input_ids (`torch.LongTensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Chỉ số của các token trong chuỗi đầu vào theo từ vựng. Mặc định, các token đệm (padding) sẽ bị bỏ qua. Có thể lấy chỉ số bằng cách sử dụng [AutoTokenizer](/docs/transformers/v5.23.0/vi/model_doc/auto#transformers.AutoTokenizer). Xem [PreTrainedTokenizer.encode()](/docs/transformers/v5.23.0/vi/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) và [PreTrainedTokenizer.__call__()](/docs/transformers/v5.23.0/vi/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) để biết chi tiết. [ID đầu vào là gì?](../glossary#input-ids)

attention_mask (`torch.BoolTensor` có shape `(batch_size, sequence_length)`, *tùy chọn*) : Mặt nạ để tránh thực hiện chú ý trên các chỉ số token đệm. Các giá trị mặt nạ được chọn trong `[0, 1]`:  - 1 cho các token **không bị che**, - 0 cho các token **bị che**.  [Mặt nạ chú ý là gì?](../glossary#attention-mask)

user_input_values (`torch.Tensor `có shape `(batch_size, 1, audio_sequence_length), *tùy chọn*) : Các dạng sóng âm thanh được sử dụng làm prompt người dùng dạng âm thanh cho quá trình sinh.

user_audio_codes (`torch.Tensor `of shape `(batch_size, num_codebooks, sequence_length), *optional*) : The audio codes used as audio user prompt for the generation. Has priority over `user_input_values` and represents the audio "tokens" of `user_input_values` once passed through the audio encoder.

moshi_input_values (`torch.Tensor `có shape `(batch_size, 1, audio_sequence_length), *tùy chọn*) : Các dạng sóng âm thanh được sử dụng làm prompt âm thanh Moshi cho quá trình sinh.

moshi_audio_codes (`torch.Tensor ` of shape `(batch_size, num_codebooks, sequence_length), *optional*) : The audio codes used as audio Moshi prompt for the generation. Has priority over `moshi_input_values` and represents the audio "tokens" of `moshi_input_values` once passed through the audio encoder.

past_key_values (`~cache_utils.Cache`, *tùy chọn*) : Các hidden-states đã tính trước (key và values trong các khối self-attention và cross-attention) có thể được sử dụng để tăng tốc giải mã tuần tự. Điều này thường bao gồm `past_key_values` do mô hình trả về ở một giai đoạn giải mã trước đó, khi `use_cache=True` hoặc `config.use_cache=True`.  Chỉ cho phép [Cache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.Cache) instance làm đầu vào, xem [hướng dẫn kv cache](https://huggingface.co/docs/transformers/en/kv_cache) của chúng tôi. Nếu không truyền `past_key_values`, [DynamicCache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.DynamicCache) sẽ được khởi tạo theo mặc định.  Mô hình sẽ xuất ra cùng định dạng cache được đưa vào làm đầu vào.  Nếu sử dụng `past_key_values`, người dùng được kỳ vọng chỉ nhập các `input_ids` chưa được xử lý (những phần chưa có trạng thái key value quá khứ được cung cấp cho mô hình này) có shape `(batch_size, unprocessed_length)` thay vì tất cả `input_ids` có shape `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` có shape `(batch_size, sequence_length, hidden_size)`, *tùy chọn*) : Tùy chọn, thay vì truyền `input_ids`, bạn có thể chọn cách truyền trực tiếp một biểu diễn nhúng. Nếu `past_key_values` được sử dụng, tùy chọn chỉ cần nhập `inputs_embeds` cuối cùng (xem `past_key_values`). Điều này hữu ích nếu bạn muốn kiểm soát nhiều hơn cách chuyển đổi các chỉ số `input_ids` thành các vector liên quan so với ma trận tra cứu nhúng nội bộ của mô hình. Nếu cả `input_ids` và `inputs_embeds` đều không được đặt, `inputs_embeds` sẽ nhận giá trị của `inputs_embeds`.

text_labels (`torch.LongTensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Nhãn cho mô hình hóa ngôn ngữ văn bản. Lưu ý rằng các nhãn **được dịch chuyển** bên trong mô hình, tức là bạn có thể đặt `labels = input_ids` Các chỉ số được chọn trong `[-100, 0, ..., config.vocab_size]` Tất cả các nhãn được đặt thành `-100` sẽ bị bỏ qua (che), loss chỉ được tính cho các nhãn trong `[0, ..., config.vocab_size]`

audio_labels (`torch.LongTensor` có hình dạng `(batch_size, num_codebooks, sequence_length)`, *tùy chọn*) : Nhãn cho mô hình hóa ngôn ngữ. Lưu ý rằng các nhãn **được dịch chuyển** bên trong mô hình, tức là bạn có thể đặt `labels = input_ids` Các chỉ số được chọn trong `[-100, 0, ..., config.vocab_size]` Tất cả các nhãn được đặt thành `-100` sẽ bị bỏ qua (che), tổn thất chỉ được tính cho các nhãn trong `[0, ..., config.audio_vocab_size]`

use_cache (`bool`, *tùy chọn*) : Nếu được đặt thành `True`, các trạng thái khóa và giá trị `past_key_values` sẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xem `past_key_values`).

**Trả về:** `MoshiConditionalGenerationOutputWithPast` hoặc `tuple(torch.Tensor)`

Một `MoshiConditionalGenerationOutputWithPast` hoặc một tuple của `torch.Tensor` (nếu `return_dict=False` được truyền hoặc khi `config.return_dict=False`) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình ([MoshiConfig](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiConfig)) và đầu vào.

Phương thức forward của [MoshiForConditionalGeneration](/docs/transformers/v5.23.0/vi/model_doc/moshi#transformers.MoshiForConditionalGeneration) ghi đè lên phương thức đặc biệt `__call__`.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, bạn nên gọi instance của `Module` sau đó thay vì gọi hàm này, vì instance `Module` sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ bỏ qua chúng một cách im lặng.

- **loss** (`torch.Tensor` có shape `(1,)`, *optional*, được trả về khi `text_labels` được cung cấp) -- Mất mô hình hóa ngôn ngữ văn bản (cho dự đoán token tiếp theo).
- **logits** (`torch.Tensor` có hình dạng `(batch_size, sequence_length, config.vocab_size)`) -- Điểm dự đoán của đầu mô hình ngôn ngữ văn bản (điểm cho mỗi token trong bảng từ vựng trước khi áp dụng SoftMax).
- **last_hidden_state** (`torch.Tensor` có hình dạng `(batch_size, sequence_length, hidden_size)`, *tùy chọn*) -- Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.
- **past_key_values** (`Cache`, *tùy chọn*, được trả về khi `use_cache=True` được truyền vào hoặc khi `config.use_cache=True`) -- Đây là một instance của [Cache](/docs/transformers/v5.23.0/vi/internal/generation_utils#transformers.Cache). Để biết thêm chi tiết, hãy xem [hướng dẫn về kv cache](https://huggingface.co/docs/transformers/en/kv_cache) của chúng tôi.

  Chứa các hidden-states đã được tính trước (key và values trong các khối self-attention) có thể được sử dụng (xem đầu vào `past_key_values`) để tăng tốc độ giải mã tuần tự.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *tùy chọn*, được trả về khi `output_hidden_states=True` được truyền vào hoặc khi `config.output_hidden_states=True`) -- Bộ tuple các `torch.Tensor` (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng `(batch_size, sequence_length, hidden_size)`.

  Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.
- **attentions** (`tuple[torch.Tensor, ...]`, *tùy chọn*, được trả về khi `output_attentions=True` được truyền vào hoặc khi `config.output_attentions=True`) -- Bộ tuple của `torch.Tensor` (một cho mỗi lớp) có hình dạng `(batch_size, num_heads, sequence_length, sequence_length)`.

  Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.
- **depth_loss** (`torch.Tensor` có hình dạng `(1,)`, *tùy chọn*, được trả về khi `audio_labels` được cung cấp) -- Mất mô hình hóa ngôn ngữ âm thanh (cho dự đoán token tiếp theo).
- **audio_logits** (`torch.Tensor` có hình dạng `(batch_size, sequence_length, config.vocab_size)`) -- Điểm dự đoán của các đầu mô hình ngôn ngữ âm thanh.
- **depth_past_key_values** (`Cache`, *tùy chọn*, được trả về khi `use_cache=True` được truyền vào hoặc khi `config.use_cache=True`) -- Các key-value quá khứ của bộ giải mã chiều sâu.
- **depth_hidden_states** (`tuple(torch.Tensor)`, *tùy chọn*, được trả về khi truyền `output_hidden_states=True` hoặc khi `config.output_hidden_states=True`) -- Trạng thái ẩn của bộ giải mã chiều sâu
- **depth_attentions** (`tuple(torch.Tensor)`, *tuỳ chọn*, được trả về khi truyền `output_attentions=True` hoặc khi `config.output_attentions=True`) -- Trọng số Attentions của bộ giải mã chiều sâu sau softmax của attention, được dùng để tính trung bình có trọng số trong các đầu self-attention.

Ví dụ:
```python
>>> 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[[transformers.MoshiForConditionalGeneration.generate]]

```python
generate(input_ids: typing.Optional[torch.LongTensor] = None, user_input_values: typing.Optional[torch.Tensor] = None, user_audio_codes: typing.Optional[torch.Tensor] = None, moshi_input_values: typing.Optional[torch.Tensor] = None, moshi_audio_codes: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, return_audio_waveforms: bool | None = True, return_audio_codes: bool | None = None, concat_unconditional_inputs: bool | None = True, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/modeling_moshi.py#L1203)

**Tham số:**

input_ids (`torch.Tensor `có shape `(batch_size, sequence_length), *tùy chọn*) : Chuỗi được sử dụng làm prompt văn bản cho quá trình sinh.

user_input_values (`torch.Tensor `có shape `(batch_size, 1, audio_sequence_length), *tùy chọn*) : Các dạng sóng âm thanh được sử dụng làm prompt người dùng dạng âm thanh cho quá trình sinh.

user_audio_codes (`torch.Tensor `of shape `(batch_size, num_codebooks, sequence_length), *optional*) : The audio codes used as audio user prompt for the generation. Has priority over `user_input_values` and represents the audio "tokens" of `user_input_values` once passed through the audio encoder.

moshi_input_values (`torch.Tensor `có shape `(batch_size, 1, audio_sequence_length), *tùy chọn*) : Các dạng sóng âm thanh được sử dụng làm prompt âm thanh Moshi cho quá trình sinh.

moshi_audio_codes (`torch.Tensor ` of shape `(batch_size, num_codebooks, sequence_length), *optional*) : The audio codes used as audio Moshi prompt for the generation. Has priority over `moshi_input_values` and represents the audio "tokens" of `moshi_input_values` once passed through the audio encoder.

inputs_embeds (`torch.Tensor` có shape `(batch_size, sequence_length, hidden_size)`, *tùy chọn*) : Thay vì truyền `input_ids` và các đầu vào âm thanh, bạn có thể chọn cách truyền trực tiếp một biểu diễn nhúng. Cách này hữu ích nếu bạn muốn kiểm soát nhiều hơn về cách chuyển đổi các đầu vào thành các vector tương ứng so với ma trận tra cứu nhúng nội bộ của mô hình.

return_audio_waveforms (`bool`, *tùy chọn*, mặc định là `True`) : Nếu `False`, sẽ không tạo ra các dạng sóng âm thanh.

return_audio_codes (`bool`, *tuỳ chọn*) : Nếu `True`, sẽ trả về cả các mã âm thanh đã tạo, tức là các "token" âm thanh trung gian sẽ được chuyển đổi thành `audio_sequences` khi đi qua bộ giải mã âm thanh.

concat_unconditional_inputs (`bool`, *tùy chọn*, mặc định là `True`) : Nếu `False`, sẽ không nối các token âm thanh và văn bản ban đầu.

kwargs (`dict[str, Any]`, *tùy chọn*) : Từ điển các đối số từ khóa còn lại được truyền cho phương thức `generate`. Tham khảo [`generate` docstrings](https://huggingface.co/docs/transformers/main/en/main_classes/text_generation#transformers.GenerationMixin.generate) gốc để biết thêm thông tin về cách sử dụng chúng. Lưu ý rằng các từ khóa có tiền tố *depth_* sẽ là đầu vào cho phương thức `generate` của bộ giải mã chiều sâu. Ngược lại, bộ giải mã chiều sâu sẽ sử dụng cấu hình sinh mặc định của nó.

**Trả về:**

`MoshiConditionalGenerationGenerateOutput`

Tạo ra các chuỗi id token văn bản và id token âm thanh.

#### get_unconditional_inputs[[transformers.MoshiForConditionalGeneration.get_unconditional_inputs]]

```python
get_unconditional_inputs(num_samples = 1)
```

[Nguồn](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/moshi/modeling_moshi.py#L1632)

**Tham số:**

num_samples (int, *tùy chọn*) : Số lượng mẫu âm thanh cần tạo ra một cách vô điều kiện.

max_new_tokens (int, *tùy chọn*) : Số lượng token cần tạo cho mỗi mẫu. Số token càng lớn thì mẫu âm thanh càng dài, nhưng đổi lại thời gian suy luận sẽ lâu hơn (vì cần tạo thêm nhiều token âm thanh cho mỗi mẫu).

Hàm phụ trợ để lấy các đầu vào null cho việc tạo không điều kiện, cho phép mô hình được sử dụng mà không cần bộ trích xuất đặc trưng hoặc bộ mã hóa.

Ví dụ:
```python
>>> 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)
```

