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 ...@@ -12,7 +12,7 @@ from typing import Dict, Union
import pandas as pd import pandas as pd
from openai import AzureOpenAI, OpenAI from openai import AzureOpenAI, OpenAI
from templates import JUDGE_TEMPLATE from templates import JUDGE_TEMPLATE, LOTTE_PROMPT_STRATEGY
# Constants # Constants
TIME_START = datetime.now().strftime("%Y%m%d_%H%M%S") TIME_START = datetime.now().strftime("%Y%m%d_%H%M%S")
...@@ -53,12 +53,13 @@ def create_answers( ...@@ -53,12 +53,13 @@ def create_answers(
model_questions = model_output["questions"] model_questions = model_output["questions"]
model_outputs = model_output["outputs"] model_outputs = model_output["outputs"]
model_references = model_output["references"] model_references = model_output["references"]
model_instruct = model_output["category"]
prompt = ( prompt = (
f"아래의 내용을 주어진 평가 기준들을 충실히 반영하여 평가해라. 특히 모델 답변이 언어 요구사항을 준수하는지 반드시 확인해야 한다.\n\n" f"아래의 내용을 주어진 평가 기준들을 충실히 반영하여 평가해라. 특히 모델 답변이 언어 요구사항을 준수하는지 반드시 확인해야 한다.\n\n"
f"**Instruct** \n{LOTTE_PROMPT_STRATEGY[model_instruct]}\n\n"
f"**Question**\n{model_questions[0]}" f"**Question**\n{model_questions[0]}"
) )
if model_references and model_references[0]: if model_references and model_references[0]:
prompt += f"\n\n**Additional Reference**\n{model_references[0]}" prompt += f"\n\n**Additional Reference**\n{model_references[0]}"
...@@ -163,9 +164,8 @@ def main(): ...@@ -163,9 +164,8 @@ def main():
output_file_path = output_dir / json_file.relative_to(input_dir) output_file_path = output_dir / json_file.relative_to(input_dir)
if output_file_path.exists(): if output_file_path.exists():
print(f"이미 평가 완료.. : {json_file}") print(f"추가된 데이터로 롯데 벤치마크를 진행합니다. : {json_file}")
else: process_file(client, json_file, output_dir, args.judge_model, args.threads, args)
process_file(client, json_file, output_dir, args.judge_model, args.threads, args)
if __name__ == "__main__": if __name__ == "__main__":
main() main()
\ No newline at end of file
{"id": 1, "category": "search_keyword", "questions": ["음 그렇다면 세입자가 먼저 확정일자 신고를 해서 전세자금 전체를 보호받고 있음에도 소액임차보증금을 변제하는건 이중변제 아닌가 싶은데 어떻게 생각해?"], "references": ["전세자금 보호 중 소액임차보증금 변제 시 이중변제 여부"]} {"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": 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": 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]} {"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 os
import pandas as pd import pandas as pd
from openpyxl.styles import Font, Alignment
from openpyxl.utils import get_column_letter
def collect_combined_scores(evaluated_dir): def collect_combined_scores(evaluated_dir):
""" """
evaluated_dir 내의 모든 combined_scores.xlsx 파일을 검색하여 리스트로 반환합니다. evaluated_dir 내의 모든 combined_scores.xlsx 파일을 검색하여 리스트로 반환합니다.
...@@ -73,6 +74,7 @@ def create_score_sheets(combined_scores_files, categories, score_types): ...@@ -73,6 +74,7 @@ def create_score_sheets(combined_scores_files, categories, score_types):
return score_sheets return score_sheets
def save_to_excel(score_sheets, output_file): def save_to_excel(score_sheets, output_file):
""" """
딕셔너리에 저장된 데이터프레임을 각 시트로 저장하여 엑셀 파일로 저장합니다. 딕셔너리에 저장된 데이터프레임을 각 시트로 저장하여 엑셀 파일로 저장합니다.
...@@ -80,6 +82,34 @@ 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: with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
for sheet_name, df in score_sheets.items(): for sheet_name, df in score_sheets.items():
df.to_excel(writer, sheet_name=sheet_name) 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}' 파일에 저장되었습니다.") print(f"모든 스코어가 '{output_file}' 파일에 저장되었습니다.")
def main(): def main():
...@@ -115,6 +145,7 @@ def main(): ...@@ -115,6 +145,7 @@ def main():
'lotte_qa', 'lotte_qa',
'meeting_summary', 'meeting_summary',
'mrc', 'mrc',
'mrc_summary',
'review_summary', 'review_summary',
'search_keyword', 'search_keyword',
'search_summary', 'search_summary',
...@@ -123,7 +154,10 @@ def main(): ...@@ -123,7 +154,10 @@ def main():
'task_assistant_mail_meeting', 'task_assistant_mail_meeting',
'task_assistant_mail_pr', 'task_assistant_mail_pr',
'task_assistant_mail_share', 'task_assistant_mail_share',
'text2sql' 'text2sql',
'sql2text',
'text2sql_dart',
# 'sql2text_dart'
] ]
# 3. 데이터 수집 및 시트 생성 # 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 @@ ...@@ -4,8 +4,8 @@
huggingface-cli login --token hf_ #hf key 입력해주세요. huggingface-cli login --token hf_ #hf key 입력해주세요.
API_KEY="sk-" #openai api key 입력해주세요. API_KEY="sk-" #openai api key 입력해주세요.
MODEL="LDCC/Chat-Qwen2.5-14B-32k" #허깅페이스 모델 MODEL="Qwen/Qwen2.5-7B-Instruct" #허깅페이스 모델
GPU_DEVICES=0 # 사용할 GPU 번호 GPU_DEVICES=2 # 사용할 GPU 번호
MODEL_LEN=32000 MODEL_LEN=32000
# 아래부터는 안건드려도 됩니다. # 아래부터는 안건드려도 됩니다.
...@@ -13,6 +13,8 @@ OUTPUT_DIR="generated/$MODEL" ...@@ -13,6 +13,8 @@ OUTPUT_DIR="generated/$MODEL"
EVAL_DIR="evaluated/$MODEL" EVAL_DIR="evaluated/$MODEL"
JUDGE_MODEL="gpt-4o" JUDGE_MODEL="gpt-4o"
echo "$MODEL 모델을 사용하여 평가를 진행합니다."
# 생성 스크립트 실행 # 생성 스크립트 실행
python generator.py --model $MODEL --gpu_devices $GPU_DEVICES --model_len $MODEL_LEN 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 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" ...@@ -32,4 +34,4 @@ python combine_scores.py -i "$EVAL_DIR" -o "$EVAL_DIR/combined_scores.xlsx"
# 한 엑셀파일에 평가 결과를 종합시킨다. # 한 엑셀파일에 평가 결과를 종합시킨다.
python merge_results.py python merge_results.py
echo "merged_scores.xlsx에 결과가 병합되어 저장되었습니다." echo "파이프라인이 종료되었습니다."
\ No newline at end of file
...@@ -194,6 +194,7 @@ JUDGE_TEMPLATE = { ...@@ -194,6 +194,7 @@ JUDGE_TEMPLATE = {
2. 답변 과정에서 누락되었거나 포함되지 못하여 아쉬운 부분에 대하여 상세히 분석할 것. 2. 답변 과정에서 누락되었거나 포함되지 못하여 아쉬운 부분에 대하여 상세히 분석할 것.
3. 답변의 길이가 평가 결과에 영향을 미치지 않도록 할 것. 3. 답변의 길이가 평가 결과에 영향을 미치지 않도록 할 것.
4. Additional Reference는 정답을 의미하며, 만약 해당 값이 제공된다면 평가 시 해당 정보를 참고할 것. 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