주제
1. 오픈소스 라이센스
2. Fine-Tuning 이해하기
3. HuggingFace를 활용한 Fine-Tuning 해보기
4. GPT 앱 만들기
5. Zapier
1. 오픈소스 라이센스
- 오픈소스 : 소스 코드가 공개되어 있어 누구나 자유롭게 사용, 수정, 배포할 수 있는 소프트웨어
- 이를 통해 개발자들은 협업을 하여 기술의 혁신과 개선을 추구할 수 있음
- GitHub를 통해 오픈소스 개발과 공유가 한 단계 발전
- 각 라이센스는 사용, 수정, 배포에 있어 고유한 규칙과 조건들을 가지고 있음
- 사용 및 배포의 자유도, 특허 권리, 변견 사항의 공개, 상업적 사용의 차이 존재
1.1 오픈소스 라이센스 5가지
- MIT 라이센스
- 사용자에게 소프트웨어를 거의 제한 없이 사용, 복사, 수정, 배포할 수 있는 권한을 부여
- 원작자의 저작권 표시와 허가 표시를 모든 복사본 또는 중요한 부분에 포함시켜야 함
- Apache 2.0 라이센스
- 사용자에게 소프트웨어를 사용, 복사, 수정, 배포할 권한을 부여하며, 변경된 버전을 상업적으로 사용 가능
- 특허 관련 권리를 명시적으로 부여
- GNU 일반 공중 사용 허가서(GPL)
- 소프트웨어를 자유롭게 사용, 공유, 수정할 수 있지만 GPL 라이센스 하에 배포된 모든 수정 버전 또한 동일한 라이센스를 따라야함. 수정된 소프트웨어의 자유로운 사용을 보장함
- BSD 라이센스
- 간단하고 제한이 적어 상업적 소프트웨어 프로젝트에 자주 사용됨.
- 소스 코드의 재배포시, 원작자의 저작권 표시를 모든 광고 자료 및 문서에 포함시켜야 하는 조항이 존재
- Creative Commons(CC)
- 주로 데이터셋, 교육 자료, 창작물에 사용되는 라이센스
2. Fine-Tuning 이해하기
- 파인튜닝의 목적 : 파인 튜닝된 모델이 새로 모델을 처음부터 만드는 것보다 특정 유스 케이스에서 훨씬 더 좋은 성능을 내고, 비용과 시간을 크게 절약 가능함
- LLM의 Supervised Fine-Tuning의 절차 :
- 어떤 일을 파인튜닝할지 결정
- 사용할 훈련 데이터셋 생성
- 어느 베이스 LLM 모델을 파인 튜닝의 대상으로 할지 결정
- Supervised ML 형태로 LLM을 재훈련
- 모델 성능 평가
- Supervised ML 형태로 LLM을 재훈련하는 옵션 3가지 :
- 모든 파라미터들을 다 재훈련
- 레이어 대부분의 파라미터들을 freeze하고 가장 앞단의 레이어들만 재훈련
- PEFT(Parameter Efficient Fine Tuning)
- 모든 레이어의 파라미터들을 고정하고 앞단 레이어들에 새로운 파라미터를 추가하는 방식
- LoRA(Low Rank Adaptation)라는 방식이 많이 사용됨
3. HuggingFace를 활용한 Fine-Tuning 해보기
3.1 IMDB 영화 리뷰 분류기
- HuggingFace 데이터셋을 이용하여 각 리뷰를 positive, negative로 분류
- 분류기 : bert-base-uncased 모델 사용
- AutoModelForSequenceClassification을 사용해서 파인 튜닝 수행
- pre-trained 모델 뒤에 레이어를 새로 추가하고 분류를 가능하게 함
- num_labels로 분류 대상의 클래스 수를 지정
- 데이터셋 다운로드
from datasets import load_dataset
dataset = load_dataset("imdb")
# 훈련 세트에서 무작위로 500개 샘플 선택
train_sample = dataset["train"].shuffle(seed=42).select(range(500))
# 테스트 세트에서 무작위로 500개 샘플 선택
test_sample = dataset["test"].shuffle(seed=42).select(range(500))
- 토큰화를 위한 모델 가져오기
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# 사전 훈련된 모델 자동 로드:
# - AutoModelForSequenceClassification은 from_pretrained 메소드를 사용
# - 해당 모델에 맞는 모델 아키텍처와 가중치를 로드
# - 분류를 위한 추가 레이어가 생성됨 (Fine-tuning 용). 이 레이어는 모델의 출력을 최종 분류 결정으로 변환하는 역할 수행
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
# GPU 사용 설정 (가능한 경우)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
- 전처리 함수
# 모든 입력의 크기를 64개의 토큰으로 맞춤. 길면 짜르고 짧다면 패딩 수행
def preprocess_function(examples):
return tokenizer(examples["text"], truncation=True, padding=True, max_length=64)
encoded_train_sample = train_sample.map(preprocess_function, batched=True)
encoded_test_sample = test_sample.map(preprocess_function, batched=True)
- 훈련에 사용할 인자들 지정(epochs는 5)
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir='./results', # output directory
num_train_epochs=5, # total number of training epochs
per_device_train_batch_size=32, # batch size per device during training
per_device_eval_batch_size=32, # batch size for evaluation
warmup_steps=500, # number of warmup steps for learning rate scheduler
weight_decay=0.01, # strength of weight decay
logging_dir='./logs', # directory for storing logs
logging_steps=10,
)
- 훈련 수행
trainer = Trainer(
model=model,
args=training_args,
train_dataset=encoded_train_sample,
eval_dataset=encoded_test_sample,
)
trainer.train()
- 훈련 평가 후 예측
trainer.evaluate()
test_result = trainer.predict(test_dataset=encoded_test_sample)

- 예측 결과 분석
import numpy as np
# 예측 결과 분석: predict 메소드는 predictions, label_ids, metrics를 포함한 NamedTuple을 반환합니다.
predictions = test_result.predictions
# 여기서 predictions 배열에는 각 테스트 샘플에 대한 예측 결과가 저장됩니다.
predictions = np.argmax(predictions, axis=1) # 로짓에서 가장 높은 값을 가진 인덱스를 선택합니다.
- Classification report로 성능 확인

4. GPT 앱 만들기
- 만들 수 있는 앱 3가지 :
- 개인 생산성을 높이기 위한 GPT 앱
- LangChain 기반 QA 챗봇
- ChatGPT로 처음부터 만들어보는 데이터 분석
- 다만 이건 ChatGPT 유료 버전이 있어야 가능 (무료 버전을 이용하고 있기 때문에 만드는 과정만 익힘)
4.1 Custom GPT란?
- ChatGPT를 fine-tuning하여 만든 새로운 챗봇
- 특징 :
- 개인화된 AI 모델 : 특정 요구 사항에 맞춰 훈련됨
- 데이터 기반 훈련 : 고유한 데이터 세트를 사용하여 특정 도메인 또는 언어 스타일에 최적화
- 향상된 정확성과 관련성 : 특정 도메인 데이터로 훈련되기 때문에, 일반 GPT 모델보다 더 정확한 결과 생성
4.2 GPT Store
- No Code로 파인튜닝을 가능하게 해줌(GPT Builder)
- GPT Store에 있는 앱은 다양한 사용자와 사용 사례를 대상으로 함
- 별다른 기술적인 역량이 없어고 데이터가 있거나 분명한 유스케이스가 있다면 쉽게 시작 가능
- 간편한 앱 에코 시스템
- 개발자 관점에서는 만드는 즉시 배포 가능
- 사용자는 복잡한 설정이나 개발 과정 없이 앱을 선택하고 사용 가능
- 개발 관련 3가지 기능 제공 :
- Instructions : 어떻게 대화할지 구체적인 명령과 정보를 대화 형태로 제공
- Expanded Knowledge : 도메인 정보가 있는 문서들을 업로드
- Actions : 외부에서 읽어와야 하는 정보가 있는 경우 연결 가능
- GPT Builder에서 Configure 메뉴를 통해 나만의 GPT를 만들 수 있다
4.3 GPT Actions
- GPT가 구조화된 인터페이스를 통해 외부 시스템, 도구 또는 소프트웨어와 상호작용할 수 있도록 설계되어 텍스트 생성 이상으로 그 활용도를 확장가능해주는 기능
- GPT 바깥에서 정보 추출
- GPT 외부 시스템을 통해 특정 테스트 수행
- Python 환경에서 코드 실행
- 인터넷 검색을 통한 실시간 정보 가져오기
- 외부 API 등과 연동
5. Zapier
- No Code / Low Code 툴로, 자주 사용하는 냅을 연결하여 반복 작업을 자동화시켜주는 도구

- 특정 기준에 따라 다른 앱에서 작업을 트리거하는 워크플로우인 Zaps를 생성
- 예) Gmail의 첨부파일을 Dropbox에 자동으로 저장
- 무료 플랜도 존재
- 동작 원리 :
- "트리거" → "작업"
- 사용하는 앱 전반의 다양한 트리거와 작업 중에서 선택하여 필요에 맞게 워크플로우 생성 가능
- 실습

- 특정 키워드가 담긴 이메일을 받았을 때 Google Sheets로 자동 기록하는 Zap 만들기
- 트리거는 Gmail, 내 Gmail 계정을 연결
- 키워드는 '주문 확인'으로 지정

- Test를 통해서 최근 내 이메일 중 키워드가 담긴 이메일을 찾아보기
- 통과하면 그대로 진행
- 트리거된 액션은 구글 시트의 Create Spreadsheet Row

- 드라이브에 미리 만들어둔 시트와 연결

- 마찬가지로 Test를 해준후 Publish를 눌러준다
- My Zaps에 퍼블리시가 된다

느낀점
ChatGPT 유료 버전이 없어서 이번 실습을 따라하지 못한게 아쉽다. 종종 Job description을 보면 GPT를 잘 이용할 줄 아는 사람을 우대하는 공고도 보이는데 유료 버전을 구독해서 프로젝트를 따라해봐야할지 고민이 된다.
'Data Science > TIL (Today I Learned)' 카테고리의 다른 글
| 프로그래머스 데이터분석 데브코스 1기 - 75일차 (0) | 2024.03.08 |
|---|---|
| 프로그래머스 데이터분석 데브코스 1기 - 74일차 (0) | 2024.03.07 |
| 프로그래머스 데이터분석 데브코스 1기 - 72일차 (0) | 2024.03.05 |
| 프로그래머스 데이터분석 데브코스 1기 - 71일차 (1) | 2024.03.04 |
| 프로그래머스 데이터분석 데브코스 1기 - 70일차 (0) | 2024.03.01 |