Transformers documentation
Reformer
Este modelo foi publicado no HF papers em 2020-01-13 e contribuído para o Hugging Face Transformers em 2020-11-16.
Reformer
Visão geral
O modelo Reformer foi proposto no artigo Reformer: The Efficient Transformer, de Nikita Kitaev, Łukasz Kaiser e Anselm Levskaya.
O resumo do artigo é o seguinte:
Modelos Transformer de grande porte alcançam rotineiramente resultados de estado da arte em diversas tarefas, mas o treinamento desses modelos pode ser proibitivamente caro, especialmente em sequências longas. Apresentamos duas técnicas para melhorar a eficiência dos Transformers. Em primeiro lugar, substituímos a atenção de produto escalar por uma que utiliza hashing sensível à localidade, alterando sua complexidade de O(L^2) para O(Llog(L)), onde L é o comprimento da sequência. Além disso, utilizamos camadas residuais reversíveis em vez das residuais padrão, o que permite armazenar as ativações apenas uma vez no processo de treinamento, em vez de N vezes, onde N é o número de camadas. O modelo resultante, o Reformer, apresenta desempenho equivalente ao dos modelos Transformer, sendo muito mais eficiente em memória e muito mais rápido em sequências longas.
Este modelo foi contribuído por patrickvonplaten. O código dos autores pode ser encontrado aqui.
Dicas de uso
- O Reformer não funciona com torch.nn.DataParallel devido a um bug no PyTorch, veja issue #36035.
- Use a codificação de posição axial (veja abaixo para mais detalhes). Trata-se de um mecanismo para evitar a necessidade de uma matriz de codificação de posição enorme (quando o comprimento da sequência é muito grande), fatorando-a em matrizes menores.
- Substitua a atenção tradicional pela atenção LSH (local-sensitive hashing) (veja abaixo para mais detalhes). Trata-se de uma técnica para evitar o cálculo do produto completo query-key nas camadas de atenção.
- Evite armazenar os resultados intermediários de cada camada usando camadas de transformador reversíveis para obtê-los durante a passagem reversa (subtrair os resíduos da entrada da camada seguinte os recupera) ou recalculando-os para os resultados dentro de uma camada específica (menos eficiente do que armazená-los, mas economiza memória).
- Calcule as operações de feedforward em blocos e não em todo o lote.
Codificações Posicionais Axiais
Os Encodings Posicionais Axiais foram implementados pela primeira vez na biblioteca trax do Google e desenvolvidos pelos autores do paper deste modelo. Em modelos que tratam sequências de entrada muito longas, os encodings de id de posição convencionais armazenam um vetor de embeddings de tamanho sendo config.hidden_size para cada posição $i, \ldots, n_s$, com sendo config.max_embedding_size. Isso significa que ter um comprimento de sequência de e um config.hidden_size de resultaria em uma matriz de encoding de posição:
que sozinho possui mais de 500M de parâmetros para armazenar. As codificações posicionais axiais fatorizam em duas matrizes:
e
com:
Portanto, o seguinte vale:
Intuitivamente, isso significa que um vetor de incorporação de posição agora é a composição de dois vetores de incorporação fatorados: $x^1{k, l} + x^2{l, k}$, onde a dimensão config.max_embedding_size é fatorada em $k \text{ e } l$. Esse design garante que cada vetor de incorporação de posição seja único.
Usando novamente o exemplo acima, a codificação de posição axial com pode reduzir drasticamente o número de parâmetros de 500 000 000 para parâmetros, o que significa 85% menos uso de memória.
Na prática, o parâmetro config.axial_pos_embds_dim é definido como uma tupla cuja soma deve ser igual a config.hidden_size e config.axial_pos_shape é definido como uma tupla cujo produto deve ser igual a config.max_embedding_size, que, durante o treinamento, deve ser igual ao comprimento da sequência dos input_ids.
LSH Self Attention
Na autoatenção com hash sensível à localidade (LSH), os pesos de projeção das chaves e das consultas são compartilhados. Portanto, os vetores de incorporação das chaves e das consultas também são compartilhados. A autoatenção LSH utiliza o mecanismo de hash sensível à localidade proposto em Practical and Optimal LSH for Angular Distance para atribuir cada um dos vetores de incorporação compartilhados de chave e consulta a um dos config.num_buckets buckets possíveis. A premissa é que quanto mais “similares” forem os vetores de incorporação de chave e consulta (em termos de similaridade de cosseno) entre si, maior a probabilidade de serem atribuídos ao mesmo bucket.
A precisão do mecanismo de LSH pode ser melhorada aumentando config.num_hashes ou diretamente o argumento num_hashes da função forward, de modo que a saída da autoatenção LSH aproxime melhor a saída da autoatenção completa “normal”. Os buckets são então ordenados e divididos em blocos de vetores de incorporação de consulta e chave, cada um com comprimento config.lsh_chunk_length. Para cada bloco, os vetores de incorporação de consulta prestam atenção aos seus vetores de chave (que estão vinculados a si mesmos) e aos vetores de incorporação de chave de config.lsh_num_chunks_before blocos vizinhos anteriores e config.lsh_num_chunks_after blocos vizinhos seguintes.
Para mais informações, consulte o artigo original ou este ótimo post de blog.
Observe que config.num_buckets também pode ser fatorado em uma lista $(n{\text{buckets}}^1,
n{\text{buckets}}^2)). Dessa forma, em vez de atribuir os vetores de incorporação de chave de consulta a um dos $(1,\ldots,
n{\text{buckets}})$, eles são atribuídos a um dos $(1-1,\ldots, n{\text{buckets}}^1-1, \ldots,
1-n{\text{buckets}}^2, \ldots, n{\text{buckets}}^1-n_{\text{buckets}}^2)$. Isso é crucial para sequências muito longas para
economizar memória.
Ao treinar um modelo do zero, é recomendado deixar config.num_buckets=None, para que, dependendo do
comprimento da sequência, um bom valor para num_buckets seja calculado em tempo de execução. Esse valor será então
salvo automaticamente na configuração e deve ser reutilizado para inferência.
Ao usar autoatenção LSH, a complexidade de memória e tempo da operação de produto matricial query-key pode ser reduzida de para $\mathcal{O}(n_s \times \log(n_s))$, o que geralmente representa o gargalo de memória e tempo em um modelo transformer, com sendo o comprimento da sequência.
Autoatendimento local
A autoatenção local é essencialmente uma camada de autoatenção “normal” com projeções de chave, consulta e valor, mas é dividida em blocos, de modo que, em cada bloco de comprimento config.local_chunk_length, os vetores de incorporação de consulta atendem apenas aos vetores de incorporação de chave do próprio bloco e aos vetores de incorporação de chave dos config.local_num_chunks_before blocos vizinhos anteriores e dos config.local_num_chunks_after blocos vizinhos seguintes.
Ao usar autoatenção local, a complexidade de memória e tempo da operação de produto matricial query-key pode ser reduzida de para $\mathcal{O}(n_s \times \log(n_s))$, o que geralmente representa o gargalo de memória e tempo em um modelo transformer, com sendo o comprimento da sequência.
Treinamento
Durante o treinamento, devemos garantir que o comprimento da sequência seja definido para um valor que possa ser dividido pelo mínimo múltiplo comum de config.lsh_chunk_length e config.local_chunk_length e que os parâmetros dos Axial Positional Encodings estejam corretamente definidos, conforme descrito acima. O Reformer é muito eficiente em termos de memória, de modo que o modelo pode ser treinado facilmente em sequências com até 64000 tokens.
Para o treinamento, o ReformerModelWithLMHead deve ser usado da seguinte forma:
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]Recursos
- Guia da tarefa de classificação de texto
- Guia da tarefa de resposta a perguntas
- Guia da tarefa de modelagem de linguagem causal
- Guia da tarefa de modelagem de linguagem mascarada
ReformerConfig
classe 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 )
Parâmetros
- attention_head_size (
int, opcional, padrão 64) — Dimensão dos vetores de chave, consulta e valor projetados - attn_layers (
list[str], opcional, padrão["local", "lsh", "local", "lsh", "local", "lsh"]) — Lista dos tipos de camadas de atenção em ordem crescente. Pode ser escolhida entre uma camada LSHSelfAttention ("lsh") e uma camada LocalSelfAttention ("local"). Para mais informações sobre a camada LSHSelfAttention, consulte LSH Self Attention. Para mais informações sobre a camada LocalSelfAttention, consulte Local Self Attention. - axial_norm_std (
float, opcional, padrão 1.0) — O desvio padrão do normal_initializer para inicializar as matrizes de pesos das codificações posicionais axiais. - axial_pos_embds (
bool, opcional, padrãoTrue) — Indica se deve ou não usar embeddings de posição axial. Para mais informações sobre como os embeddings de posição axial funcionam, consulte Axial Position Encodings. - axial_pos_shape (
list[int], opcional, padrão[64, 64]) — As dimensões de posição das codificações de posição axiais. Durante o treinamento, o produto das dimensões de posição deve ser igual ao comprimento da sequência. Para mais informações sobre como funcionam os embeddings de posição axial, consulte Axial Position Encodings. - axial_pos_embds_dim (
list[int], opcional, padrão[64, 192]) — As dimensões dos embeddings das codificações de posição axial. A soma das dimensões dos embeddings deve ser igual ao tamanho oculto (hidden size). Para mais informações sobre como funcionam os embeddings de posição axial, consulte Axial Position Encodings. - chunk_size_lm_head (
int, opcional, padrão 0) — O tamanho do bloco da camada final de feed forward da cabeça do modelo de linguagem. Um tamanho de bloco de 0 significa que a camada de feed forward não é dividida em blocos. Um tamanho de bloco de n significa que a camada de feed forward processa n < sequence_length embeddings por vez. Para mais informações sobre a divisão em blocos de feed forward, consulte Como funciona a divisão em blocos de Feed Forward?. - eos_token_id (
Union[int, list[int]], opcional, padrão2) — ID do token usado para o fim do fluxo no vocabulário. - feed_forward_size (
int, opcional, padrão 512) — Dimensão da camada feed_forward no bloco de atenção residual. - hash_seed (
int, opcional) — Semente que pode ser usada para tornar o hashing sensível local emLSHSelfAttentiondeterminístico. Isso deve ser definido apenas para fins de teste. Para fins de avaliação e treinamento,hash_seeddeve ser mantido comoNonepara garantir rotações totalmente aleatórias no esquema de hashing sensível local. - hidden_act (
str, opcional, padrãorelu) — A função de ativação não linear (função ou string) no decodificador. Por exemplo,"gelu","relu","silu", etc. - hidden_dropout_prob (
Union[float, int], opcional, padrão0.05) — A probabilidade de dropout para todas as camadas totalmente conectadas nos embeddings, no encoder e no pooler. - hidden_size (
int, opcional, padrão256) — Dimensão das representações ocultas. - initializer_range (
float, opcional, padrão0.02) — O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos. - is_decoder (
bool, opcional, padrãoFalse) — Indica se o modelo é usado como decodificador ou não. SeFalse, o modelo é usado como codificador. - layer_norm_eps (
float, opcional, padrão1e-12) — O epsilon usado pelas camadas de normalização de camada. - local_num_chunks_before (
int, opcional, padrão 1) — Número de blocos vizinhos anteriores para os quais a camadaLocalSelfAttentiondeve prestar atenção. - local_num_chunks_after (
int, opcional, padrão 0) — Número de blocos vizinhos subsequentes a serem considerados pela camadaLocalSelfAttention, além do próprio bloco. - local_attention_probs_dropout_prob (
float, opcional, padrão 0.1) — A taxa de dropout para as probabilidades de atenção emLocalSelfAttention. - local_attn_chunk_length (
int, opcional, padrão 64) — Comprimento de cada bloco nas camadas de atenção local. - lsh_attn_chunk_length (
int, opcional, padrão 64) — Comprimento do bloco que atende a si mesmo emLSHSelfAttention. A divisão em blocos reduz a complexidade de memória de comprimento da sequência x comprimento da sequência (autoatenção) para comprimento do bloco x comprimento do bloco x comprimento da sequência / comprimento do bloco (autoatenção em blocos). - lsh_attention_probs_dropout_prob (
float, opcional, padrão 0.1) — A taxa de dropout para as probabilidades de atenção emLSHSelfAttention. - lsh_num_chunks_before (
int, opcional, padrão 1) — Número de blocos vizinhos anteriores em relação aos quais a camadaLSHSelfAttentiondeve prestar atenção a si mesma. - lsh_num_chunks_after (
int, opcional, padrão 0) — Número de blocos vizinhos subsequentes para os quais a camadaLSHSelfAttentiondeve prestar atenção a si mesma. - max_position_embeddings (
int, opcional, padrão4096) — O comprimento máximo de sequência com o qual este modelo pode ser utilizado. - num_attention_heads (
int, opcional, padrão12) — Número de cabeças de atenção para cada camada de atenção no decodificador do Transformer. - num_buckets (
intoulist[int], opcional) — Número de buckets, nos quais os vetores de chave de consulta podem ser “hacheados” usando o esquema de hashing sensível à localidade. Cada vetor de chave de consulta é hacheadado em um hash em1, ..., num_buckets. O número de buckets também pode ser fatorado em uma lista para melhorar a complexidade de memória. Nesse caso, cada vetor de chave de consulta é hacheadado em um hash em1-1, 1-2, ..., num_buckets[0]-1, ..., num_buckets[0]-num_buckets[1]senum_bucketsfor fatorado em dois fatores. O número de buckets (ou o produto dos fatores) deve ser aproximadamente igual a comprimento da sequência / lsh_chunk_length. Senum_bucketsnão for definido, um bom valor é calculado em tempo de execução. - num_hashes (
int, opcional, padrão 1) — Número de rodadas de hash (por exemplo, número de rotações aleatórias) no esquema de Local Sensitive Hashing. Quanto maior o valor denum_hashes, mais precisa aLSHSelfAttentionse torna, mas também mais intensivo em memória e tempo o processo de hash se torna. - vocab_size (
int, opcional, padrão320) — Tamanho do vocabulário do modelo. Define o número de tokens diferentes que podem ser representados pelosinput_ids. - tie_word_embeddings (
bool, opcional, padrãoFalse) — Se deve vincular as embeddings de pesos de acordo com o mapeamentotied_weights_keysdo modelo. - use_cache (
bool, opcional, padrãoTrue) — Se o modelo deve ou não retornar as últimas chaves/valores de atenção (não usado por todos os modelos). Relevante apenas seconfig.is_decoder=Trueou quando o modelo for um modelo generativo somente decodificador. - classifier_dropout (
Union[float, int], opcional) — A taxa de dropout para o classificador. - bos_token_id (
int, opcional) — ID do token usado para o início do fluxo no vocabulário. - pad_token_id (
int, opcional, padrão0) — ID do token usado para preenchimento no vocabulário.
Esta é a classe de configuração para armazenar a configuração de um ReformerModel. Ela é usada para instanciar um modelo Reformer de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do google/reformer-crime-and-punishment
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Exemplos:
>>> 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
classe 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 )
Parâmetros
- vocab_file (
str) — arquivo SentencePiece (geralmente com a extensão .spm) que contém o vocabulário necessário para instanciar um tokenizador. - eos_token (
str, opcional, padrão é"</s>") — O token de fim de sequência. Ao construir uma sequência usando tokens especiais, este não é o token usado para o fim da sequência. O token utilizado é o sep_token.Ao construir uma sequência usando tokens especiais, este não é o token utilizado para o fim da sequência. O token utilizado é o
sep_token. - unk_token (
str, opcional, padrão"<unk>") — O token desconhecido. Um token que não está no vocabulário não pode ser convertido em um ID e é definido como este token em vez disso. - pad_token (
str, opcional, padrão"<pad>") — O token usado para preenchimento, por exemplo, ao agrupar sequências de comprimentos diferentes. - additional_special_tokens (
list[str], opcional) — Tokens especiais adicionais usados pelo tokenizer. - vocab (
stroudict[str, int], opcional) — Dicionário de vocabulário personalizado. Se não for fornecido, a vocabulário é carregada a partir devocab_file. - merges (
stroulist[str], opcional) — Lista de mesclagens personalizada. Se não for fornecida, as mesclagens são carregadas devocab_file.
Construa um tokenizador Reformer (baseado na biblioteca tokenizers da HuggingFace). Baseado em BPE.
Este tokenizador herda de TokenizersBackend, que contém a maioria dos métodos principais. Os usuários devem consultar essa superclasse para obter mais informações sobre esses métodos.
ReformerModel
classe transformers.ReformerModel
< source >( config: ReformerConfig )
Parâmetros
- config (ReformerConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
O modelo Reformer puro, que produz estados ocultos brutos sem nenhum cabeçalho específico no topo.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices dos tokens da sequência de entrada no vocabulário. Durante o treinamento, o sequence_length de input_ids deve ser um múltiplo dos comprimentos de chunk relevantes do modelo (lsh, local ou ambos). Durante a avaliação, os índices são automaticamente preenchidos para serem um múltiplo do comprimento do chunk.Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes.
- attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- position_ids (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo[0, config.n_positions - 1]. - inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passarinput_ids, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices deinput_idsnos vetores associados do que a matriz de busca de incorporação interna do modelo. - num_hashes (
int, opcional) — O número de rodadas de hash que devem ser executadas durante o bucketing. Definir este argumento sobrescreve o padrão definido emconfig.num_hashes.Para mais informações, consulte
num_hashesem ReformerConfig. - past_buckets_states (
ReformerDynamicCache, opcional) — Lista detuple(torch.LongTensor, torch.Tensorcom comprimentoconfig.n_layers, em que o primeiro elemento são os buckets de forma(batch_size, num_heads, num_hashes, sequence_length)) e o segundo são os hidden_states de forma(batch_size, sequence_length, hidden_size)).Contém estados ocultos pré-computados e buckets (relevante apenas para LSH Self-Attention). Pode ser usado para acelerar a decodificação sequencial.
- use_cache (
bool, opcional) — Se definido comoTrue, os estados de chave-valorpast_key_valuessão retornados e podem ser usados para acelerar a decodificação (vejapast_key_values). - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - output_attentions (
bool, opcional) — Indica se os tensores de atenção de todas as camadas de atenção devem ser retornados. Consulteattentionsnos tensores retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
ReformerModelOutput ou tuple(torch.Tensor)
Uma ReformerModelOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (ReformerConfig) e das entradas.
O método forward do ReformerModel substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
last_hidden_state (
torch.Tensorde forma(batch_size, num_predict, hidden_size)) — Sequência de hidden-states na última camada do modelo.num_predictcorresponde atarget_mapping.shape[1]. Setarget_mappingforNone, entãonum_predictcorresponde asequence_length.past_buckets_states (
list[tuple(torch.LongTensor, torch.Tensor)], opcional, retornado quandouse_cache=Trueé passado ou quandoconfig.use_cache=True) — Lista detuple(torch.LongTensor, torch.Tensorde comprimentoconfig.n_layers, em que o primeiro elemento é o buckets anterior de forma(batch_size, num_heads, num_hashes, sequence_length)) e o segundo é o hidden_states anterior de forma(batch_size, sequence_length, hidden_size)).Contém buckets pré-computados e hidden-states que podem ser usados (veja a entrada
past_buckets_states) para acelerar a decodificação sequencial.hidden_states (
tuple[torch.Tensor], opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
tuple[torch.Tensor], opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
ReformerModelWithLMHead
classe transformers.ReformerModelWithLMHead
< source >( config: ReformerConfig )
Parâmetros
- config (ReformerConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
Modelo Reformer com uma cabeça de language modeling no topo.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices dos tokens da sequência de entrada no vocabulário. Durante o treinamento, o sequence_length de input_ids deve ser um múltiplo dos comprimentos de chunk relevantes do modelo (lsh, local ou ambos). Durante a avaliação, os índices são automaticamente preenchidos para serem um múltiplo do comprimento do chunk.Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes.
- position_ids (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo[0, config.n_positions - 1]. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passarinput_ids, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices deinput_idsnos vetores associados do que a matriz de busca de incorporação interna do modelo. - num_hashes (
int, opcional) — O número de rodadas de hash que devem ser executadas durante o bucketing. Definir este argumento sobrescreve o padrão definido emconfig.num_hashes.Para mais informações, consulte
num_hashesem ReformerConfig. - past_buckets_states (
list[tuple(torch.LongTensor, torch.Tensor)], opcional) — Lista detuple(torch.LongTensor, torch.Tensorcom comprimentoconfig.n_layers, em que o primeiro elemento é os buckets de forma(batch_size, num_heads, num_hashes, sequence_length)) e o segundo é os hidden_states de forma(batch_size, sequence_length, hidden_size)).Contém estados ocultos pré-computados e buckets (relevante apenas para LSH Self-Attention). Pode ser usado para acelerar a decodificação sequencial.
- use_cache (
bool, opcional) — Se definido comoTrue, os estados de chave-valorpast_key_valuessão retornados e podem ser usados para acelerar a decodificação (vejapast_key_values). - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - output_attentions (
bool, opcional) — Indica se os tensores de atenção de todas as camadas de atenção devem ser retornados. Consulteattentionsnos tensores retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples. - labels (
torch.LongTensorde forma(batch_size,), opcional) — Rótulos para o cálculo da perda de classificação/regressão de sequência. Os índices devem estar em[-100, 0, ..., config.vocab_size - 1]. Todos os rótulos definidos como-100são ignorados (mascarados); a perda é calculada apenas para rótulos em[0, ..., config.vocab_size] - logits_to_keep (
Union[int, torch.Tensor], opcional, padrão0) — Se for umint, calcula os logits para os últimoslogits_to_keeptokens. Se for0, calcula os logits para todos osinput_ids(caso especial). Apenas os logits do último token são necessários para a geração, e calculá-los apenas para esse token pode economizar memória, o que se torna bastante significativo para sequências longas ou tamanho de vocabulário grande. Se for umtorch.Tensor, deve ser 1D, correspondendo aos índices a serem mantidos na dimensão de comprimento da sequência. Isso é útil ao usar o formato de tensor empacotado (uma única dimensão para lote e comprimento da sequência).
Retorna
CausalLMOutput ou tuple(torch.Tensor)
Um CausalLMOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (ReformerConfig) e das entradas.
O método forward do ReformerModelWithLMHead sobrescreve o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
loss (
torch.Tensorde forma(1,), opcional, retornado quandolabelsé fornecido) — Perda de modelagem de linguagem (para previsão do próximo token).logits (
torch.Tensorde forma(batch_size, sequence_length, config.vocab_size)) — Pontuações de previsão da cabeça de modelagem de linguagem (pontuações para cada token do vocabulário antes do SoftMax).hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
Exemplo:
>>> 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
classe transformers.ReformerForMaskedLM
< source >( config: ReformerConfig )
Parâmetros
- config (ReformerConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
O Modelo Reformer com uma cabeça de language modeling no topo.”
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices dos tokens da sequência de entrada no vocabulário. Durante o treinamento, o sequence_length de input_ids deve ser um múltiplo dos comprimentos de chunk relevantes do modelo (lsh, local ou ambos). Durante a avaliação, os índices são automaticamente preenchidos para serem um múltiplo do comprimento do chunk.Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes.
- position_ids (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo[0, config.n_positions - 1]. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passarinput_ids, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices deinput_idsnos vetores associados do que a matriz de busca de incorporação interna do modelo. - num_hashes (
int, opcional) — O número de rodadas de hash que devem ser executadas durante o bucketing. Definir este argumento sobrescreve o padrão definido emconfig.num_hashes.Para mais informações, consulte
num_hashesem ReformerConfig. - labels (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Rótulos para calcular a perda de modelagem de linguagem mascarada. Os índices devem estar em[-100, 0, ..., config.vocab_size](vejainput_idsdocstring) Tokens com índices definidos como-100são ignorados (mascarados), a perda é calculada apenas para os tokens com rótulosEste exemplo usa um checkpoint falso, pois não temos nenhum modelo pré-treinado disponível para a tarefa de modelagem de linguagem mascarada com a arquitetura Reformer.
- output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - output_attentions (
bool, opcional) — Indica se os tensores de atenção de todas as camadas de atenção devem ser retornados. Consulteattentionsnos tensores retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
MaskedLMOutput ou tuple(torch.Tensor)
Um MaskedLMOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (ReformerConfig) e das entradas.
O método forward de ReformerForMaskedLM substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
loss (
torch.Tensorde forma(1,), opcional, retornado quandolabelsé fornecido) — Perda de modelagem de linguagem mascarada (MLM).logits (
torch.Tensorde forma(batch_size, sequence_length, config.vocab_size)) — Pontuações de previsão da cabeça de modelagem de linguagem (pontuações para cada token do vocabulário antes do SoftMax).hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
Exemplo:
>>> 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
classe transformers.ReformerForSequenceClassification
< source >( config: ReformerConfig )
Parâmetros
- config (ReformerConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
Modelo Reformer transformer com uma cabeça de classificação/regressão de sequência no topo (uma camada linear no topo da saída agregada), por exemplo, para tarefas GLUE.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices dos tokens da sequência de entrada no vocabulário. Durante o treinamento, o sequence_length de input_ids deve ser um múltiplo dos comprimentos de chunk relevantes do modelo (lsh, local ou ambos). Durante a avaliação, os índices são automaticamente preenchidos para serem um múltiplo do comprimento do chunk.Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes.
- position_ids (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo[0, config.n_positions - 1]. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passarinput_ids, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices deinput_idsnos vetores associados do que a matriz de busca de incorporação interna do modelo. - num_hashes (
int, opcional) — O número de rodadas de hash que devem ser executadas durante o bucketing. Definir este argumento sobrescreve o padrão definido emconfig.num_hashes.Para mais informações, consulte
num_hashesem ReformerConfig. - labels (
torch.LongTensorde forma(batch_size,), opcional) — Rótulos para o cálculo da perda de classificação/regressão de sequência. Os índices devem estar em[0, ..., config.num_labels - 1]. Seconfig.num_labels == 1, uma perda de regressão é calculada (perda de erro quadrático médio). Seconfig.num_labels > 1, uma perda de classificação é calculada (entropia cruzada). - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - output_attentions (
bool, opcional) — Indica se os tensores de atenção de todas as camadas de atenção devem ser retornados. Consulteattentionsnos tensores retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
SequenceClassifierOutput ou tuple(torch.Tensor)
Um SequenceClassifierOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (ReformerConfig) e das entradas.
O método forward de ReformerForSequenceClassification sobrescreve o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
loss (
torch.Tensorde forma(1,), opcional, retornado quandolabelsé fornecido) — Perda de classificação (ou regressão se config.num_labels==1).logits (
torch.Tensorde forma(batch_size, config.num_labels)) — Pontuações de classificação (ou regressão, se config.num_labels==1) (antes do SoftMax).hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
Exemplo de classificação de rótulo único:
>>> 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
classe transformers.ReformerForQuestionAnswering
< source >( config: ReformerConfig )
Parâmetros
- config (ReformerConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
O Reformer transformer com uma cabeça de classificação de span no topo para tarefas de resposta a perguntas extrativas, como
SQuAD (uma camada linear no topo da saída dos hidden-states para calcular span start logits e span end logits).
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices dos tokens da sequência de entrada no vocabulário. Durante o treinamento, o sequence_length de input_ids deve ser um múltiplo dos comprimentos de chunk relevantes do modelo (lsh, local ou ambos). Durante a avaliação, os índices são automaticamente preenchidos para serem um múltiplo do comprimento do chunk.Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes.
- position_ids (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo[0, config.n_positions - 1]. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passarinput_ids, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices deinput_idsnos vetores associados do que a matriz de busca de incorporação interna do modelo. - num_hashes (
int, opcional) — O número de rodadas de hash que devem ser executadas durante o bucketing. Definir este argumento sobrescreve o padrão definido emconfig.num_hashes.Para mais informações, consulte
num_hashesem ReformerConfig. - start_positions (
torch.Tensorde forma(batch_size,), opcional) — Rótulos para a posição (índice) do início do trecho rotulado para o cálculo da perda de classificação de tokens. As posições são limitadas ao comprimento da sequência (sequence_length). Posições fora da sequência não são consideradas no cálculo da perda. - end_positions (
torch.Tensorde forma(batch_size,), opcional) — Rótulos para a posição (índice) do fim do trecho rotulado, para o cálculo da perda de classificação de tokens. As posições são limitadas ao comprimento da sequência (sequence_length). Posições fora da sequência não são consideradas no cálculo da perda. - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - output_attentions (
bool, opcional) — Indica se os tensores de atenção de todas as camadas de atenção devem ser retornados. Consulteattentionsnos tensores retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
QuestionAnsweringModelOutput ou tuple(torch.Tensor)
Um QuestionAnsweringModelOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (ReformerConfig) e das entradas.
O método forward de ReformerForQuestionAnswering substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
loss (
torch.Tensorde forma(1,), opcional, retornado quandolabelsé fornecido) — A perda total de extração de span é a soma de uma Cross-Entropy para as posições de início e fim.start_logits (
torch.Tensorde forma(batch_size, sequence_length)) — Pontuações de início de trecho (antes do SoftMax).end_logits (
torch.Tensorde forma(batch_size, sequence_length)) — Pontuações de fim de trecho (antes do SoftMax).hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
Exemplo:
>>> 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)
...