Transformers documentation
TAPAS
Este modelo foi publicado no HF papers em 2020-04-05 e contribuído para o Hugging Face Transformers em 2020-12-15.
TAPAS
Visão geral
O modelo TAPAS foi proposto em TAPAS: Weakly Supervised Table Parsing via Pre-training por Jonathan Herzig, Paweł Krzysztof Nowak, Thomas Müller, Francesco Piccinno e Julian Martin Eisenschlos. Trata-se de um modelo baseado em BERT, projetado (e pré-treinado) especificamente para responder perguntas sobre dados tabulares. Em comparação com o BERT, o TAPAS usa embeddings de posição relativa e possui 7 tipos de tokens que codificam a estrutura tabular. O TAPAS é pré-treinado no objetivo de modelagem de linguagem mascarada (MLM) em um grande conjunto de dados composto por milhões de tabelas da Wikipédia em inglês e os textos correspondentes.
Para a tarefa de resposta a perguntas, o TAPAS possui 2 cabeças no topo: uma cabeça de seleção de células e uma cabeça de agregação, para (opcionalmente) realizar agregações (como contagem ou soma) entre as células selecionadas. O TAPAS foi ajustado em vários conjuntos de dados:
- SQA (Sequential Question Answering da Microsoft)
- WTQ (Wiki Table Questions, da Universidade de Stanford)
- WikiSQL (da Salesforce).
Ele atinge o estado da arte tanto no SQA quanto no WTQ, apresentando desempenho comparável ao SOTA no WikiSQL, com uma arquitetura muito mais simples.
O resumo do artigo é o seguinte:
Responder a perguntas em linguagem natural sobre tabelas é geralmente visto como uma tarefa de análise semântica. Para reduzir o custo de coleta de formas lógicas completas, uma abordagem popular foca em supervisão fraca consistindo em denotações em vez de formas lógicas. No entanto, treinar analisadores semânticos a partir de supervisão fraca apresenta dificuldades, e, além disso, as formas lógicas geradas são usadas apenas como uma etapa intermediária antes de recuperar a denotação. Neste artigo, apresentamos o TAPAS, uma abordagem para responder perguntas sobre tabelas sem gerar formas lógicas. O TAPAS é treinado a partir de supervisão fraca e prevê a denotação selecionando células da tabela e, opcionalmente, aplicando um operador de agregação correspondente a essa seleção. O TAPAS estende a arquitetura do BERT para codificar tabelas como entrada, é inicializado a partir de um pré-treinamento conjunto eficaz de segmentos de texto e tabelas coletadas da Wikipédia e é treinado de ponta a ponta. Experimentamos com três conjuntos de dados diferentes de análise semântica e constatamos que o TAPAS supera ou rivaliza com modelos de análise semântica, melhorando a precisão do estado da arte no SQA de 55,1 para 67,2 e obtendo desempenho equivalente ao estado da arte no WIKISQL e no WIKITQ, mas com uma arquitetura de modelo mais simples. Além disso, constatamos que o aprendizado por transferência, que é trivial em nosso cenário, do WIKISQL para o WIKITQ, resulta em uma precisão de 48,7, 4,2 pontos acima do estado da arte.
Além disso, os autores pré-treinaram ainda mais o TAPAS para reconhecer table entailment, criando um conjunto de dados balanceado com milhões de exemplos de treinamento criados automaticamente, que são aprendidos em uma etapa intermediária antes do fine-tuning. Os autores do TAPAS chamam esse pré-treinamento adicional de pré-treinamento intermediário (uma vez que o TAPAS é primeiro pré-treinado em MLM e, em seguida, em outro conjunto de dados). Eles descobriram que o pré-treinamento intermediário melhora ainda mais o desempenho no SQA, alcançando um novo state-of-the-art, bem como state-of-the-art no TabFact, um conjunto de dados em larga escala com 16k tabelas da Wikipedia para table entailment (uma tarefa de classificação binária). Para mais detalhes, veja seu artigo de acompanhamento: Understanding tables with intermediate pre-training, de Julian Martin Eisenschlos, Syrine Krichene e Thomas Müller.
TAPAS architecture. Taken from the original blog post. Este modelo foi contribuído por nielsr. O código original pode ser encontrado aqui.
Dicas de uso
- O TAPAS é um modelo que usa embeddings de posição relativa por padrão (reiniciando os embeddings de posição em cada célula da tabela). Observe que isso foi adicionado após a publicação do artigo original do TAPAS. Segundo os autores, isso geralmente resulta em um desempenho ligeiramente melhor e permite codificar sequências mais longas sem esgotar os embeddings. Isso é refletido no parâmetro
reset_position_index_per_cellde TapasConfig, que é definido comoTruepor padrão. As versões padrão dos modelos disponíveis no hub usam embeddings de posição relativa. Você ainda pode usar os que possuem embeddings de posição absoluta passando um argumento adicionalrevision="no_reset"ao chamar o métodofrom_pretrained(). Observe que geralmente é recomendado fazer o padding das entradas à direita, em vez de à esquerda. - O TAPAS é baseado no BERT, portanto, por exemplo, o
TAPAS-basecorresponde a uma arquiteturaBERT-base. Claro, oTAPAS-largeresultará no melhor desempenho (os resultados relatados no artigo são doTAPAS-large). Os resultados dos modelos de vários tamanhos estão mostrados no repositório original do GitHub. - O TAPAS possui checkpoints ajustados no SQA, capazes de responder a perguntas relacionadas a uma tabela em um contexto conversacional. Isso significa que você pode fazer perguntas de acompanhamento, como “qual é a idade dele?”, relacionadas à pergunta anterior. Observe que a passagem direta do TAPAS é um pouco diferente no caso de um contexto conversacional: nesse caso, você deve alimentar cada par tabela-pergunta um por um para o modelo, de modo que os ids de tipo de token
prev_labelspossam ser sobrescritos peloslabelsprevistos pelo modelo para a pergunta anterior. Consulte a seção “Uso” para mais informações. - O TAPAS é semelhante ao BERT e, portanto, depende do objetivo de modelagem de linguagem mascarada (MLM). Assim, ele é eficiente na previsão de tokens mascarados e em NLU em geral, mas não é ideal para geração de texto. Modelos treinados com um objetivo de modelagem de linguagem causal (CLM) são melhores nesse aspecto. Observe que o TAPAS pode ser usado como um codificador no framework EncoderDecoderModel, para combiná-lo com um decodificador de texto autoregressivo, como o GPT-2.
Uso: ajuste fino
Aqui explicamos como você pode fazer o ajuste fino de TapasForQuestionAnswering no seu próprio conjunto de dados.
ETAPA 1: Escolha uma das 3 formas de usar o TAPAS - ou experimente
Basicamente, existem 3 maneiras diferentes de fazer o fine-tuning de TapasForQuestionAnswering, correspondentes aos diferentes conjuntos de dados nos quais o Tapas foi ajustado:
- SQA: se você estiver interessado em fazer perguntas de acompanhamento relacionadas a uma tabela, em um contexto conversacional. Por exemplo, se você primeiro perguntar "qual é o nome do primeiro ator?", em seguida, pode fazer uma pergunta de acompanhamento como "quantos anos ele tem?". Aqui, as perguntas não envolvem nenhuma agregação (todas as perguntas são de seleção de células).
- WTQ: caso você não tenha interesse em fazer perguntas em um contexto conversacional, mas sim em fazer perguntas relacionadas a uma tabela, que podem envolver agregação, como contar o número de linhas, somar valores de células ou calcular a média dos valores das células. Nesse caso, por exemplo, você pode perguntar “qual é o total de gols que Cristiano Ronaldo marcou em sua carreira?”. Esse caso também é chamado de supervisão fraca, pois o próprio modelo deve aprender o operador de agregação adequado (SUM/COUNT/AVERAGE/NONE) tendo apenas a resposta à pergunta como supervisão.
- WikiSQL-supervised: este conjunto de dados é baseado no WikiSQL, com o modelo recebendo o operador de agregação correto durante o treinamento. Isso também é chamado de supervisão forte. Aqui, aprender o operador de agregação adequado é muito mais fácil.
Para resumir:
| Tarefa | Conjunto de dados de exemplo | Descrição |
|---|---|---|
| Conversacional | SQA | Conversacional, apenas perguntas de seleção de célula |
| Supervisão fraca para agregação | WTQ | As perguntas podem envolver agregação, e o modelo deve aprender isso tendo apenas a resposta como supervisão |
| Supervisão forte para agregação | Supervisionado por WikiSQL | As perguntas podem envolver agregação, e o modelo deve aprender isso com base no operador de agregação de referência. |
A inicialização de um modelo com uma base pré-treinada e cabeças de classificação inicializadas aleatoriamente a partir do hub pode ser feita conforme mostrado abaixo.
from transformers import TapasConfig, TapasForQuestionAnswering
# for example, the base sized model with default SQA configuration
model = TapasForQuestionAnswering.from_pretrained("google/tapas-base", device_map="auto")
# or, the base sized model with WTQ configuration
config = TapasConfig.from_pretrained("google/tapas-base-finetuned-wtq")
model = TapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config, device_map="auto")
# or, the base sized model with WikiSQL configuration
config = TapasConfig("google-base-finetuned-wikisql-supervised")
model = TapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config, device_map="auto")Claro, você não precisa necessariamente seguir uma dessas três maneiras pelas quais o TAPAS foi ajustado. Você também pode experimentar definindo quaisquer hiperparâmetros que desejar ao inicializar TapasConfig e, em seguida, criar um TapasForQuestionAnswering com base nessa configuração. Por exemplo, se você tiver um conjunto de dados que contém tanto perguntas conversacionais quanto perguntas que podem envolver agregação, você pode fazer da seguinte maneira. Aqui está um exemplo:
from transformers import TapasConfig, TapasForQuestionAnswering
# you can initialize the classification heads any way you want (see docs of TapasConfig)
config = TapasConfig(num_aggregation_labels=3, average_logits_per_cell=True)
# initializing the pre-trained base sized model with our custom classification heads
model = TapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config, device_map="auto")O que você também pode fazer é começar a partir de um checkpoint já ajustado. Uma observação aqui é que o checkpoint já ajustado no WTQ apresenta alguns problemas devido à perda L2, que é um pouco frágil. Veja aqui para mais informações.
Para uma lista de todos os checkpoints pré-treinados e ajustados do TAPAS disponíveis no hub do HuggingFace, veja aqui.
ETAPA 2: Prepare seus dados no formato SQA
Em segundo lugar, independentemente da opção escolhida acima, você deve preparar seu conjunto de dados no formato SQA. Esse formato é um arquivo TSV/CSV com as seguintes colunas:
id: opcional, id do par tabela-pergunta, para fins de controle.annotator: opcional, id da pessoa que anotou o par tabela-pergunta, para fins de controle.position: inteiro que indica se a pergunta é a primeira, a segunda, a terceira, relacionada à tabela. Obrigatório apenas em caso de configuração conversacional (SQA). Você não precisa desta coluna caso vá usar WTQ/WikiSQL-supervised.question: stringtable_file: string, nome de um arquivo csv contendo os dados tabularesanswer_coordinates: lista de uma ou mais tuplas (cada tupla sendo uma coordenada de célula, ou seja, um par de linha e coluna que faz parte da resposta)answer_text: lista de uma ou mais strings (cada string sendo um valor de célula que faz parte da resposta)aggregation_label: índice do operador de agregação. Obrigatório apenas no caso de supervisão forte para agregação (o caso supervisionado do WikiSQL)float_answer: a resposta em ponto flutuante para a pergunta, caso exista (np.nan caso não exista). Obrigatório apenas em caso de supervisão fraca para agregação (como WTQ e WikiSQL)
As próprias tabelas devem estar presentes em uma pasta, com cada tabela sendo um arquivo csv separado. Observe que os autores do algoritmo TAPAS usaram scripts de conversão com alguma lógica automatizada para converter os outros conjuntos de dados (WTQ, WikiSQL) para o formato SQA. O autor explica isso aqui. Uma conversão desse script que funciona com a implementação do HuggingFace pode ser encontrada aqui. Curiosamente, esses scripts de conversão não são perfeitos (os campos answer_coordinates e float_answer são preenchidos com base no answer_text), o que significa que os resultados de WTQ e WikiSQL poderiam, na verdade, ser melhorados.
ETAPA 3: Converta seus dados em tensors usando TapasTokenizer
Em terceiro lugar, dado que você preparou seus dados nesse formato TSV/CSV (e os arquivos CSV correspondentes contendo os dados tabulares), você pode então usar TapasTokenizer para converter pares de tabela-pergunta em input_ids, attention_mask, token_type_ids e assim por diante. Novamente, com base em qual dos três casos você escolheu acima, TapasForQuestionAnswering requer entradas diferentes para ser ajustado:
| Tarefa | Entradas obrigatórias |
|---|---|
| Conversacional | input_ids, attention_mask, token_type_ids, labels |
| Supervisão fraca para agregação | input_ids, attention_mask, token_type_ids, labels, numeric_values, numeric_values_scale, float_answer |
| Supervisão forte para agregação | input ids, attention mask, token type ids, labels, aggregation_labels |
TapasTokenizer cria os labels, numeric_values e numeric_values_scale com base nas colunas answer_coordinates e answer_text do arquivo TSV. Os float_answer e aggregation_labels já estão no arquivo TSV da etapa 2. Aqui está um exemplo:
from transformers import TapasTokenizer
import pandas as pd
model_name = "google/tapas-base"
tokenizer = TapasTokenizer.from_pretrained(model_name)
data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]}
queries = [
"What is the name of the first actor?",
"How many movies has George Clooney played in?",
"What is the total number of movies?",
]
answer_coordinates = [[(0, 0)], [(2, 1)], [(0, 1), (1, 1), (2, 1)]]
answer_text = [["Brad Pitt"], ["69"], ["209"]]
table = pd.DataFrame.from_dict(data)
inputs = tokenizer(
table=table,
queries=queries,
answer_coordinates=answer_coordinates,
answer_text=answer_text,
padding="max_length",
return_tensors="pt",
)
inputs
{'input_ids': tensor([[ ]]), 'attention_mask': tensor([[...]]), 'token_type_ids': tensor([[[...]]]),
'numeric_values': tensor([[ ]]), 'numeric_values_scale: tensor([[ ]]), labels: tensor([[ ]])}Observe que o TapasTokenizer espera que os dados da tabela sejam apenas texto. Você pode usar .astype(str) em um dataframe para convertê-lo em dados apenas de texto.
Claro, isso apenas mostra como codificar um único exemplo de treinamento. É recomendável criar um dataloader para iterar sobre lotes:
import pandas as pd
import torch
tsv_path = "your_path_to_the_tsv_file"
table_csv_path = "your_path_to_a_directory_containing_all_csv_files"
class TableDataset(torch.utils.data.Dataset):
def __init__(self, data, tokenizer):
self.data = data
self.tokenizer = tokenizer
def __getitem__(self, idx):
item = data.iloc[idx]
table = pd.read_csv(table_csv_path + item.table_file).astype(
str
) # be sure to make your table data text only
encoding = self.tokenizer(
table=table,
queries=item.question,
answer_coordinates=item.answer_coordinates,
answer_text=item.answer_text,
truncation=True,
padding="max_length",
return_tensors="pt",
)
# remove the batch dimension which the tokenizer adds by default
encoding = {key: val.squeeze(0) for key, val in encoding.items()}
# add the float_answer which is also required (weak supervision for aggregation case)
encoding["float_answer"] = torch.tensor(item.float_answer)
return encoding
def __len__(self):
return len(self.data)
data = pd.read_csv(tsv_path, sep="\t")
train_dataset = TableDataset(data, tokenizer)
train_dataloader = torch.utils.data.DataLoader(train_dataset, batch_size=32)Observe que, aqui, cada par tabela-pergunta é codificado de forma independente. Isso é adequado desde que seu conjunto de dados não seja conversacional. Caso seu conjunto de dados envolva perguntas conversacionais (como no SQA), você deve primeiro agrupar queries, answer_coordinates e answer_text por tabela (na ordem do índice de position) e codificar em lote cada tabela com suas perguntas. Isso garantirá que os tipos de token prev_labels (veja a documentação de TapasTokenizer) sejam definidos corretamente. Consulte este notebook para mais informações.
**ETAPA 4: Treinar (ajustar finamente) o modelo
Em seguida, você pode fazer o ajuste fino de TapasForQuestionAnswering da seguinte forma (mostrado aqui para o caso de supervisão fraca para agregação):
from transformers import AdamW, TapasConfig, TapasForQuestionAnswering
# this is the default WTQ configuration
config = TapasConfig(
num_aggregation_labels=4,
use_answer_as_supervision=True,
answer_loss_cutoff=0.664694,
cell_selection_preference=0.207951,
huber_loss_delta=0.121194,
init_cell_selection_weights_to_zero=True,
select_one_column=True,
allow_empty_column_selection=False,
temperature=0.0352513,
)
model = TapasForQuestionAnswering.from_pretrained("google/tapas-base", config=config, device_map="auto")
optimizer = AdamW(model.parameters(), lr=5e-5)
model.train()
for epoch in range(2): # loop over the dataset multiple times
for batch in train_dataloader:
# get the inputs;
input_ids = batch["input_ids"]
attention_mask = batch["attention_mask"]
token_type_ids = batch["token_type_ids"]
labels = batch["labels"]
numeric_values = batch["numeric_values"]
numeric_values_scale = batch["numeric_values_scale"]
float_answer = batch["float_answer"]
# zero the parameter gradients
optimizer.zero_grad()
# forward + backward + optimize
outputs = model(
input_ids=input_ids,
attention_mask=attention_mask,
token_type_ids=token_type_ids,
labels=labels,
numeric_values=numeric_values,
numeric_values_scale=numeric_values_scale,
float_answer=float_answer,
)
loss = outputs.loss
loss.backward()
optimizer.step()Uso: inferência
Aqui explicamos como você pode usar TapasForQuestionAnswering para inferência (ou seja, fazer previsões em novos dados). Para a inferência, apenas input_ids, attention_mask e token_type_ids (que você pode obter usando TapasTokenizer) precisam ser fornecidos ao modelo para obter os logits. Em seguida, você pode usar o conveniente método ~models.tapas.tokenization_tapas.convert_logits_to_predictions para convertê-los em coordenadas previstas e índices de agregação opcionais.
No entanto, observe que a inferência é diferente dependendo de a configuração ser conversacional ou não. Em uma configuração não conversacional, a inferência pode ser executada em paralelo para todos os pares de tabela e pergunta de um lote. Aqui está um exemplo disso:
from transformers import TapasTokenizer, TapasForQuestionAnswering
import pandas as pd
model_name = "google/tapas-base-finetuned-wtq"
model = TapasForQuestionAnswering.from_pretrained(model_name, device_map="auto")
tokenizer = TapasTokenizer.from_pretrained(model_name)
data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]}
queries = [
"What is the name of the first actor?",
"How many movies has George Clooney played in?",
"What is the total number of movies?",
]
table = pd.DataFrame.from_dict(data)
inputs = tokenizer(table=table, queries=queries, padding="max_length", return_tensors="pt").to(model.device)
outputs = model(**inputs)
predicted_answer_coordinates, predicted_aggregation_indices = tokenizer.convert_logits_to_predictions(
inputs, outputs.logits.detach(), outputs.logits_aggregation.detach()
)
# let's print out the results:
id2aggregation = {0: "NONE", 1: "SUM", 2: "AVERAGE", 3: "COUNT"}
aggregation_predictions_string = [id2aggregation[x] for x in predicted_aggregation_indices]
answers = []
for coordinates in predicted_answer_coordinates:
if len(coordinates) == 1:
# only a single cell:
answers.append(table.iat[coordinates[0]])
else:
# multiple cells
cell_values = []
for coordinate in coordinates:
cell_values.append(table.iat[coordinate])
answers.append(", ".join(cell_values))
display(table)
print("")
for query, answer, predicted_agg in zip(queries, answers, aggregation_predictions_string):
print(query)
if predicted_agg == "NONE":
print("Predicted answer: " + answer)
else:
print("Predicted answer: " + predicted_agg + " > " + answer)
What is the name of the first actor?
Predicted answer: Brad Pitt
How many movies has George Clooney played in?
Predicted answer: COUNT > 69
What is the total number of movies?
Predicted answer: SUM > 87, 53, 69No caso de uma configuração conversacional, cada par tabela-pergunta deve ser fornecido sequencialmente ao modelo, de modo que os tipos de token prev_labels possam ser sobrescritos pelos labels previstos do par tabela-pergunta anterior. Novamente, mais informações podem ser encontradas em este notebook.
Recursos
Saídas específicas do TAPAS
classe transformers.models.tapas.modeling_tapas.TableQuestionAnsweringOutput
< source >( loss: typing.Optional[torch.Tensor] = Nonelogits: typing.Optional[torch.Tensor] = Nonelogits_aggregation: typing.Optional[torch.Tensor] = Nonehidden_states: tuple[torch.Tensor] | None = Noneattentions: tuple[torch.Tensor] | None = None )
Parâmetros
- loss (
torch.Tensorde forma(1,), opcional, retornado quandolabels(e possivelmenteanswer,aggregation_labels,numeric_valuesenumeric_values_scalesão fornecidos)) — Perda total como a soma da perda de log-verossimilhança da seleção hierárquica de células e (opcionalmente) da perda de regressão semi-supervisionada e (opcionalmente) da perda supervisionada para agregações. - logits (
torch.Tensorde forma(batch_size, sequence_length)) — Pontuações de previsão da cabeça de seleção de células, para cada token. - logits_aggregation (
torch.Tensor, opcional, de forma(batch_size, num_aggregation_labels)) — Pontuações de previsão da cabeça de agregação, para cada operador de agregação. - 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 a 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.
Tipo de saída de TapasForQuestionAnswering.
TapasConfig
classe transformers.TapasConfig
< 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 = Nonevocab_size: int = 30522hidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12intermediate_size: int = 3072hidden_act: str = 'gelu'hidden_dropout_prob: float | int = 0.1attention_probs_dropout_prob: float | int = 0.1max_position_embeddings: int = 1024type_vocab_sizes: list[int] | tuple[int, ...] = (3, 256, 256, 2, 256, 256, 10)initializer_range: float = 0.02layer_norm_eps: float = 1e-12pad_token_id: int | None = 0bos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Nonepositive_label_weight: float = 10.0num_aggregation_labels: int = 0aggregation_loss_weight: float = 1.0use_answer_as_supervision: bool | None = Noneanswer_loss_importance: float = 1.0use_normalized_answer_loss: bool = Falsehuber_loss_delta: float | None = Nonetemperature: float = 1.0aggregation_temperature: float = 1.0use_gumbel_for_cells: bool = Falseuse_gumbel_for_aggregation: bool = Falseaverage_approximation_function: str = 'ratio'cell_selection_preference: float | None = Noneanswer_loss_cutoff: float | int | None = Nonemax_num_rows: int = 64max_num_columns: int = 32average_logits_per_cell: bool = Falseselect_one_column: bool = Trueallow_empty_column_selection: bool = Falseinit_cell_selection_weights_to_zero: bool = Falsereset_position_index_per_cell: bool = Truedisable_per_token_loss: bool = Falseaggregation_labels: dict | None = Noneno_aggregation_label_index: int | None = Noneis_decoder: bool = Falseadd_cross_attention: bool = Falsetie_word_embeddings: bool = True )
Parâmetros
- vocab_size (
int, opcional, padrão30522) — Tamanho do vocabulário do modelo. Define o número de tokens diferentes que podem ser representados pelosinput_ids. - hidden_size (
int, opcional, padrão768) — Dimensão das representações ocultas. - num_hidden_layers (
int, opcional, padrão12) — Número de camadas ocultas no decodificador do Transformer. - 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. - intermediate_size (
int, opcional, padrão3072) — Dimensão das representações do MLP. - hidden_act (
str, opcional, padrãogelu) — 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.1) — A probabilidade de dropout para todas as camadas totalmente conectadas nos embeddings, no codificador e no pooler. - attention_probs_dropout_prob (
Union[float, int], opcional, padrão0.1) — A taxa de dropout para as probabilidades de atenção. - max_position_embeddings (
int, opcional, padrão1024) — O comprimento máximo de sequência com o qual este modelo pode ser utilizado. - type_vocab_sizes (
list[int], opcional, padrão[3, 256, 256, 2, 256, 256, 10]) — Os tamanhos do vocabulário dostoken_type_idspassados ao chamar TapasModel. - initializer_range (
float, opcional, padrão0.02) — O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos. - layer_norm_eps (
float, opcional, padrão1e-12) — O epsilon usado pelas camadas de normalização de camada. - pad_token_id (
int, opcional, padrão0) — ID do token usado para preenchimento no vocabulário. - bos_token_id (
int, opcional) — ID do token usado para o início do fluxo no vocabulário. - eos_token_id (
Union[int, list[int]], opcional) — ID do token usado para o fim do fluxo no vocabulário. - positive_label_weight (
float, opcional, padrão 10.0) — Peso para rótulos positivos. - num_aggregation_labels (
int, opcional, padrão 0) — O número de operadores de agregação a prever. - aggregation_loss_weight (
float, opcional, padrão 1.0) — Peso de importância para a perda de agregação. - use_answer_as_supervision (
bool, opcional) — Se deve usar a resposta como a única supervisão para exemplos de agregação. - answer_loss_importance (
float, opcional, padrão 1.0) — Peso de importância para a perda de regressão. - use_normalized_answer_loss (
bool, opcional, padrãoFalse) — Se a perda da resposta deve ser normalizada pelo máximo entre o valor previsto e o valor esperado. - huber_loss_delta (
float, opcional) — Parâmetro delta usado para calcular a perda de regressão. - temperature (
float, opcional, padrão 1.0) — Valor usado para controlar (ou alterar) a assimetria das probabilidades dos logits das células. - aggregation_temperature (
float, opcional, padrão 1.0) — Escala os logits de agregação para controlar a assimetria das probabilidades. - use_gumbel_for_cells (
bool, opcional, padrãoFalse) — Se deve aplicar Gumbel-Softmax à seleção de células. - use_gumbel_for_aggregation (
bool, opcional, padrãoFalse) — Se deve aplicar Gumbel-Softmax à seleção de agregação. - average_approximation_function (
string, opcional, padrão"ratio") — Método para calcular a média esperada das células no caso de supervisão fraca. Um de"ratio","first_order"ou"second_order". - cell_selection_preference (
float, opcional) — Preferência para a seleção de células em casos ambíguos. Aplicável apenas no caso de supervisão fraca para agregação (WTQ, WikiSQL). Se a massa total das probabilidades de agregação (excluindo o operador “NONE”) for maior que este hiperparâmetro, a agregação será prevista para um exemplo. - answer_loss_cutoff (
float, opcional) — Ignora exemplos com perda de resposta maior que o limite. - max_num_rows (
int, opcional, padrão 64) — Número máximo de linhas. - max_num_columns (
int, opcional, padrão 32) — Número máximo de colunas. - average_logits_per_cell (
bool, opcional, padrãoFalse) — Se deve calcular a média dos logits por célula. - select_one_column (
bool, opcional, padrãoTrue) — Se deve restringir o modelo a selecionar apenas células de uma única coluna. - allow_empty_column_selection (
bool, opcional, padrãoFalse) — Se permite não selecionar nenhuma coluna. - init_cell_selection_weights_to_zero (
bool, opcional, padrãoFalse) — Se as pesos de seleção de células devem ser inicializados com 0, de modo que as probabilidades iniciais sejam de 50%. - reset_position_index_per_cell (
bool, opcional, padrãoTrue) — Se reiniciar os índices de posição em cada célula (ou seja, usar embeddings de posição relativa). - disable_per_token_loss (
bool, opcional, padrãoFalse) — Se deve desabilitar qualquer supervisão (forte ou fraca) nas células. - aggregation_labels (
dict[int, label], opcional) — Os rótulos de agregação usados para agregar os resultados. Por exemplo, os modelos WTQ possuem os seguintes rótulos de agregação:{0: "NONE", 1: "SUM", 2: "AVERAGE", 3: "COUNT"} - no_aggregation_label_index (
int, opcional) — Se os rótulos de agregação estiverem definidos e um desses rótulos representar “Sem agregação”, este valor deve ser configurado com o índice correspondente. Por exemplo, os modelos WTQ possuem o rótulo de agregação “NONE” no índice 0, portanto, esse valor deve ser definido como 0 para esses modelos. - is_decoder (
bool, opcional, padrãoFalse) — Indica se o modelo é usado como decodificador ou não. SeFalse, o modelo é usado como codificador. - add_cross_attention (
bool, opcional, padrãoFalse) — Se camadas de atenção cruzada devem ser adicionadas ao modelo. - tie_word_embeddings (
bool, opcional, padrãoTrue) — Se deve vincular as embeddings de pesos de acordo com o mapeamentotied_weights_keysdo modelo.
Esta é a classe de configuração para armazenar a configuração de um TapasModel. Ela é usada para instanciar um modelo Tapas 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/tapas-base-finetuned-sqa
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.
Exemplo:
>>> from transformers import TapasModel, TapasConfig
>>> # Initializing a default (SQA) Tapas configuration
>>> configuration = TapasConfig()
>>> # Initializing a model from the configuration
>>> model = TapasModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configTapasTokenizer
classe transformers.TapasTokenizer
< source >( vocab_filedo_lower_case = Truedo_basic_tokenize = Truenever_split = Noneunk_token = '[UNK]'sep_token = '[SEP]'pad_token = '[PAD]'cls_token = '[CLS]'mask_token = '[MASK]'empty_token = '[EMPTY]'tokenize_chinese_chars = Truestrip_accents = Nonecell_trim_length: int = -1max_column_id: int | None = Nonemax_row_id: int | None = Nonestrip_column_names: bool = Falseupdate_answer_coordinates: bool = Falsemin_question_length = Nonemax_question_length = Nonemodel_max_length: int = 512additional_special_tokens: list[str] | None = Noneclean_up_tokenization_spaces = True**kwargs )
Parâmetros
- vocab_file (
str) — Arquivo contendo o vocabulário. - do_lower_case (
bool, opcional, padrãoTrue) — Se deve ou não converter a entrada para minúsculas ao tokenizar. - do_basic_tokenize (
bool, opcional, padrãoTrue) — Indica se a tokenização básica deve ser realizada antes do WordPiece. - never_split (
Iterable, opcional) — Coleção de tokens que nunca serão divididos durante a tokenização. Tem efeito apenas quandodo_basic_tokenize=True - 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. - sep_token (
str, opcional, padrão"[SEP]") — O token separador, usado ao construir uma sequência a partir de múltiplas sequências, por exemplo, duas sequências para classificação de sequência ou um texto e uma pergunta para question answering. Também é usado como o último token de uma sequência construída com tokens especiais. - pad_token (
str, opcional, padrão"[PAD]") — O token usado para preenchimento, por exemplo, ao agrupar sequências de comprimentos diferentes. - cls_token (
str, opcional, padrão"[CLS]") — O token de classificador usado na classificação de sequência (classificação da sequência inteira, em vez da classificação por token). É o primeiro token da sequência quando esta é construída com tokens especiais. - mask_token (
str, opcional, padrão"[MASK]") — O token usado para mascarar valores. Este é o token utilizado ao treinar este modelo com modelagem de linguagem mascarada. É o token que o modelo tentará prever. - empty_token (
str, opcional, padrão"[EMPTY]") — O token usado para valores de células vazias em uma tabela. Os valores de células vazias incluem "", “n/a”, “nan” e ”?“. - tokenize_chinese_chars (
bool, opcional, padrãoTrue) — Se os caracteres chineses devem ser tokenizados. Isso provavelmente deve ser desativado para o japonês (veja esta issue). - strip_accents (
bool, opcional) — Indica se todos os acentos devem ser removidos. Se essa opção não for especificada, o valor será determinado pelo valor delowercase(como no BERT original). - cell_trim_length (
int, opcional, padrão -1) — Se > 0: Recorta as células para que o comprimento seja <= a este valor. Também desativa o recorte adicional de células, portanto, deve ser usado comtruncationdefinido comoTrue. - max_column_id (
int, opcional) — ID máximo da coluna a ser extraído. - max_row_id (
int, opcional) — ID máximo da linha a ser extraído. - strip_column_names (
bool, opcional, padrãoFalse) — Se deve adicionar strings vazias em vez dos nomes das colunas. - update_answer_coordinates (
bool, opcional, padrãoFalse) — Se as coordenadas da resposta devem ser recalculadas a partir do texto da resposta. - min_question_length (
int, opcional) — Comprimento mínimo de cada pergunta em termos de tokens (caso contrário, será ignorada). - max_question_length (
int, opcional) — Comprimento máximo de cada pergunta em termos de tokens (caso contrário, será ignorada). - clean_up_tokenization_spaces (
bool, opcional, padrãoTrue) — Indica se os espaços devem ser limpos após a decodificação. A limpeza consiste em remover possíveis artefatos, como espaços extras.
Constrói um tokenizador TAPAS. Baseado em WordPiece. Achata uma tabela e uma ou mais frases relacionadas para uso em modelos TAPAS.
Este tokenizer herda de PreTrainedTokenizer, 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. TapasTokenizer cria vários token type ids para codificar a estrutura tabular. Mais precisamente, ele adiciona 7 token type ids, na seguinte ordem: segment_ids, column_ids, row_ids, prev_labels, column_ranks, inv_column_ranks e numeric_relations:
- segment_ids: indica se um token pertence à pergunta (0) ou à tabela (1). 0 para tokens especiais e padding.
- column_ids: indica a qual coluna da tabela um token pertence (começando em 1). É 0 para todos os tokens de pergunta, tokens especiais e padding.
- row_ids: indica a qual linha da tabela um token pertence (começando em 1). É 0 para todos os tokens de pergunta, tokens especiais e padding. Os tokens dos cabeçalhos de coluna também são 0.
- prev_labels: indica se um token fazia parte (ou não) da resposta à pergunta anterior (1) ou não (0). Útil em um contexto conversacional (como o SQA).
- column_ranks: indica a posição de um token da tabela em relação a uma coluna, quando aplicável. Por exemplo, se você tiver uma coluna "número de filmes" com os valores 87, 53 e 69, então as posições da coluna desses tokens são 3, 1 e 2, respectivamente. 0 para todos os tokens de pergunta, tokens especiais e padding.
- inv_column_ranks: indica o rank inverso de um token de tabela em relação a uma coluna, quando aplicável. Por exemplo, se você tiver uma coluna “number of movies” com os valores 87, 53 e 69, então os ranks inversos de coluna desses tokens são 1, 3 e 2, respectivamente. 0 para todos os tokens de pergunta, tokens especiais e padding.
- numeric_relations: indica relações numéricas entre a pergunta e os tokens da tabela. 0 para todos os tokens da pergunta, tokens especiais e padding.
TapasTokenizer executa a tokenização de ponta a ponta em uma tabela e nas frases associadas: divisão por pontuação e wordpiece.
__call__
< source >( table: typing.Union[ForwardRef('pd.DataFrame'), str, list[str], NoneType]queries: str | list[str] | list[int] | list[list[str]] | list[list[int]] | None = Noneanswer_coordinates: list[tuple] | list[list[tuple]] | None = Noneanswer_text: list[str] | list[list[str]] | None = Noneadd_special_tokens: bool = Truepadding: bool | str | transformers.utils.generic.PaddingStrategy = Falsetruncation: bool | str | transformers.models.tapas.tokenization_tapas.TapasTruncationStrategy = Falsemax_length: int | None = Nonepad_to_multiple_of: int | None = Nonepadding_side: str | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonereturn_token_type_ids: bool | None = Nonereturn_attention_mask: bool | None = Nonereturn_overflowing_tokens: bool = Falsereturn_special_tokens_mask: bool = Falsereturn_offsets_mapping: bool = Falsereturn_length: bool = Falseverbose: bool = True**kwargs )
Parâmetros
- table (
pd.DataFrameoustroulist[str]) — Tabela contendo dados tabulares. Observe que todos os valores das células devem ser texto. Use .astype(str) em um dataframe do Pandas para convertê-lo em string. Ao passar uma string ou uma lista de strings, elas serão interpretadas como consultas com uma tabela vazia (para suportar testes genéricos de tokenizers). - queries (
stroulist[str]) — Pergunta ou lote de perguntas relacionadas a uma tabela a ser codificada. Observe que, no caso de um lote, todas as perguntas devem se referir à mesma tabela. - answer_coordinates (
list[Tuple]oulist[list[Tuple]], opcional) — Coordenadas da resposta de cada par tabela-pergunta no lote. Caso apenas um único par tabela-pergunta seja fornecido, o answer_coordinates deve ser uma única lista contendo uma ou mais tuplas. Cada tupla deve ser um par (row_index, column_index). A primeira linha de dados (não a linha de cabeçalho das colunas) tem índice 0. A primeira coluna tem índice 0. Caso um lote de pares tabela-pergunta seja fornecido, o answer_coordinates deve ser uma lista de listas de tuplas (cada lista correspondendo a um único par tabela-pergunta). - answer_text (
list[str]oulist[list[str]], opcional) — Texto da resposta de cada par tabela-pergunta no lote. Caso apenas um único par tabela-pergunta seja fornecido, o answer_text deve ser uma única lista com uma ou mais strings. Cada string deve ser o texto da resposta de uma coordenada de resposta correspondente. Caso um lote de pares tabela-pergunta seja fornecido, então o answer_coordinates deve ser uma lista de listas de strings (cada lista correspondendo a um único par tabela-pergunta). - add_special_tokens (
bool, opcional, padrãoTrue) — Indica se as sequências devem ser codificadas com os tokens especiais relativos ao seu modelo. - padding (
bool,strou PaddingStrategy, opcional, padrão éFalse) — Ativa e controla o padding. Aceita os seguintes valores:Trueou'longest': Preenche até a sequência mais longa do lote (ou não aplica preenchimento se apenas uma sequência for fornecida).'max_length': Preenche até o comprimento máximo especificado com o argumentomax_lengthou até o comprimento máximo aceitável de entrada para o modelo, caso esse argumento não seja fornecido.Falseou'do_not_pad'(padrão): Sem padding (ou seja, pode gerar um lote com sequências de comprimentos diferentes).
- truncation (
bool,strouTapasTruncationStrategy, opcional, padrão éFalse) — Ativa e controla a truncagem. Aceita os seguintes valores:Trueou'drop_rows_to_fit': Trunca para um comprimento máximo especificado com o argumentomax_lengthou para o comprimento máximo aceitável de entrada para o modelo, caso esse argumento não seja fornecido. Isso trunca linha por linha, removendo linhas da tabela.Falseou'do_not_truncate'(padrão): Sem truncamento (ou seja, pode gerar um lote com comprimentos de sequência maiores que o tamanho máximo de entrada aceitável pelo modelo).
- max_length (
int, opcional) — Controla o comprimento máximo a ser usado por um dos parâmetros de truncamento/preenchimento.Se não for definido ou for definido como
None, isso usará o comprimento máximo predefinido do modelo, caso um dos parâmetros de truncamento/preenchimento exija um comprimento máximo. Se o modelo não tiver um comprimento máximo de entrada específico (como o XLNet), o truncamento/preenchimento para um comprimento máximo será desativado. - is_split_into_words (
bool, opcional, padrãoFalse) — Indica se a entrada já está pré-tokenizada (por exemplo, dividida em palavras). Se definido comoTrue, o tokenizer assume que a entrada já foi dividida em palavras (por exemplo, separando por espaços em branco) e a tokeniza. Isso é útil para NER ou classificação de tokens. - pad_to_multiple_of (
int, opcional) — Se definido, a sequência será preenchida até um múltiplo do valor fornecido. Isso é especialmente útil para habilitar o uso de Tensor Cores em hardware NVIDIA com capacidade de computação>= 7.5(Volta). - return_tensors (
strou TensorType, opcional) — Se definido, retornará tensors em vez de uma lista de inteiros do Python. Os valores aceitos são:'pt': Retorna objetostorch.Tensordo PyTorch.'np': Retorna objetosnp.ndarraydo Numpy.
Método principal para tokenizar e preparar para o modelo uma ou várias sequências relacionadas a uma tabela.
convert_logits_to_predictions
< source >( datalogitslogits_agg = Nonecell_classification_threshold = 0.5 ) → tuple comprising various elements depending on the inputs
Parâmetros
- data (
dict) — Dicionário que mapeia recursos para valores reais. Deve ser criado usando TapasTokenizer. - logits (
torch.Tensorde forma(batch_size, sequence_length)) — Tensor contendo os logits no nível de token. - logits_agg (
torch.Tensorde forma(batch_size, num_aggregation_labels), opcional) — Tensor contendo os logits de agregação. - cell_classification_threshold (
float, opcional, padrão 0.5) — Limiar a ser usado para a seleção de células. Todas as células da tabela cuja probabilidade for maior que este limiar serão selecionadas.
Retorna
tuple composta por vários elementos, dependendo das entradas
- predicted_answer_coordinates (
list[list[[tuple]]de comprimentobatch_size): Coordenadas da resposta prevista como uma lista de listas de tuplas. Cada elemento da lista contém as coordenadas da resposta prevista de um único exemplo no lote, como uma lista de tuplas. Cada tupla é uma célula, ou seja, (índice da linha, índice da coluna). - predicted_aggregation_indices (
list[int]de comprimentobatch_size, opcional, retornado quandologits_aggregationé fornecido): Índices dos operadores de agregação previstos pela cabeça de agregação.
Converte os logits de TapasForQuestionAnswering em coordenadas de resposta previstas e índices de agregação opcionais.
A implementação original, na qual esta função se baseia, pode ser encontrada aqui.
TapasModel
classe transformers.TapasModel
< source >( config: TapasConfigadd_pooling_layer = True )
Parâmetros
- config (TapasConfig) — 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.
- add_pooling_layer (
bool, opcional, padrãoTrue) — Se deve adicionar uma camada de pooling
O modelo Tapas 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.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutputWithPooling or tuple(torch.Tensor)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices dos tokens da sequência de entrada no vocabulário. O padding será ignorado por padrão.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.
- token_type_ids (
torch.LongTensorde forma(batch_size, sequence_length, 7), opcional) — Índices de tokens que codificam a estrutura tabular. Os índices podem ser obtidos usando AutoTokenizer. Veja esta class para mais informações. - position_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Sereset_position_index_per_cellde TapasConfig estiver definido comoTrue, embeddings de posição relativos serão usados. Selecionados no intervalo[0, config.max_position_embeddings - 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. - encoder_hidden_states (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Sequência de hidden-states na saída da última camada do encoder. Usada na cross-attention se o modelo estiver configurado como um decoder. - encoder_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 da entrada do codificador. Essa máscara é usada na atenção cruzada se o modelo estiver configurado como um decodificador. Valores da máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- 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. - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
BaseModelOutputWithPooling ou tuple(torch.Tensor)
Um BaseModelOutputWithPooling 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 (TapasConfig) e das entradas.
O método forward do TapasModel 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, sequence_length, hidden_size)) — Sequência de estados ocultos na saída da última camada do modelo.pooler_output (
torch.Tensorde forma(batch_size, hidden_size)) — Estado oculto da última camada do primeiro token da sequência (token de classificação) após processamento adicional através das camadas usadas para a tarefa de pré-treinamento auxiliar. Por exemplo, para a família de modelos BERT, isso retorna o token de classificação após o processamento através de uma camada linear e uma função de ativação tanh. Os pesos da camada linear são treinados a partir do objetivo de previsão da próxima frase (classificação) durante o pré-treinamento.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.
Exemplos:
>>> from transformers import AutoTokenizer, TapasModel
>>> import pandas as pd
>>> tokenizer = AutoTokenizer.from_pretrained("google/tapas-base")
>>> model = TapasModel.from_pretrained("google/tapas-base")
>>> data = {
... "Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"],
... "Age": ["56", "45", "59"],
... "Number of movies": ["87", "53", "69"],
... }
>>> table = pd.DataFrame.from_dict(data)
>>> queries = ["How many movies has George Clooney played in?", "How old is Brad Pitt?"]
>>> inputs = tokenizer(table=table, queries=queries, padding="max_length", return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_stateTapasForMaskedLM
classe transformers.TapasForMaskedLM
< source >( config: TapasConfig )
Parâmetros
- config (TapasConfig) — 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 Tapas 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.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → MaskedLMOutput or tuple(torch.Tensor)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices dos tokens da sequência de entrada no vocabulário. O padding será ignorado por padrão.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.
- token_type_ids (
torch.LongTensorde forma(batch_size, sequence_length, 7), opcional) — Índices de tokens que codificam a estrutura tabular. Os índices podem ser obtidos usando AutoTokenizer. Veja esta class para mais informações. - position_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Sereset_position_index_per_cellde TapasConfig estiver definido comoTrue, embeddings de posição relativos serão usados. Selecionados no intervalo[0, config.max_position_embeddings - 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. - encoder_hidden_states (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Sequência de hidden-states na saída da última camada do encoder. Usada na cross-attention se o modelo estiver configurado como um decoder. - encoder_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 da entrada do codificador. Essa máscara é usada na atenção cruzada se o modelo estiver configurado como um decodificador. Valores da máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- labels (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Rótulos para o cálculo da perda de modelagem de linguagem mascarada. Os índices devem estar em[-100, 0, ..., config.vocab_size](veja a docstring deinput_ids). Tokens com índices definidos como-100são ignorados (mascarados); a perda é calculada apenas para os tokens com rótulos em[0, ..., config.vocab_size]. - 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. - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors 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 (TapasConfig) e das entradas.
O método forward de TapasForMaskedLM 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 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.
Exemplos:
>>> from transformers import AutoTokenizer, TapasForMaskedLM
>>> import pandas as pd
>>> tokenizer = AutoTokenizer.from_pretrained("google/tapas-base")
>>> model = TapasForMaskedLM.from_pretrained("google/tapas-base")
>>> data = {
... "Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"],
... "Age": ["56", "45", "59"],
... "Number of movies": ["87", "53", "69"],
... }
>>> table = pd.DataFrame.from_dict(data)
>>> inputs = tokenizer(
... table=table, queries="How many [MASK] has George [MASK] played in?", return_tensors="pt"
... )
>>> labels = tokenizer(
... table=table, queries="How many movies has George Clooney played in?", return_tensors="pt"
... )["input_ids"]
>>> outputs = model(**inputs, labels=labels)
>>> logits = outputs.logitsTapasForSequenceClassification
classe transformers.TapasForSequenceClassification
< source >( config: TapasConfig )
Parâmetros
- config (TapasConfig) — 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 Tapas com uma cabeça de classificação de sequência no topo (uma camada linear sobre a saída agregada), por exemplo, para tarefas de inferência em tabelas, como TabFact (Chen et al., 2020).
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.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SequenceClassifierOutput or tuple(torch.Tensor)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices dos tokens da sequência de entrada no vocabulário. O padding será ignorado por padrão.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.
- token_type_ids (
torch.LongTensorde forma(batch_size, sequence_length, 7), opcional) — Índices de tokens que codificam a estrutura tabular. Os índices podem ser obtidos usando AutoTokenizer. Veja esta class para mais informações. - position_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Sereset_position_index_per_cellde TapasConfig estiver definido comoTrue, embeddings de posição relativos serão usados. Selecionados no intervalo[0, config.max_position_embeddings - 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. - 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). Observação: isso é chamado de “classification_class_index” na implementação original. - 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. - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors 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 (TapasConfig) e das entradas.
O método forward de TapasForSequenceClassification 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.
Exemplos:
>>> from transformers import AutoTokenizer, TapasForSequenceClassification
>>> import torch
>>> import pandas as pd
>>> tokenizer = AutoTokenizer.from_pretrained("google/tapas-base-finetuned-tabfact")
>>> model = TapasForSequenceClassification.from_pretrained("google/tapas-base-finetuned-tabfact")
>>> data = {
... "Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"],
... "Age": ["56", "45", "59"],
... "Number of movies": ["87", "53", "69"],
... }
>>> table = pd.DataFrame.from_dict(data)
>>> queries = [
... "There is only one actor who is 45 years old",
... "There are 3 actors which played in more than 60 movies",
... ]
>>> inputs = tokenizer(table=table, queries=queries, padding="max_length", return_tensors="pt")
>>> labels = torch.tensor([1, 0]) # 1 means entailed, 0 means refuted
>>> outputs = model(**inputs, labels=labels)
>>> loss = outputs.loss
>>> logits = outputs.logitsTapasForQuestionAnswering
classe transformers.TapasForQuestionAnswering
< source >( config: TapasConfig )
Parâmetros
- config (TapasConfig) — 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 Tapas com uma cabeça de seleção de células e uma cabeça de agregação opcional no topo para tarefas de resposta a perguntas em tabelas
(camadas lineares no topo da saída dos estados ocultos para calcular logits e logits_aggregation opcionais), por exemplo, para
tarefas supervisionadas SQA, WTQ ou WikiSQL.
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.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonetable_mask: typing.Optional[torch.LongTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneaggregation_labels: typing.Optional[torch.LongTensor] = Nonefloat_answer: typing.Optional[torch.Tensor] = Nonenumeric_values: typing.Optional[torch.Tensor] = Nonenumeric_values_scale: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → TableQuestionAnsweringOutput or tuple(torch.Tensor)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices dos tokens da sequência de entrada no vocabulário. O padding será ignorado por padrão.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.
- token_type_ids (
torch.LongTensorde forma(batch_size, sequence_length, 7), opcional) — Índices de tokens que codificam a estrutura tabular. Os índices podem ser obtidos usando AutoTokenizer. Veja esta class para mais informações. - position_ids (
torch.LongTensorde forma(batch_size, sequence_length), opcional) — Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Sereset_position_index_per_cellde TapasConfig estiver definido comoTrue, embeddings de posição relativos serão usados. Selecionados no intervalo[0, config.max_position_embeddings - 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. - table_mask (
torch.LongTensorde forma(batch_size, seq_length), opcional) — Máscara para a tabela. Indica quais tokens pertencem à tabela (1). Tokens de pergunta, cabeçalhos da tabela e padding são 0. - labels (
torch.LongTensorde forma(batch_size, seq_length), opcional) — Rótulos por token para o cálculo da perda de seleção hierárquica de células. Isso codifica as posições da resposta na tabela. Pode ser obtido usando AutoTokenizer.- 1 para tokens que são parte da resposta,
- 0 para tokens que não fazem parte da resposta.
- aggregation_labels (
torch.LongTensorde forma(batch_size, ), opcional) — Índice da função de agregação para cada exemplo do lote, usado para calcular a perda de agregação. Os índices devem estar em[0, ..., config.num_aggregation_labels - 1]. Necessário apenas no caso de supervisão forte para agregação (supervisionado por WikiSQL). - float_answer (
torch.Tensorde forma(batch_size, ), opcional) — Resposta em ponto flutuante para cada exemplo do lote. Defina como float(‘nan’) para perguntas de seleção de célula. Obrigatório apenas no caso de supervisão fraca (WTQ) para calcular a máscara agregada e a perda de regressão. - numeric_values (
torch.Tensorde forma(batch_size, seq_length), opcional) — Valores numéricos de cada token, NaN para tokens que não são valores numéricos. Pode ser obtido usando AutoTokenizer. Necessário apenas no caso de supervisão fraca para agregação (WTQ) para calcular a perda de regressão. - numeric_values_scale (
torch.Tensorde forma(batch_size, seq_length), opcional) — Escala dos valores numéricos de cada token. Pode ser obtida usando AutoTokenizer. Necessário apenas no caso de supervisão fraca para agregação (WTQ) para calcular a perda de regressão. - 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. - output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
TableQuestionAnsweringOutput ou tuple(torch.Tensor)
Um TableQuestionAnsweringOutput 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 (TapasConfig) e das entradas.
O método forward de TapasForQuestionAnswering 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(e possivelmenteanswer,aggregation_labels,numeric_valuesenumeric_values_scalesão fornecidos)) — Perda total como a soma da perda de log-verossimilhança da seleção hierárquica de células e (opcionalmente) da perda de regressão semissupervisionada e (opcionalmente) da perda supervisionada para agregações.logits (
torch.Tensorde forma(batch_size, sequence_length)) — Pontuações de previsão da cabeça de seleção de células, para cada token.logits_aggregation (
torch.Tensor, opcional, de forma(batch_size, num_aggregation_labels)) — Pontuações de previsão da cabeça de agregação, para cada operador de agregação.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.
Exemplos:
>>> from transformers import AutoTokenizer, TapasForQuestionAnswering
>>> import pandas as pd
>>> tokenizer = AutoTokenizer.from_pretrained("google/tapas-base-finetuned-wtq")
>>> model = TapasForQuestionAnswering.from_pretrained("google/tapas-base-finetuned-wtq")
>>> data = {
... "Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"],
... "Age": ["56", "45", "59"],
... "Number of movies": ["87", "53", "69"],
... }
>>> table = pd.DataFrame.from_dict(data)
>>> queries = ["How many movies has George Clooney played in?", "How old is Brad Pitt?"]
>>> inputs = tokenizer(table=table, queries=queries, padding="max_length", return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> logits_aggregation = outputs.logits_aggregation