본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
*_1. 학습 인증샷 4장 이상 포함
*_① 오늘자 날짜, 공부 시작 시각 포함 사진 1장
② 오늘자 날짜, 공부 종료 시각 포함 사진 1장
③ 1개 클립 수강 인증 사진 (강의장 목록 캡쳐, 강의 내용이 담긴 수강화면이 보이지 않도록) 1장
④ 학습 인증샷 1장 이상 (ex. 필기 촬영, 작업물, 등)
2. 학습 후기 700자 이상 (공백 제외)
코드 정리
# 1. 허깅페이스 허브에서 데이터셋 로드
dataset = load_dataset("iamjoon/klue-mrc-ko-rag-dataset", split="train")
# 2. system_message 정의
system_message = """당신은 검색 결과를 바탕으로 질문에 답변해야 합니다.
다음의 지시사항을 따르십시오.
1. 질문과 검색 결과를 바탕으로 답변하십시오.
2. 검색 결과에 없는 내용을 답변하려고 하지 마십시오.
3. 질문에 대한 답이 검색 결과에 없다면 검색 결과에는 "해당 질문~에 대한 내용이 없습니다." 라고 답변하십시오.
4. 답변할 때 특정 문서를 참고하여 문장 또는 문단을 작성했다면 뒤에 출처는 이중 리스트로 해당 문서 번호를 남기십시오. 예를 들어서 특정 문장이나 문단을 1번 문서에서 인용했다면 뒤에 [[ref1]]이라고 기재하십시오.
5. 예를 들어서 특정 문장이나 문단을 1번 문서와 5번 문서에서 동시에 인용했다면 뒤에 [[ref1]], [[ref5]]이라고 기재하십시오.
6. 최대한 다수의 문서를 인용하여 답변하십시오.
검색 결과:
-----
{search_result}"""
# 3. 원본 데이터의 type별 분포 출력
print("원본 데이터의 type 분포:")
for type_name in set(dataset['type']):
print(f"{type_name}: {dataset['type'].count(type_name)}")
# 4. train/test 분할 비율 설정 (0.5면 5:5로 분할)
test_ratio = 0.8
train_data = []
test_data = []
# 5. type별로 순회하면서 train/test 데이터 분할
for type_name in set(dataset['type']):
# 현재 type에 해당하는 데이터의 인덱스만 추출
curr_type_data = [i for i in range(len(dataset)) if dataset[i]['type'] == type_name]
# test_ratio에 따라 test 데이터 개수 계산
test_size = int(len(curr_type_data) * test_ratio)
# 현재 type의 데이터를 test_ratio 비율로 분할하여 추가
test_data.extend(curr_type_data[:test_size])
train_data.extend(curr_type_data[test_size:])
# 6. OpenAI format으로 데이터 변환을 위한 함수
def format_data(sample):
# 검색 결과를 문서1, 문서2... 형태로 포매팅
search_result = "\n-----\n".join([f"문서{idx + 1}: {result}" for idx, result in enumerate(sample["search_result"])])
# OpenAI format으로 변환
return {
"messages": [
{
"role": "system",
"content": system_message.format(search_result=search_result),
},
{
"role": "user",
"content": sample["question"],
},
{
"role": "assistant",
"content": sample["answer"]
},
],
}
# 7. 분할된 데이터를 OpenAI format으로 변환
train_dataset = [format_data(dataset[i]) for i in train_data]
test_dataset = [format_data(dataset[i]) for i in test_data]
# 8. 최종 데이터셋 크기 출력
print(f"\n전체 데이터 분할 결과: Train {len(train_dataset)}개, Test {len(test_dataset)}개")
# 9. 분할된 데이터의 type별 분포 출력
print("\n학습 데이터의 type 분포:")
for type_name in set(dataset['type']):
count = sum(1 for i in train_data if dataset[i]['type'] == type_name)
print(f"{type_name}: {count}")
print("\n테스트 데이터의 type 분포:")
for type_name in set(dataset['type']):
count = sum(1 for i in test_data if dataset[i]['type'] == type_name)
print(f"{type_name}: {count}")
url : https://abit.ly/lisbva
'스타트업 투자 > 데이터 + 테크' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 47일차 : 멀티모달 (0) | 2025.05.17 |
---|---|
패스트캠퍼스 환급챌린지 46일차 : LLM 평가 (0) | 2025.05.16 |
패스트캠퍼스 환급챌린지 44일차 : 모델 호출 (0) | 2025.05.14 |
패스트캠퍼스 환급챌린지 43일차 : 허깅페이스 TRL 파인튜닝 (0) | 2025.05.13 |
패스트캠퍼스 환급챌린지 42일차 : 데이터 전처리 (0) | 2025.05.12 |
댓글