용어집
용어집 (Glossary)
이 용어집은 일반적인 머신러닝 및 🤗 Transformers 용어를 정의해서 문서를 더 쉽게 이해할 수 있도록 도와줘요.
출처: 문서
본문
A
attention mask
attention mask는 시퀀스를 함께 배칭할 때 사용되는 선택적 인자예요.
이 인자는 모델에 어떤 토큰에 attention을 기울여야 하는지, 어떤 토큰에 기울이지 말아야 하는지를 알려줘요.
예를 들어, 다음 두 시퀀스를 생각해 봐요:
>>> 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)
그래서 이들을 그대로 같은 텐서에 넣을 수 없어요. 첫 번째 시퀀스를 두 번째 길이까지 패딩하거나, 두 번째 시퀀스를 첫 번째 길이로 트렁케이션해야 해요.
첫 번째 경우에는 ID 리스트가 패딩 인덱스로 확장돼요. 리스트를 tokenizer에 전달하고 이렇게 패딩하도록 요청할 수 있어요:
>>> padded_sequences = tokenizer([sequence_a, sequence_b], padding=True)
첫 번째 문장의 오른쪽에 0이 추가되어 두 번째 문장과 같은 길이로 만들어진 것을 볼 수 있어요:
>>> 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에서 텐서로 변환할 수 있어요. attention mask는 패딩 인덱스의 위치를 나타내는 이진 텐서여서 모델이 그 위치에 attention을 기울이지 않게 해요. BertTokenizer의 경우 1은 attention을 기울여야 할 값을, 0은 패딩된 값을 나타내요. 이 attention mask는 tokenizer가 반환하는 사전에 "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]]
autoencoding models
encoder models와 masked language modeling을 참고하세요.
autoregressive models
causal language modeling과 decoder models을 참고하세요.
B
backbone
backbone은 원시 hidden states 또는 피처를 출력하는 네트워크(임베딩과 레이어)예요. 보통 피처를 입력으로 받아 예측을 수행하는 head에 연결돼요. 예를 들어 ViTModel은 위에 특정 head가 없는 backbone이에요. DPT 같은 다른 모델들도 backbone으로 ViTModel을 사용할 수 있어요.
C
causal language modeling
모델이 텍스트를 순서대로 읽고 다음 단어를 예측해야 하는 사전 학습 작업이에요. 보통 전체 문장을 읽지만 모델 안에서 마스크를 사용해서 특정 시간 단계에서 미래 토큰을 숨겨요.
channel
컬러 이미지는 세 채널(빨강, 초록, 파랑, RGB)의 값 조합으로 이루어지고, 그레이스케일 이미지는 채널이 하나뿐이에요. 🤗 Transformers에서 채널은 이미지 텐서의 첫 번째 또는 마지막 차원일 수 있어요: [n_channels, height, width] 또는 [height, width, n_channels].
connectionist temporal classification (CTC)
입력과 출력이 정확히 어떻게 정렬되는지 모르는 상태에서도 모델이 학습할 수 있게 해주는 알고리즘이에요. CTC는 주어진 입력에 대한 모든 가능한 출력의 분포를 계산하고 그중 가장 가능성 높은 출력을 선택해요. 화자가 서로 다른 발화 속도를 가지는 등 다양한 이유로 음성이 전사(transcript)와 깨끗하게 정렬되지 않는 경우가 많기 때문에 CTC는 음성 인식 작업에서 흔히 사용돼요.
convolution
신경망의 레이어 유형으로, 입력 행렬에 더 작은 행렬(kernel 또는 filter)을 요소별로 곱하고 값을 새 행렬로 합산해요. 이는 컨볼루션 연산이라고 하며 입력 행렬 전체에 걸쳐 반복돼요. 각 연산은 입력 행렬의 다른 세그먼트에 적용돼요. 컨볼루셔널 신경망(CNN)은 컴퓨터 비전에서 흔히 사용돼요.
D
DataParallel (DP)
여러 GPU에서 학습하기 위한 병렬화 기법으로, 동일한 설정을 여러 번 복제하고 각 인스턴스가 별개의 데이터 조각(slice)을 받아요. 처리는 병렬로 수행되고 모든 설정은 각 학습 단계가 끝날 때 동기화돼요.
DataParallel이 어떻게 동작하는지 더 알아보려면 여기를 참고하세요.
decoder input IDs
이 입력은 인코더-디코더 모델에 특화되어 있으며, 디코더에 공급될 input IDs를 담아요. 이 입력들은 번역이나 요약 같은 sequence to sequence 작업에 사용해야 하며, 보통 각 모델에 특화된 방식으로 만들어져요.
대부분의 인코더-디코더 모델(BART, T5)은 label로부터 스스로 decoder_input_ids를 만들어요. 그런 모델에서는 학습을 위해 labels를 전달하는 것이 선호되는 방식이에요.
각 모델이 sequence to sequence 학습에서 이 입력 IDs를 어떻게 다루는지는 각 모델 문서를 확인하세요.
decoder models
자기회귀 모델(autoregressive models)이라고도 불리며, 모델이 텍스트를 순서대로 읽고 다음 단어를 예측해야 하는 사전 학습 작업(causal language modeling이라고 함)을 포함해요. 보통 특정 시간 단계에서 미래 토큰을 숨기는 마스크로 전체 문장을 읽는 방식으로 수행돼요.
deep learning (DL)
여러 레이어를 가진 신경망을 사용하는 머신러닝 알고리즘.
E
encoder models
autoencoding 모델이라고도 알려져 있으며, encoder models는 입력(텍스트나 이미지 같은)을 받아 임베딩이라고 하는 압축된 수치 표현으로 변환해요. encoder models는 종종 masked language modeling 같은 기법으로 사전 학습되는데, 이는 입력 시퀀스의 일부를 마스킹하고 모델로 하여금 더 의미 있는 표현을 만들도록 강제해요.
F
feature extraction
머신러닝 알고리즘에 더 유용하고 유익한 피처 세트로 원시 데이터를 선택하고 변환하는 과정이에요. 피처 추출의 몇 가지 예로는 원시 텍스트를 단어 임베딩으로 변환하고, 이미지/비디오 데이터에서 가장자리나 모양 같은 중요한 피처를 추출하는 것이 있어요.
feed forward chunking
트랜스포머의 각 잔차 attention 블록에서 self-attention 레이어 다음에는 보통 2개의 feed forward 레이어가 이어져요. feed forward 레이어의 중간 임베딩 크기는 종종 모델의 hidden size보다 커요 (예: google-bert/bert-base-uncased).
크기 [batch_size, sequence_length]의 입력에 대해 중간 feed forward 임베딩 [batch_size, sequence_length, config.intermediate_size]을 저장하는 데 필요한 메모리는 메모리 사용량의 큰 부분을 차지할 수 있어요. Reformer: The Efficient Transformer의 저자들은 계산이 sequence_length 차원과 독립적이므로, 두 feed forward 레이어의 출력 임베딩 [batch_size, config.hidden_size]_0, ..., [batch_size, config.hidden_size]_n을 개별적으로 계산하고 나중에 n = sequence_length로 [batch_size, sequence_length, config.hidden_size]에 이어붙이는 것이 수학적으로 동등하다는 것을 알아냈어요. 이는 계산 시간 증가와 메모리 사용 감소를 맞바꾸지만 수학적으로 동등한 결과를 내요.
apply_chunking_to_forward() 함수를 사용하는 모델에서 chunk_size는 병렬로 계산되는 출력 임베딩의 수를 정의하므로 메모리와 시간 복잡도 간의 트레이드오프를 정의해요. chunk_size가 0으로 설정되면 feed forward chunking이 수행되지 않아요.
finetuned models
파인튜닝은 사전 학습된 모델을 가져와 가중치를 고정하고 출력 레이어를 새로 추가된 모델 헤드로 교체하는 전이 학습(transfer learning)의 한 형태예요. 모델 헤드는 타깃 데이터셋에서 학습돼요.
자세한 내용은 Fine-tune a pretrained model 튜토리얼을 참고하고, 🤗 Transformers로 모델을 파인튜닝하는 방법을 배워 보세요.
H
head
모델 헤드는 원시 hidden states를 받아 다른 차원으로 투영하는 신경망의 마지막 레이어를 의미해요. 작업마다 다른 모델 헤드가 있어요. 예를 들어:
- GPT2ForSequenceClassification은 기본 GPT2Model 위에 있는 시퀀스 분류 헤드(linear 레이어)예요.
- ViTForImageClassification은 기본 ViTModel 위에 있는 이미지 분류 헤드(
CLS토큰의 최종 hidden state 위의 linear 레이어)예요. - Wav2Vec2ForCTC는 기본 Wav2Vec2Model 위에 CTC가 있는 언어 모델링 헤드예요.
I
image patch
비전 기반 Transformers 모델은 이미지를 더 작은 패치로 분할해서 선형 임베딩한 다음 시퀀스로 모델에 전달해요. 모델의 patch_size(또는 해상도)는 모델 구성에서 찾을 수 있어요.
inference
추론은 학습이 끝난 후 새 데이터에서 모델을 평가하는 과정이에요. 🤗 Transformers로 추론을 수행하는 방법을 배우려면 Pipeline for inference 튜토리얼을 참고하세요.
input IDs
input ids는 종종 모델에 입력으로 전달하는 유일한 필수 파라미터인 경우가 많아요. 이들은 토큰 인덱스로, 모델이 입력으로 사용할 시퀀스를 구성하는 토큰의 수치 표현이에요.
각 tokenizer는 다르게 작동하지만 기본 메커니즘은 동일해요. WordPiece tokenizer인 BERT tokenizer를 사용한 예시는 다음과 같아요:
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence = "A Titan RTX has 24GB of VRAM"
tokenizer는 시퀀스를 tokenizer 어휘에 있는 토큰으로 분할하는 역할을 해요.
>>> tokenized_sequence = tokenizer.tokenize(sequence)
토큰은 단어 또는 하위 단어(subword)예요. 예를 들어 여기서 "VRAM"은 모델 어휘에 없어서 "V", "RA", "M"으로 분할됐어요. 이 토큰들이 별개의 단어가 아니라 같은 단어의 일부임을 나타내기 위해 "RA"와 "M"에는 이중 해시 접두사가 추가돼요:
>>> print(tokenized_sequence)
['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M']
이 토큰들은 모델이 이해할 수 있는 ID로 변환될 수 있어요. 이는 문장을 tokenizer에 직접 전달해서 할 수 있는데, tokenizer는 최고 성능을 위해 🤗 Tokenizers의 Rust 구현을 활용해요.
>>> inputs = tokenizer(sequence)
tokenizer는 해당 모델이 제대로 작동하는 데 필요한 모든 인자를 담은 사전을 반환해요. 토큰 인덱스는 input_ids 키 아래에 있어요:
>>> encoded_sequence = inputs["input_ids"]
>>> print(encoded_sequence)
[101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102]
tokenizer는 (연관된 모델이 의존한다면) "특수 토큰"을 자동으로 추가하는데, 이는 모델이 때때로 사용하는 특수 ID예요.
이전 ID 시퀀스를 디코딩하면,
>>> decoded_sequence = tokenizer.decode(encoded_sequence)
이렇게 볼 수 있어요:
>>> print(decoded_sequence)
[CLS] A Titan RTX has 24GB of VRAM [SEP]
왜냐하면 이것이 BertModel이 입력을 기대하는 방식이기 때문이에요.
L
labels
labels는 모델이 스스로 loss를 계산할 수 있도록 전달할 수 있는 선택적 인자예요. 이 labels는 모델의 기대 예측이어야 해요: 모델은 표준 loss를 사용해서 예측과 기대값(레이블) 사이의 loss를 계산해요.
이 labels는 모델 헤드에 따라 다르며, 예를 들어:
- 시퀀스 분류 모델(BertForSequenceClassification)의 경우 모델은
(batch_size)차원의 텐서를 기대하며, 배치의 각 값은 전체 시퀀스의 기대 레이블에 해당해요. - 토큰 분류 모델(BertForTokenClassification)의 경우 모델은
(batch_size, seq_length)차원의 텐서를 기대하며, 각 값은 개별 토큰의 기대 레이블에 해당해요. - masked language modeling(BertForMaskedLM)의 경우 모델은
(batch_size, seq_length)차원의 텐서를 기대하며, 각 값은 개별 토큰의 기대 레이블에 해당해요: 레이블은 마스킹된 토큰의 토큰 ID이고, 나머지는 무시할 값(보통 -100)이에요. - sequence to sequence 작업(BartForConditionalGeneration, MBartForConditionalGeneration)의 경우 모델은
(batch_size, tgt_seq_length)차원의 텐서를 기대하며, 각 값은 각 입력 시퀀스에 연관된 타깃 시퀀스에 해당해요. 학습 중 BART와 T5는 둘 다 적절한decoder_input_ids와 decoder attention mask를 내부에서 만들 거예요. 보통 이들을 별도로 제공할 필요는 없어요. 이는 Encoder-Decoder 프레임워크를 활용하는 모델에는 적용되지 않아요. - 이미지 분류 모델(ViTForImageClassification)의 경우 모델은
(batch_size)차원의 텐서를 기대하며, 배치의 각 값은 개별 이미지의 기대 레이블에 해당해요. - 의미론적 분할(semantic segmentation) 모델(SegformerForSemanticSegmentation)의 경우 모델은
(batch_size, height, width)차원의 텐서를 기대하며, 배치의 각 값은 개별 픽셀의 기대 레이블에 해당해요. - 객체 감지 모델(DetrForObjectDetection)의 경우 모델은
class_labels와boxes키가 있는 사전 목록을 기대하며, 배치의 각 값은 개별 이미지의 기대 레이블과 경계 상자(bounding box) 수에 해당해요. - 자동 음성 인식 모델(Wav2Vec2ForCTC)의 경우 모델은
(batch_size, target_length)차원의 텐서를 기대하며, 각 값은 개별 토큰의 기대 레이블에 해당해요.
각 모델의 labels는 다를 수 있으므로 특정 labels에 대한 더 많은 정보는 항상 각 모델의 문서를 확인하세요!
기본 모델(BertModel)은 labels를 받지 않아요. 이들은 단순히 피처를 출력하는 기본 transformer 모델이기 때문이에요.
large language models (LLM)
대량의 데이터로 학습된 transformer 언어 모델(GPT-3, BLOOM, OPT)을 가리키는 일반적인 용어예요. 이 모델들은 또한 많은 수의 학습 가능한 파라미터를 가지는 경향이 있어요 (예: GPT-3는 1,750억).
M
masked language modeling (MLM)
모델이 텍스트의 손상된 버전을 보는 사전 학습 작업으로, 보통 일부 토큰을 무작위로 마스킹하고 원래 텍스트를 예측해야 해요.
multimodal
텍스트를 다른 종류의 입력(예를 들어 이미지)과 결합하는 작업.
N
Natural language generation (NLG)
텍스트 생성과 관련된 모든 작업 (예: Write With Transformers, 번역).
Natural language processing (NLP)
"텍스트를 다룬다"는 것을 말하는 일반적인 방식.
Natural language understanding (NLU)
텍스트에 무엇이 있는지 이해하는 것과 관련된 모든 작업 (예: 전체 텍스트, 개별 단어 분류).
P
pipeline
🤗 Transformers의 pipeline은 데이터를 전처리하고 변환하며 모델에서 예측을 반환하기 위해 특정 순서로 실행되는 일련의 단계를 가리키는 추상화예요. pipeline에서 찾을 수 있는 몇 가지 예시 단계로는 데이터 전처리, 피처 추출, 정규화가 있어요.
자세한 내용은 Pipelines for inference을 참고하세요.
PipelineParallel (PP)
모델을 여러 GPU에 걸쳐 수직으로(레이어 수준) 분할하는 병렬화 기법으로, 모델의 한 레이어 또는 여러 레이어만 단일 GPU에 배치돼요. 각 GPU는 파이프라인의 서로 다른 단계를 병렬로 처리하고 배치의 작은 청크를 작업해요. PipelineParallel이 어떻게 동작하는지 더 알아보려면 여기를 참고하세요.
pixel values
모델에 전달되는 이미지의 수치 표현 텐서예요. pixel values는 [batch_size, num_channels, height, width] 형태를 가지며, 이미지 프로세서에서 생성돼요.
pooling
행렬을 더 작은 행렬로 줄이는 연산으로, 풀링된 차원의 최댓값이나 평균을 취해서 수행돼요. 풀링 레이어는 보통 컨볼루션 레이어 사이에 있어서 피처 표현을 다운샘플링해요.
position IDs
RNN은 각 토큰의 위치가 내부에 임베딩되어 있지만, transformer는 각 토큰의 위치를 인식하지 못해요. 따라서 position IDs(position_ids)는 모델이 토큰 목록에서 각 토큰의 위치를 식별하는 데 사용해요.
이는 선택적 파라미터예요. 모델에 position_ids를 전달하지 않으면, 절대 위치 임베딩(absolute positional embeddings)으로 자동 생성돼요.
절대 위치 임베딩은 [0, config.max_position_embeddings - 1] 범위에서 선택돼요. 일부 모델은 사인파 위치 임베딩이나 상대 위치 임베딩 같은 다른 유형의 위치 임베딩을 사용해요.
preprocessing
머신러닝 모델이 쉽게 소비할 수 있는 형식으로 원시 데이터를 준비하는 작업이에요. 예를 들어 텍스트는 일반적으로 토크나이제이션으로 전처리돼요. 다른 입력 유형에서 전처리가 어떻게 이루어지는지 더 잘 이해하려면 Preprocess 튜토리얼을 확인해 보세요.
pretrained model
일부 데이터(예를 들어 전체 위키백과)로 사전 학습된 모델이에요. 사전 학습 방법은 자기 지도(self-supervised) 목적을 포함하는데, 이는 텍스트를 읽고 다음 단어를 예측하려 하거나(causal language modeling 참조) 일부 단어를 마스킹하고 이를 예측하려 하는 것(masked language modeling 참조)일 수 있어요.
음성과 비전 모델은 자신만의 사전 학습 목적을 가져요. 예를 들어 Wav2Vec2는 일련의 "거짓" 음성 표현 중에서 "진짜" 음성 표현을 식별해야 하는 대조적(contrastive) 작업으로 사전 학습된 음성 모델이에요. 반면 BEiT는 일부 이미지 패치를 마스킹하고 마스킹된 패치를 예측해야 하는 masked image modeling 작업으로 사전 학습된 비전 모델이에요 (masked language modeling 목적과 유사).
R
recurrent neural network (RNN)
레이어에 대해 루프를 사용해서 텍스트를 처리하는 모델 유형.
representation learning
원시 데이터의 의미 있는 표현을 학습하는 데 초점을 맞춘 머신러닝의 하위 분야예요. 표현 학습 기법의 예로는 단어 임베딩, autoencoder, Generative Adversarial Networks (GANs)이 있어요.
S
sampling rate
초당 취하는 샘플(오디오 신호) 수를 헤르츠로 측정한 값이에요. 샘플링 레이트는 음성 같은 연속 신호를 이산화한 결과예요.
self-attention
입력의 각 요소가 입력의 다른 어떤 요소에 attention을 기울여야 하는지 알아내는 것.
self-supervised learning
모델이 레이블 없는 데이터에서 자신만의 학습 목적을 만드는 머신러닝 기법 범주예요. 학습 과정이 지도(supervised)되지만 사용자로부터 명시적으로 지도되지 않는다는 점에서 unsupervised learning 및 supervised learning과 달라요.
self-supervised learning의 한 예는 masked language modeling으로, 토큰 일부가 제거된 문장을 모델에 전달하고 빠진 토큰을 예측하도록 학습해요.
semi-supervised learning
supervised learning 및 unsupervised learning과 달리, 소량의 레이블된 데이터와 더 많은 양의 레이블 없는 데이터를 활용해서 모델의 정확도를 높이는 광범위한 머신러닝 학습 기법 범주예요.
semi-supervised learning 접근법의 예로는 "self-training"이 있는데, 모델을 레이블된 데이터로 학습한 다음 레이블 없는 데이터에 대한 예측을 수행하는 데 사용해요. 모델이 가장 높은 신뢰도로 예측하는 레이블 없는 데이터의 일부가 레이블된 데이터셋에 추가되어 모델을 재학습하는 데 사용돼요.
sequence-to-sequence (seq2seq)
입력에서 새 시퀀스를 생성하는 모델, 예를 들어 번역 모델이나 요약 모델(Bart 또는 T5 같은).
Sharded DDP
다양한 다른 ZeRO 구현에서 사용되는 기초 ZeRO 개념의 다른 이름.
stride
convolution 또는 pooling에서 stride는 행렬에 걸쳐 kernel이 이동하는 거리를 의미해요. stride 1은 kernel이 한 번에 한 픽셀씩 이동함을 의미하고, stride 2는 kernel이 한 번에 두 픽셀씩 이동함을 의미해요.
supervised learning
레이블된 데이터를 직접 사용해서 모델 성능을 교정하고 지시하는 모델 학습의 한 형태예요. 데이터가 학습 중인 모델에 공급되고, 예측은 알려진 레이블과 비교돼요. 모델은 예측이 얼마나 틀렸는지에 따라 가중치를 업데이트하고 이 과정이 반복되어 모델 성능을 최적화해요.
T
Tensor Parallelism (TP)
여러 GPU에서 학습하기 위한 병렬화 기법으로, 각 텐서를 여러 청크로 분할해서 전체 텐서가 단일 GPU에 있지 않고 각 텐서 샤드가 지정된 GPU에 있게 해요. 샤드들은 서로 다른 GPU에서 병렬로 별도 처리되고 결과는 처리 단계 끝에 동기화돼요. 분할이 수평 수준에서 일어나기 때문에 때로 가로 병렬(horizontal parallelism)이라고 불려요. Tensor Parallelism에 대해 더 알아보려면 여기를 참고하세요.
token
문장의 일부로, 보통 단어이지만 하위 단어(흔하지 않은 단어는 종종 하위 단어로 분할됨)나 문장 부호 기호일 수도 있어요.
token type IDs
일부 모델의 목적은 문장 쌍에 대한 분류나 질의응답(question answering)을 수행하는 것이에요.
이들은 두 개의 서로 다른 시퀀스가 단일 "input_ids" 항목으로 결합되어야 하는데, 보통 분류기([CLS])와 구분자([SEP]) 토큰 같은 특수 토큰의 도움으로 수행돼요. 예를 들어 BERT 모델은 두 시퀀스 입력을 이렇게 만드네요:
>>> # [CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP]
두 시퀀스를 (이전처럼 리스트가 아니라) 두 인자로 tokenizer에 전달하면 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(세그먼트 IDs라고도 함)도 사용해요. 이들은 모델에서 두 유형의 시퀀스를 식별하는 이진 마스크로 표현돼요.
tokenizer는 이 마스크를 "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
unsupervised learning
모델에 제공되는 데이터가 레이블되지 않은 모델 학습의 한 형태예요. 비지도 학습 기법은 데이터 분포의 통계적 정보를 활용해서 당면한 작업에 유용한 패턴을 찾아요.
Z
Zero Redundancy Optimizer (ZeRO)
TensorParallel과 다소 유사하게 텐서의 샤딩을 수행하는 병렬화 기법이지만, forward 또는 backward 계산을 위해 전체 텐서가 제때 다시 재구성되므로 모델을 수정할 필요가 없어요. 이 방법은 제한된 GPU 메모리를 보완하기 위한 다양한 offloading 기법도 지원해요. ZeRO에 대해 더 알아보려면 여기를 참고하세요.
더 알아보기 (Learn more)
- 각 모델의 문서에서 특정 input IDs, labels, 토크나이제이션 방식에 대한 자세한 내용을 확인해 주세요.