본문 바로가기
AI/LLM

[LLM] 🤗 Hugging Face 설치하기 🤗 ft.나만의 요약하기 모델 만들기 예제

by 데이터 벌집 2024. 1. 18.
반응형

Hugging Face"는 인공 지능, 특히 자연어 처리(NLP) 분야에서 인기 있는 라이브러리와 모델을 제공하는 플랫폼입니다. Hugging Face의 가장 유명한 라이브러리는 "Transformers"이며, 여기에는 BERT, GPT, T5 등과 같은 다양한 사전 훈련된 모델이 포함되어 있습니다.

 


 

🤗 Hugging Face 설치하기 🤗

 

  1. 커뮤니티 가입: 간단한 이메일과 패스워드 입력으로 Hugging Face 커뮤니티에 가입하고, 다양한 자료와 지식을 공유받을 수 있어요.
  2. 환경 설정: 새로운 폴더를 만들어 가상 환경을 설정하고, 필요한 패키지들을 설치해보세요. 이 과정을 통해 여러분만의 AI 프로젝트를 시작할 준비가 됩니다.
  3. 토큰 받기: 이메일 인증을 마치고 토큰을 받으면, 이를 통해 Hugging Face의 다양한 기능을 더욱 효과적으로 사용할 수 있어요.

 

Hugging Face

 

 

 

먼저 구글 검색창에 Hugging Face라고 검색해보세요

구글에다가 허깅페이스 검색하기

 

 

그리고 오른쪽 상단에 Sign Up을 눌러서 가입하세요!

Hugging Face 첫화면
SIgn up

 

 

이메일과 패스워드만 입력하면 Hugging Face 커뮤니티에 참여하실수있어요!

가입 페이지 상단

 

 

 

허깅페이스 설치하기

 

허깅 페이스로 처음으로 프로젝트를 만드시고 싶은 분들은 새로 폴더를 만들어서 Virtual env안에다가 새로운 AI를 만들어보세요!

mkdir hugging_face_project && cd hugging_face_project
virtualenv hugging_face
source hugging_face/bin/activate

 

 

pip install huggingface_hub
#You already have it if you installed transformers or datasets

huggingface-cli login
#Log in using a token from huggingface.co/settings/tokens
#Create a model or dataset repo from the CLI if needed
huggingface-cli repo create repo_name --type {model, dataset, space}

 

 

설치하신 뒤에 이메일 인증뒤에 토큰을 받으실수 있습니다!

Token 입력하기

 

이메일 인증하기
토큰 설정하기

 

Hugging Face


Summarization 예제

 

California 주 법안의 일부인 BillSum 데이터셋을 이용하여 T5 모델을 세부 조정하고 추론하는 방법을 배울 거예요. 이 과정을 통해 어떻게 문서나 기사를 핵심 내용만 담은 짧은 버전으로 변환할 수 있는지 알아볼 거예요.

 

먼저 필요한 라이브러리를 설치해야 해요:

 

pip install transformers datasets evaluate rouge_score

 

그리고 Hugging Face 계정에 로그인하여 커뮤니티와 모델을 공유할 수 있어요. 프롬프트에 토큰을 입력하여 로그인해 보세요:

from huggingface_hub import notebook_login

notebook_login()

 

이제 BillSum 데이터셋을 로드해 봅시다. 여기서는 California 주 법안의 작은 부분집합을 사용할 거예요:

 

from datasets import load_dataset

billsum = load_dataset("billsum", split="ca_test")

 

 

데이터셋을 훈련 세트와 테스트 세트로 나누는 것으로 시작합니다:

billsum = billsum.train_test_split(test_size=0.2)

 

그런 다음 예시를 살펴보세요:

 

print(billsum["train"][0])

 

여기에는 두 가지 필드가 있습니다:

  • text: 모델 입력이 될 법안의 텍스트
  • summary: 모델 타겟이 될 텍스트의 간추린 버전

다음으로 T5 토크나이저를 로드하여 텍스트와 요약을 처리해야 합니다:

from transformers import AutoTokenizer

checkpoint = "t5-small"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)

 

 

이제 입력을 처리하고 토큰화하는 전처리 함수를 만들어야 합니다:

 

prefix = "summarize: "

def preprocess_function(examples):
    inputs = [prefix + doc for doc in examples["text"]]
    model_inputs = tokenizer(inputs, max_length=1024, truncation=True)

    # Tokenize the labels
    labels = tokenizer(text_target=examples["summary"], max_length=128, truncation=True)

    model_inputs["labels"] = labels["input_ids"]
    return model_inputs

 

 

전처리 함수를 전체 데이터셋에 적용하려면 🤗 Datasets의 map 메서드를 사용하세요:

 

tokenized_billsum = billsum.map(preprocess_function, batched =True)


이제 DataCollatorForSeq2Seq를 사용하여 예제 배치를 생성합니다. 배치 동안 문장을 동적으로 패딩하는 것이 전체 데이터셋을 최대 길이로 패딩하는 것보다 더 효율적입니다.

from transformers import DataCollatorForSeq2Seq

data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=checkpoint)

 

훈련 중에 모델의 성능을 평가하는 데 도움이 되는 메트릭을 포함하는 것이 좋습니다. 🤗 Evaluate 라이브러리를 사용하여 ROUGE 메트릭을 빠르게 로드할 수 있습니다:

 

import evaluate

rouge = evaluate.load("rouge")

 

이제 예측과 레이블을 compute에 전달하여 ROUGE 메트릭을 계산하는 함수를 생성합니다:

 

def compute_metrics(eval_pred):
    predictions, labels = eval_pred
    decoded_preds = tokenizer.batch_decode(predictions, skip_special_tokens=True)
    labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
    decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)

    result = rouge.compute(predictions=decoded_preds, references=decoded_labels, use_stemmer=True)

    prediction_lens = [np.count_nonzero(pred != tokenizer.pad_token_id) for pred in predictions]
    result["gen_len"] = np.mean(prediction_lens)

    return {k: round(v, 4) for k, v in result.items()}

 

훈련하기 (Pytorch 사용 시)

Pytorch로 모델을 미세 조정하는 방법에 익숙하지 않다면, 기본 튜토리얼을 확인하세요. 이제 모델 훈련을 시작할 준비가 되었습니다! T5 모델을 AutoModelForSeq2SeqLM으로 불러옵니다.

 

from transformers import AutoModelForSeq2SeqLM, Seq2SeqTrainingArguments, Seq2SeqTrainer

model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint)
  1. Seq2SeqTrainingArguments에서 훈련 하이퍼파라미터를 정의합니다. 필요한 유일한 파라미터는 모델을 저장할 위치를 지정하는 output_dir입니다. push_to_hub=True를 설정하면 모델을 Hugging Face Hub에 업로드할 수 있습니다(모델을 업로드하려면 Hugging Face 계정에 로그인해야 합니다). 각 에폭의 끝에, Trainer는 ROUGE 메트릭을 평가하고 훈련 체크포인트를 저장합니다.
  2. Seq2SeqTrainer에 훈련 인자와 함께 모델, 데이터셋, 토크나이저, 데이터 콜레이터, compute_metrics 함수를 전달합니다.
  3. train()을 호출하여 모델을 미세 조정합니다.
 
training_args = Seq2SeqTrainingArguments(
    output_dir="my_awesome_billsum_model",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    weight_decay=0.01,
    save_total_limit=3,
    num_train_epochs=4,
    predict_with_generate=True,
    fp16=True,
    push_to_hub=True,
)

trainer = Seq2SeqTrainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_billsum["train"],
    eval_dataset=tokenized_billsum["test"],
    tokenizer=tokenizer,
    data_collator=data_collator,
    compute_metrics=compute_metrics,
)

trainer.train()

 

훈련이 완료되면 push_to_hub() 메소드로 모델을 Hub에 공유하여 모든 사람이 사용할 수 있도록 합니다.

 

추론 (Inference)

모델을 미세 조정했으니 이제 추론에 사용할 수 있습니다!

 

요약하고 싶은 텍스트를 생각해보세요. T5 모델의 경우, 작업에 따라 입력에 접두사를 붙여야 합니다. 요약 작업의 경우 아래와 같이 입력에 접두사를 붙입니다:

text = "summarize: The Inflation Reduction Act lowers prescription drug costs, health care costs, and energy costs. It's the most aggressive action on tackling the climate crisis in American history, which will lift up American workers and create good-paying, union jobs across the country. It'll lower the deficit and ask the ultra-wealthy and corporations to pay their fair share. And no one making under $400,000 per year will pay a penny more in taxes."

 

미세 조정된 모델을 추론에 사용해보는 가장 간단한 방법은 pipeline()에서 사용하는 것입니다. 요약을 위한 파이프라인을 모델로 인스턴스화하고 텍스트를 전달합니다:

 

from transformers import pipeline

summarizer = pipeline("summarization", model="stevhliu/my_awesome_billsum_model")
summarizer(text)
[{"summary_text": "The Inflation Reduction Act lowers prescription drug costs, health care costs, and energy costs. It's the most aggressive action on tackling the climate crisis in American history, which will lift up American workers and create good-paying, union jobs across the country."}]

 

이제 드디어 나만의 글 요약 프로그램을 만들었습니다!!


 

여러분이 이제 Hugging Face의 세계에 입문하셨으니, 이 도구들을 활용하여 놀라운 NLP 프로젝트를 만들어보세요! 🚀 여러분의 창의력과 Hugging Face의 강력한 도구들이 만나면, 분명히 놀라운 결과를 이끌어낼 거예요. AI 개발 여정에 행운을 빌며, 끝없는 발견과 학습의 여정을 즐기시길 바랍니다!

반응형