Commit 345e1b88 authored by kihoon.lee's avatar kihoon.lee
Browse files

qwen2.5업데이트 및 파일변경

parent 68c46f29
This diff is collapsed.
......@@ -12,7 +12,7 @@ from typing import Dict, Union
import pandas as pd
from openai import AzureOpenAI, OpenAI
from templates import JUDGE_TEMPLATE
from templates import JUDGE_TEMPLATE, LOTTE_PROMPT_STRATEGY
# Constants
TIME_START = datetime.now().strftime("%Y%m%d_%H%M%S")
......@@ -53,12 +53,13 @@ def create_answers(
model_questions = model_output["questions"]
model_outputs = model_output["outputs"]
model_references = model_output["references"]
model_instruct = model_output["category"]
prompt = (
f"아래의 내용을 주어진 평가 기준들을 충실히 반영하여 평가해라. 특히 모델 답변이 언어 요구사항을 준수하는지 반드시 확인해야 한다.\n\n"
f"**Instruct** \n{LOTTE_PROMPT_STRATEGY[model_instruct]}\n\n"
f"**Question**\n{model_questions[0]}"
)
if model_references and model_references[0]:
prompt += f"\n\n**Additional Reference**\n{model_references[0]}"
......@@ -163,9 +164,8 @@ def main():
output_file_path = output_dir / json_file.relative_to(input_dir)
if output_file_path.exists():
print(f"이미 평가 완료.. : {json_file}")
else:
process_file(client, json_file, output_dir, args.judge_model, args.threads, args)
print(f"추가된 데이터로 롯데 벤치마크를 진행합니다. : {json_file}")
process_file(client, json_file, output_dir, args.judge_model, args.threads, args)
if __name__ == "__main__":
main()
\ No newline at end of file
{"id": 1, "category": "search_keyword", "questions": ["음 그렇다면 세입자가 먼저 확정일자 신고를 해서 전세자금 전체를 보호받고 있음에도 소액임차보증금을 변제하는건 이중변제 아닌가 싶은데 어떻게 생각해?"], "references": ["전세자금 보호 중 소액임차보증금 변제 시 이중변제 여부"]}
{"id": 2, "category": "search_keyword", "questions": ["현대 물리학에서 다중우주 이론과 끈 이론의 관계에 대해 설명해줘."], "references": ["다중우주 이론 끈 이론 관계"]}
{"id": 2, "category": "search_keyword", "questions": ["현대 물리학에서 다중우주 이론과 끈 이론의 관계에 대해 설명해줘."], "references": ["현대 물리학 다중우주 이론 끈 이론 관계"]}
{"id": 3, "category": "search_keyword", "questions": ["차량 엔진 내 연료 효율을 극대화하는 방법에 대한 최신 연구 논문은?"], "references": ["차량 엔진 내 연료 효율 극대화 방법 논문"]}
{"id": 4, "category": "search_keyword", "questions": ["세상에서 가장 맛있는 음식을 알려주고 추천해줘"], "references": ["세상에서 가장 맛있는 음식"]}
{"id": 4, "category": "search_keyword", "questions": ["세상에서 가장 맛있는 음식을 알려주고 추천해줘"], "references": ["세상에서 가장 맛있는 음식 추천"]}
{"id": 5, "category": "search_keyword", "questions": ["최근에 유행하고 있는 트렌드에는 뭐가있어?"], "references": ["최신 유행 트렌드"]}
{"id": 6, "category": "search_summary", "questions": ["## 검색 결과 :\n- 1.위험현장 사전 예측해 사고 예방…내년 1월 전면 시행 <b>서울</b>시가 전국 최초로 공공 공사장 <b>안전</b>수준을 파악해 사고를 예측하고 재해를 방지하는 '<b>안전지수제</b>'를 도입한다고 19일 밝혔다. 올해 연말까지 제도를 시범...\n - 2. <b>서울</b>시는 공공 공사장에서 발생할 수 있는 <b>안전</b>사고를 예방하기 위해서 전국 최초로 ‘<b>안전지수제</b>’를 도입한다고 19일 밝혔다. ‘<b>안전지수제</b>’는 <b>안전</b>학회, 전문가, 실무자가 2만5000건의 주요 재해 사고원인을 분석하여... \n- 3. 안전지수 평가점수가 3개월 연속 ‘매우 미흡’ 등급으로 평가되는 공사 현장은 안전 개선 의지가 없는 것으로 판단해 특별안전점검과 부실벌점 부과, 고용노동부에 과태료 부과를 의뢰한다. 2년간 서울시(도시기반시설본부)에서 발주하는 공사 입찰에 불이익을 줄 예정이다. 또 평가점수가 40점 미만의 공사장은 안전사고 위험이 크다고 판단해 즉시 공사를 중단한다.\n\n## 질문 : 서울시에서 안전지수제를 한다고하는데 이게 뭐야?"], "references": [null]}
......
import os
import pandas as pd
from openpyxl.styles import Font, Alignment
from openpyxl.utils import get_column_letter
def collect_combined_scores(evaluated_dir):
"""
evaluated_dir 내의 모든 combined_scores.xlsx 파일을 검색하여 리스트로 반환합니다.
......@@ -73,6 +74,7 @@ def create_score_sheets(combined_scores_files, categories, score_types):
return score_sheets
def save_to_excel(score_sheets, output_file):
"""
딕셔너리에 저장된 데이터프레임을 각 시트로 저장하여 엑셀 파일로 저장합니다.
......@@ -80,6 +82,34 @@ def save_to_excel(score_sheets, output_file):
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
for sheet_name, df in score_sheets.items():
df.to_excel(writer, sheet_name=sheet_name)
# 스타일 적용
workbook = writer.book
worksheet = writer.sheets[sheet_name]
# 헤더 스타일
header_font = Font(bold=True)
for col_num, col in enumerate(df.columns, 1):
cell = worksheet.cell(row=1, column=col_num + 1)
cell.font = header_font
cell.alignment = Alignment(horizontal='center', vertical='center')
# 인덱스 스타일
for row_num in range(2, len(df) + 2):
cell = worksheet.cell(row=row_num, column=1)
cell.font = header_font
cell.alignment = Alignment(horizontal='center', vertical='center')
# 열 너비 자동 조정
for col_num, col in enumerate(df.columns, 1):
max_length = max(df[col].astype(str).map(len).max(), len(col)) + 2
worksheet.column_dimensions[get_column_letter(col_num + 1)].width = max_length
# 인덱스 열 너비 조정
max_length = max(df.index.astype(str).map(len).max(), len(df.index.name) if df.index.name else 0) + 2
worksheet.column_dimensions[get_column_letter(1)].width = max_length
print(f"모든 스코어가 '{output_file}' 파일에 저장되었습니다.")
def main():
......@@ -115,6 +145,7 @@ def main():
'lotte_qa',
'meeting_summary',
'mrc',
'mrc_summary',
'review_summary',
'search_keyword',
'search_summary',
......@@ -123,7 +154,10 @@ def main():
'task_assistant_mail_meeting',
'task_assistant_mail_pr',
'task_assistant_mail_share',
'text2sql'
'text2sql',
'sql2text',
'text2sql_dart',
# 'sql2text_dart'
]
# 3. 데이터 수집 및 시트 생성
......
#!/bin/bash
# 변수 설정
huggingface-cli login --token hf_ #hf key 입력해주세요.
API_KEY="sk-" #openai api key 입력해주세요.
MODEL="LDCC/Chat-Qwen2.5-14B-32k" #허깅페이스 모델
GPU_DEVICES=0 # 사용할 GPU 번호
MODEL_LEN=32000
# 아래부터는 안건드려도 됩니다.
OUTPUT_DIR="generated/$MODEL"
EVAL_DIR="evaluated/$MODEL"
JUDGE_MODEL="gpt-4o"
# 생성 스크립트 실행
python lotte-generator.py --model $MODEL --gpu_devices $GPU_DEVICES --model_len $MODEL_LEN
# 평가 스크립트 실행
python lotte-evaluator.py -o $OUTPUT_DIR -m $MODEL -k $API_KEY -t 30 -j $JUDGE_MODEL
# 점수 계산 스크립트 실행
python lotte-score.py -p "$EVAL_DIR/lotte_single_turn.jsonl"
# 점수 결합 스크립트 실행
python combine_scores.py -i "$EVAL_DIR" -o "$EVAL_DIR/combined_scores.xlsx"
# 한 엑셀파일에 평가 결과를 종합시킨다.
python merge_results.py
echo "merged_scores.xlsx에 결과가 병합되어 저장되었습니다."
......@@ -4,8 +4,8 @@
huggingface-cli login --token hf_ #hf key 입력해주세요.
API_KEY="sk-" #openai api key 입력해주세요.
MODEL="LDCC/Chat-Qwen2.5-14B-32k" #허깅페이스 모델
GPU_DEVICES=0 # 사용할 GPU 번호
MODEL="Qwen/Qwen2.5-7B-Instruct" #허깅페이스 모델
GPU_DEVICES=2 # 사용할 GPU 번호
MODEL_LEN=32000
# 아래부터는 안건드려도 됩니다.
......@@ -13,6 +13,8 @@ OUTPUT_DIR="generated/$MODEL"
EVAL_DIR="evaluated/$MODEL"
JUDGE_MODEL="gpt-4o"
echo "$MODEL 모델을 사용하여 평가를 진행합니다."
# 생성 스크립트 실행
python generator.py --model $MODEL --gpu_devices $GPU_DEVICES --model_len $MODEL_LEN
python lotte-generator.py --model $MODEL --gpu_devices $GPU_DEVICES --model_len $MODEL_LEN
......@@ -32,4 +34,4 @@ python combine_scores.py -i "$EVAL_DIR" -o "$EVAL_DIR/combined_scores.xlsx"
# 한 엑셀파일에 평가 결과를 종합시킨다.
python merge_results.py
echo "merged_scores.xlsx에 결과가 병합되어 저장되었습니다."
echo "파이프라인이 종료되었습니다."
\ No newline at end of file
......@@ -194,6 +194,7 @@ JUDGE_TEMPLATE = {
2. 답변 과정에서 누락되었거나 포함되지 못하여 아쉬운 부분에 대하여 상세히 분석할 것.
3. 답변의 길이가 평가 결과에 영향을 미치지 않도록 할 것.
4. Additional Reference는 정답을 의미하며, 만약 해당 값이 제공된다면 평가 시 해당 정보를 참고할 것.
5. 모델은 Instruct를 정확히 따라 학습이 되었으며, Additional Reference의 내용이 포함되었다면 높은 점수를 얻는다.
# 언어 요구사항
- 모델은 반드시 한국어로 답변해야 하며, 다른 언어로의 답변은 절대 허용되지 않는다.
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment