Transformers documentation
Глоссарий
Глоссарий
Этот глоссарий определяет общие термины машинного обучения и 🤗 Transformers, чтобы помочь вам лучше понимать документацию.
A
маска внимания
Маска внимания — это необязательный аргумент, используемый при пакетной обработке последовательностей.
Этот аргумент указывает модели, на какие токены следует обращать внимание, а на какие — нет.
Например, рассмотрим две последовательности:
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence_a = "This is a short sequence."
>>> sequence_b = "This is a rather long sequence. It is at least longer than the sequence A."
>>> encoded_sequence_a = tokenizer(sequence_a)["input_ids"]
>>> encoded_sequence_b = tokenizer(sequence_b)["input_ids"]Кодированные версии имеют разную длину:
>>> len(encoded_sequence_a), len(encoded_sequence_b)
(8, 19)Поэтому мы не можем объединить их в один тензор в исходном виде. Первую последовательность нужно дополнить нулями до длины второй, либо вторую нужно обрезать до длины первой.
В первом случае список идентификаторов будет дополнен индексами отступов. Мы можем передать токенизатору список и попросить его дополнить его так:
>>> padded_sequences = tokenizer([sequence_a, sequence_b], padding=True)Мы видим, что справа от первого предложения были добавлены нули, чтобы его длина совпала со вторым:
>>> padded_sequences["input_ids"]
[[101, 1188, 1110, 170, 1603, 4954, 119, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [101, 1188, 1110, 170, 1897, 1263, 4954, 119, 1135, 1110, 1120, 1655, 2039, 1190, 1103, 4954, 138, 119, 102]]Затем это можно преобразовать в тензор в PyTorch. Маска внимания — это бинарный тензор, указывающий позиции заполняющих индексов, чтобы модель не обращала на них внимания. Для BertTokenizer значение 1 обозначает токен, на который следует обращать внимание, а 0 — заполняющий токен. Эта маска внимания находится в словаре, возвращаемом токенизатором, под ключом “attention_mask”:
>>> padded_sequences["attention_mask"]
[[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]модели автокодирования
См. модели-энкодеры и маскированное моделирование языка
autoregressive-модели
См. каузальное моделирование языка и декодерные модели
B
backbone
Backbone — это сеть (эмбеддинги и слои), которая выводит необработанные скрытые состояния или признаки. Как правило, к ней подключается head, который принимает эти признаки на вход для формирования предсказания. Например, ViTModel является backbone без конкретного head сверху. Другие модели также могут использовать ViTModel в качестве backbone, например DPT.
C
моделирование языка с причинно-следственной связью
Задача предобучения, при которой модель читает тексты последовательно и должна предсказать следующее слово. Обычно это делается путём чтения всего предложения, но с использованием маски внутри модели для скрытия будущих токенов на определённом шаге времени.
канал
Цветные изображения состоят из некоторой комбинации значений в трёх каналах: красном, зелёном и синем (RGB), а изображения в оттенках серого имеют только один канал. В 🤗 Transformers канал может быть первым или последним измерением тензора изображения: [n_channels, height, width] или [height, width, n_channels].
связистая временна́я классификация (CTC)
Алгоритм, позволяющий модели обучаться без точного знания соответствия между входом и выходом; CTC вычисляет распределение всех возможных выходов для данного входа и выбирает наиболее вероятный из них. CTC широко используется в задачах распознавания речи, поскольку речь не всегда четко соответствует транскрипту по различным причинам, таким как различия в темпе речи говорящего.
свёртка
Тип слоя в нейронной сети, в котором входная матрица умножается поэлементно на меньшую матрицу (ядро или фильтр), а значения суммируются в новой матрице. Это называется свёрточной операцией, которая повторяется для всей входной матрицы. Каждая операция применяется к другому сегменту входной матрицы. Свёрточные нейронные сети (CNN) широко используются в компьютерном зрении.
D
DataParallel (DP)
Техника параллелизма для обучения на нескольких GPU, при которой одна и та же конфигурация реплицируется несколько раз, а каждая инстанция получает отдельный срез данных. Обработка выполняется параллельно, а все конфигурации синхронизируются в конце каждого шага обучения.
Подробнее о DataParallel.
ID входных данных декодера
Этот входной параметр характерен для моделей с архитектурой «энкодер-декодер» и содержит входные идентификаторы, которые передаются в декодер. Эти входные данные следует использовать для задач последовательность-в-последовательность, таких как перевод или суммаризация, и обычно они формируются специфическим для каждой модели образом.
Большинство моделей с архитектурой «кодировщик-декодировщик» (BART, T5) самостоятельно формируют decoder_input_ids на основе labels. В таких моделях
передача labels является предпочтительным способом организации обучения.
Проверьте документацию каждой модели, чтобы узнать, как они обрабатывают эти входные идентификаторы при обучении последовательность-в-последовательность.
модели декодера
Также известные как авторегрессионные модели, декодерные модели используют задачу предварительного обучения (называемую каузальным моделированием языка), в которой модель читает тексты последовательно и должна предсказать следующее слово. Обычно это делается путём чтения всего предложения с маской, скрывающей будущие токены на определённом шаге времени.
глубокое обучение (DL)
Алгоритмы машинного обучения, использующие нейронные сети с несколькими слоями.
E
модели-энкодеры
Также известные как модели автокодирования, модели-кодировщики принимают на вход данные (например, текст или изображения) и преобразуют их в сжатое числовое представление, называемое эмбеддингом. Часто модели-кодировщики предварительно обучаются с использованием таких методов, как masked language modeling, который маскирует части входной последовательности и заставляет модель создавать более осмысленные представления.
F
извлечение признаков
Процесс отбора и преобразования сырых данных в набор признаков, которые являются более информативными и полезными для алгоритмов машинного обучения. Некоторые примеры извлечения признаков включают преобразование сырого текста в векторные представления слов и извлечение важных признаков, таких как края или формы, из данных изображений или видео.
chunking в прямом проходе
В каждом блоке остаточного внимания в transformers слой само-внимания обычно сопровождается двумя слоями прямого распространения.
Размер промежуточного представления в слоях прямого распространения часто больше скрытого размера модели (например, для google-bert/bert-base-uncased).
Для входных данных размера [batch_size, sequence_length] память, необходимая для хранения промежуточных эмбеддингов полносвязных слоёв [batch_size, sequence_length, config.intermediate_size], может занимать значительную долю общего объёма памяти. Авторы статьи Reformer: The Efficient Transformer заметили, что поскольку вычисления не зависят от измерения sequence_length, математически эквивалентно вычислить выходные эмбеддинги обоих полносвязных слоёв [batch_size, config.hidden_size]_0, ..., [batch_size, config.hidden_size]_n по отдельности, а затем объединить их в [batch_size, sequence_length, config.hidden_size] при n = sequence_length. Такой подход увеличивает время вычислений в обмен на снижение потребления памяти, но даёт математически эквивалентный результат.
Для моделей, использующих функцию apply_chunking_to_forward(), параметр chunk_size определяет количество выходных эмбеддингов, вычисляемых параллельно, и тем самым задаёт баланс между потреблением памяти и временной сложностью. Если chunk_size установлен в 0, разбиение на блоки в прямой сети не выполняется.
дообученные модели
Дообучение — это форма трансферного обучения, при которой берётся предобученная модель, её веса замораживаются, а выходной слой заменяется на новый модельный головной блок. Головной блок модели обучается на вашей целевой выборке.
Подробнее см. в учебном руководстве Доработка предобученной модели, а также узнайте, как дорабатывать модели с помощью 🤗 Transformers.
H
head
Модельная головка (model head) — это последний слой нейросети, который принимает необработанные скрытые состояния и проецирует их в другое пространство размерности. Для каждой задачи существует своя модельная головка. Например:
- GPT2ForSequenceClassification — это головная часть для классификации последовательностей, представляющая собой линейный слой, добавленный поверх базовой модели GPT2Model.
- ViTForImageClassification — это головная часть для классификации изображений: линейный слой, наложенный на финальное скрытое состояние токена
CLS, поверх базовой модели ViTModel. - Wav2Vec2ForCTC — это головная часть модели языкового моделирования с CTC поверх базовой модели Wav2Vec2Model.
I
image patch
Модели Vision-based Transformers разбивают изображение на более мелкие патчи, которые линейно встраиваются, а затем передаются в модель в виде последовательности. Вы можете найти patch_size — или разрешение — модели в её конфигурации.
inference
Inference — это процесс оценки модели на новых данных после завершения обучения. Ознакомьтесь с учебником Пайплайн для inference, чтобы узнать, как выполнять inference с помощью 🤗 Transformers.
идентификаторы входных данных
Входные идентификаторы (input ids) часто являются единственным обязательным параметром, который нужно передать модели в качестве входа. Это индексы токенов, то есть числовые представления токенов, из которых формируются последовательности, используемые моделью на входе.
Каждый токенизатор работает по-своему, но базовый механизм остаётся неизменным. Ниже приведён пример с использованием токенизатора BERT, который является токенизатором WordPiece:
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence = "A Titan RTX has 24GB of VRAM"Токенаизер отвечает за разбиение последовательности на токены, доступные в словаре токенаизера.
>>> tokenized_sequence = tokenizer.tokenize(sequence)Токены представляют собой либо слова, либо подслова. Например, «VRAM» не входило в словарь модели, поэтому оно было разбито на «V», «RA» и «M». Чтобы показать, что эти токены не являются отдельными словами, а представляют собой части одного слова, для «RA» и «M» добавляется префикс из двух символов решётки:
>>> print(tokenized_sequence)
['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M']Затем эти токены можно преобразовать в идентификаторы, понятные модели. Это можно сделать, передав предложение непосредственно в токенизатор, который использует реализацию на Rust для 🤗 Tokenizers для максимальной производительности.
>>> inputs = tokenizer(sequence)Токенизатор возвращает словарь со всеми аргументами, необходимыми для корректной работы соответствующей модели. Индексы токенов находятся под ключом input_ids:
>>> encoded_sequence = inputs["input_ids"]
>>> print(encoded_sequence)
[101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102]Обратите внимание, что токенизатор автоматически добавляет «специальные токены» (если соответствующая модель использует их), которые представляют собой специальные идентификаторы, применяемые моделью в некоторых случаях.
Если мы декодируем предыдущую последовательность идентификаторов,
>>> decoded_sequence = tokenizer.decode(encoded_sequence)мы увидим
>>> print(decoded_sequence)
[CLS] A Titan RTX has 24GB of VRAM [SEP]поскольку именно так модель BertModel ожидает получать входные данные.
L
labels
Аргумент labels является необязательным и может быть передан, чтобы модель самостоятельно вычисляла потерю. Эти метки должны представлять собой ожидаемое предсказание модели: она использует стандартную функцию потерь для вычисления расхождения между своими предсказаниями и ожидаемым значением (меткой).
Эти метки различаются в зависимости от типа выходного слоя модели, например:
- Для моделей классификации последовательностей (BertForSequenceClassification) модель ожидает тензор размерности
(batch_size), где каждое значение в батче соответствует ожидаемой метке для всей последовательности. - Для моделей классификации токенов (BertForTokenClassification) модель ожидает тензор размерности
(batch_size, seq_length), где каждое значение соответствует ожидаемой метке для каждого отдельного токена. - Для моделирования языка с маскированием (BertForMaskedLM) модель ожидает тензор размерности
(batch_size, seq_length), где каждое значение соответствует ожидаемой метке для каждого отдельного токена: меткой для замаскированного токена является его токен-ID, а для остальных токенов используются значения, которые игнорируются (обычно -100). - Для задач последовательность-в-последовательность (BartForConditionalGeneration, MBartForConditionalGeneration) модель ожидает тензор размерности
(batch_size, tgt_seq_length), где каждое значение соответствует целевой последовательности, связанной с каждой входной последовательностью. Во время обучения как BART, так и T5 автоматически формируют необходимыеdecoder_input_idsи маски внимания декодера. Обычно их не нужно передавать вручную. Это не относится к моделям, использующим фреймворк Encoder-Decoder. - Для моделей классификации изображений (ViTForImageClassification) модель ожидает тензор размерности
(batch_size), где каждое значение в батче соответствует ожидаемой метке для каждого отдельного изображения. - Для моделей семантической сегментации (SegformerForSemanticSegmentation) модель ожидает тензор размерности
(batch_size, height, width), где каждое значение в батче соответствует ожидаемой метке для каждого отдельного пикселя. - Для моделей обнаружения объектов (DetrForObjectDetection) модель ожидает список словарей с ключами
class_labelsиboxes, где каждое значение в батче соответствует ожидаемой метке и количеству ограничивающих прямоугольников для каждого отдельного изображения. - Для моделей автоматического распознавания речи (Wav2Vec2ForCTC) модель ожидает тензор размерности
(batch_size, target_length), где каждое значение соответствует ожидаемой метке для каждого отдельного токена.
Метки для каждой модели могут отличаться, поэтому обязательно проверяйте документацию конкретной модели, чтобы узнать подробности о её метках!
Базовые модели (BertModel) не принимают метки, поскольку это базовые трансформерные модели, которые просто выводят признаки.
большие языковые модели (LLM)
Общее название, обозначающее языковые модели на основе трансформеров (GPT-3, BLOOM, OPT), обученные на большом объёме данных. Как правило, такие модели также имеют большое количество обучаемых параметров (например, 175 миллиардов для GPT-3).
M
маскированное моделирование языка (MLM)
Задача предобучения, в которой модель видит повреждённую версию текста, обычно создаваемую путём случайного замаскирования некоторых токенов, и должна предсказать исходный текст.
мультимодальный
Задача, объединяющая тексты с другими типами входных данных (например, изображениями).
N
Генерация естественного языка (NLG)
Все задачи, связанные с генерацией текста (например, Write With Transformers, перевод).
Обработка естественного языка (NLP)
Универсальный способ сказать «работать с текстами».
Понимание естественного языка (NLU)
Все задачи, связанные с пониманием того, что содержится в тексте (например, классификация всего текста или отдельных слов).
P
pipeline
Пайплайн в 🤗 Transformers — это абстракция, описывающая последовательность шагов, выполняемых в определённом порядке для предобработки и трансформации данных с последующим возвратом предсказания от модели. Среди примеров этапов, входящих в состав пайплайна, можно выделить предобработку данных, извлечение признаков и нормализацию.
Подробнее см. в разделе Пайплайны для инференса.
PipelineParallel (PP)
Техника параллелизма, при которой модель разделяется по вертикали (на уровне слоёв) между несколькими GPU, так что на одном GPU размещается только один или несколько слоёв модели. Каждое GPU параллельно обрабатывает различные этапы конвейера, работая с небольшой частью батча. Подробнее о PipelineParallel.
значения пикселей
Тензор с числовыми представлениями изображения, передаваемый в модель. Значения пикселей имеют форму [batch_size, num_channels, height, width] и генерируются процессором изображений.
пулинг
Операция, сжимающая матрицу до матрицы меньшего размера путём взятия максимального или среднего значения по пулингуемым размерам. Слои пулинга часто размещаются между свёрточными слоями для уменьшения разрешения признаков.
идентификаторы позиций
В отличие от RNN, в которых позиция каждого токена заложена в самой архитектуре, трансформеры не знают о позиции каждого токена. Поэтому модель использует идентификаторы позиций (position_ids), чтобы определять позицию каждого токена в списке токенов.
Это необязательный параметр. Если в модель не передаются position_ids, идентификаторы автоматически создаются как абсолютные позиционные эмбеддинги.
Абсолютные позиционные эмбеддинги выбираются в диапазоне [0, config.max_position_embeddings - 1]. Некоторые модели используют другие типы позиционных эмбеддингов, например, синусоидальные позиционные эмбеддинги или эмбеддинги относительных позиций.
предобработка
Задача подготовки сырых данных в формат, который легко обрабатывается моделями машинного обучения. Например, текст обычно предобрабатывается с помощью токенизации. Чтобы лучше понять, как выглядит предобработка для других типов входных данных, ознакомьтесь с учебником Preprocess.
предобученная модель
Модель, прошедшая предварительное обучение на определённых данных (например, на всём содержимом Wikipedia). Методы предварительного обучения включают самообучаемую целевую функцию, которая может заключаться в чтении текста и попытке предсказать следующее слово (см. causal language modeling) или в маскировании некоторых слов и попытке их предсказать (см. masked language modeling).
Модели для распознавания речи и компьютерного зрения имеют собственные цели предобучения. Например, Wav2Vec2 — это модель для распознавания речи, предобученная на контрастивной задаче, которая требует от модели определить «истинное» речевое представление из набора «ложных» речевых представлений. С другой стороны, BEiT — это модель компьютерного зрения, предобученная на задаче моделирования маскированных изображений, которая маскирует некоторые патчи изображения и требует от модели предсказать маскированные патчи (аналогично цели моделирования маскированного языка).
R
рекуррентная нейронная сеть (RNN)
Тип модели, который использует цикл по слоям для обработки текстов.
обучение представлений
Подобласть машинного обучения, сосредоточенная на обучении осмысленных представлений сырых данных. К числу методов обучения представлений относятся, например, векторные представления слов (word embeddings), автоэнкодеры и генеративно-состязательные сети (GAN).
S
частота дискретизации
Измерение в герцах, показывающее количество выборок (аудиосигнала), снимаемых в секунду. Частота дискретизации является результатом дискретизации непрерывного сигнала, такого как речь.
self-attention
Каждый элемент входных данных определяет, на какие другие элементы входных данных ему следует обращать внимание.
обучение с самоконтролем
Категория методов машинного обучения, в которой модель формирует собственную целевую функцию обучения на основе размеченных данных. Она отличается от обучения без учителя и обучения с учителем тем, что процесс обучения контролируется, но не явно со стороны пользователя.
Один из примеров обучения с самоконтролем — маскированное моделирование языка, при котором модели передаются предложения, в которых удалена часть токенов, и она учится предсказывать отсутствующие токены.
полунепосредственное обучение
Широкая категория методов обучения машинного обучения, использующих небольшое количество размеченных данных вместе с большим количеством неразмеченных данных для повышения точности модели, в отличие от обучения с учителем и обучения без учителя.
Примером подхода к обучению с частичным размечением является «самообучение», при котором модель обучается на размеченных данных, а затем используется для предсказаний на неразмеченных данных. Та часть неразмеченных данных, для которой модель выдает предсказания с наибольшей уверенностью, добавляется в размеченный набор данных и используется для повторного обучения модели.
sequence-to-sequence (seq2seq)
Модели, генерирующие новую последовательность на основе входных данных, например модели перевода или суммаризации (такие как Bart или T5).
Sharded DDP
Другое название для базового концепта ZeRO, используемого в различных других реализациях ZeRO.
шаг
В свёртке или пулинге шаг (stride) — это расстояние, на которое ядро перемещается по матрице. Шаг 1 означает, что ядро сдвигается на один пиксель за раз, а шаг 2 — что ядро сдвигается на два пикселя за раз.
обучение с учителем
Форма обучения модели, при которой размеченные данные используются напрямую для корректировки и настройки работы модели. Данные подаются на вход обучаемой модели, а её предсказания сравниваются с известными метками. Модель обновляет свои веса на основе степени неточности предсказаний, и процесс повторяется для оптимизации производительности модели.
T
Параллелизм тензоров (TP)
Техника параллелизма для обучения на нескольких GPU, при которой каждый тензор разбивается на несколько фрагментов, так что вместо размещения всего тензора на одном GPU каждый фрагмент размещается на своём выделенном GPU. Фрагменты обрабатываются отдельно и параллельно на разных GPU, а результаты синхронизируются в конце шага обработки. Это то, что иногда называют горизонтальным параллелизмом, поскольку разбиение происходит на горизонтальном уровне. Подробнее о Tensor Parallelism — здесь.
токен
Часть предложения, обычно слово, но также может быть субсловом (необычные слова часто разбиваются на субслова) или знаком препинания.
идентификаторы типов токенов
Некоторые модели предназначены для классификации пар предложений или ответа на вопросы.
Для этого необходимо объединить две различные последовательности в одной записи «input_ids», что обычно выполняется с помощью специальных токенов, таких как токен классификатора ([CLS]) и токен-разделитель ([SEP]). Например, модель BERT формирует вход из двух последовательностей следующим образом:
>>> # [CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP]Мы можем использовать наш токенизатор для автоматической генерации такого предложения, передав две последовательности в tokenizer в качестве двух аргументов (а не списка, как раньше) следующим образом:
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence_a = "HuggingFace is based in NYC"
>>> sequence_b = "Where is HuggingFace based?"
>>> encoded_dict = tokenizer(sequence_a, sequence_b)
>>> decoded = tokenizer.decode(encoded_dict["input_ids"])который вернёт:
>>> print(decoded)
[CLS] HuggingFace is based in NYC [SEP] Where is HuggingFace based? [SEP]Этого достаточно для некоторых моделей, чтобы понять, где заканчивается одна последовательность и начинается другая. Однако другие модели, такие как BERT, также используют идентификаторы типов токенов (также называемые идентификаторами сегментов). Они представлены в виде бинарной маски, идентифицирующей два типа последовательностей в модели.
Токенизатор возвращает эту маску в качестве записи “token_type_ids”:
>>> encoded_dict["token_type_ids"]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]В первой последовательности, «контексте», используемом для вопроса, все токены представлены числом 0, тогда как во второй последовательности, соответствующей «вопросу», все токены представлены числом 1.
Некоторые модели, например XLNetModel, используют дополнительный токен, обозначаемый числом 2.
transfer learning
Техника, которая предполагает взятие предобученной модели и её адаптацию под набор данных, специфичный для вашей задачи. Вместо обучения модели с нуля вы можете использовать знания, полученные из существующей модели, в качестве отправной точки. Это ускоряет процесс обучения и снижает объём данных, необходимых для обучения.
transformer
Архитектура модели глубокого обучения на основе механизма self-attention.
U
обучение без учителя
Форма обучения модели, при которой предоставленные модели данные не размечены. Методы обучения без учителя используют статистическую информацию о распределении данных для поиска закономерностей, полезных для решаемой задачи.
Z
Zero Redundancy Optimizer (ZeRO)
Техника параллелизма, выполняющая шардирование тензоров, несколько похожее на TensorParallel, за исключением того, что весь тензор восстанавливается к моменту вычисления прямого или обратного прохода, поэтому модель не нужно модифицировать. Этот метод также поддерживает различные техники выгрузки для компенсации ограниченной памяти GPU. Подробнее о ZeRO — здесь.
Update on GitHub