본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
*_1. 학습 인증샷 4장 이상 포함
*_① 오늘자 날짜, 공부 시작 시각 포함 사진 1장
② 오늘자 날짜, 공부 종료 시각 포함 사진 1장
③ 1개 클립 수강 인증 사진 (강의장 목록 캡쳐, 강의 내용이 담긴 수강화면이 보이지 않도록) 1장
④ 학습 인증샷 1장 이상 (ex. 필기 촬영, 작업물, 등)
2. 학습 후기 700자 이상 (공백 제외)
- 모델 호출
import json
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
llm = LLM(model="iamjoon/llama3-8b-finance-analyzer")
tokenizer = AutoTokenizer.from_pretrained("iamjoon/llama3-8b-finance-analyzer")
with open("/workspace/LLaMA-Factory/data/finance_news_summarizer_test.json", "r", encoding="utf-8") as f:
test_data = json.load(f)
input_label_pairs = []
# 샘플 순회하면서 템플릿 적용 및 분리
for sample in test_data:
system = sample.get("system", "")
instruction = sample["instruction"]
output = sample["output"]
# chat template용 메시지 구성
messages = []
if system:
messages.append({"role": "system", "content": system})
messages.append({"role": "user", "content": instruction})
messages.append({"role": "assistant", "content": output}) # 전체 메시지 (full_text용)
# assistant 전까지만 prompt로 구성
prompt_only = tokenizer.apply_chat_template(
messages[:-1], # assistant 제거
tokenize=False,
add_generation_prompt=True # <|start|>assistant\n 추가됨
)
# label에는 절대 template 적용 안 함
input_label_pairs.append({
"input": prompt_only, # 템플릿 적용된 prompt
"label": output.strip() # 순수 응답만 (앞뒤 공백 제거만)
})
print(input_label_pairs[0]['input'])
print(input_label_pairs[0]['label'])
- 샘플 json 추출
from vllm import SamplingParams import json
sampling_params = SamplingParams(
temperature=0,
max_tokens=1024,
stop=["<|eot_id|>"]
)
20번부터 30번까지 반복
for i in range(20, 31):
prompt = input_label_pairs[i]["input"]
label_text = input_label_pairs[i]["label"]
print(f"\n\n======= 샘플 {i} =======")
# LLM 생성
outputs = llm.generate(prompt, sampling_params)
# 생성된 텍스트 가져오기
generated_text = outputs[0].outputs[0].text.strip()
# JSON 파싱
try:
label_json = json.loads(label_text)
generated_json = json.loads(generated_text)
except json.JSONDecodeError:
print("[⚠️ JSON 파싱 실패]")
print("[Generated Output]\n", generated_text)
print("\n[정답 Label]\n", label_text)
continue
# 비교 키 설정
if label_json.get("is_stock_related") is True:
keys_to_check = [
"is_stock_related",
"positive_impact_stocks",
"reason_for_positive_impact",
"positive_keywords",
"negative_impact_stocks",
"reason_for_negative_impact",
"negative_keywords",
"summary"
]
else:
keys_to_check = ["is_stock_related", "summary"]
# 결과 출력
print("[Generated Output]")
for key in keys_to_check:
print(f"{key}:\n{generated_json.get(key)}\n")
print('--' * 30)
print("[정답 Label]")
for key in keys_to_check:
print(f"{key}:\n{label_json.get(key)}\n")
~
url : https://abit.ly/lisbva
'스타트업 투자 > 데이터 + 테크' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 42일차 : 데이터 전처리 (0) | 2025.05.12 |
---|---|
패스트캠퍼스 환급챌린지 41일차 : 주요코드 이해하기 (0) | 2025.05.11 |
패스트캠퍼스 환급챌린지 39일차 : 모델업로드 및 다운로드 (0) | 2025.05.09 |
패스트캠퍼스 환급챌린지 38일차 : 파인 튜닝 (0) | 2025.05.08 |
패스트캠퍼스 환급챌린지 37일차 : 요약 데이터 전처리 (0) | 2025.05.07 |
댓글