Transformers documentation
TAPAS
Эта модель была опубликована в HF papers 05.04.2020 и добавлена в Hugging Face Transformers 15.12.2020.
TAPAS
Обзор
Модель TAPAS была предложена в работе TAPAS: Weakly Supervised Table Parsing via Pre-training авторами Jonathan Herzig, Paweł Krzysztof Nowak, Thomas Müller, Francesco Piccinno и Julian Martin Eisenschlos. Это модель на основе BERT, специально разработанная (и предварительно обученная) для ответов на вопросы о табличных данных. В отличие от BERT, TAPAS использует относительные позиционные эмбеддинги и имеет 7 типов токенов, кодирующих структуру таблицы. Предобучение TAPAS выполняется на задаче masked language modeling (MLM) на большом наборе данных, содержащем миллионы таблиц из английской Википедии и соответствующие тексты.
Для задачи вопрос-ответ в TAPAS используются два дополнительных слоя: слой выбора ячеек и слой агрегации, который (опционально) выполняет агрегацию (например, подсчёт или суммирование) по выбранным ячейкам. TAPAS был дообучен на нескольких наборах данных:
- SQA (Sequential Question Answering от Microsoft)
- WTQ (Wiki Table Questions, Стэнфордский университет)
- WikiSQL (от Salesforce).
Он демонстрирует наилучшие результаты как на SQA, так и на WTQ, при этом показывая сопоставимую с SOTA производительность на WikiSQL, но с гораздо более простой архитектурой.
Аннотация из статьи следующая:
Ответы на вопросы на естественном языке по таблицам обычно рассматриваются как задача семантического разбора. Для снижения затрат на сбор полных логических форм один из популярных подходов использует слабое обучение на основе денотаций вместо логических форм. Однако обучение семантических парсеров с использованием слабого обучения сопряжено с трудностями, а также сгенерированные логические формы используются лишь как промежуточный этап перед извлечением денотации. В данной статье мы представляем TAPAS — подход к ответам на вопросы по таблицам без генерации логических форм. TAPAS обучается с использованием слабого обучения и предсказывает денотацию, выбирая ячейки таблицы и при необходимости применяя к такому выбору соответствующий оператор агрегации. TAPAS расширяет архитектуру BERT для кодирования таблиц в качестве входных данных, инициализируется с помощью эффективного совместного предварительного обучения на сегментах текста и таблицах, извлечённых из Wikipedia, и обучается сквозным методом. Мы проводим эксперименты на трёх различных наборах данных для семантического разбора и обнаруживаем, что TAPAS превосходит или не уступает моделям семантического разбора, улучшая наилучшую известную точность на SQA с 55,1 до 67,2 и демонстрируя результаты на уровне наилучших известных на WIKISQL и WIKITQ, но с более простой архитектурой модели. Кроме того, мы обнаруживаем, что перенос обучения, который в нашем случае тривиален, с WIKISQL на WIKITQ даёт точность 48,7, что на 4,2 пункта выше наилучшего известного результата.
Кроме того, авторы дополнительно дообучили TAPAS для распознавания table entailment, создав сбалансированный датасет из миллионов автоматически сгенерированных обучающих примеров, которые используются на промежуточном этапе перед дообучением. Авторы TAPAS называют это дополнительное дообучение промежуточным дообучением (поскольку TAPAS сначала дообучается на MLM, а затем на другом датасете). Они обнаружили, что промежуточное дообучение дополнительно улучшает результаты на SQA, обеспечивая новый state-of-the-art, а также state-of-the-art на TabFact — крупномасштабном датасете, содержащем 16k таблиц из Wikipedia для задачи table entailment (бинарная классификация). Дополнительные сведения см. в их последующей статье: Understanding tables with intermediate pre-training авторов Julian Martin Eisenschlos, Syrine Krichene и Thomas Müller.
TAPAS architecture. Taken from the original blog post. Эта модель была предоставлена пользователем nielsr. Исходный код можно найти здесь.
Советы по использованию
- TAPAS — это модель, которая по умолчанию использует относительные позиционные эмбеддинги (позиционные эмбеддинги сбрасываются для каждой ячейки таблицы). Обратите внимание, что эта возможность была добавлена после публикации оригинальной статьи о TAPAS. По словам авторов, это обычно приводит к немного лучшей производительности и позволяет кодировать более длинные последовательности, не исчерпывая лимит эмбеддингов. Это отражено в параметре
reset_position_index_per_cellкласса TapasConfig, который по умолчанию установлен в значениеTrue. Все версии моделей по умолчанию, доступные на hub, используют относительные позиционные эмбеддинги. Вы по-прежнему можете использовать модели с абсолютными позиционными эмбеддингами, передав дополнительный аргументrevision="no_reset"при вызове методаfrom_pretrained(). Обратите внимание, что обычно рекомендуется дополнять (pad) входные данные справа, а не слева. - TAPAS основан на BERT, поэтому, например,
TAPAS-baseсоответствует архитектуреBERT-base. Разумеется,TAPAS-largeобеспечивает наилучшие результаты (результаты, приведённые в статье, получены сTAPAS-large). Результаты для моделей разного размера представлены в оригинальном репозитории на GitHub. - У TAPAS есть контрольные точки, дообученные на SQA, которые позволяют отвечать на вопросы, связанные с таблицей, в диалоговом режиме. Это означает, что вы можете задавать уточняющие вопросы, например «сколько ему лет?», относящиеся к предыдущему вопросу. Обратите внимание, что прямой проход TAPAS немного отличается в случае диалогового режима: в этом случае необходимо подавать каждую пару «таблица–вопрос» в модель по одному, чтобы токены типов
prev_labelsмогли быть заменены предсказанными модельюlabelsдля предыдущего вопроса. Подробнее см. в разделе «Использование». - TAPAS похож на BERT и, следовательно, опирается на задачу маскированного языкового моделирования (MLM). Поэтому он эффективен для предсказания замаскированных токенов и для задач NLU в целом, но не оптимален для генерации текста. В этом отношении лучше подходят модели, обученные с использованием задачи каузального языкового моделирования (CLM). Обратите внимание, что TAPAS можно использовать в качестве энкодера в рамках фреймворка EncoderDecoderModel, чтобы объединить его с авторегрессионным текстовым декодером, таким как GPT-2.
Использование: дообучение
Здесь мы объясняем, как можно дообучить TapasForQuestionAnswering на собственном наборе данных.
ШАГ 1: Выберите один из трёх способов использования TAPAS — или поэкспериментируйте
По сути, существует три различных способа дообучения TapasForQuestionAnswering, соответствующих различным наборам данных, на которых Tapas был дообучен:
- SQA: если вам интересно задавать уточняющие вопросы, связанные с таблицей, в рамках диалога. Например, если сначала вы спросите «Как зовут первого актёра?», затем можно задать уточняющий вопрос, например «Сколько ему лет?». Здесь вопросы не предполагают агрегации (все вопросы являются вопросами на выбор ячейки).
- WTQ: если вам не интересен сценарий диалога, а нужно задавать вопросы, связанные с таблицей, которые могут включать агрегацию, например подсчёт количества строк, суммирование значений ячеек или вычисление среднего значения. В таком случае, например, можно спросить: «Каково общее количество голов, забитых Криштиану Роналду за карьеру?». Этот случай также называется weak supervision, поскольку сама модель должна научиться выбирать подходящий оператор агрегации (SUM/COUNT/AVERAGE/NONE), имея в качестве сигнала обучения только ответ на вопрос.
- WikiSQL-supervised: этот датасет основан на WikiSQL, при обучении модели предоставляется истинный оператор агрегации. Это также называется сильным надзором. Здесь обучение подходящего оператора агрегации значительно проще.
Подводя итог:
| Задача | Пример датасета | Описание |
|---|---|---|
| Диалоговый | SQA | Вопросы только с выбором ячейки |
| Слабый надзор для агрегации | WTQ | Вопросы могут включать агрегацию, и модели необходимо научиться этому, имея в качестве сигнала обучения только ответ |
| Сильная супервизия для агрегации | WikiSQL-supervised | Вопросы могут включать агрегацию, и модели необходимо научиться этому, учитывая эталонный оператор агрегации |
Инициализация модели с предобученной базой и случайно инициализированными классификационными головами из хаба может быть выполнена, как показано ниже.
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")Конечно, не обязательно следовать одному из трёх способов, использованных для дообучения TAPAS. Вы также можете экспериментировать, задавая любые гиперпараметры при инициализации TapasConfig, а затем создавать TapasForQuestionAnswering на основе этой конфигурации. Например, если у вас есть набор данных, содержащий как диалоговые вопросы, так и вопросы, предполагающие агрегацию, вы можете поступить следующим образом. Вот пример:
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")Также можно начать с уже дообученного контрольного пункта. Обратите внимание, что дообученный контрольный пункт на WTQ имеет некоторые проблемы из-за L2-потери, которая в какой-то степени хрупка. Подробнее см. здесь.
Список всех предобученных и дообученных контрольных точек TAPAS, доступных на хабе HuggingFace, можно найти здесь.
ШАГ 2: Подготовьте данные в формате SQA
Во-вторых, независимо от того, что вы выбрали выше, вам следует подготовить набор данных в формате SQA. Этот формат представляет собой файл TSV/CSV со следующими столбцами:
id: необязательный параметр, идентификатор пары «таблица-вопрос», используется для учёта.annotator: необязательный параметр, идентификатор человека, разметившего пару «таблица-вопрос», для целей учёта.position: целое число, указывающее, является ли вопрос первым, вторым или третьим в контексте таблицы. Требуется только в случае диалогового режима (SQA). Эта колонка не нужна, если вы используете обучение с учителем на WTQ/WikiSQL.question: stringtable_file: строка, имя csv-файла, содержащего табличные данныеanswer_coordinates: список из одного или нескольких кортежей (каждый кортеж представляет собой координату ячейки, то есть пару «строка, столбец», входящую в состав ответа)answer_text: список из одной или нескольких строк (каждая строка — значение ячейки, входящее в состав ответа)aggregation_label: индекс оператора агрегации. Требуется только в случае сильного обучения для агрегации (сценарий с надзором WikiSQL)float_answer: числовой ответ на вопрос, если он существует (np.nan, если нет). Обязателен только при слабом надзоре для агрегации (например, WTQ и WikiSQL)
Сами таблицы должны находиться в папке, при этом каждая таблица представляет собой отдельный csv-файл. Обратите внимание, что авторы алгоритма TAPAS использовали скрипты конвертации с некоторой автоматизированной логикой для преобразования других наборов данных (WTQ, WikiSQL) в формат SQA. Автор объясняет это здесь. Конвертация этого скрипта, работающая с реализацией HuggingFace, доступна здесь. Интересно, что эти скрипты конвертации не идеальны (поля answer_coordinates и float_answer заполняются на основе answer_text), что означает, что результаты для WTQ и WikiSQL могли бы быть улучшены.
ШАГ 3: Преобразование данных в тензоры с помощью TapasTokenizer
Во-третьих, если вы подготовили данные в формате TSV/CSV (а также соответствующие CSV-файлы с табличными данными), вы можете использовать TapasTokenizer для преобразования пар «таблица-вопрос» в input_ids, attention_mask, token_type_ids и так далее. Как и прежде, в зависимости от того, какой из трёх случаев вы выбрали выше, для дообучения TapasForQuestionAnswering требуются разные входные данные:
| Задача | Обязательные входные данные |
|---|---|
| Диалоговый | input_ids, attention_mask, token_type_ids, labels |
| Слабый надзор для агрегации | input_ids, attention_mask, token_type_ids, labels, numeric_values, numeric_values_scale, float_answer |
| Сильная супервизия для агрегации | input ids, attention mask, token type ids, labels, aggregation_labels |
TapasTokenizer создаёт labels, numeric_values и numeric_values_scale на основе столбцов answer_coordinates и answer_text в TSV-файле. Значения float_answer и aggregation_labels уже присутствуют в TSV-файле, полученном на шаге 2. Пример:
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([[ ]])}Обратите внимание, что TapasTokenizer ожидает, чтобы данные таблицы были только текстовыми. Вы можете использовать .astype(str) для датафрейма, чтобы преобразовать его в данные, содержащие только текст.
Разумеется, здесь показано лишь то, как закодировать один пример для обучения. Рекомендуется создать загрузчик данных (dataloader) для итерации по батчам:
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)Обратите внимание, что здесь каждая пара «таблица-вопрос» кодируется независимо. Это допустимо, пока ваш датасет не является диалоговым. Если же ваш датасет содержит диалоговые вопросы (например, в SQA), сначала сгруппируйте queries, answer_coordinates и answer_text по каждой таблице (в порядке их индекса position) и кодируйте каждую таблицу вместе с её вопросами пакетом. Это гарантирует, что типы токенов prev_labels (см. документацию TapasTokenizer) будут установлены корректно. Подробнее — в этом ноутбуке.
**ШАГ 4: Обучение (дообучение) модели
Затем можно выполнить дообучение TapasForQuestionAnswering следующим образом (здесь показан пример для слабого надзора в случае агрегации):
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()Использование: inference
Здесь мы объясняем, как использовать TapasForQuestionAnswering для инференса (то есть для получения предсказаний на новых данных). Для инференса модели необходимо передать только input_ids, attention_mask и token_type_ids (их можно получить с помощью TapasTokenizer), чтобы получить логиты. Далее вы можете использовать удобный метод ~models.tapas.tokenization_tapas.convert_logits_to_predictions, чтобы преобразовать их в предсказанные координаты и необязательные индексы агрегации.
Однако обратите внимание, что процесс вывода отличается в зависимости от того, является ли сценарий диалоговым. В недialogовом сценарии вывод можно выполнять параллельно для всех пар «таблица–вопрос» в батче. Пример:
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, 69В случае диалогового сценария каждая пара «таблица — вопрос» должна передаваться модели последовательно, чтобы типы токенов prev_labels могли быть заменены предсказанными labels предыдущей пары «таблица — вопрос». Подробнее можно узнать в этом ноутбуке.
Ресурсы
- Руководство по задаче классификации текста
- Руководство по задаче маскированного языкового моделирования
Специфические выходные данные TAPAS
class 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 )
Параметры
- loss (
torch.Tensorформы(1,), необязательный, возвращается, если переданыlabels(и, возможно,answer,aggregation_labels,numeric_valuesиnumeric_values_scale)) — Суммарная потеря, равная сумме лог-правдоподобия иерархического выбора ячеек и (опционально) полунепосредственной регрессионной потери и (опционально) потери с учителем для агрегаций. - logits (
torch.Tensorформы(batch_size, sequence_length)) — Оценки предсказания для каждого токена, полученные головой выбора ячеек. - logits_aggregation (
torch.Tensor, необязательный, формы(batch_size, num_aggregation_labels)) — Оценки предсказаний агрегирующей головы для каждого оператора агрегации. - hidden_states (
tuple[torch.Tensor], необязательный, возвращается, еслиoutput_hidden_states=Trueпередан или еслиconfig.output_hidden_states=True) — кортежtorch.Tensor(по одному для вывода слоя встраиваний, если модель имеет слой встраиваний, + по одному для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- attentions (
tuple[torch.Tensor], необязательный, возвращается, еслиoutput_attentions=Trueпередан или еслиconfig.output_attentions=True) — Кортежtorch.Tensor(по одному для каждого слоя) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Тип результата TapasForQuestionAnswering.
TapasConfig
класс 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 )
Параметры
- vocab_size (
int, необязательный, по умолчанию30522) — Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены вinput_ids. - hidden_size (
int, необязательный, по умолчанию768) — Размерность скрытых представлений. - num_hidden_layers (
int, необязательный, по умолчанию12) — Количество скрытых слоев в декодере Transformer. - num_attention_heads (
int, необязательный, по умолчанию12) — Количество головок внимания в каждом слое внимания декодера Transformer. - intermediate_size (
int, необязательный, по умолчанию3072) — Размерность представлений MLP. - hidden_act (
str, необязательный, по умолчаниюgelu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - hidden_dropout_prob (
Union[float, int], необязательный, по умолчанию0.1) — Вероятность dropout для всех полносвязных слоёв в блоках эмбеддингов, энкодера и пулера. - attention_probs_dropout_prob (
Union[float, int], необязательный, по умолчанию0.1) — Коэффициент dropout для вероятностей внимания. - max_position_embeddings (
int, необязательный, по умолчанию1024) — Максимальная длина последовательности, с которой может использоваться эта модель. - type_vocab_sizes (
list[int], необязательный, по умолчанию[3, 256, 256, 2, 256, 256, 10]) — Размеры словарей дляtoken_type_ids, передаваемых при вызове TapasModel. - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - layer_norm_eps (
float, необязательный, по умолчанию1e-12) — Значение epsilon, используемое слоями нормализации. - pad_token_id (
int, необязательный, по умолчанию0) — Идентификатор токена, используемого для дополнения (padding) в словаре. - bos_token_id (
int, необязательный) — Идентификатор токена, используемого для обозначения начала потока в словаре. - eos_token_id (
Union[int, list[int]], необязательный) — Идентификатор токена, используемого для обозначения конца потока в словаре. - positive_label_weight (
float, необязательный, по умолчанию 10.0) — Вес для положительных меток. - num_aggregation_labels (
int, необязательный, по умолчанию 0) — Количество агрегационных операторов, которые необходимо предсказать. - aggregation_loss_weight (
float, необязательный, по умолчанию 1.0) — Вес важности для потерь агрегации. - use_answer_as_supervision (
bool, необязательный) — Определяет, следует ли использовать ответ в качестве единственного сигнала для примеров агрегации. - answer_loss_importance (
float, необязательный, по умолчанию 1.0) — Вес важности для функции потерь регрессии. - use_normalized_answer_loss (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли нормализовать потерю ответа, деля её на максимум из предсказанного и ожидаемого значений. - huber_loss_delta (
float, необязательный) — Параметр Delta, используемый для вычисления функции потерь регрессии. - temperature (
float, необязательный, по умолчанию 1.0) — Значение, используемое для управления (или изменения) асимметрии вероятностей логитов ячеек. - aggregation_temperature (
float, необязательный, по умолчанию 1.0) — Масштабирует логиты агрегации для управления асимметрией распределения вероятностей. - use_gumbel_for_cells (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли применять Gumbel-Softmax для выбора ячеек. - use_gumbel_for_aggregation (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли применять Gumbel-Softmax для выбора агрегации. - average_approximation_function (
string, необязательный, по умолчанию"ratio") — Метод для расчёта ожидаемого среднего значения ячеек в случае слабого надзора. Одно из значений:"ratio","first_order"или"second_order". - cell_selection_preference (
float, необязательный) — Предпочтение при выборе ячейки в неоднозначных случаях. Применимо только в случае слабого надзора для агрегации (WTQ, WikiSQL). Если общая масса вероятностей агрегации (за исключением оператора “NONE”) превышает значение этого гиперпараметра, для примера предсказывается агрегация. - answer_loss_cutoff (
float, необязательный) — Игнорировать примеры, у которых loss ответа превышает cutoff. - max_num_rows (
int, необязательный, по умолчанию 64) — Максимальное количество строк. - max_num_columns (
int, необязательный, по умолчанию 32) — Максимальное количество столбцов. - average_logits_per_cell (
bool, необязательный, по умолчаниюFalse) — Следует ли усреднять логиты по каждой ячейке. - select_one_column (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли ограничивать модель выбором ячеек только из одного столбца. - allow_empty_column_selection (
bool, необязательный, по умолчаниюFalse) — Разрешает ли не выбирать ни одного столбца. - init_cell_selection_weights_to_zero (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли инициализировать веса выбора ячеек нулём, чтобы начальные вероятности составляли 50%. - reset_position_index_per_cell (
bool, необязательный, по умолчаниюTrue) — Следует ли сбрасывать индексы позиций в каждой ячейке (то есть использовать относительные эмбеддинги позиций). - disable_per_token_loss (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли отключать любое (сильное или слабое) обучение на ячейках. - aggregation_labels (
dict[int, label], необязательный) — Метки агрегации, используемые для агрегирования результатов. Например, модели WTQ имеют следующие метки агрегации:{0: "NONE", 1: "SUM", 2: "AVERAGE", 3: "COUNT"} - no_aggregation_label_index (
int, необязательный) — Если метки агрегации определены и одна из них обозначает «Нет агрегации», здесь следует указать её индекс. Например, у моделей WTQ метка агрегации «NONE» находится по индексу 0, поэтому для этих моделей значение должно быть установлено в 0. - is_decoder (
bool, необязательный, по умолчаниюFalse) — Указывает, используется ли модель в качестве декодера. ЕслиFalse, модель используется как энкодер. - add_cross_attention (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли добавлять слои кросс-внимания в модель. - tie_word_embeddings (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли связывать веса эмбеддингов согласно маппингуtied_weights_keysмодели.
Это класс конфигурации для хранения настроек модели TapasModel. Он используется для создания модели Tapas в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации google/tapas-base-finetuned-sqa
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> 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
класс 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 )
Параметры
- vocab_file (
str) — Файл, содержащий словарь. - do_lower_case (
bool, необязательный, по умолчаниюTrue) — Определяет, нужно ли приводить входные данные к нижнему регистру при токенизации. - do_basic_tokenize (
bool, необязательный, по умолчаниюTrue) — Выполнять ли базовую токенизацию перед WordPiece. - never_split (
Iterable, необязательный) — Список токенов, которые никогда не будут разбиваться при токенизации. Параметр действует только приdo_basic_tokenize=True - unk_token (
str, необязательный, по умолчанию"[UNK]") — Токен неизвестного слова. Токен, отсутствующий в словаре, не может быть преобразован в ID, поэтому вместо него используется этот токен. - sep_token (
str, необязательный, по умолчанию"[SEP]") — Токен-разделитель, который используется при построении последовательности из нескольких последовательностей, например, двух последовательностей для классификации последовательностей или текста и вопроса для ответа на вопросы. Он также используется в качестве последнего токена в последовательности, построенной со специальными токенами. - pad_token (
str, необязательный, по умолчанию"[PAD]") — Токен, используемый для выравнивания, например, при пакетной обработке последовательностей разной длины. - cls_token (
str, необязательный, по умолчанию"[CLS]") — Токен классификатора, используемый при классификации последовательности (классификация всей последовательности, а не посимвольная классификация). Это первый токен последовательности, если она построена со специальными токенами. - mask_token (
str, необязательный, по умолчанию"[MASK]") — Токен, используемый для маскирования значений. Это тот токен, который применяется при обучении модели с использованием masked language modeling. Именно этот токен модель будет пытаться предсказать. - empty_token (
str, необязательный, по умолчанию"[EMPTY]") — Токен, используемый для пустых значений ячеек в таблице. К пустым значениям относятся "", «n/a», «nan» и «?». - tokenize_chinese_chars (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли токенизировать китайские иероглифы. Для японского языка эту опцию, вероятно, следует отключить (см. эту проблему). - strip_accents (
bool, необязательный) — Удалять ли все диакритические знаки. Если этот параметр не указан, его значение определяется по значению параметраlowercase(как в оригинальном BERT). - cell_trim_length (
int, необязательный, по умолчанию -1) — Если > 0: обрезать ячейки так, чтобы их длина была <= этому значению. Также отключает дальнейшую обрезку ячеек, поэтому следует использовать с параметромtruncation, установленным вTrue. - max_column_id (
int, необязательный) — Максимальный идентификатор столбца для извлечения. - max_row_id (
int, необязательный) — Максимальный идентификатор строки для извлечения. - strip_column_names (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли добавлять пустые строки вместо имён столбцов. - update_answer_coordinates (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли пересчитывать координаты ответа на основе текста ответа. - min_question_length (
int, необязательный) — Минимальная длина каждого вопроса в токенах (иначе он будет пропущен). - max_question_length (
int, необязательный) — Максимальная длина каждого вопроса в токенах (иначе будет пропущен). - clean_up_tokenization_spaces (
bool, необязательный, по умолчаниюTrue) — Указывает, следует ли очищать пробелы после декодирования. Очистка заключается в удалении возможных артефактов, например, лишних пробелов.
Создаёт токенизатор TAPAS. Основан на WordPiece. Разворачивает таблицу и одно или несколько связанных предложений для использования в моделях TAPAS.
Этот токенизатор наследуется от PreTrainedTokenizer, который содержит большинство основных методов. За дополнительной информацией об этих методах пользователям следует обращаться к этому суперклассу. TapasTokenizer создаёт несколько идентификаторов типов токенов для кодирования табличной структуры. Более точно, он добавляет 7 идентификаторов типов токенов в следующем порядке: segment_ids, column_ids, row_ids, prev_labels, column_ranks, inv_column_ranks и numeric_relations:
- segment_ids: указывает, к какому фрагменту относится токен — к вопросу (0) или к таблице (1). Для специальных токенов и заполнителей (padding) значение равно 0.
- column_ids: указывает, к какому столбцу таблицы относится токен (нумерация начинается с 1). Для всех токенов вопроса, специальных токенов и заполнителей значение равно 0.
- row_ids: указывает, к какой строке таблицы относится токен (нумерация начинается с 1). Для всех токенов вопроса, специальных токенов и заполнителей значение равно 0. Для токенов заголовков столбцов также равно 0.
- prev_labels: указывает, являлся ли токен (частью) ответа на предыдущий вопрос (1) или нет (0). Полезно в диалоговых сценариях (например, SQA).
- column_ranks: указывает ранг токена таблицы относительно столбца, если применимо. Например, если у вас есть столбец «number of movies» со значениями 87, 53 и 69, то ранги столбца для этих токенов равны 3, 1 и 2 соответственно. Для всех токенов вопроса, специальных токенов и заполнителей значение равно 0.
- inv_column_ranks: указывает обратный ранг токена таблицы относительно столбца, если применимо. Например, если у вас есть столбец «количество фильмов» со значениями 87, 53 и 69, то обратные ранги столбца для этих токенов равны 1, 3 и 2 соответственно. Для всех токенов вопроса, специальных токенов и заполнителей значение равно 0.
- numeric_relations: указывает числовые отношения между вопросом и токенами таблицы. 0 для всех токенов вопроса, специальных токенов и заполнителей.
TapasTokenizer выполняет сквозную токенизацию таблицы и связанных с ней предложений: разбиение по знакам препинания и 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 )
Параметры
- table (
pd.DataFrameилиstrилиlist[str]) — Таблица, содержащая табличные данные. Обратите внимание, что все значения ячеек должны быть текстом. Используйте .astype(str) для Pandas-датафрейма, чтобы преобразовать его в строки. При передаче строки или списка строк они будут интерпретированы как запросы с пустой таблицей (для поддержки общих тестов токенизатора). - queries (
strилиlist[str]) — Вопрос или пакет вопросов, связанных с таблицей, для кодирования. Обратите внимание, что в случае пакета все вопросы должны относиться к одной и той же таблице. - answer_coordinates (
list[Tuple]orlist[list[Tuple]], необязательный) — Координаты ответа для каждой пары «таблица-вопрос» в батче. Если предоставлена только одна пара «таблица-вопрос», то answer_coordinates должен представлять собой один список из одного или нескольких кортежей. Каждый кортеж должен быть парой (row_index, column_index). У первой строки данных (не строки заголовка столбцов) индекс 0. У первого столбца индекс 0. Если предоставлен батч пар «таблица-вопрос», то answer_coordinates должен быть списком списков кортежей (каждый список соответствует одной паре «таблица-вопрос»). - answer_text (
list[str]илиlist[list[str]], необязательный) — Текст ответа для каждой пары «таблица-вопрос» в батче. Если предоставлена только одна пара «таблица-вопрос», то answer_text должен быть единственным списком из одной или нескольких строк. Каждая строка должна содержать текст ответа, соответствующий координате ответа. Если предоставлен батч пар «таблица-вопрос», то answer_coordinates должен быть списком списков строк (каждый список соответствует одной паре «таблица-вопрос»). - add_special_tokens (
bool, необязательный, по умолчаниюTrue) — Указывает, следует ли кодировать последовательности с использованием специальных токенов, соответствующих их модели. - padding (
bool,strили PaddingStrategy, необязательный, по умолчаниюFalse) — Включает и управляет выравниванием. Принимает следующие значения:Trueили'longest': дополнить до самой длинной последовательности в батче (или не дополнять, если предоставлена только одна последовательность).'max_length': Дополнить до максимальной длины, указанной аргументомmax_length, или до максимально допустимой длины входных данных для модели, если этот аргумент не указан.Falseили'do_not_pad'(по умолчанию): без дополнения нулями (т. е. может выводить батч с последовательностями разной длины).
- truncation (
bool,strилиTapasTruncationStrategy, необязательный, по умолчаниюFalse) — Включает и управляет усечением. Принимает следующие значения:Trueили'drop_rows_to_fit': обрезать до максимальной длины, указанной аргументомmax_length, или до максимально допустимой длины входа для модели, если этот аргумент не указан. Это приведёт к построчному обрезанию с удалением строк из таблицы.Falseили'do_not_truncate'(по умолчанию): без усечения (т.е. может выдать батч с длиной последовательности, превышающей максимальный допустимый размер входа модели).
- max_length (
int, необязательный) — Управляет максимальной длиной, используемой одним из параметров усечения/дополнения.Если параметр не задан или установлен в
None, будет использована предопределённая максимальная длина модели, если одна из параметров усечения/дополнения требует указания максимальной длины. Если у модели нет конкретной максимальной длины входных данных (как у XLNet), усечение/дополнение до максимальной длины будет отключено. - is_split_into_words (
bool, необязательный, по умолчаниюFalse) — Указывает, является ли вход уже предтокенизированным (например, разбитым на слова). Если установлено вTrue, токенизатор предполагает, что вход уже разбит на слова (например, по пробелам), и токенизирует их. Это полезно для NER или классификации токенов. - pad_to_multiple_of (
int, необязательный) — Если задано, последовательность будет дополнена до кратного указанного значения. Это особенно полезно для использования Tensor Cores на оборудовании NVIDIA с вычислительной способностью>= 7.5(Volta). - return_tensors (
strили TensorType, необязательный) — Если задано, возвращает тензоры вместо списка целых чисел Python. Допустимые значения:'pt': возвращает объектыtorch.TensorPyTorch.'np': возвращает объекты Numpynp.ndarray.
Основной метод для токенизации и подготовки одной или нескольких последовательностей, связанных с таблицей, для модели.
convert_logits_to_predictions
< source >( datalogitslogits_agg = Nonecell_classification_threshold = 0.5 ) → tuple comprising various elements depending on the inputs
Параметры
- data (
dict) — Словарь, сопоставляющий признаки с фактическими значениями. Должен создаваться с помощью TapasTokenizer. - logits (
torch.Tensorформы(batch_size, sequence_length)) — Тензор, содержащий логиты на уровне токенов. - logits_agg (
torch.Tensorформы(batch_size, num_aggregation_labels), необязательный) — Тензор, содержащий логиты агрегации. - cell_classification_threshold (
float, необязательный, по умолчанию 0.5) — Порог, используемый для выбора ячеек. Будут выбраны все ячейки таблицы, вероятность для которых превышает этот порог.
Возвращает
tuple, содержащий различные элементы в зависимости от входных данных
- predicted_answer_coordinates (
list[list[[tuple]]длиныbatch_size): Предсказанные координаты ответа в виде списка списков кортежей. Каждый элемент списка содержит предсказанные координаты ответа для одного примера в батче, в виде списка кортежей. Каждый кортеж представляет собой ячейку, то есть (индекс строки, индекс столбца). - predicted_aggregation_indices (
list[int]длинойbatch_size, необязательный, возвращается, еслиlogits_aggregationзадан): Предсказанные индексы операторов агрегации для агрегирующей головы.
Преобразует логиты TapasForQuestionAnswering в фактические координаты предсказанного ответа и необязательные индексы агрегирования.
Первоначальная реализация, на которой основана эта функция, доступна здесь.
TapasModel
класс transformers.TapasModel
< source >( config: TapasConfigadd_pooling_layer = True )
Параметры
- config (TapasConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
- add_pooling_layer (
bool, необязательный, по умолчаниюTrue) — Добавлять ли слой пулинга
Модель Tapas без дополнительных слоёв, выводящая необработанные скрытые состояния.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
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)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- token_type_ids (
torch.LongTensorформы(batch_size, sequence_length, 7), необязательный) — Индексы токенов, кодирующие табличную структуру. Индексы можно получить с помощью AutoTokenizer. См. этот класс для получения дополнительной информации. - position_ids (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Еслиreset_position_index_per_cellпараметр TapasConfig установлен в значениеTrue, относительные позиционные эмбеддинги будут использоваться. Значения выбираются из диапазона[0, config.max_position_embeddings - 1]. - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - encoder_hidden_states (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя энкодера. Используется в кросс-внимании, если модель настроена как декодер. - encoder_attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения внимания к индексам токенов отступов во входных данных энкодера. Эта маска используется в кросс-внимании, если модель настроена как декодер. Значения маски из[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- output_attentions (
bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
BaseModelOutputWithPooling или tuple(torch.Tensor)
Объект BaseModelOutputWithPooling или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (TapasConfig) и входных данных.
Метод forward модели TapasModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.pooler_output (
torch.Tensorформы(batch_size, hidden_size)) — Скрытое состояние последнего слоя для первого токена последовательности (токен классификации) после дополнительной обработки слоями, используемыми для вспомогательной задачи предварительного обучения. Например, для моделей семейства BERT это возвращает токен классификации после обработки линейным слоем и функцией активации tanh. Веса линейного слоя обучаются по задаче предсказания следующего предложения (классификации) во время предварительного обучения.hidden_states (
tuple(torch.Tensor), optional, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Примеры:
>>> 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
класс transformers.TapasForMaskedLM
< source >( config: TapasConfig )
Параметры
- config (TapasConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель Tapas с головой language modeling наверху.”
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
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)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- token_type_ids (
torch.LongTensorформы(batch_size, sequence_length, 7), необязательный) — Индексы токенов, кодирующие табличную структуру. Индексы можно получить с помощью AutoTokenizer. См. этот класс для получения дополнительной информации. - position_ids (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Еслиreset_position_index_per_cellпараметр TapasConfig установлен в значениеTrue, относительные позиционные эмбеддинги будут использоваться. Значения выбираются из диапазона[0, config.max_position_embeddings - 1]. - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - encoder_hidden_states (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя энкодера. Используется в кросс-внимании, если модель настроена как декодер. - encoder_attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения внимания к индексам токенов отступов во входных данных энкодера. Эта маска используется в кросс-внимании, если модель настроена как декодер. Значения маски из[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- labels (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Метки для вычисления потерь маскированного языкового моделирования. Индексы должны находиться в диапазоне[-100, 0, ..., config.vocab_size](см. docstringinput_ids). Токены с индексами, установленными в-100, игнорируются (маскируются); потери вычисляются только для токенов с метками в диапазоне[0, ..., config.vocab_size]. - output_attentions (
bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
MaskedLMOutput или tuple(torch.Tensor)
Объект MaskedLMOutput или кортеж
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (TapasConfig) и входных данных.
Метод forward класса TapasForMaskedLM переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если переданlabels) — Потери маскированного языкового моделирования (MLM).logits (
torch.Tensorформы(batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).hidden_states (
tuple(torch.Tensor), optional, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Примеры:
>>> 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
класс transformers.TapasForSequenceClassification
< source >( config: TapasConfig )
Параметры
- config (TapasConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель Tapas с головой последовательной классификации сверху (линейный слой поверх пуллинг-выхода), например, для задач импликации в таблицах, таких как TabFact (Chen et al., 2020).
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
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)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- token_type_ids (
torch.LongTensorформы(batch_size, sequence_length, 7), необязательный) — Индексы токенов, кодирующие табличную структуру. Индексы можно получить с помощью AutoTokenizer. См. этот класс для получения дополнительной информации. - position_ids (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Еслиreset_position_index_per_cellпараметр TapasConfig установлен в значениеTrue, относительные позиционные эмбеддинги будут использоваться. Значения выбираются из диапазона[0, config.max_position_embeddings - 1]. - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - labels (
torch.LongTensorформы(batch_size,), необязательный) — Метки для вычисления функции потерь классификации/регрессии последовательности. Индексы должны находиться в диапазоне[0, ..., config.num_labels - 1]. Еслиconfig.num_labels == 1, вычисляется функция потерь регрессии (среднеквадратичная ошибка), еслиconfig.num_labels > 1, вычисляется функция потерь классификации (кросс-энтропия). Примечание: в исходной реализации этот параметр называется “classification_class_index”. - output_attentions (
bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
SequenceClassifierOutput или tuple(torch.Tensor)
Объект SequenceClassifierOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (TapasConfig) и входных данных.
Метод forward класса TapasForSequenceClassification переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если заданlabels) — Потери классификации (или регрессии, если config.num_labels==1).logits (
torch.Tensorформы(batch_size, config.num_labels)) — Оценки для классификации (или регрессии, если config.num_labels==1) до применения SoftMax.hidden_states (
tuple(torch.Tensor), optional, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Примеры:
>>> 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
класс transformers.TapasForQuestionAnswering
< source >( config: TapasConfig )
Параметры
- config (TapasConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель Tapas с головой выбора ячеек и необязательной головой агрегации поверх для задач вопросно-ответных на таблицах
(линейные слои поверх выходных скрытых состояний для вычисления logits и необязательных logits_aggregation), например, для
задач SQA, WTQ или WikiSQL с учителем.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
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)
Параметры
- input_ids (
torch.LongTensorформы(batch_size, sequence_length), , необязательный) — Индексы токенов входной последовательности в словаре. По умолчанию токены отсечки (padding) игнорируются.Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call().
- attention_mask (
torch.Tensorформы(batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона[0, 1]:- 1 для токенов, которые не замаскированы,
- 0 для токенов, которые замаскированы.
- token_type_ids (
torch.LongTensorформы(batch_size, sequence_length, 7), необязательный) — Индексы токенов, кодирующие табличную структуру. Индексы можно получить с помощью AutoTokenizer. См. этот класс для получения дополнительной информации. - position_ids (
torch.LongTensorформы(batch_size, sequence_length), необязательный) — Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Еслиreset_position_index_per_cellпараметр TapasConfig установлен в значениеTrue, относительные позиционные эмбеддинги будут использоваться. Значения выбираются из диапазона[0, config.max_position_embeddings - 1]. - inputs_embeds (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачиinput_idsможно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексыinput_idsпреобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели. - table_mask (
torch.LongTensorформы(batch_size, seq_length), необязательный) — Маска для таблицы. Указывает, какие токены принадлежат таблице (1). Токены вопроса, заголовки таблицы и padding равны 0. - labels (
torch.LongTensorформы(batch_size, seq_length), , необязательный) — Метки для каждого токена для вычисления иерархической функции потерь выбора ячеек. Это кодирует позиции ответа, присутствующего в таблице. Можно получить с помощью AutoTokenizer.- 1 для токенов, которые входят в ответ,
- 0 для токенов, которые не являются частью ответа.
- aggregation_labels (
torch.LongTensorформы(batch_size, ), необязательный) — Индекс функции агрегации для каждого примера в батче, используемый для вычисления потерь агрегации. Индексы должны находиться в диапазоне[0, ..., config.num_aggregation_labels - 1]. Требуется только в случае сильного надзора для агрегации (WikiSQL-supervised). - float_answer (
torch.Tensorформы(batch_size, ), необязательный) — Числовой ответ для каждого примера в батче. Устанавливается в float(‘nan’) для вопросов по выбору ячейки. Требуется только в случае слабого надзора (WTQ) для вычисления агрегированной маски и функции потерь регрессии. - numeric_values (
torch.Tensorформы(batch_size, seq_length), необязательный) — Числовые значения каждого токена; NaN для токенов, которые не являются числовыми значениями. Можно получить с помощью AutoTokenizer. Требуется только в случае слабого надзора для агрегации (WTQ) для вычисления потерь регрессии. - numeric_values_scale (
torch.Tensorформы(batch_size, seq_length), необязательный) — Масштаб числовых значений каждого токена. Может быть получен с помощью AutoTokenizer. Требуется только в случае слабого надзора для агрегации (WTQ) для вычисления функции потерь регрессии. - output_attentions (
bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
TableQuestionAnsweringOutput или tuple(torch.Tensor)
Объект TableQuestionAnsweringOutput или кортеж
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (TapasConfig) и входных данных.
Метод forward класса TapasForQuestionAnswering переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если переданыlabels(и, возможно,answer,aggregation_labels,numeric_valuesиnumeric_values_scale)) — Суммарная потеря, равная сумме логарифмической правдоподобия иерархического выбора ячеек и (опционально) полунепосредственной регрессионной потери и (опционально) потери с учителем для агрегаций.logits (
torch.Tensorформы(batch_size, sequence_length)) — Оценки предсказаний головы выбора ячеек для каждого токена.logits_aggregation (
torch.Tensor, необязательный, формы(batch_size, num_aggregation_labels)) — Оценки предсказаний агрегирующей головы для каждого оператора агрегации.hidden_states (
tuple[torch.Tensor], необязательный, возвращается при передачеoutput_hidden_states=Trueили когдаconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple[torch.Tensor], необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Примеры:
>>> 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