Transformers documentation
NLLB-MOE
Эта модель была опубликована в HF papers 11.07.2022 и добавлена в Hugging Face Transformers 27.03.2023.
NLLB-MOE
Обзор
Модель NLLB была представлена в статье No Language Left Behind: Scaling Human-Centered Machine Translation авторами Marta R. Costa-jussà, James Cross, Onur Çelebi, Maha Elbayad, Kenneth Heafield, Kevin Heffernan, Elahe Kalbassi, Janice Lam, Daniel Licht, Jean Maillard, Anna Sun, Skyler Wang, Guillaume Wenzek, Al Youngblood, Bapi Akula, Loic Barrault, Gabriel Mejia Gonzalez, Prangthip Hansanti, John Hoffman, Semarley Jarrett, Kaushik Ram Sadagopan, Dirk Rowe, Shannon Spruit, Chau Tran, Pierre Andrews, Necip Fazil Ayan, Shruti Bhosale, Sergey Edunov, Angela Fan, Cynthia Gao, Vedanuj Goswami, Francisco Guzmán, Philipp Koehn, Alexandre Mourachko, Christophe Ropers, Safiyyah Saleem, Holger Schwenk и Jeff Wang.
Аннотация к статье следующая:
Стремясь устранить языковые барьеры в глобальном масштабе, машинный перевод прочно закрепился в качестве ключевого направления исследований в области искусственного интеллекта. Однако такие усилия сосредоточены на небольшом подмножестве языков, оставляя за бортом подавляющее большинство языков, в основном с низким объёмом данных. Что необходимо, чтобы преодолеть барьер в 200 языков, обеспечивая при этом безопасные и высококачественные результаты с учётом этических соображений? В работе No Language Left Behind мы приняли этот вызов, сначала определив потребность в поддержке перевода языков с низким объёмом данных через исследовательские интервью с носителями языка. Затем мы создали наборы данных и модели, направленные на сокращение разрыва в производительности между языками с низким и высоким объёмом данных. Более конкретно, мы разработали модель условных вычислений на основе Sparsely Gated Mixture of Experts, обученную на данных, полученных с помощью новых и эффективных методов добычи данных, адаптированных для языков с низким объёмом данных. Мы предлагаем несколько архитектурных и обучающих улучшений для противодействия переобучению при обучении на тысячах задач. Принципиально важно, что мы оценили производительность более 40 000 различных направлений перевода, используя эталонный набор данных, переведённый людьми, Flores-200, и объединили человеческую оценку с новым бенчмарком токсичности, охватывающим все языки Flores-200, для оценки безопасности перевода. Наша модель обеспечивает улучшение на 44% BLEU по сравнению с предыдущим уровнем передовых технологий, закладывая важный фундамент для создания универсальной системы перевода.
Эта модель была предоставлена Arthur Zucker. Исходный код можно найти здесь.
Советы по использованию
- M2M100ForConditionalGeneration — это базовая модель как для NLLB, так и для NLLB MoE
- NLLB-MoE очень похож на модель NLLB, но его слой feed forward основан на реализации SwitchTransformers.
- Токенизатор такой же, как у моделей NLLB.
Различия в реализации по сравнению с SwitchTransformers
Главное отличие заключается в способе маршрутизации токенов. NLLB-MoE использует top-2-gate, что означает, что для каждого входного сигнала выбираются только два лучших эксперта на основе
наивысших предсказанных вероятностей от сети маршрутизации, а остальные эксперты игнорируются. В SwitchTransformers вычисляются только вероятности top-1,
что означает, что у токенов меньше шансов быть переданными дальше. Кроме того, если токен не маршрутизируется ни к одному эксперту, SwitchTransformers всё равно добавляет его неизмененные скрытые
состояния (похоже на остаточное соединение), тогда как в механизме top-2 маршрутизации NLLB они маскируются.
Генерация с NLLB-MoE
Доступные контрольные точки занимают около 350 ГБ дискового пространства. Убедитесь, что вы используете accelerate, если на вашем компьютере недостаточно оперативной памяти.
При генерации целевого текста установите forced_bos_token_id в идентификатор целевого языка. В следующем примере показано, как переводить с английского на французский с помощью модели facebook/nllb-200-distilled-600M.
Обратите внимание, что мы используем код BCP-47 для французского языка fra_Latn. Список всех кодов BCP-47 в наборе данных Flores 200 можно найти здесь.
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-moe-54b")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-moe-54b", device_map="auto")
article = "Previously, Ring's CEO, Jamie Siminoff, remarked the company started when his doorbell wasn't audible from his shop in his garage."
inputs = tokenizer(article, return_tensors="pt").to(model.device)
translated_tokens = model.generate(
**inputs, forced_bos_token_id=tokenizer.lang_code_to_id["fra_Latn"], max_length=50
)
tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
"Auparavant, le PDG de Ring, Jamie Siminoff, a fait remarquer que la société avait commencé lorsque sa sonnette n'était pas audible depuis son magasin dans son garage."Генерация из любого языка, кроме английского
Язык по умолчанию, с которого выполняется перевод, — английский (eng_Latn). Чтобы указать, что вы хотите переводить с другого языка,
задайте код BCP-47 в аргументе src_lang при инициализации токенизатора.
См. пример перевода с румынского на немецкий ниже:
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("facebook/nllb-moe-54b", src_lang="ron_Latn")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-moe-54b", device_map="auto")
article = "Şeful ONU spune că nu există o soluţie militară în Siria"
inputs = tokenizer(article, return_tensors="pt").to(model.device)
translated_tokens = model.generate(
**inputs, forced_bos_token_id=tokenizer.lang_code_to_id["deu_Latn"], max_length=30
)
tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]Ресурсы
NllbMoeConfig
класс transformers.NllbMoeConfig
< 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 = 0id2label: 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 = Noneis_encoder_decoder: bool = Truevocab_size: int = 128112max_position_embeddings: int = 1024encoder_layers: int = 12encoder_ffn_dim: int = 4096encoder_attention_heads: int = 16decoder_layers: int = 12decoder_ffn_dim: int = 4096decoder_attention_heads: int = 16encoder_layerdrop: float | int = 0.05decoder_layerdrop: float | int = 0.05use_cache: bool = Trueactivation_function: str = 'relu'd_model: int = 1024dropout: float | int = 0.1attention_dropout: float | int = 0.1activation_dropout: float | int = 0.0init_std: float = 0.02decoder_start_token_id: int | None = 2scale_embedding: bool = Truerouter_bias: bool = Falserouter_dtype: typing.Literal['float32', 'float16', 'bfloat16'] = 'float32'router_ignore_padding_tokens: bool = Falsenum_experts: int = 128expert_capacity: int = 64encoder_sparse_step: int = 4decoder_sparse_step: int = 4router_z_loss_coef: float = 0.001router_aux_loss_coef: float = 0.001second_expert_policy: str = 'all'normalize_router_prob_before_dropping: bool = Falsebatch_prioritized_routing: bool = Falsemoe_eval_capacity_token_fraction: float = 1.0moe_token_dropout: float | int = 0.2pad_token_id: int | None = 1bos_token_id: int | None = 0eos_token_id: int | list[int] | None = 2tie_word_embeddings: bool = Trueoutput_router_logits: bool = False )
Параметры
- is_encoder_decoder (
bool, необязательный, по умолчаниюTrue) — Указывает, используется ли модель в качестве энкодера/декодера. - vocab_size (
int, необязательный, по умолчанию128112) — Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены вinput_ids. - max_position_embeddings (
int, необязательный, по умолчанию1024) — Максимальная длина последовательности, с которой может использоваться эта модель. - encoder_layers (
int, необязательный, по умолчанию12) — Количество скрытых слоев в кодере Transformer. Если не задано, используется то же значение, что и уnum_layers. - encoder_ffn_dim (
int, необязательный, по умолчанию4096) — Размерность «промежуточного» (часто называемого feed-forward) слоя в энкодере. - encoder_attention_heads (
int, необязательный, по умолчанию16) — Количество головок внимания в каждом слое внимания в кодере Transformer. - decoder_layers (
int, необязательный, по умолчанию12) — Количество скрытых слоев в декодере Transformer. Если не задано, будет использовано то же значение, что и уnum_layers. - decoder_ffn_dim (
int, необязательный, по умолчанию4096) — Размерность «промежуточного» (часто называемого feed-forward) слоя в декодере. - decoder_attention_heads (
int, необязательный, по умолчанию16) — Количество головок внимания в каждом слое внимания декодера Transformer. - encoder_layerdrop (
Union[float, int], необязательный, по умолчанию0.05) — Вероятность LayerDrop для энкодера. Подробности — в [статье о LayerDrop](см. https://huggingface.co/papers/1909.11556). - decoder_layerdrop (
Union[float, int], необязательный, по умолчанию0.05) — Вероятность LayerDrop для декодера. Подробности — в [статье о LayerDrop](см. https://huggingface.co/papers/1909.11556). - use_cache (
bool, необязательный, по умолчаниюTrue) — Указывает, должен ли модель возвращать последние ключи/значения внимания (не используется во всех моделях). Актуально только еслиconfig.is_decoder=Trueили если модель является генеративной моделью только с декодером. - activation_function (
str, необязательный, по умолчаниюrelu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - d_model (
int, необязательный, по умолчанию1024) — Размер слоев кодировщика и пулер-слоя. - dropout (
Union[float, int], необязательный, по умолчанию0.1) — Коэффициент для всех слоёв dropout. - attention_dropout (
Union[float, int], необязательный, по умолчанию0.1) — Коэффициент dropout для вероятностей внимания. - activation_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для активаций внутри полносвязного слоя. - init_std (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов. - decoder_start_token_id (
int, необязательный, по умолчанию2) — Если модель encoder-decoder начинает декодирование с токена, отличного отbos, то идентификатор этого токена. - scale_embedding (
bool, необязательный, по умолчаниюTrue) — Указывает, следует ли масштабировать эмбеддинги, деля их на sqrt(d_model). - router_bias (
bool, необязательный, по умолчаниюFalse) — Указывает, должен ли классификатор маршрутизатора иметь смещение. - router_dtype (
str, необязательный, по умолчанию"float32") —dtype, используемый для роутеров. Рекомендуется сохранятьdtypeравным"float32", как указано в разделе о селективной точности в статье. - router_ignore_padding_tokens (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли игнорировать токены отступов при маршрутизации. ЕслиFalse, токены отступов не маршрутизируются ни к одним экспертам. - num_experts (
int, необязательный, по умолчанию128) — Количество маршрутизируемых экспертов в слоях MoE. - expert_capacity (
int, необязательный, по умолчанию 64) — Количество токенов, которые могут храниться в каждом эксперте. - encoder_sparse_step (
int, необязательный, по умолчанию 4) — Частота разреженных слоев в энкодере. Значение 4 означает, что каждый четвертый слой будет разреженным. - decoder_sparse_step (
int, необязательный, по умолчанию 4) — Частота разреженных слоев в декодере. Значение 4 означает, что каждый четвертый слой будет разреженным. - router_z_loss_coef (
float, необязательный, по умолчанию0.001) — Коэффициент для z-loss роутера, который штрафует за большие логиты роутера, чтобы повысить стабильность обучения. - router_aux_loss_coef (
float, необязательный, по умолчанию0.001) — Коэффициент вспомогательной функции потерь для балансировки нагрузки. Используется для штрафования неравномерного маршрутизирования запросов к экспертам в MoE-моделях. - second_expert_policy (
str, необязательный, по умолчанию"all") — Политика, используемая для выборки вероятности попадания токена во второй эксперт. - normalize_router_prob_before_dropping (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли нормализовать вероятности роутера перед применением маски на основе ёмкости экспертов (capacity dropping). - batch_prioritized_routing (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли упорядочивать токены по вероятностям роутера перед отбрасыванием по вместимости. Это означает, что токены с наивысшими вероятностями будут маршрутизированы раньше других токенов, которые могут находиться дальше в последовательности. - moe_eval_capacity_token_fraction (
float, необязательный, по умолчанию 1.0) — Доля токенов, используемая как ёмкость при валидации. Если значение отрицательное, используется та же доля, что и при обучении. Должно находиться в диапазоне: (0.0, 1.0]. - moe_token_dropout (
float, необязательный, по умолчанию 0.2) — Частота маскирования для маскирования выходов экспертов MoE (EOM), реализованного с помощью Dropout2d на выходах экспертов. - pad_token_id (
int, необязательный, по умолчанию1) — Идентификатор токена, используемого для дополнения (padding) в словаре. - bos_token_id (
int, необязательный, по умолчанию0) — Идентификатор токена, используемого для обозначения начала потока в словаре. - eos_token_id (
Union[int, list[int]], необязательный, по умолчанию2) — Идентификатор токена, используемого для обозначения конца потока в словаре. - tie_word_embeddings (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели. - output_router_logits (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли модели возвращать логиты роутера. Включение этого параметра также позволит модели выводить вспомогательную потерю, включая потерю балансировки нагрузки и z-потерю роутера.
Это класс конфигурации для хранения конфигурации модели Nllb Moe. Он используется для создания модели Nllb Moe в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации facebook/nllb-moe-54b
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import NllbMoeModel, NllbMoeConfig
>>> # Initializing a NllbMoe facebook/nllb-moe-54b style configuration
>>> configuration = NllbMoeConfig()
>>> # Initializing a model from the facebook/nllb-moe-54b style configuration
>>> model = NllbMoeModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configNllbMoeTop2Router
Роутер, использующий токены, выбирает назначение на топ-2 эксперта.
Этот роутер использует тот же механизм, что и в NLLB-MoE из репозитория fairseq. Элементы сортируются по router_probs, а затем направляются в выбранный ими эксперт, пока не будет достигнута expert_capacity этого эксперта. Не гарантируется, что каждый токен будет обработан экспертом, или что каждый эксперт получит хотя бы один токен.
Веса маршрутизатора, объединяющие веса, также возвращаются, чтобы гарантировать, что состояния, которые не обновляются, будут замаскированы.
route_tokens
< source >( router_logits: Tensorinput_dtype: dtype = torch.float32padding_mask: typing.Optional[torch.LongTensor] = None )
Вычисляет dispatch_mask и dispatch_weights для каждого эксперта. Маски адаптируются к пропускной способности эксперта.
forward
< source >( hidden_states: Tensorpadding_mask: typing.Optional[torch.LongTensor] = None ) → top_1_mask (torch.Tensor of shape (batch_size, sequence_length))
Параметры
- hidden_states (
torch.Tensor) — (batch_size, sequence_length, hidden_dim), на основе которого вычисляются вероятности маршрутизатора.
Возвращает
top_1_mask (torch.Tensor формы (batch_size, sequence_length))
Индексный тензор формы [batch_size, sequence_length], соответствующий эксперту, выбранному для каждого токена
с использованием вероятностей top1 роутера.
router_probabilities (torch.Tensor of shape (batch_size, sequence_length, nump_experts)):
Тензор формы (batch_size, sequence_length, num_experts), соответствующий вероятностям для каждого
токена и эксперта. Используется для маршрутизации токенов к экспертам.
router_logits (torch.Tensor of shape (batch_size, sequence_length))):
Тензор логитов формы (batch_size, sequence_length, num_experts), соответствующий необработанным логитам роутера.
Он используется позже для вычисления z-loss роутера.
Скрытые состояния изменяются в размерности, чтобы упростить вычисление вероятностей маршрутизатора (объединение весов для каждого эксперта.)
NllbMoeSparseMLP
Реализация разреженного модуля MLP для NLLB-MoE.
NllbMoeModel
класс transformers.NllbMoeModel
< source >( config: NllbMoeConfig )
Параметры
- config (NllbMoeConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель Nllb Moe без дополнительных компонентов, выводящая необработанные скрытые состояния без какого-либо специализированного слоя наверху.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqMoEModelOutput or tuple(torch.FloatTensor)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- decoder_input_ids (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Индексы токенов входной последовательности декодера в словаре. Индексы можно получить с помощью AutoTokenizer. Подробности — в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое decoder input IDs?Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- decoder_attention_mask (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Маска для исключения внимания к определённым индексам токенов. По умолчанию используется каузальная маска, чтобы модель могла учитывать только предыдущие входные данные при прогнозировании будущих. - encoder_outputs (
tuple[tuple[torch.FloatTensor]], необязательный) — Кортеж состоит из (last_hidden_state, необязательный:hidden_states, необязательный:attentions)last_hidden_stateформы(batch_size, sequence_length, hidden_size), необязательный) — последовательность скрытых состояний на выходе последнего слоя энкодера. Используется в кросс-внимании декодера. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - inputs_embeds (
torch.FloatTensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска эмбеддингов модели. - decoder_inputs_embeds (
torch.FloatTensorформы(batch_size, target_sequence_length, hidden_size), необязательный) — Необязательно, вместо передачиdecoder_input_idsможно напрямую передать встроенное представление. Если используетсяpast_key_values, необязательно вводить только последниеdecoder_inputs_embeds(см.past_key_values). Это полезно, если вы хотите больше контролировать, как индексыdecoder_input_idsпреобразуются в соответствующие векторы, чем это делает внутренняя матрица эмбеддингов модели.Если
decoder_input_idsиdecoder_inputs_embedsне заданы,decoder_inputs_embedsпринимает значениеinputs_embeds. - use_cache (
bool, необязательный) — Если установлено вTrue, возвращаются состояния ключей и значенийpast_key_values, которые можно использовать для ускорения декодирования (см.past_key_values).
Возвращает
Seq2SeqMoEModelOutput или tuple(torch.FloatTensor)
Seq2SeqMoEModelOutput или кортеж из
torch.FloatTensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (None) и входных данных.
Метод forward модели NllbMoeModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.FloatTensorформы(batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя декодера модели.Если используется
past_key_values, выводится только последнее скрытое состояние последовательностей формы(batch_size, 1, hidden_size).past_key_values (
EncoderDecoderCache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр EncoderDecoderCache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать (см. вход
past_key_values) для ускорения последовательного декодирования.decoder_hidden_states (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_hidden_states=Trueили когдаconfig.output_hidden_states=True) — Кортежtorch.FloatTensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния декодера на выходе каждого слоя, а также необязательные выходные значения начального эмбеддинга.
decoder_attentions (
tuple(torch.FloatTensor), необязательный, возвращается, если переданоoutput_attentions=Trueили еслиconfig.output_attentions=True) — кортежtorch.FloatTensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
decoder_router_logits (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_router_logits=Trueили когдаconfig.add_router_probs=True) — Кортежtorch.FloatTensor(по одному на каждый слой) формы(batch_size, sequence_length, num_experts).Логиты маршрутизатора декодерной модели, полезные для вычисления вспомогательной функции потерь для моделей Mixture of Experts.
cross_attentions (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.FloatTensor(по одному для каждого слоя) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания кросс-внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.
encoder_last_hidden_state (
torch.FloatTensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя энкодера модели.encoder_hidden_states (
tuple(torch.FloatTensor), необязательный, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — Кортежtorch.FloatTensor(один для вывода слоя встраиваний, если у модели есть слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния энкодера на выходе каждого слоя, а также необязательные выходные значения начального эмбеддинга.
encoder_attentions (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.FloatTensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания энкодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
encoder_router_logits (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_router_logits=Trueили приconfig.add_router_probs=True) — Кортежtorch.FloatTensor(по одному на каждый слой) формы(batch_size, sequence_length, num_experts).Логиты маршрутизатора модели-энкодера, необходимые для вычисления вспомогательной функции потерь и z_loss для разреженных модулей.
NllbMoeForConditionalGeneration
класс transformers.NllbMoeForConditionalGeneration
< source >( config: NllbMoeConfig )
Параметры
- config (NllbMoeConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель NllbMoe с головой для моделирования языка. Может использоваться для суммаризации.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Noneoutput_router_logits: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqMoEOutput or tuple(torch.FloatTensor)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- decoder_input_ids (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Индексы токенов входной последовательности декодера в словаре. Индексы можно получить с помощью AutoTokenizer. Подробности — в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое decoder input IDs?Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- decoder_attention_mask (
torch.LongTensorформы(batch_size, target_sequence_length), необязательный) — Маска для исключения внимания к определённым индексам токенов. По умолчанию используется каузальная маска, чтобы модель могла учитывать только предыдущие входные данные при прогнозировании будущих. - encoder_outputs (
tuple[tuple[torch.FloatTensor]], необязательный) — Кортеж состоит из (last_hidden_state, необязательный:hidden_states, необязательный:attentions)last_hidden_stateформы(batch_size, sequence_length, hidden_size), необязательный) — последовательность скрытых состояний на выходе последнего слоя энкодера. Используется в кросс-внимании декодера. - past_key_values (
~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно этоpast_key_values, возвращённые моделью на предыдущем этапе декодирования, когдаuse_cache=Trueилиconfig.use_cache=True.В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если
past_key_valuesне переданы, по умолчанию будет инициализирован DynamicCache.Модель будет выводить тот же формат кэша, который был передан на вход.
Если используются
past_key_values, ожидается, что пользователь передаст только необработанныеinput_ids(те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы(batch_size, unprocessed_length), а не всеinput_idsформы(batch_size, sequence_length). - inputs_embeds (
torch.FloatTensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска эмбеддингов модели. - decoder_inputs_embeds (
torch.FloatTensorформы(batch_size, target_sequence_length, hidden_size), необязательный) — Необязательно, вместо передачиdecoder_input_idsможно напрямую передать встроенное представление. Если используетсяpast_key_values, необязательно вводить только последниеdecoder_inputs_embeds(см.past_key_values). Это полезно, если вы хотите больше контролировать, как индексыdecoder_input_idsпреобразуются в соответствующие векторы, чем это делает внутренняя матрица эмбеддингов модели.Если
decoder_input_idsиdecoder_inputs_embedsне заданы,decoder_inputs_embedsпринимает значениеinputs_embeds. - labels (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Метки для вычисления потерь маскированного языкового моделирования. Индексы должны находиться в диапазоне[0, ..., config.vocab_size]или быть равны -100 (см. docstringinput_ids). Токены с индексами, установленными в-100, игнорируются (маскируются); потери вычисляются только для токенов с метками в диапазоне[0, ..., config.vocab_size]. - use_cache (
bool, необязательный) — Если установлено вTrue, возвращаются состояния ключей и значенийpast_key_values, которые можно использовать для ускорения декодирования (см.past_key_values). - output_router_logits (
bool, необязательный) — Указывает, следует ли возвращать логиты всех роутеров. Они полезны для вычисления потерь роутера и не должны возвращаться во время инференса.
Возвращает
Seq2SeqMoEOutput или tuple(torch.FloatTensor)
Seq2SeqMoEOutput или кортеж из
torch.FloatTensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (NllbMoeConfig) и входных данных.
Метод NllbMoeForConditionalGeneration forward переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.FloatTensorформы(1,), необязательный, возвращается, если заданlabels) — Потеря языковой модели.logits (
torch.FloatTensorформы(batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).past_key_values (
EncoderDecoderCache, необязательный, возвращается при передачеuse_cache=Trueили когдаconfig.use_cache=True) — это экземпляр EncoderDecoderCache. Подробнее см. в нашем руководстве по кэшу kv.Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать (см. вход
past_key_values) для ускорения последовательного декодирования.decoder_hidden_states (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_hidden_states=Trueили когдаconfig.output_hidden_states=True) — Кортежtorch.FloatTensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния декодера на выходе каждого слоя, а также выходные значения начального слоя встраивания.
decoder_attentions (
tuple(torch.FloatTensor), необязательный, возвращается, если переданоoutput_attentions=Trueили еслиconfig.output_attentions=True) — кортежtorch.FloatTensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
decoder_router_logits (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_router_logits=Trueили когдаconfig.add_router_probs=True) — Кортежtorch.FloatTensor(по одному для каждого слоя) формы(batch_size, sequence_length, num_experts).Логиты маршрутизатора декодерной модели, полезные для вычисления вспомогательной функции потерь для моделей Mixture of Experts.
cross_attentions (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.FloatTensor(по одному для каждого слоя) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания кросс-внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.
encoder_last_hidden_state (
torch.FloatTensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя энкодера модели.encoder_hidden_states (
tuple(torch.FloatTensor), необязательный, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — Кортежtorch.FloatTensor(один для вывода слоя встраиваний, если у модели есть слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния кодировщика на выходе каждого слоя, а также выходные значения начального слоя встраиваний.
encoder_attentions (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.FloatTensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания энкодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
encoder_router_logits (
tuple(torch.FloatTensor), необязательный, возвращается при передачеoutput_router_logits=Trueили когдаconfig.add_router_probs=True) — Кортежtorch.FloatTensor(по одному для каждого слоя) формы(batch_size, sequence_length, num_experts).Логиты маршрутизатора модели-энкодера, необходимые для вычисления вспомогательной функции потерь и z_loss для моделей Mixture of Experts.