Transformers documentation
Reformer
Mô hình này được công bố trên HF papers vào ngày 13-01-2020 và được đóng góp cho Hugging Face Transformers vào ngày 16-11-2020.
Reformer
Tổng quan
Mô hình Reformer được đề xuất trong bài báo Reformer: The Efficient Transformer của Nikita Kitaev, Łukasz Kaiser, Anselm Levskaya.
Tóm tắt từ bài báo như sau:
Các mô hình Transformer lớn thường xuyên đạt được kết quả tiên tiến nhất trên nhiều tác vụ, nhưng việc huấn luyện các mô hình này có thể tốn kém đến mức không thể chấp nhận được, đặc biệt là trên các chuỗi dài. Chúng tôi giới thiệu hai kỹ thuật để cải thiện hiệu quả của Transformers. Thứ nhất, chúng tôi thay thế chú ý tích vô hướng bằng chú ý sử dụng băm nhạy cảm cục bộ, thay đổi độ phức tạp của nó từ O(L^2) thành O(Llog(L)), trong đó L là độ dài của chuỗi. Hơn nữa, chúng tôi sử dụng các lớp dư có thể đảo ngược thay vì các lớp dư tiêu chuẩn, cho phép chỉ lưu trữ kích hoạt một lần trong quá trình huấn luyện thay vì N lần, trong đó N là số lượng lớp. Mô hình kết quả, Reformer, hoạt động ngang hàng với các mô hình Transformer trong khi tiết kiệm bộ nhớ hơn nhiều và nhanh hơn nhiều trên các chuỗi dài.
Mô hình này được đóng góp bởi patrickvonplaten. Mã của các tác giả có thể được tìm thấy tại đây.
Mẹo sử dụng
- Reformer không hoạt động với torch.nn.DataParallel do một lỗi trong PyTorch, xem issue #36035.
- Sử dụng mã hóa vị trí trục (xem bên dưới để biết thêm chi tiết). Đây là một cơ chế nhằm tránh phải sử dụng một ma trận mã hóa vị trí quá lớn (khi độ dài chuỗi rất lớn) bằng cách phân tích nó thành các ma trận nhỏ hơn.
- Thay thế attention truyền thống bằng LSH (local-sensitive hashing) attention (xem bên dưới để biết thêm chi tiết). Đây là kỹ thuật để tránh việc tính toán toàn bộ tích query-key trong các lớp attention.
- Tránh lưu trữ các kết quả trung gian của từng lớp bằng cách sử dụng các lớp transformer có thể đảo ngược để lấy chúng trong quá trình truyền ngược (trừ các phần dư khỏi đầu vào của lớp tiếp theo sẽ cho lại chúng) hoặc tính lại chúng cho các kết quả bên trong một lớp nhất định (ít hiệu quả hơn so với việc lưu trữ chúng nhưng tiết kiệm bộ nhớ).
- Tính toán các thao tác feedforward theo từng khối thay vì trên toàn bộ batch.
Mã hóa vị trí trục
Axial Positional Encodings lần đầu được triển khai trong thư viện trax của Google và được phát triển bởi các tác giả của bài báo về mô hình này. Trong các mô hình xử lý các chuỗi đầu vào rất dài, các mã hóa id vị trí thông thường lưu một vector nhúng có kích thước là config.hidden_size cho mọi vị trí $i, \ldots, n_s$, với là config.max_embedding_size. Điều này có nghĩa là việc có độ dài chuỗi là và config.hidden_size là sẽ dẫn đến một ma trận mã hóa vị trí:
chỉ riêng phần này đã có hơn 500 triệu tham số cần lưu trữ. Các mã hóa vị trí trục (axial positional encodings) được phân rã thành hai ma trận:
và
với:
Do đó, điều sau đây đúng:
Một cách trực quan, điều này có nghĩa là vector nhúng vị trí nay là sự kết hợp của hai vector nhúng đã được phân rã: $x^1{k, l} + x^2{l, k}$, trong đó chiều config.max_embedding_size của được phân rã thành $k \text{ và } l$. Thiết kế này đảm bảo rằng mỗi vector nhúng vị trí là duy nhất.
Sử dụng lại ví dụ trên, mã hóa vị trí trục với có thể giảm đáng kể số lượng tham số từ 500 000 000 xuống còn tham số, điều này đồng nghĩa với việc giảm 85% dung lượng bộ nhớ sử dụng.
Trong thực tế, tham số config.axial_pos_embds_dim được đặt thành một tuple có tổng phải bằng config.hidden_size và config.axial_pos_shape được đặt thành một tuple có tích phải bằng config.max_embedding_size, mà trong quá trình huấn luyện phải bằng độ dài chuỗi của input_ids.
LSH Self Attention
Trong cơ chế tự chú ý sử dụng băm nhạy cảm vị trí (Locality Sensitive Hashing - LSH), trọng số chiếu của key và query được liên kết với nhau. Do đó, các vector nhúng key và query cũng được liên kết. LSH self attention sử dụng cơ chế băm nhạy cảm vị trí được đề xuất trong Practical and Optimal LSH for Angular Distance để gán mỗi vector nhúng key-query đã liên kết vào một trong số config.num_buckets bucket có thể. Tiền đề là các vector nhúng key-query càng “giống” nhau (theo độ tương đồng cosine) thì càng có khả năng được gán vào cùng một bucket.
Độ chính xác của cơ chế LSH có thể được cải thiện bằng cách tăng config.num_hashes hoặc trực tiếp tham số num_hashes của hàm forward, để đầu ra của LSH self attention xấp xỉ tốt hơn đầu ra của full self attention “thông thường”. Các bucket sau đó được sắp xếp và chia thành các chunk vector nhúng query key, mỗi chunk có độ dài config.lsh_chunk_length. Với mỗi chunk, các vector nhúng query sẽ chú ý đến các vector key của chính nó (được liên kết với chính nó) và đến các vector nhúng key của config.lsh_num_chunks_before chunk lân cận trước đó và config.lsh_num_chunks_after chunk lân cận tiếp theo.
Để biết thêm thông tin, hãy xem bài báo gốc hoặc bài đăng trên blog tuyệt vời này.
Lưu ý rằng config.num_buckets cũng có thể được phân tích thành một danh sách $(n{\text{buckets}}^1,
n{\text{buckets}}^2)$. Bằng cách này, thay vì gán các vector nhúng khóa truy vấn vào một trong $(1,\ldots,
n{\text{buckets}})$, chúng được gán vào một trong $(1-1,\ldots, n{\text{buckets}}^1-1, \ldots,
1-n{\text{buckets}}^2, \ldots, n{\text{buckets}}^1-n_{\text{buckets}}^2)$. Điều này rất quan trọng đối với các chuỗi rất dài để
tiết kiệm bộ nhớ.
Khi huấn luyện một mô hình từ đầu, được khuyến nghị để config.num_buckets=None, để tùy thuộc vào độ dài chuỗi, một giá trị tốt cho num_buckets sẽ được tính toán theo thời gian thực. Giá trị này sau đó sẽ tự động được lưu trong config và nên được tái sử dụng cho suy luận.
Bằng cách sử dụng LSH self attention, độ phức tạp về bộ nhớ và thời gian của phép nhân ma trận query-key có thể được giảm từ thành $\mathcal{O}(n_s \times \log(n_s))$, vốn thường là nút thắt cổ chai về bộ nhớ và thời gian trong một mô hình transformer, với là độ dài chuỗi.
Tự chú ý cục bộ
Local self attention về cơ bản là một lớp self attention “thông thường” với các phép chiếu key, query và value, nhưng được chia thành các khối (chunk) sao cho trong mỗi khối có độ dài config.local_chunk_length, các vector nhúng query chỉ chú ý đến các vector nhúng key trong khối của nó và các vector nhúng key của config.local_num_chunks_before khối lân cận phía trước và config.local_num_chunks_after khối lân cận phía sau.
Bằng cách sử dụng Local self attention, độ phức tạp về bộ nhớ và thời gian của phép nhân ma trận query-key có thể được giảm từ thành $\mathcal{O}(n_s \times \log(n_s))$, vốn thường là nút thắt cổ chai về bộ nhớ và thời gian trong một mô hình transformer, với là độ dài chuỗi.
Huấn luyện
Trong quá trình huấn luyện, chúng ta phải đảm bảo rằng độ dài chuỗi được đặt thành một giá trị có thể chia hết cho bội số chung nhỏ nhất của config.lsh_chunk_length và config.local_chunk_length, và rằng các tham số của Axial Positional Encodings được đặt đúng như đã mô tả ở trên. Reformer rất hiệu quả về bộ nhớ nên mô hình có thể dễ dàng được huấn luyện trên các chuỗi dài tới 64000 token.
Để huấn luyện, ReformerModelWithLMHead nên được sử dụng như sau:
input_ids = tokenizer.encode("This is a sentence from the training data", return_tensors="pt").to(model.device)
loss = model(input_ids, labels=input_ids)[0]Tài nguyên
- Hướng dẫn cho tác vụ phân loại văn bản
- Hướng dẫn nhiệm vụ trả lời câu hỏi
- Hướng dẫn tác vụ mô hình hóa ngôn ngữ nhân quả
- Hướng dẫn cho tác vụ mô hình hóa ngôn ngữ có mặt nạ
ReformerConfig
lớp transformers.ReformerConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneattention_head_size: int = 64attn_layers: list[str] | tuple[str, ...] = ('local', 'lsh', 'local', 'lsh', 'local', 'lsh')axial_norm_std: float = 1.0axial_pos_embds: bool = Trueaxial_pos_shape: list[int] | tuple[int, ...] = (64, 64)axial_pos_embds_dim: list[int] | tuple[int, ...] = (64, 192)chunk_size_lm_head: int = 0eos_token_id: int | list[int] | None = 2feed_forward_size: int = 512hash_seed: int | None = Nonehidden_act: str = 'relu'hidden_dropout_prob: float | int = 0.05hidden_size: int = 256initializer_range: float = 0.02is_decoder: bool = Falselayer_norm_eps: float = 1e-12local_num_chunks_before: int = 1local_num_chunks_after: int = 0local_attention_probs_dropout_prob: float | int = 0.05local_attn_chunk_length: int = 64lsh_attn_chunk_length: int | None = 64lsh_attention_probs_dropout_prob: float | None = 0.0lsh_num_chunks_before: int | None = 1lsh_num_chunks_after: int | None = 0max_position_embeddings: int = 4096num_attention_heads: int = 12num_buckets: int | list[int] | None = Nonenum_hashes: int = 1vocab_size: int = 320tie_word_embeddings: bool = Falseuse_cache: bool = Trueclassifier_dropout: float | int | None = Nonebos_token_id: int | None = Nonepad_token_id: int | None = 0 )
Tham số
- attention_head_size (
int, tùy chọn, mặc định là 64) — Kích thước chiều của các vector key, query và value đã được chiếu - attn_layers (
list[str], tùy chọn, mặc định là["local", "lsh", "local", "lsh", "local", "lsh"]) — Danh sách các loại lớp attention theo thứ tự tăng dần. Có thể chọn giữa lớp LSHSelfAttention ("lsh") và lớp LocalSelfAttention ("local"). Để biết thêm thông tin về lớp LSHSelfAttention, xem LSH Self Attention. Để biết thêm thông tin về lớp LocalSelfAttention, xem Local Self Attention. - axial_norm_std (
float, tuỳ chọn, mặc định là 1.0) — Độ lệch chuẩn của normal_initializer để khởi tạo các ma trận trọng số của các mã hóa vị trí trục (axial positional encodings). - axial_pos_embds (
bool, tùy chọn, mặc định làTrue) — Có sử dụng axial position embeddings hay không. Để biết thêm thông tin về cách axial position embeddings hoạt động, xem Axial Position Encodings. - axial_pos_shape (
list[int], tuỳ chọn, mặc định là[64, 64]) — Các chiều vị trí của các mã hóa vị trí trục. Trong quá trình huấn luyện, tích của các chiều vị trí phải bằng với độ dài chuỗi. Để biết thêm thông tin về cách các nhúng vị trí trục hoạt động, hãy xem Axial Position Encodings. - axial_pos_embds_dim (
list[int], tuỳ chọn, mặc định là[64, 192]) — Các chiều embedding của các mã vị trí trục. Tổng các chiều embedding phải bằng kích thước ẩn. Để biết thêm thông tin về cách các embedding vị trí trục hoạt động, xem Axial Position Encodings. - chunk_size_lm_head (
int, tùy chọn, mặc định là 0) — Kích thước chunk của lớp đầu ra feed forward cuối cùng của mô hình ngôn ngữ. Kích thước chunk bằng 0 có nghĩa là lớp feed forward không được chia chunk. Kích thước chunk bằng n có nghĩa là lớp feed forward xử lý n < sequence_length embeddings mỗi lần. Để biết thêm thông tin về việc chia chunk feed forward, xem Cách thức hoạt động của Feed Forward Chunking?. - eos_token_id (
Union[int, list[int]], tùy chọn, mặc định là2) — Token id được sử dụng cho end-of-stream trong bảng từ vựng. - feed_forward_size (
int, tùy chọn, mặc định là 512) — Kích thước chiều của lớp feed_forward trong khối chú ý dư (residual attention block). - hash_seed (
int, tùy chọn) — Seed có thể được sử dụng để làm cho local sensitive hashing trongLSHSelfAttentiontrở nên xác định. Chỉ nên đặt giá trị này cho mục đích kiểm thử. Đối với mục đích đánh giá và huấn luyện,hash_seednên được giữ ởNoneđể đảm bảo các phép xoay hoàn toàn ngẫu nhiên trong lược đồ local sensitive hashing. - hidden_act (
str, tùy chọn, mặc định làrelu) — Hàm kích hoạt phi tuyến (hàm hoặc chuỗi) trong bộ giải mã. Ví dụ,"gelu","relu","silu", v.v. - hidden_dropout_prob (
Union[float, int], tùy chọn, mặc định là0.05) — Xác suất dropout cho tất cả các lớp fully connected trong embeddings, encoder và pooler. - hidden_size (
int, tùy chọn, mặc định là256) — Kích thước của các biểu diễn ẩn. - initializer_range (
float, tùy chọn, 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ố. - is_decoder (
bool, tùy chọn, mặc định làFalse) — Xác định xem mô hình có được sử dụng như một bộ giải mã hay không. NếuFalse, mô hình sẽ được sử dụng như một bộ mã hóa. - layer_norm_eps (
float, tùy chọn, mặc định là1e-12) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa lớp (layer normalization). - local_num_chunks_before (
int, tuỳ chọn, mặc định là 1) — Số lượng chunk lân cận phía trước để chú ý đến trong lớpLocalSelfAttentionđối với chính nó. - local_num_chunks_after (
int, tuỳ chọn, mặc định là 0) — Số lượng chunk lân cận phía sau cần chú ý trong lớpLocalSelfAttentionngoài chính nó. - local_attention_probs_dropout_prob (
float, tùy chọn, mặc định là 0.1) — Tỷ lệ dropout cho các xác suất chú ý trongLocalSelfAttention. - local_attn_chunk_length (
int, tùy chọn, mặc định là 64) — Chiều dài của mỗi khối trong các lớp chú ý cục bộ. - lsh_attn_chunk_length (
int, tùy chọn, mặc định là 64) — Chiều dài của khối tự chú ý trongLSHSelfAttention. Việc chia khối làm giảm độ phức tạp bộ nhớ từ chiều dài chuỗi x chiều dài chuỗi (tự chú ý) xuống còn chiều dài khối x chiều dài khối x chiều dài chuỗi / chiều dài khối (tự chú ý theo khối). - lsh_attention_probs_dropout_prob (
float, tùy chọn, mặc định là 0.1) — Tỷ lệ dropout cho các xác suất chú ý trongLSHSelfAttention. - lsh_num_chunks_before (
int, tùy chọn, mặc định là 1) — Số lượng chunk lân cận phía trước để chú ý đến trong lớpLSHSelfAttentionđối với chính nó. - lsh_num_chunks_after (
int, tùy chọn, mặc định là 0) — Số lượng chunk lân cận phía sau để chú ý đến trong lớpLSHSelfAttentionđối với chính nó. - max_position_embeddings (
int, tùy chọn, mặc định là4096) — Chiều dài chuỗi tối đa mà mô hình này có thể được sử dụng. - num_attention_heads (
int, tùy chọn, mặc định là12) — Số lượng đầu attention cho mỗi lớp attention trong bộ giải mã Transformer. - num_buckets (
inthoặclist[int], tùy chọn) — Số lượng bucket, các vector truy vấn khóa có thể được “hash vào” bằng cách sử dụng lược đồ hash nhạy cảm vị trí. Mỗi vector khóa truy vấn được hash vào một hash trong1, ..., num_buckets. Số lượng bucket cũng có thể được phân tích thành một danh sách để cải thiện độ phức tạp bộ nhớ. Trong trường hợp này, mỗi vector khóa truy vấn được hash vào một hash trong1-1, 1-2, ..., num_buckets[0]-1, ..., num_buckets[0]-num_buckets[1]nếunum_bucketsđược phân tích thành hai thừa số. Số lượng bucket (hoặc tích của các thừa số) nên xấp xỉ bằng chiều dài chuỗi / lsh_chunk_length. Nếunum_bucketskhông được đặt, một giá trị tốt sẽ được tính toán trực tiếp. - num_hashes (
int, tuỳ chọn, mặc định là 1) — Số vòng băm (ví dụ: số lần xoay ngẫu nhiên) trong lược đồ Local Sensitive Hashing. Giá trịnum_hashescàng cao thìLSHSelfAttentioncàng chính xác, nhưng quá trình băm cũng càng tốn bộ nhớ và thời gian. - vocab_size (
int, tuỳ chọn, mặc định là320) — 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ởiinput_ids. - tie_word_embeddings (
bool, tùy chọn, mặc định làFalse) — Có nên gắn kết các trọng số nhúng theo ánh xạtied_weights_keyscủa mô hình hay không. - 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ếuconfig.is_decoder=Truehoặc khi mô hình là mô hình sinh chỉ có decoder. - classifier_dropout (
Union[float, int], tùy chọn) — Tỷ lệ dropout cho bộ phân loại. - bos_token_id (
int, tùy chọn) — Token id được sử dụng cho beginning-of-stream trong bảng từ vựng. - pad_token_id (
int, tùy chọn, mặc định là0) — Token id được sử dụng để đệm (padding) trong từ vựng.
Đây là lớp cấu hình để lưu trữ cấu hình của một ReformerModel. Nó được sử dụng để khởi tạo một mô hình Reformer 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ấu hình của google/reformer-crime-and-punishment
Các đối tượng cấu hình kế thừa từ 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 để biết thêm thông tin.
Ví dụ:
>>> from transformers import ReformerConfig, ReformerModel
>>> # Initializing a Reformer configuration
>>> configuration = ReformerConfig()
>>> # Initializing a Reformer model (with random weights)
>>> model = ReformerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configReformerTokenizer
lớp transformers.ReformerTokenizer
< source >( vocab: str | dict[str, int] | None = Nonemerges: str | list[str] | None = Noneeos_token: str = '</s>'unk_token: str = '<unk>'_spm_precompiled_charsmap: str | None = Noneadditional_special_tokens: list | None = None**kwargs )
Tham số
- vocab_file (
str) — SentencePiece file (thường có phần mở rộng .spm) chứa từ vựng cần thiết để khởi tạo một tokenizer. - eos_token (
str, tuỳ chọn, mặc định là"</s>") — Token kết thúc chuỗi. Khi xây dựng một chuỗi bằng các token đặc biệt, đây không phải là token được dùng cho kết thúc chuỗi. Token được dùng là sep_token.Khi xây dựng một chuỗi bằng các token đặc biệt, đây không phải là token được sử dụng cho kết thúc chuỗi. Token được sử dụng là
sep_token. - unk_token (
str, tùy chọn, mặc định là"<unk>") — Token không xác định. Một token không có trong từ vựng sẽ không thể được chuyển đổi thành ID và sẽ được gán thành token này thay thế. - pad_token (
str, tùy chọn, mặc định là"<pad>") — Token được sử dụng để đệm, chẳng hạn khi xử lý các lô (batch) gồm các chuỗi có độ dài khác nhau. - additional_special_tokens (
list[str], tùy chọn) — Các token đặc biệt bổ sung được sử dụng bởi tokenizer. - vocab (
strhoặcdict[str, int], không bắt buộc) — Từ điển từ vựng tùy chỉnh. Nếu không được cung cấp, từ vựng sẽ được tải từvocab_file. - merges (
strhoặclist[str], tùy chọn) — Danh sách merges tùy chỉnh. Nếu không được cung cấp, merges sẽ được tải từvocab_file.
Xây dựng bộ phân từ Reformer (dựa trên thư viện tokenizers của HuggingFace). Dựa trên BPE.
Tokenizer này kế thừa từ TokenizersBackend, lớp chứa hầu hết các phương thức chính. Người dùng nên tham khảo lớp cha này để biết thêm thông tin về các phương thức đó.
ReformerModel
lớp transformers.ReformerModel
< source >( config: ReformerConfig )
Tham số
- config (ReformerConfig) — 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 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() để tải trọng số của mô hình.
Mô hình Reformer cơ bản, xuất ra các hidden-state thô mà không có bất kỳ head cụ thể nào ở phía trên.
Mô hình này kế thừa từ 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, v.v.)
Mô hình này cũng là một lớp con của 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
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonepast_buckets_states: transformers.models.reformer.modeling_reformer.ReformerDynamicCache | None = Noneuse_cache: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → ReformerModelOutput or tuple(torch.Tensor)
Tham số
- input_ids (
torch.LongTensorcó dạng(batch_size, sequence_length)) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Trong quá trình huấn luyện, sequence_length của input_ids phải là bội số của độ dài chunk liên quan của mô hình (lsh, local hoặc cả hai). Trong quá trình đánh giá, các chỉ số sẽ được tự động đệm để trở thành bội số của độ dài chunk.Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.
- attention_mask (
torch.Tensorcó 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.
- position_ids (
torch.Tensorcó hình dạng(batch_size, sequence_length), tùy chọn) — Chỉ số vị trí của các token trong mỗi chuỗi đầu vào trong các position embeddings. Được chọn trong khoảng[0, config.n_positions - 1]. - inputs_embeds (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyềninput_ids, bạn có thể chọn 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_idsthà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. - num_hashes (
int, tuỳ chọn) — Số vòng băm cần thực hiện trong quá trình phân nhóm (bucketing). Việc đặt giá trị cho đối số này sẽ ghi đè lên giá trị mặc định được định nghĩa trongconfig.num_hashes.Để biết thêm thông tin, hãy xem
num_hashestrong ReformerConfig. - past_buckets_states (
ReformerDynamicCache, tuỳ chọn) — Danh sách cáctuple(torch.LongTensor, torch.Tensorcó độ dàiconfig.n_layers, với phần tử đầu tiên là buckets có hình dạng(batch_size, num_heads, num_hashes, sequence_length)) và phần tử thứ hai là hidden_states có hình dạng(batch_size, sequence_length, hidden_size)).Chứa các hidden-states và buckets đã được tính trước (chỉ liên quan đến LSH Self-Attention). Có thể được sử dụng để tăng tốc độ giải mã tuần tự.
- use_cache (
bool, tùy chọn) — Nếu đặt thànhTrue, các trạng thái key value củapast_key_valuessẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xempast_key_values). - output_hidden_states (
bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - output_attentions (
bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - return_dict (
bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.
Trả về
ReformerModelOutput hoặc tuple(torch.Tensor)
Một ReformerModelOutput 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 (ReformerConfig) và đầu vào.
Phương thức forward của ReformerModel 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, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đả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ẽ lặng lẽ bỏ qua chúng.
last_hidden_state (
torch.Tensorcó hình dạng(batch_size, num_predict, hidden_size)) — Chuỗi các hidden-state ở lớp cuối cùng của mô hình.num_predicttương ứng vớitarget_mapping.shape[1]. Nếutarget_mappinglàNone, thìnum_predicttương ứng vớisequence_length.past_buckets_states (
list[tuple(torch.LongTensor, torch.Tensor)], optional, được trả về khiuse_cache=Trueđược truyền vào hoặc khiconfig.use_cache=True) — Danh sách cáctuple(torch.LongTensor, torch.Tensorcó độ dàiconfig.n_layers, trong đó phần tử đầu tiên là buckets trước đó có hình dạng(batch_size, num_heads, num_hashes, sequence_length)) và phần tử thứ hai là hidden_states trước đó có hình dạng(batch_size, sequence_length, hidden_size)).Chứa các bucket và hidden-states đã được tính trước, có thể được sử dụng (xem đầu vào
past_buckets_states) để tăng tốc độ giải mã tuần tự.hidden_states (
tuple[torch.Tensor], tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Tuple củatorch.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], tuỳ chọn, được trả về khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.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.
ReformerModelWithLMHead
lớp transformers.ReformerModelWithLMHead
< source >( config: ReformerConfig )
Tham số
- config (ReformerConfig) — 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 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() để tải trọng số của mô hình.
Mô hình Reformer với đầu language modeling phía trên.
Mô hình này kế thừa từ 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, v.v.)
Mô hình này cũng là một lớp con của 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
< source >( input_ids: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonepast_buckets_states: list[tuple[torch.Tensor]] | None = Noneuse_cache: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs ) → CausalLMOutput or tuple(torch.Tensor)
Tham số
- input_ids (
torch.LongTensorcó dạng(batch_size, sequence_length)) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Trong quá trình huấn luyện, sequence_length của input_ids phải là bội số của độ dài chunk liên quan của mô hình (lsh, local hoặc cả hai). Trong quá trình đánh giá, các chỉ số sẽ được tự động đệm để trở thành bội số của độ dài chunk.Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.
- position_ids (
torch.Tensorcó hình dạng(batch_size, sequence_length), tùy chọn) — Chỉ số vị trí của các token trong mỗi chuỗi đầu vào trong các position embeddings. Được chọn trong khoảng[0, config.n_positions - 1]. - attention_mask (
torch.Tensorcó 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.
- inputs_embeds (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyềninput_ids, bạn có thể chọn 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_idsthà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. - num_hashes (
int, tuỳ chọn) — Số vòng băm cần thực hiện trong quá trình phân nhóm (bucketing). Việc đặt giá trị cho đối số này sẽ ghi đè lên giá trị mặc định được định nghĩa trongconfig.num_hashes.Để biết thêm thông tin, hãy xem
num_hashestrong ReformerConfig. - past_buckets_states (
list[tuple(torch.LongTensor, torch.Tensor)], tuỳ chọn) — Danh sách cáctuple(torch.LongTensor, torch.Tensorcó độ dàiconfig.n_layers, với phần tử đầu tiên là buckets có hình dạng(batch_size, num_heads, num_hashes, sequence_length)) và phần tử thứ hai là hidden_states có hình dạng(batch_size, sequence_length, hidden_size)).Chứa các hidden-states và buckets đã được tính trước (chỉ liên quan đến LSH Self-Attention). Có thể được sử dụng để tăng tốc độ giải mã tuần tự.
- use_cache (
bool, tùy chọn) — Nếu đặt thànhTrue, các trạng thái key value củapast_key_valuessẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xempast_key_values). - output_hidden_states (
bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - output_attentions (
bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - return_dict (
bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không. - labels (
torch.LongTensorcó shape(batch_size,), tùy chọn) — Nhãn để tính loss cho phân loại/hồi quy chuỗi. Chỉ số phải nằm trong[-100, 0, ..., config.vocab_size - 1]. Tất cả các nhãn được đặt thành-100sẽ bị bỏ qua (masked), loss chỉ được tính cho các nhãn trong[0, ..., config.vocab_size] - logits_to_keep (
Union[int, torch.Tensor], tùy chọn, mặc định là0) — Nếu làint, tính logits chologits_to_keeptoken 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ề
CausalLMOutput hoặc tuple(torch.Tensor)
Một CausalLMOutput 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 (ReformerConfig) và đầu vào.
Phương thức forward của ReformerModelWithLMHead 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, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đả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ẽ lặng lẽ bỏ qua chúng.
loss (
torch.Tensorcó shape(1,), tùy chọn, được trả về khilabelsđược cung cấp) — Loss của language modeling (cho next-token prediction).logits (
torch.Tensorcó 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 trong từ vựng trước SoftMax).hidden_states (
tuple(torch.Tensor), tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Bộ tuple củatorch.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), tuỳ chọn, được trả về khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.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ụ:
>>> import torch
>>> from transformers import AutoTokenizer, ReformerModelWithLMHead
>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerModelWithLMHead.from_pretrained("google/reformer-crime-and-punishment")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs, labels=inputs["input_ids"])
>>> loss = outputs.loss
>>> logits = outputs.logitsReformerForMaskedLM
lớp transformers.ReformerForMaskedLM
< source >( config: ReformerConfig )
Tham số
- config (ReformerConfig) — 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 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() để tải trọng số của mô hình.
Mô hình Reformer với đầu language modeling ở trên.”
Mô hình này kế thừa từ 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, v.v.)
Mô hình này cũng là một lớp con của 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
< source >( input_ids: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → MaskedLMOutput or tuple(torch.Tensor)
Tham số
- input_ids (
torch.LongTensorcó dạng(batch_size, sequence_length)) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Trong quá trình huấn luyện, sequence_length của input_ids phải là bội số của độ dài chunk liên quan của mô hình (lsh, local hoặc cả hai). Trong quá trình đánh giá, các chỉ số sẽ được tự động đệm để trở thành bội số của độ dài chunk.Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.
- position_ids (
torch.Tensorcó hình dạng(batch_size, sequence_length), tùy chọn) — Chỉ số vị trí của các token trong mỗi chuỗi đầu vào trong các position embeddings. Được chọn trong khoảng[0, config.n_positions - 1]. - attention_mask (
torch.Tensorcó 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.
- inputs_embeds (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyềninput_ids, bạn có thể chọn 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_idsthà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. - num_hashes (
int, tuỳ chọn) — Số vòng băm cần thực hiện trong quá trình phân nhóm (bucketing). Việc đặt giá trị cho đối số này sẽ ghi đè lên giá trị mặc định được định nghĩa trongconfig.num_hashes.Để biết thêm thông tin, hãy xem
num_hashestrong ReformerConfig. - labels (
torch.LongTensorcó 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ữ có mặt nạ. Chỉ số nên nằm trong[-100, 0, ..., config.vocab_size](xeminput_idsdocstring) Các token có chỉ số được đặt thành-100sẽ bị bỏ qua (mặt nạ), tổn thất chỉ được tính cho các token có nhãnVí dụ này sử dụng một checkpoint giả vì chúng ta không có bất kỳ model được huấn luyện trước nào cho tác vụ masked language modeling với kiến trúc Reformer.
- output_hidden_states (
bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - output_attentions (
bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - return_dict (
bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.
Trả về
MaskedLMOutput hoặc tuple(torch.Tensor)
Một MaskedLMOutput 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 (ReformerConfig) và đầu vào.
Phương thức forward của ReformerForMaskedLM 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, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đả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ẽ lặng lẽ bỏ qua chúng.
loss (
torch.Tensorcó hình dạng(1,), tùy chọn, được trả về khilabelsđược cung cấp) — Tổn thất mô hình hóa ngôn ngữ có mặt nạ (MLM).logits (
torch.Tensorcó 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 trong từ vựng trước SoftMax).hidden_states (
tuple(torch.Tensor), tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Bộ tuple củatorch.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), tuỳ chọn, được trả về khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.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ụ:
>>> import torch
>>> from transformers import AutoTokenizer, ReformerForMaskedLM
>>> tokenizer = AutoTokenizer.from_pretrained("hf-internal-testing/tiny-random-reformer")
>>> model = ReformerForMaskedLM.from_pretrained("hf-internal-testing/tiny-random-reformer")
>>> # add mask_token
>>> tokenizer.add_special_tokens({"mask_token": "[MASK]"})
>>> inputs = tokenizer("The capital of France is [MASK].", return_tensors="pt")
>>> # resize model's embedding matrix
>>> model.resize_token_embeddings(new_num_tokens=model.config.vocab_size + 1)
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # retrieve index of [MASK]
>>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]
>>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
>>> predicted_token = tokenizer.decode(predicted_token_id)>>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
>>> # mask labels of non-[MASK] tokens
>>> labels = torch.where(
... inputs.input_ids == tokenizer.mask_token_id, labels[:, : inputs["input_ids"].shape[-1]], -100
... )
>>> outputs = model(**inputs, labels=labels)
>>> loss = round(outputs.loss.item(), 2)ReformerForSequenceClassification
lớp transformers.ReformerForSequenceClassification
< source >( config: ReformerConfig )
Tham số
- config (ReformerConfig) — 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 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() để tải trọng số của mô hình.
Mô hình Reformer transformer với đầu phân loại/hồi quy chuỗi phía trên (một lớp tuyến tính phía trên đầu ra đã được gộp) ví dụ cho các tác vụ GLUE.
Mô hình này kế thừa từ 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, v.v.)
Mô hình này cũng là một lớp con của 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
< source >( input_ids: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SequenceClassifierOutput or tuple(torch.Tensor)
Tham số
- input_ids (
torch.LongTensorcó dạng(batch_size, sequence_length)) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Trong quá trình huấn luyện, sequence_length của input_ids phải là bội số của độ dài chunk liên quan của mô hình (lsh, local hoặc cả hai). Trong quá trình đánh giá, các chỉ số sẽ được tự động đệm để trở thành bội số của độ dài chunk.Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.
- position_ids (
torch.Tensorcó hình dạng(batch_size, sequence_length), tùy chọn) — Chỉ số vị trí của các token trong mỗi chuỗi đầu vào trong các position embeddings. Được chọn trong khoảng[0, config.n_positions - 1]. - attention_mask (
torch.Tensorcó 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.
- inputs_embeds (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyềninput_ids, bạn có thể chọn 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_idsthà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. - num_hashes (
int, tuỳ chọn) — Số vòng băm cần thực hiện trong quá trình phân nhóm (bucketing). Việc đặt giá trị cho đối số này sẽ ghi đè lên giá trị mặc định được định nghĩa trongconfig.num_hashes.Để biết thêm thông tin, hãy xem
num_hashestrong ReformerConfig. - labels (
torch.LongTensorcó shape(batch_size,), tùy chọn) — Nhãn để tính loss cho phân loại/hồi quy chuỗi. Chỉ số phải nằm trong[0, ..., config.num_labels - 1]. Nếuconfig.num_labels == 1, loss hồi quy sẽ được tính (Mean-Square loss). Nếuconfig.num_labels > 1, loss phân loại sẽ được tính (Cross-Entropy). - output_hidden_states (
bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - output_attentions (
bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - return_dict (
bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.
Trả về
SequenceClassifierOutput hoặc tuple(torch.Tensor)
Một SequenceClassifierOutput 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 (ReformerConfig) và đầu vào.
Phương thức forward của ReformerForSequenceClassification 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, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đả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ẽ lặng lẽ bỏ qua chúng.
loss (
torch.Tensorcó shape(1,), optional, được trả về khilabelsđược cung cấp) — Loss phân loại (hoặc hồi quy nếu config.num_labels==1).logits (
torch.Tensorcó hình dạng(batch_size, config.num_labels)) — Điểm phân loại (hoặc hồi quy nếu config.num_labels==1) (trước SoftMax).hidden_states (
tuple(torch.Tensor), tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Bộ tuple củatorch.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), tuỳ chọn, được trả về khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.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ụ về phân loại nhãn đơn:
>>> import torch
>>> from transformers import AutoTokenizer, ReformerForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerForSequenceClassification.from_pretrained("google/reformer-crime-and-punishment")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> label = model.config.id2label[predicted_class_id]>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = ReformerForSequenceClassification.from_pretrained(
... "google/reformer-crime-and-punishment", num_labels=num_labels
... )
>>> labels = torch.tensor(1)
>>> loss = model(**inputs, labels=labels).lossReformerForQuestionAnswering
lớp transformers.ReformerForQuestionAnswering
< source >( config: ReformerConfig )
Tham số
- config (ReformerConfig) — 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 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() để tải trọng số của mô hình.
Transformer Reformer với một đầu phân loại span phía trên cho các tác vụ trả lời câu hỏi trích xuất như SQuAD (một lớp tuyến tính phía trên đầu ra hidden-states để tính toán span start logits và span end logits).
Mô hình này kế thừa từ 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, v.v.)
Mô hình này cũng là một lớp con của 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
< source >( input_ids: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonestart_positions: typing.Optional[torch.Tensor] = Noneend_positions: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → QuestionAnsweringModelOutput or tuple(torch.Tensor)
Tham số
- input_ids (
torch.LongTensorcó dạng(batch_size, sequence_length)) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Trong quá trình huấn luyện, sequence_length của input_ids phải là bội số của độ dài chunk liên quan của mô hình (lsh, local hoặc cả hai). Trong quá trình đánh giá, các chỉ số sẽ được tự động đệm để trở thành bội số của độ dài chunk.Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.
- position_ids (
torch.Tensorcó hình dạng(batch_size, sequence_length), tùy chọn) — Chỉ số vị trí của các token trong mỗi chuỗi đầu vào trong các position embeddings. Được chọn trong khoảng[0, config.n_positions - 1]. - attention_mask (
torch.Tensorcó 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.
- inputs_embeds (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyềninput_ids, bạn có thể chọn 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_idsthà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. - num_hashes (
int, tuỳ chọn) — Số vòng băm cần thực hiện trong quá trình phân nhóm (bucketing). Việc đặt giá trị cho đối số này sẽ ghi đè lên giá trị mặc định được định nghĩa trongconfig.num_hashes.Để biết thêm thông tin, hãy xem
num_hashestrong ReformerConfig. - start_positions (
torch.Tensorcó hình dạng(batch_size,), tùy chọn) — Nhãn cho vị trí (chỉ số) bắt đầu của đoạn được gán nhãn để tính toán tổn thất phân loại token. Các vị trí được kẹp (clamp) theo độ dài của chuỗi (sequence_length). Các vị trí nằm ngoài chuỗi không được tính đến khi tính toán tổn thất. - end_positions (
torch.Tensorcó hình dạng(batch_size,), tùy chọn) — Nhãn cho vị trí (chỉ số) của điểm kết thúc của đoạn được gán nhãn để tính toán tổn thất phân loại token. Các vị trí được kẹp (clamp) theo độ dài của chuỗi (sequence_length). Các vị trí nằm ngoài chuỗi không được tính đến khi tính toán tổn thất. - output_hidden_states (
bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - output_attentions (
bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - return_dict (
bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.
Trả về
QuestionAnsweringModelOutput hoặc tuple(torch.Tensor)
Một QuestionAnsweringModelOutput 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 (ReformerConfig) và đầu vào.
Phương thức forward của ReformerForQuestionAnswering 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, người dùng nên gọi instance của
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đả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ẽ lặng lẽ bỏ qua chúng.
loss (
torch.Tensorcó shape(1,), tuỳ chọn, được trả về khilabelsđược cung cấp) — Tổng loss trích xuất span là tổng của Cross-Entropy cho các vị trí bắt đầu và kết thúc.start_logits (
torch.Tensorcó hình dạng(batch_size, sequence_length)) — Điểm số bắt đầu span (trước SoftMax).end_logits (
torch.Tensorcó hình dạng(batch_size, sequence_length)) — Điểm số kết thúc span (trước SoftMax).hidden_states (
tuple(torch.Tensor), tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Bộ tuple củatorch.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), tuỳ chọn, được trả về khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.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ụ:
>>> from transformers import AutoTokenizer, ReformerForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerForQuestionAnswering.from_pretrained("google/reformer-crime-and-punishment")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()
>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
...
>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])
>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
...