Transformers documentation
M2M100
Model ini dipublikasikan di HF papers pada 2020-10-21 dan disumbangkan ke Hugging Face Transformers pada 2021-03-06.
M2M100
Ikhtisar
Model M2M100 diusulkan dalam Beyond English-Centric Multilingual Machine Translation oleh Angela Fan, Shruti Bhosale, Holger Schwenk, Zhiyi Ma, Ahmed El-Kishky, Siddharth Goyal, Mandeep Baines, Onur Celebi, Guillaume Wenzek, Vishrav Chaudhary, Naman Goyal, Tom Birch, Vitaliy Liptchinsky, Sergey Edunov, Edouard Grave, Michael Auli, Armand Joulin.
Abstrak dari makalah tersebut adalah sebagai berikut:
Penelitian sebelumnya dalam penerjemahan menunjukkan potensi penerjemahan mesin multibahasa masif dengan melatih satu model yang mampu menerjemahkan antara pasangan bahasa mana pun. Namun, sebagian besar penelitian ini berpusat pada bahasa Inggris karena hanya dilatih pada data yang diterjemahkan dari atau ke bahasa Inggris. Meskipun ini didukung oleh sumber data pelatihan yang besar, hal ini tidak mencerminkan kebutuhan penerjemahan di seluruh dunia. Dalam karya ini, kami membuat model penerjemahan multibahasa Many-to-Many sejati yang dapat menerjemahkan secara langsung antara pasangan 100 bahasa mana pun. Kami membangun dan membuka sumber dataset pelatihan yang mencakup ribuan arah bahasa dengan data berlabel, yang dibuat melalui penambangan skala besar. Kemudian, kami mengeksplorasi cara meningkatkan kapasitas model secara efektif melalui kombinasi penskalaan padat dan parameter langka spesifik bahasa untuk membuat model berkualitas tinggi. Fokus kami pada model non-berpusat bahasa Inggris memberikan peningkatan lebih dari 10 BLEU saat menerjemahkan secara langsung antara arah non-bahasa Inggris, sambil tetap kompetitif dengan sistem tunggal terbaik dari WMT. Kami membuka sumber skrip kami agar orang lain dapat mereproduksi data, evaluasi, dan model M2M-100 akhir.
Model ini disumbangkan oleh valhalla.
Tips dan contoh penggunaan
M2M100 adalah model encoder-decoder (seq-to-seq) multibahasa yang terutama ditujukan untuk tugas terjemahan. Karena model ini multibahasa, model mengharapkan sekuens dalam format tertentu: token id bahasa khusus digunakan sebagai prefiks di kedua teks sumber dan target. Format teks sumber adalah [lang_code] X [eos], di mana lang_code adalah id bahasa sumber untuk teks sumber dan id bahasa target untuk teks target, dengan X berupa teks sumber atau target.
M2M100Tokenizer bergantung pada sentencepiece, jadi pastikan untuk menginstalnya sebelum menjalankan contoh-contoh. Untuk menginstal sentencepiece, jalankan pip install sentencepiece.
Pelatihan Berpengawasan
from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M", device_map="auto")
tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M", src_lang="en", tgt_lang="fr")
src_text = "Life is like a box of chocolates."
tgt_text = "La vie est comme une boîte de chocolat."
model_inputs = tokenizer(src_text, text_target=tgt_text, return_tensors="pt").to(model.device)
loss = model(**model_inputs).loss # forward passGenerasi
M2M100 menggunakan eos_token_id sebagai decoder_start_token_id untuk generasi dengan id bahasa target yang dipaksa sebagai token yang dihasilkan pertama. Untuk memaksa id bahasa target sebagai token yang dihasilkan pertama, berikan parameter forced_bos_token_id ke metode generate. Contoh berikut menunjukkan cara menerjemahkan dari Hindi ke Prancis dan dari Mandarin ke Inggris menggunakan checkpoint facebook/m2m100_418M.
from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
hi_text = "जीवन एक चॉकलेट बॉक्स की तरह है।"
chinese_text = "生活就像一盒巧克力。"
model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M", device_map="auto")
tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M")
# translate Hindi to French
tokenizer.src_lang = "hi"
encoded_hi = tokenizer(hi_text, return_tensors="pt").to(model.device)
generated_tokens = model.generate(**encoded_hi, forced_bos_token_id=tokenizer.get_lang_id("fr"))
tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
"La vie est comme une boîte de chocolat."
# translate Chinese to English
tokenizer.src_lang = "zh"
encoded_zh = tokenizer(chinese_text, return_tensors="pt").to(model.device)
generated_tokens = model.generate(**encoded_zh, forced_bos_token_id=tokenizer.get_lang_id("en"))
tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
"Life is like a box of chocolate."Sumber daya
M2M100Config
kelas transformers.M2M100Config
< 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 = Truepad_token_id: int | None = 1bos_token_id: int | None = 0eos_token_id: int | list[int] | None = 2tie_word_embeddings: bool = True )
Parameter
- is_encoder_decoder (
bool, opsional, defaultnyaTrue) — Apakah model digunakan sebagai encoder/decoder atau tidak. - vocab_size (
int, opsional, default128112) — Ukuran kosakata model. Menentukan jumlah token berbeda yang dapat direpresentasikan olehinput_ids. - max_position_embeddings (
int, opsional, default1024) — Panjang maksimum urutan yang mungkin digunakan dengan model ini. - encoder_layers (
int, opsional, default12) — Jumlah lapisan tersembunyi dalam encoder Transformer. Akan menggunakan nilai yang sama dengannum_layersjika tidak diatur. - encoder_ffn_dim (
int, opsional, defaultnya4096) — Dimensi dari lapisan “intermediate” (sering disebut feed-forward) di encoder. - encoder_attention_heads (
int, opsional, default16) — Jumlah kepala perhatian untuk setiap lapisan perhatian dalam encoder Transformer. - decoder_layers (
int, opsional, default12) — Jumlah lapisan tersembunyi dalam decoder Transformer. Akan menggunakan nilai yang sama dengannum_layersjika tidak diatur. - decoder_ffn_dim (
int, opsional, defaultnya4096) — Dimensi dari lapisan “intermediate” (sering disebut feed-forward) di decoder. - decoder_attention_heads (
int, opsional, default16) — Jumlah kepala perhatian untuk setiap lapisan perhatian dalam decoder Transformer. - encoder_layerdrop (
Union[float, int], opsional, default0.05) — Probabilitas LayerDrop untuk encoder. Lihat [makalah LayerDrop](lihat https://huggingface.co/papers/1909.11556) untuk detail lebih lanjut. - decoder_layerdrop (
Union[float, int], opsional, default0.05) — Probabilitas LayerDrop untuk decoder. Lihat [makalah LayerDrop](lihat https://huggingface.co/papers/1909.11556) untuk detail lebih lanjut. - use_cache (
bool, opsional, defaultnyaTrue) — Apakah model harus mengembalikan perhatian kunci/nilai terakhir (tidak digunakan oleh semua model). Hanya relevan jikaconfig.is_decoder=Trueatau ketika model adalah model generatif yang hanya decoder. - activation_function (
str, opsional, defaultnyarelu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - d_model (
int, opsional, default1024) — Ukuran lapisan encoder dan lapisan pooler. - dropout (
Union[float, int], opsional, default0.1) — Rasio untuk semua lapisan dropout. - attention_dropout (
Union[float, int], opsional, default0.1) — Rasio dropout untuk probabilitas perhatian. - activation_dropout (
Union[float, int], opsional, defaultnya0.0) — Rasio dropout untuk aktivasi di dalam lapisan fully connected. - init_std (
float, opsional, defaultnya0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - decoder_start_token_id (
int, opsional, defaultnya2) — Jika model encoder-decoder memulai decoding dengan token yang berbeda daribos, id dari token tersebut. - scale_embedding (
bool, opsional, defaultTrue) — Apakah akan menskalakan embedding dengan membaginya oleh sqrt(d_model). - pad_token_id (
int, opsional, default1) — ID token yang digunakan untuk padding dalam kosakata. - bos_token_id (
int, opsional, default0) — ID token yang digunakan untuk awal aliran (beginning-of-stream) dalam kosakata. - eos_token_id (
Union[int, list[int]], opsional, default2) — ID token yang digunakan untuk end-of-stream dalam kosakata. - tie_word_embeddings (
bool, opsional, defaultTrue) — Apakah akan mengikat bobot embedding sesuai dengan pemetaantied_weights_keysmodel.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari M2M100Model. Kelas ini digunakan untuk membuat instans model M2M 100 sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari facebook/m2m100_418M
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Contoh:
>>> from transformers import M2M100Config, M2M100Model
>>> # Initializing a M2M100 facebook/m2m100_418M style configuration
>>> configuration = M2M100Config()
>>> # Initializing a model (with random weights) from the facebook/m2m100_418M style configuration
>>> model = M2M100Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configM2M100Tokenizer
kelas transformers.M2M100Tokenizer
< source >( vocab_filespm_filesrc_lang = Nonetgt_lang = Nonebos_token = '<s>'eos_token = '</s>'sep_token = '</s>'pad_token = '<pad>'unk_token = '<unk>'language_codes = 'm2m100'sp_model_kwargs: dict[str, typing.Any] | None = Nonenum_madeup_words = 8**kwargs )
Parameter
- vocab_file (
str) — Path ke file kosakata. - spm_file (
str) — Path ke file SentencePiece (umumnya berekstensi .spm) yang mengandung kosakata. - src_lang (
str, opsional) — String yang mewakili bahasa sumber. - tgt_lang (
str, opsional) — String yang mewakili bahasa target. - eos_token (
str, opsional, default"</s>") — Token akhir urutan. - sep_token (
str, opsional, default"</s>") — Token pemisah, yang digunakan saat membangun satu rangkaian dari beberapa rangkaian, misalnya dua rangkaian untuk klasifikasi rangkaian atau untuk teks dan pertanyaan untuk penjawaban pertanyaan. Token ini juga digunakan sebagai token terakhir dari rangkaian yang dibangun dengan token khusus. - unk_token (
str, opsional, default"<unk>") — Token yang tidak diketahui. Token yang tidak ada dalam kosakata tidak dapat dikonversi menjadi ID dan akan diset sebagai token ini sebagai gantinya. - pad_token (
str, opsional, defaultnya"<pad>") — Token yang digunakan untuk padding, misalnya saat membatching urutan dengan panjang yang berbeda. - language_codes (
str, opsional, default"m2m100") — Kode bahasa apa yang akan digunakan. Harus salah satu dari"m2m100"atau"wmt21". - sp_model_kwargs (
dict, opsional) — Akan diteruskan keSentencePieceProcessor.__init__()metode. Python wrapper untuk SentencePiece dapat digunakan, di antara hal-hal lain, untuk mengatur:-
enable_sampling: Aktifkan regularisasi subword. -
nbest_size: Parameter sampling untuk unigram. Tidak valid untuk BPE-Dropout.nbest_size = {0,1}: Tidak ada sampling yang dilakukan.nbest_size > 1: mengambil sampel dari hasil nbest_size.nbest_size < 0: diasumsikan bahwa nbest_size tak hingga dan mengambil sampel dari semua hipotesis (lattice) menggunakan algoritma forward-filtering-and-backward-sampling.
-
alpha: Parameter penghalusan untuk pengambilan sampel unigram, dan probabilitas dropout untuk operasi penggabungan pada BPE-dropout.
-
Konstruksi tokenizer M2M100. Berbasis pada SentencePiece.
Tokenizer ini mewarisi dari PreTrainedTokenizer yang berisi sebagian besar metode utama. Pengguna harus merujuk ke superclass ini untuk informasi lebih lanjut mengenai metode-metode tersebut.
Contoh:
>>> from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
>>> model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M")
>>> tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M", src_lang="en", tgt_lang="ro")
>>> src_text = " UN Chief Says There Is No Military Solution in Syria"
>>> tgt_text = "Şeful ONU declară că nu există o soluţie militară în Siria"
>>> model_inputs = tokenizer(src_text, text_target=tgt_text, return_tensors="pt")
>>> outputs = model(**model_inputs) # should workbuild_inputs_with_special_tokens
< source >( token_ids_0: listtoken_ids_1: list[int] | None = None ) → list[int]
Parameter
- token_ids_0 (
list[int]) — Daftar ID tempat token khusus akan ditambahkan. - token_ids_1 (
list[int], opsional) — Daftar ID kedua opsional untuk pasangan sekuens.
Mengembalikan
list[int]
Daftar ID input dengan token khusus yang sesuai.
Bangun input model dari satu urutan atau sepasang urutan untuk tugas klasifikasi urutan dengan melakukan penggabungan (concatenation) dan penambahan token khusus. Urutan MBART memiliki format berikut, di mana X mewakili urutan:
input_ids(untuk encoder)X [eos, src_lang_code]decoder_input_ids: (untuk decoder)X [eos, tgt_lang_code]
BOS tidak pernah digunakan. Pasangan sekuens bukan kasus penggunaan yang diharapkan, tetapi akan ditangani tanpa pemisah.
get_special_tokens_mask
< source >( token_ids_0: listtoken_ids_1: list[int] | None = Nonealready_has_special_tokens: bool = False ) → list[int]
Parameter
- token_ids_0 (
list[int]) — Daftar ID. - token_ids_1 (
list[int], opsional) — Daftar ID kedua opsional untuk pasangan sekuens. - already_has_special_tokens (
bool, opsional, defaultFalse) — Apakah daftar token sudah diformat dengan token khusus untuk model.
Mengembalikan
list[int]
Daftar bilangan bulat dalam rentang [0, 1]: 1 untuk token khusus, 0 untuk token urutan.
Ambil id urutan dari daftar token yang tidak memiliki token khusus yang ditambahkan. Metode ini dipanggil saat menambahkan token khusus menggunakan metode prepare_for_model tokenizer.
create_token_type_ids_from_sequences
< source >( token_ids_0: listtoken_ids_1: list[int] | None = None ) → list[int]
Buat mask dari dua urutan yang diteruskan untuk digunakan dalam tugas klasifikasi pasangan urutan.
Metode ini secara dinamis membangun ID tipe token berdasarkan atribut konfigurasi tokenizer:
token_type_ids_pattern: Pola yang digunakan (“all_zeros” atau “bert_style”)token_type_ids_include_special_tokens: Apakah token khusus diperhitungkan dalam perhitungan panjang
Contoh:
# All zeros pattern (default, used by RoBERTa, BART, etc.)
tokenizer.token_type_ids_pattern = "all_zeros"
# Returns: [0, 0, 0, ...] for both sequences
# BERT-style pattern (first sequence gets 0s, second gets 1s)
tokenizer.token_type_ids_pattern = "bert_style"
# Returns: [0, 0, 0, ..., 1, 1, 1, ...] for sequence pairsM2M100Model
kelas transformers.M2M100Model
< source >( config: M2M100Config )
Parameter
- config (M2M100Config) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Model M2M 100 polos yang menghasilkan hidden-states mentah tanpa head spesifik di atasnya.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
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.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqModelOutput or tuple(torch.Tensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
- decoder_input_ids (
torch.LongTensordengan bentuk(batch_size, target_sequence_length), opsional) — Indeks token dari urutan input decoder dalam kosakata. Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya. Apa itu decoder input IDs? M2M100 menggunakan eos_token_id sebagai token awal untuk generasi decoder_input_ids. Jika past_key_values digunakan, secara opsional hanya decoder_input_ids terakhir yang perlu diinput (lihat past_key_values).Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
M2M100 menggunakan
eos_token_idsebagai token awal untuk generasidecoder_input_ids. Jikapast_key_valuesdigunakan, secara opsional hanyadecoder_input_idsterakhir yang perlu diinput (lihatpast_key_values). - decoder_attention_mask (
torch.LongTensordengan bentuk(batch_size, target_sequence_length), opsional) — Perilaku default: menghasilkan tensor yang mengabaikan token pad didecoder_input_ids. Causal mask juga akan digunakan secara default. - encoder_outputs (
tuple[tuple[torch.Tensor]], opsional) — Tuple terdiri dari (last_hidden_state, opsional:hidden_states, opsional:attentions)last_hidden_statedengan bentuk(batch_size, sequence_length, hidden_size), opsional) adalah rangkaian hidden-states pada keluaran lapisan terakhir encoder. Digunakan dalam cross-attention decoder. - past_key_values (
~cache_utils.Cache, opsional) — Hidden-states yang sudah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan untuk mempercepat decoding berurutan. Ini biasanya terdiri daripast_key_valuesyang dikembalikan oleh model pada tahap decoding sebelumnya, ketikause_cache=Trueatauconfig.use_cache=True.Hanya instance Cache yang diizinkan sebagai input, lihat panduan kv cache kami. Jika tidak ada
past_key_valuesyang diteruskan, DynamicCache akan diinisialisasi secara default.Model akan menghasilkan format cache yang sama dengan yang diberikan sebagai input.
Jika
past_key_valuesdigunakan, pengguna diharapkan hanya memasukkaninput_idsyang belum diproses (yang tidak memiliki state past key value yang diberikan ke model ini) dengan bentuk(batch_size, unprocessed_length)alih-alih semuainput_idsdengan bentuk(batch_size, sequence_length). - inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskaninput_ids, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Hal ini berguna jika Anda ingin memiliki kendali lebih atas cara mengonversi indeksinput_idsmenjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - decoder_inputs_embeds (
torch.Tensordengan bentuk(batch_size, target_sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskandecoder_input_idsAnda dapat memilih untuk langsung meneruskan representasi tertanam. Jikapast_key_valuesdigunakan, secara opsional hanyadecoder_inputs_embedsyang perlu dimasukkan (lihatpast_key_values). Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversidecoder_input_idsindeks menjadi vektor terkait daripada matriks pencarian embedding internal model.Jika
decoder_input_idsdandecoder_inputs_embedskeduanya tidak disetel,decoder_inputs_embedsmengambil nilai dariinputs_embeds. - use_cache (
bool, opsional) — Jika diset keTrue, state kunci-nilaipast_key_valuesakan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihatpast_key_values).
Mengembalikan
Seq2SeqModelOutput atau tuple(torch.Tensor)
A Seq2SeqModelOutput atau tuple dari
torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (M2M100Config) dan input.
Metode forward dari M2M100Model menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
last_hidden_state (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size)) — Urutan hidden-states pada keluaran lapisan terakhir dari decoder model.Jika
past_key_valuesdigunakan, hanya hidden-state terakhir dari sekuens dengan bentuk(batch_size, 1, hidden_size)yang dioutput.past_key_values (
EncoderDecoderCache, opsional, dikembalikan ketikause_cache=Truediteruskan atau ketikaconfig.use_cache=True) — Ini adalah instance EncoderDecoderCache. Untuk detail lebih lanjut, lihat panduan kv cache kami.Mengandung hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan (lihat input
past_key_values) untuk mempercepat decoding berurutan.decoder_hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states dari decoder pada output setiap layer ditambah output embedding awal yang opsional.
decoder_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap lapisan) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
cross_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari lapisan cross-attention decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala cross-attention.
encoder_last_hidden_state (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), opsional) — Urutan hidden-states pada keluaran lapisan terakhir dari encoder model.encoder_hidden_states (
tuple(torch.Tensor), opsional, dikembalikan ketikaoutput_hidden_states=Truedilewatkan atau ketikaconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states dari encoder pada output setiap layer ditambah output embedding awal yang opsional.
encoder_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap lapisan) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari encoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
M2M100ForConditionalGeneration
kelas transformers.M2M100ForConditionalGeneration
< source >( config: M2M100Config )
Parameter
- config (M2M100Config) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Model M2M100 dengan kepala pemodelan bahasa. Dapat digunakan untuk ringkasan.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
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.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqLMOutput or tuple(torch.Tensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
- decoder_input_ids (
torch.LongTensordengan bentuk(batch_size, target_sequence_length), opsional) — Indeks token dari urutan input decoder dalam kosakata. Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya. Apa itu decoder input IDs? M2M100 menggunakan eos_token_id sebagai token awal untuk generasi decoder_input_ids. Jika past_key_values digunakan, secara opsional hanya decoder_input_ids terakhir yang perlu diinput (lihat past_key_values).Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
M2M100 menggunakan
eos_token_idsebagai token awal untuk generasidecoder_input_ids. Jikapast_key_valuesdigunakan, secara opsional hanyadecoder_input_idsterakhir yang perlu diinput (lihatpast_key_values). - decoder_attention_mask (
torch.LongTensordengan bentuk(batch_size, target_sequence_length), opsional) — Perilaku default: menghasilkan tensor yang mengabaikan token pad didecoder_input_ids. Causal mask juga akan digunakan secara default. - encoder_outputs (
tuple[tuple[torch.Tensor]], opsional) — Tuple terdiri dari (last_hidden_state, opsional:hidden_states, opsional:attentions)last_hidden_statedengan bentuk(batch_size, sequence_length, hidden_size), opsional) adalah rangkaian hidden-states pada keluaran lapisan terakhir encoder. Digunakan dalam cross-attention decoder. - past_key_values (
~cache_utils.Cache, opsional) — Hidden-states yang sudah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan untuk mempercepat decoding berurutan. Ini biasanya terdiri daripast_key_valuesyang dikembalikan oleh model pada tahap decoding sebelumnya, ketikause_cache=Trueatauconfig.use_cache=True.Hanya instance Cache yang diizinkan sebagai input, lihat panduan kv cache kami. Jika tidak ada
past_key_valuesyang diteruskan, DynamicCache akan diinisialisasi secara default.Model akan menghasilkan format cache yang sama dengan yang diberikan sebagai input.
Jika
past_key_valuesdigunakan, pengguna diharapkan hanya memasukkaninput_idsyang belum diproses (yang tidak memiliki state past key value yang diberikan ke model ini) dengan bentuk(batch_size, unprocessed_length)alih-alih semuainput_idsdengan bentuk(batch_size, sequence_length). - inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskaninput_ids, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Hal ini berguna jika Anda ingin memiliki kendali lebih atas cara mengonversi indeksinput_idsmenjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - decoder_inputs_embeds (
torch.Tensordengan bentuk(batch_size, target_sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskandecoder_input_idsAnda dapat memilih untuk langsung meneruskan representasi tertanam. Jikapast_key_valuesdigunakan, secara opsional hanyadecoder_inputs_embedsyang perlu dimasukkan (lihatpast_key_values). Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversidecoder_input_idsindeks menjadi vektor terkait daripada matriks pencarian embedding internal model.Jika
decoder_input_idsdandecoder_inputs_embedskeduanya tidak disetel,decoder_inputs_embedsmengambil nilai dariinputs_embeds. - labels (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Label untuk menghitung kerugian pemodelan bahasa yang disamarkan (masked language modeling). Indeks harus berada dalam[0, ..., config.vocab_size]atau -100 (lihat docstringinput_ids). Token dengan indeks yang disetel ke-100diabaikan (disamarkan), kerugian hanya dihitung untuk token dengan label dalam[0, ..., config.vocab_size]. - use_cache (
bool, opsional) — Jika diset keTrue, state kunci-nilaipast_key_valuesakan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihatpast_key_values).
Mengembalikan
Seq2SeqLMOutput atau tuple(torch.Tensor)
A Seq2SeqLMOutput atau tuple dari
torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (M2M100Config) dan input.
Metode forward dari M2M100ForConditionalGeneration menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss pemodelan bahasa.logits (
torch.Tensordengan bentuk(batch_size, sequence_length, config.vocab_size)) — Skor prediksi dari kepala pemodelan bahasa (skor untuk setiap token kosakata sebelum SoftMax).past_key_values (
EncoderDecoderCache, opsional, dikembalikan ketikause_cache=Truediteruskan atau ketikaconfig.use_cache=True) — Ini adalah instance EncoderDecoderCache. Untuk detail lebih lanjut, lihat panduan kv cache kami.Mengandung hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan (lihat input
past_key_values) untuk mempercepat decoding berurutan.decoder_hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states dari decoder pada output setiap layer ditambah output embedding awal.
decoder_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap lapisan) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
cross_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari lapisan cross-attention decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala cross-attention.
encoder_last_hidden_state (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), opsional) — Urutan hidden-states pada keluaran lapisan terakhir dari encoder model.encoder_hidden_states (
tuple(torch.Tensor), opsional, dikembalikan ketikaoutput_hidden_states=Truedilewatkan atau ketikaconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states dari encoder pada output setiap layer ditambah output embedding awal.
encoder_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap lapisan) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari encoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
Contoh Terjemahan:
>>> from transformers import AutoTokenizer, M2M100ForConditionalGeneration
>>> model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M")
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/m2m100_418M")
>>> text_to_translate = "Life is like a box of chocolates"
>>> model_inputs = tokenizer(text_to_translate, return_tensors="pt")
>>> # translate to French
>>> gen_tokens = model.generate(**model_inputs, forced_bos_token_id=tokenizer.get_lang_id("fr"))
>>> print(tokenizer.batch_decode(gen_tokens, skip_special_tokens=True))Menggunakan Flash Attention 2
Flash Attention 2 adalah versi yang lebih cepat dan dioptimalkan dari perhitungan skor perhatian yang bergantung pada kernel cuda.
Instalasi
Pertama, periksa apakah perangkat keras Anda kompatibel dengan Flash Attention 2. Daftar perangkat keras yang kompatibel terbaru dapat ditemukan di dokumentasi resmi.
Selanjutnya, instal versi terbaru Flash Attention 2:
pip install -U flash-attn --no-build-isolation
Penggunaan
Untuk memuat model menggunakan Flash Attention 2, kita dapat melewatkan argumen attn_implementation="flash_attention_2" ke from_pretrained(). Anda dapat menggunakan presisi torch.float16 atau torch.bfloat16.
from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M", attn_implementation="flash_attention_2", device_map="auto").eval()
tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M")
# translate Hindi to French
hi_text = "जीवन एक चॉकलेट बॉक्स की तरह है।"
tokenizer.src_lang = "hi"
encoded_hi = tokenizer(hi_text, return_tensors="pt").to(model.device)
generated_tokens = model.generate(**encoded_hi, forced_bos_token_id=tokenizer.get_lang_id("fr"))
tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
"La vie est comme une boîte de chocolat."Percepatan yang diharapkan
Di bawah ini adalah diagram percepatan yang diharapkan yang membandingkan waktu inferensi murni antara implementasi native dan Flash Attention 2.

Menggunakan Scaled Dot Product Attention (SDPA)
PyTorch menyertakan operator scaled dot-product attention (SDPA) native sebagai bagian dari torch.nn.functional. Fungsi ini mencakup beberapa implementasi yang dapat diterapkan tergantung pada input dan perangkat keras yang digunakan. Lihat dokumentasi resmi atau halaman GPU Inference untuk informasi lebih lanjut.
SDPA digunakan secara default untuk torch>=2.1.1 ketika implementasi tersedia, tetapi Anda juga dapat mengatur attn_implementation="sdpa" di from_pretrained() untuk secara eksplisit meminta penggunaan SDPA.
from transformers import M2M100ForConditionalGeneration
model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M", attn_implementation="sdpa", device_map="auto")
...Untuk percepatan terbaik, kami merekomendasikan memuat model dalam presisi setengah (misalnya torch.float16 atau torch.bfloat16).