Transformers documentation
Trình tổng hợp dữ liệu
Trình tổng hợp dữ liệu
Data collators là các đối tượng sẽ tạo thành một batch bằng cách sử dụng một danh sách các phần tử của dataset làm đầu vào. Các phần tử này có cùng kiểu với các phần tử của train_dataset hoặc eval_dataset.
Để có thể tạo các batch, các data collator có thể áp dụng một số xử lý (như padding). Một số trong số đó (như DataCollatorForLanguageModeling) cũng áp dụng một số kỹ thuật tăng cường dữ liệu ngẫu nhiên (như random masking) trên batch đã được tạo.
Các ví dụ về cách sử dụng có thể được tìm thấy trong các notebook ví dụ.
Bộ sắp xếp dữ liệu mặc định
Data collator rất đơn giản, chỉ đơn thuần gom các batch của các đối tượng dạng dict và thực hiện xử lý đặc biệt cho các khóa tiềm năng có tên:
label: xử lý một giá trị duy nhất (int hoặc float) cho mỗi đối tượnglabel_ids: xử lý một danh sách các giá trị cho mỗi đối tượng
Không thực hiện bất kỳ tiền xử lý bổ sung nào: tên thuộc tính của đối tượng đầu vào sẽ được sử dụng làm các đầu vào tương ứng cho mô hình. Xem glue và ner làm ví dụ về cách nó hữu ích.
DefaultDataCollator
lớp transformers.DefaultDataCollator
< source >( return_tensors: str = 'pt' )
Data collator rất đơn giản, chỉ đơn thuần gom các batch của các đối tượng dạng dict và thực hiện xử lý đặc biệt cho các khóa tiềm năng có tên:
label: xử lý một giá trị duy nhất (int hoặc float) cho mỗi đối tượnglabel_ids: xử lý một danh sách các giá trị cho mỗi đối tượng
Không thực hiện bất kỳ tiền xử lý bổ sung nào: tên thuộc tính của đối tượng đầu vào sẽ được sử dụng làm các đầu vào tương ứng cho mô hình. Xem glue và ner làm ví dụ về cách nó hữu ích.
Đây là một đối tượng (giống như các data collator khác) thay vì một hàm thuần túy như default_data_collator. Điều này có thể hữu ích nếu bạn cần đặt giá trị return_tensors khi khởi tạo.
DataCollatorWithPadding
lớp transformers.DataCollatorWithPadding
< source >( tokenizer: PreTrainedTokenizerBasepadding: bool | str | transformers.utils.generic.PaddingStrategy = Truemax_length: int | None = Nonepad_to_multiple_of: int | None = Nonereturn_tensors: str = 'pt' )
Tham số
- tokenizer (PreTrainedTokenizer hoặc PreTrainedTokenizerFast) — Tokenizer được sử dụng để mã hóa dữ liệu.
- padding (
bool,strhoặc PaddingStrategy, tùy chọn, mặc định làTrue) — Chọn một chiến lược để đệm các chuỗi được trả về (theo phía đệm và chỉ số đệm của mô hình) trong số các lựa chọn:Truehoặc'longest'(mặc định): Lấp đầy (padding) đến độ dài của chuỗi dài nhất trong batch (hoặc không lấp đầy nếu chỉ cung cấp một chuỗi duy nhất).'max_length': Đệm (pad) đến độ dài tối đa được chỉ định bằng tham sốmax_lengthhoặc đến độ dài đầu vào tối đa mà mô hình chấp nhận được nếu tham số đó không được cung cấp.Falsehoặc'do_not_pad': Không đệm (tức là có thể xuất ra một lô với các chuỗi có độ dài khác nhau).
- max_length (
int, tùy chọn) — Độ dài tối đa của danh sách trả về và tùy chọn độ dài padding (xem bên trên). - pad_to_multiple_of (
int, tuỳ chọn) — Nếu được đặt, chuỗi sẽ được đệm (pad) đến bội số của giá trị được cung cấp.Điều này đặc biệt hữu ích để cho phép sử dụng Tensor Cores trên phần cứng NVIDIA có khả năng tính toán >= 7.0 (Volta).
- return_tensors (
str, tùy chọn, mặc định là"pt") — Loại Tensor cần trả về. Các giá trị cho phép là “np” hoặc “pt”.
Data collator sẽ đệm động các đầu vào nhận được.
DataCollatorForTokenClassification
lớp transformers.DataCollatorForTokenClassification
< source >( tokenizer: PreTrainedTokenizerBasepadding: bool | str | transformers.utils.generic.PaddingStrategy = Truemax_length: int | None = Nonepad_to_multiple_of: int | None = Nonelabel_pad_token_id: int = -100return_tensors: str = 'pt' )
Tham số
- tokenizer (PreTrainedTokenizer hoặc PreTrainedTokenizerFast) — Tokenizer được sử dụng để mã hóa dữ liệu.
- padding (
bool,strhoặc PaddingStrategy, tùy chọn, mặc định làTrue) — Chọn một chiến lược để đệm các chuỗi được trả về (theo phía đệm và chỉ số đệm của mô hình) trong số các lựa chọn:Truehoặc'longest'(mặc định): Lấp đầy (padding) đến độ dài của chuỗi dài nhất trong batch (hoặc không lấp đầy nếu chỉ cung cấp một chuỗi duy nhất).'max_length': Đệm (pad) đến độ dài tối đa được chỉ định bằng tham sốmax_lengthhoặc đến độ dài đầu vào tối đa mà mô hình chấp nhận được nếu tham số đó không được cung cấp.Falsehoặc'do_not_pad': Không đệm (tức là có thể xuất ra một lô với các chuỗi có độ dài khác nhau).
- max_length (
int, tùy chọn) — Độ dài tối đa của danh sách trả về và tùy chọn độ dài padding (xem bên trên). - pad_to_multiple_of (
int, tuỳ chọn) — Nếu được đặt, chuỗi sẽ được đệm (pad) đến bội số của giá trị được cung cấp.Điều này đặc biệt hữu ích để cho phép sử dụng Tensor Cores trên phần cứng NVIDIA có khả năng tính toán >= 7.0 (Volta).
- label_pad_token_id (
int, tùy chọn, mặc định là -100) — Id được sử dụng khi đệm (padding) các nhãn (-100 sẽ được các hàm loss của PyTorch tự động bỏ qua). - return_tensors (
str, tùy chọn, mặc định là"pt") — Loại Tensor cần trả về. Các giá trị cho phép là “np” hoặc “pt”.
Data collator sẽ đệm động các đầu vào nhận được, cũng như các nhãn.
DataCollatorForSeq2Seq
lớp transformers.DataCollatorForSeq2Seq
< source >( tokenizer: PreTrainedTokenizerBasemodel: typing.Any | None = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy = Truemax_length: int | None = Nonepad_to_multiple_of: int | None = Nonelabel_pad_token_id: int = -100return_tensors: str = 'pt' )
Tham số
- tokenizer (PreTrainedTokenizer hoặc PreTrainedTokenizerFast) — Tokenizer được sử dụng để mã hóa dữ liệu.
- model (PreTrainedModel, tùy chọn) —
Mô hình đang được huấn luyện. Nếu được đặt và có prepare_decoder_input_ids_from_labels, hãy sử dụng nó để
chuẩn bị decoder_input_ids
Điều này hữu ích khi sử dụng label_smoothing để tránh tính toán loss hai lần.
- padding (
bool,strhoặc PaddingStrategy, tùy chọn, mặc định làTrue) — Chọn một chiến lược để đệm các chuỗi được trả về (theo phía đệm và chỉ số đệm của mô hình) trong số các lựa chọn:Truehoặc'longest'(mặc định): Lấp đầy (padding) đến độ dài của chuỗi dài nhất trong batch (hoặc không lấp đầy nếu chỉ cung cấp một chuỗi duy nhất).'max_length': Đệm (pad) đến độ dài tối đa được chỉ định bằng tham sốmax_lengthhoặc đến độ dài đầu vào tối đa mà mô hình chấp nhận được nếu tham số đó không được cung cấp.Falsehoặc'do_not_pad': Không đệm (tức là có thể xuất ra một lô với các chuỗi có độ dài khác nhau).
- max_length (
int, tùy chọn) — Độ dài tối đa của danh sách trả về và tùy chọn độ dài padding (xem bên trên). - pad_to_multiple_of (
int, tuỳ chọn) — Nếu được đặt, chuỗi sẽ được đệm (pad) đến bội số của giá trị được cung cấp.Điều này đặc biệt hữu ích để cho phép sử dụng Tensor Cores trên phần cứng NVIDIA có khả năng tính toán >= 7.0 (Volta).
- label_pad_token_id (
int, tùy chọn, mặc định là -100) — Id được sử dụng khi đệm (padding) các nhãn (-100 sẽ được các hàm loss của PyTorch tự động bỏ qua). - return_tensors (
str, tùy chọn, mặc định là"pt") — Loại Tensor cần trả về. Các giá trị cho phép là “np” hoặc “pt”.
Data collator sẽ đệm động các đầu vào nhận được, cũng như các nhãn.
DataCollatorForLanguageModeling
lớp transformers.DataCollatorForLanguageModeling
< source >( tokenizer: PreTrainedTokenizerBasemlm: bool = Truewhole_word_mask: bool = Falsemlm_probability: float | None = 0.15mask_replace_prob: float = 0.8random_replace_prob: float = 0.1pad_to_multiple_of: int | None = Nonereturn_tensors: str = 'pt'seed: int | None = None )
Tham số
- tokenizer (PreTrainedTokenizer hoặc PreTrainedTokenizerFast) — Tokenizer được sử dụng để mã hóa dữ liệu.
- mlm (
bool, tùy chọn, mặc định làTrue) — Có sử dụng mô hình hóa ngôn ngữ có che hay không. Nếu đặt thànhFalse, nhãn sẽ giống với đầu vào với các token đệm bị bỏ qua (bằng cách đặt chúng thành -100). Ngược lại, nhãn sẽ là -100 cho các token không bị che và là giá trị cần dự đoán cho token bị che. - whole_word_mask (
bool, tùy chọn, mặc định làFalse) — Có nên che toàn bộ từ thay vì các token riêng lẻ hay không. - mlm_probability (
float, tùy chọn, mặc định là 0.15) — Xác suất để (ngẫu nhiên) che các token trong đầu vào, khimlmđược đặt thànhTrue. - mask_replace_prob (
float, tùy chọn, mặc định là 0.8) — Xác suất để các token bị che được thay thế bằng token mask của tokenizer (ví dụ:[MASK]). Mặc định là 0.8, có nghĩa là 80% các token bị che sẽ được thay thế bằng[MASK]. Chỉ hoạt động khimlmđược đặt thànhTrue. - random_replace_prob (
float, tùy chọn, mặc định là 0.1) — Xác suất để các token bị che được thay thế bằng các token ngẫu nhiên từ từ điển của tokenizer. Mặc định là 0.1, có nghĩa là 10% số token bị che sẽ được thay thế bằng các token ngẫu nhiên. Các token bị che còn lại (1 - mask_replace_prob - random_replace_prob) sẽ được giữ nguyên. Chỉ hoạt động khimlmđược đặt thànhTrue. - pad_to_multiple_of (
int, tùy chọn) — Nếu được đặt, sẽ đệm chuỗi đến một bội số của giá trị được cung cấp. - return_tensors (
str) — Loại Tensor cần trả về. Các giá trị cho phép là “np” hoặc “pt”. - seed (
int, tùy chọn) — Hạt giống (seed) được sử dụng cho bộ tạo số ngẫu nhiên để che mặt nạ (masking). Nếu không được cung cấp, bộ tạo số ngẫu nhiên toàn cục (global RNG) sẽ được sử dụng.
Data collator được sử dụng cho mô hình hóa ngôn ngữ. Đầu vào sẽ được đệm động đến độ dài tối đa của một batch nếu chúng không có cùng độ dài.
Để đạt hiệu suất tốt nhất, data collator này nên được sử dụng với một dataset có các phần tử là dictionary hoặc BatchEncoding, có khóa
<Example Options and Expectations>"special_tokens_mask", như được trả về bởi một PreTrainedTokenizer hoặc một PreTrainedTokenizerFast với đối sốreturn_special_tokens_mask=True.
Hành vi mặc định:
mask_replace_prob=0.8,random_replace_prob=0.1.- Hãy kỳ vọng 80% các token bị che sẽ được thay thế bằng
[MASK], 10% được thay thế bằng các token ngẫu nhiên, và 10% được giữ nguyên.Tất cả các token bị che được thay thế bằng
[MASK]:
mask_replace_prob=1.0,random_replace_prob=0.0.- Mọi token bị mask đều được thay thế bằng
[MASK]. Không có token nào được giữ nguyên hoặc thay thế bằng token ngẫu nhiên.Không có thay thế
[MASK], chỉ có các token ngẫu nhiên:
mask_replace_prob=0.0,random_replace_prob=1.0.- Mọi token bị mask đều được thay thế bằng các token ngẫu nhiên. Không có thay thế bằng
[MASK]hay token không thay đổi.Thay thế cân bằng:
mask_replace_prob=0.5,random_replace_prob=0.4.- Hãy kỳ vọng 50% các token bị che sẽ được thay thế bằng
[MASK], 40% được thay thế bằng các token ngẫu nhiên, và 10% được giữ nguyên.Note: Tổng của
mask_replace_probvàrandom_replace_probkhông được vượt quá 1. Nếu tổng của chúng nhỏ hơn 1, phần tỷ lệ còn lại sẽ bao gồm các token bị mask được giữ nguyên.
numpy_mask_tokens
< source >( inputs: Anyspecial_tokens_mask: typing.Any | None = Noneoffset_mapping: typing.Any | None = None )
Chuẩn bị đầu vào/nhãn cho các token bị che trong mô hình hóa ngôn ngữ có che.
torch_mask_tokens
< source >( inputs: Anyspecial_tokens_mask: typing.Any | None = Noneoffset_mapping: typing.Any | None = None )
Chuẩn bị đầu vào/nhãn cho các token bị che trong mô hình hóa ngôn ngữ có che.
DataCollatorForPermutationLanguageModeling
lớp transformers.DataCollatorForPermutationLanguageModeling
< source >( tokenizer: PreTrainedTokenizerBaseplm_probability: float = 0.16666666666666666max_span_length: int = 5return_tensors: str = 'pt' )
Data collator được sử dụng cho mô hình hóa ngôn ngữ hoán vị.
- gộp các lô tensor, tuân theo pad_token của tokenizer
- tiền xử lý các lô dữ liệu cho mô hình hóa ngôn ngữ hoán vị với các quy trình đặc thù của XLNet
Các token bị che cần dự đoán cho một chuỗi cụ thể được xác định bởi thuật toán sau:
- Bắt đầu từ đầu chuỗi bằng cách đặt
cur_len = 0(số lượng token đã xử lý cho đến nay). - Lấy mẫu một
span_lengthtừ khoảng[1, max_span_length](độ dài của chuỗi token sẽ bị che) - Dự trữ một ngữ cảnh có độ dài
context_length = span_length / plm_probabilityđể bao quanh phần span cần bị che - Mẫu một điểm bắt đầu
start_indextừ khoảng[cur_len, cur_len + context_length - span_length]và che các tokenstart_index:start_index + span_length - Đặt
cur_len = cur_len + context_length. Nếucur_len < max_len(tức là vẫn còn token trong chuỗi cần xử lý), lặp lại từ Bước 1.
Các token bị che cần dự đoán cho một chuỗi cụ thể được xác định bởi thuật toán sau:
- Bắt đầu từ đầu chuỗi bằng cách đặt
cur_len = 0(số lượng token đã xử lý cho đến nay). - Lấy mẫu một
span_lengthtừ khoảng[1, max_span_length](độ dài của chuỗi token sẽ bị che) - Dự trữ một ngữ cảnh có độ dài
context_length = span_length / plm_probabilityđể bao quanh phần span cần bị che - Mẫu một điểm bắt đầu
start_indextừ khoảng[cur_len, cur_len + context_length - span_length]và che các tokenstart_index:start_index + span_length - Đặt
cur_len = cur_len + context_length. Nếucur_len < max_len(tức là vẫn còn token trong chuỗi cần xử lý), lặp lại từ Bước 1.
DataCollatorWithFlattening
lớp transformers.DataCollatorWithFlattening
< source >( *argsreturn_position_ids = Trueseparator_id = -100return_flash_attn_kwargs = Falsereturn_seq_idx = Falseposition_ids_start = 0**kwargs )
Tham số
- return_position_ids (
bool, tùy chọn, mặc định làTrue) — Có nên trả vềposition_ids, vốn được khởi động lại từposition_ids_startcho mỗi chuỗi đã được làm phẳng hay không. - separator_id (
int, tùy chọn, mặc định là -100) — Giá trị được dùng để phân tách các chuỗi tronglabelsđã được nối lại. - return_flash_attn_kwargs (
bool, tùy chọn, mặc định làFalse) — Có nên trả về các kwargs ranh giới chuỗi được sử dụng bởi FlashAttention (cu_seq_lens_q,cu_seq_lens_k,max_length_qvàmax_length_k) hay không. - return_seq_idx (
bool, tùy chọn, mặc định làFalse) — Có nên trả vềseq_idx, chỉ ra chuỗi mà mỗi token thuộc về hay không. - position_ids_start (
int, tùy chọn, mặc định là 0) — ID vị trí được gán cho token đầu tiên của mỗi chuỗi.
Data collator được sử dụng cho phương pháp không đệm (padding free). Thực hiện các bước sau:
- nối toàn bộ mini batch thành một chuỗi dài duy nhất có hình dạng [1, total_tokens]
- sử dụng
separator_idđể phân tách các chuỗi tronglabelsđã nối, giá trị mặc định là -100 - không có padding nào được thêm vào, mặc định trả về
input_ids,labelsvàposition_ids - tùy chọn trả về các kwargs chứa trong FlashAttentionKwargs
- tùy chọn trả về seq_idx chỉ ra trình tự mà mỗi token thuộc về
Việc sử dụng
DataCollatorWithFlatteningsẽ làm phẳng toàn bộ mini batch thành một chuỗi dài duy nhất. Hãy đảm bảo rằng phép tính attention của bạn có thể xử lý được điều này!
Không phải mọi model đều đánh số vị trí bắt đầu từ 0 khi tự tính toán position ids. Các kiến trúc kiểu RoBERTa (trong đó có
roberta,xlm_roberta,camembert,mpnetvàesmvới absolute position embeddings) bắt đầu từpadding_idx + 1, thường là 2. Việc truyền cho các model nàyposition_idsmặc định dựa trên 0 sẽ âm thầm làm lệch position embeddings và làm giảm chất lượng đầu ra, do đó hãy đặtposition_ids_starttương ứng cho những model đó.
DataCollatorForMultipleChoice
lớp transformers.DataCollatorForMultipleChoice
< source >( tokenizer: PreTrainedTokenizerBasepadding: bool | str | transformers.utils.generic.PaddingStrategy = Truemax_length: int | None = Nonepad_to_multiple_of: int | None = Nonereturn_tensors: str = 'pt' )
Tham số
- tokenizer (PreTrainedTokenizer hoặc PreTrainedTokenizerFast) — Tokenizer được sử dụng để mã hóa dữ liệu.
- padding (
bool,strhoặc PaddingStrategy, tùy chọn, mặc định làTrue) — Chọn một chiến lược để đệm các chuỗi trả về theo phía đệm và chỉ số đệm của mô hình, trong số các lựa chọn:Truehoặc'longest': Lấp đầy (pad) đến độ dài của chuỗi dài nhất trong batch (hoặc không lấp đầy nếu chỉ cung cấp một chuỗi duy nhất).'max_length': Đệm (pad) đến độ dài tối đa được chỉ định bằng tham sốmax_lengthhoặc đến độ dài đầu vào tối đa mà mô hình chấp nhận được nếu tham số đó không được cung cấp.Falsehoặc'do_not_pad'(mặc định): Không đệm (tức là có thể xuất ra một lô với các chuỗi có độ dài khác nhau).
- max_length (
int, tùy chọn) — Độ dài tối đa của danh sách trả về và tùy chọn độ dài padding (xem bên trên). - pad_to_multiple_of (
int, tuỳ chọn) — Đệm (pad) chuỗi đến bội số của giá trị được cung cấp.Điều này đặc biệt hữu ích để cho phép sử dụng Tensor Cores trên phần cứng NVIDIA có khả năng tính toán >= 7.5 (Volta).
- return_tensors (
str, tùy chọn, mặc định là"pt") — Loại Tensor cần trả về. Các giá trị cho phép là “np” hoặc “pt”.
Data collator động để đệm một batch các ví dụ lồng nhau cho bài toán lựa chọn nhiều phương án, sao cho tất cả các phương án của tất cả các ví dụ có cùng độ dài.