헬창 개발자

허깅페이스 자주 사용하는 파라미터 본문

공부방

허깅페이스 자주 사용하는 파라미터

찬배 2024. 8. 1. 10:20

Trainer

data = {"input_ids": [],
        "attention_mask": [],
        "labels": 1}
  • input_ids : 토큰화된 Input Text
  • attention_mask : 각 토큰이 실제 단어인지(1) 패딩 토큰(0)인지 나타냄
  • labels : 입력에 대한 Ground Truth를 저장, 멀티라벨일 경우 배열을 사용하여 표현

허깅페이스의 주요 입력 형식은 위와 같고 이 형식을 지켜서 trainer에 입력해야 한다.

trainer = Trainer(
    model = model,
    args = args,
    train_dataset = train_dataset['train'],
    eval_dataset = train_dataset['test'],
    compute_metrics = compute_metrics,
    data_collator = data_collator,
    tokenizer = tokenizer,
    formatting_func = formatting_func, # SFTTrainer에만 존재
    peft_config = lora_config,         # SFTTrainer에만 존재
)
# SFTTrainer: Supervised Fine-Tuning Trainer

 

 

Parameter

학습률, 배치, 로깅옵션 등의 설정을 포함하는 파라미터들로 예시는 다음과 같다.

  • args
    from transformers import TrainingArguments
    
    training_args = TrainingArguments(
        output_dir='./results',          # 결과를 저장할 디렉토리
        num_train_epochs=1,              # 총 훈련 에폭 수
        per_device_train_batch_size=1,   # 훈련 중 장치별 배치 크기
        per_device_eval_batch_size=10,   # 평가 시 장치별 배치 크기
        warmup_steps=1000,               # 학습률 스케줄러의 워밍업 단계 수
        weight_decay=0.01,               # 가중치 감쇠의 강도
        logging_dir='./logs',            # 로그를 저장할 디렉토리
        logging_steps=200,               # 로그를 출력할 빈도
        do_train=True,                   # 훈련 수행 여부
        do_eval=True,                    # 평가 수행 여부
        evaluation_strategy="epoch",     # 에폭마다 평가 수행
        gradient_accumulation_steps=64,  # 역전파 전 총 단계 수
        fp16=True,                       # 혼합 정밀도 사용 여부
        fp16_opt_level="02",             # 혼합 정밀도 모드
        run_name="ProBert-BFD-MS",       # 실험 이름
        seed=3                           # 실험 재현성을 위한 시드
    )
    
  • train_dataset
    아래 형식을 지키는 데이터 셋을 입력으로 넣어주어야 한다.
    data = {"input_ids": [],
            "attention_mask": [],
            "labels": 1}
    ​

 

tokenizer

  • 1. 텍스트 분할
    "Hugging Face is great!"
    ->
    ["Hugging", "Face", "is", "great", "!"]

  • 2. 토큰 변환
    분할된 텍스트들을 고유한 숫자 ID로 변환한다.

 

  • 3. 패딩 및 정규화

    3.1 문장의 길이를 고정된 길이로 맞춘다.
["Hugging", "Face", "is", "great", "!"]
→
["Hugging", "Face", "is", "great", "!", "[PAD]", "[PAD]"]

 

       3.2 대소문자 변환 등의 정규화 작업을 수행한다.

["Hugging", "Face", "is", "great", "!"]
->
["hugging", "face", "is", "great", "!"]

 

  • 4. 문장 부호 추가(모델의 종류에 따라 사용하는 토큰이 달라진다.)
    모델이 문장의 시작과 끝을 인식할 수 있도록 시작 토큰과 종료 토큰을 추가한다.

    - 대괄호([]): BERT와 같은 모델에서 주로 사용
    [SEP] : 문장의 끝을 나타내는 토큰
    [INST] : 대화형 모델에서 특정 지시를 수행하는 모델에서 사용
    [CLS] : 문장의 시작을 나타내는 토큰

    - 꺽쇠(<>): BART, GPT-2에서 주로 사용
    </s> : 문장의 끝을 나타내는 토큰
    <<SYS>> : 시스템의 역할이나 메시지를 구분하기 위해 사용
    <s> : 문장의 시작을 나타내는 토큰

 

  • 5. Mask 생성
    어텐션 마스크를 생성한다.
    ["hugging", "face", "is", "great", "!"]
    ->
    ["Hugging", "Face", "is", "great", "!"]
    [1, 1, 1, 1, 1]
Comments