Commit e3983fa8 authored by Liky98's avatar Liky98
Browse files

DART 데이터 추가

parent a0388faf
...@@ -157,6 +157,9 @@ python lotte-score.py -p evaluated/LDCC/Chat-Mistral-Nemo-12B-32k/lotte_single_t ...@@ -157,6 +157,9 @@ python lotte-score.py -p evaluated/LDCC/Chat-Mistral-Nemo-12B-32k/lotte_single_t
#텍스트를 SQL로 변환해주는 작업 #텍스트를 SQL로 변환해주는 작업
"text2sql":"DB 스키마 및 예시를 고려하여 질문에 적합한 SQL문을 단계별로 생각해가며 생성합니다. 답변은 조건을 반드시 만족해야 합니다.", "text2sql":"DB 스키마 및 예시를 고려하여 질문에 적합한 SQL문을 단계별로 생각해가며 생성합니다. 답변은 조건을 반드시 만족해야 합니다.",
#SQL를 텍스트로 변환해주는 작업
"sql2text":"주어진 `SQL 실행 쿼리` 와 `SQL 실행 결과`에서 확인할 수 있는 정보를 바탕으로 주어진 `질문`에 대해 답변해야 합니다. 답변은 조건을 반드시 만족해야 합니다.",
#롯데 관련 질문에 답변을 제공해주는 작업 #롯데 관련 질문에 답변을 제공해주는 작업
"lotte_qa":"", "lotte_qa":"",
...@@ -165,6 +168,13 @@ python lotte-score.py -p evaluated/LDCC/Chat-Mistral-Nemo-12B-32k/lotte_single_t ...@@ -165,6 +168,13 @@ python lotte-score.py -p evaluated/LDCC/Chat-Mistral-Nemo-12B-32k/lotte_single_t
#검색된 문서를 질문과 관련된 내용만 남도록 요약해주는 작업 #검색된 문서를 질문과 관련된 내용만 남도록 요약해주는 작업
"mrc_summary":"다음 문서를 질문과 관련있는 내용만 남도록 요약하세요. 요약 할때 질문과 관련된 정보는 최대한 유지해야 합니다. 만약 문서의 내용이 질문과 관련이 없다면, 관련 내용을 찾을 수 없다고 답하세요." "mrc_summary":"다음 문서를 질문과 관련있는 내용만 남도록 요약하세요. 요약 할때 질문과 관련된 정보는 최대한 유지해야 합니다. 만약 문서의 내용이 질문과 관련이 없다면, 관련 내용을 찾을 수 없다고 답하세요."
#dart 기반 텍스트를 SQL로 변환해주는 작업
"text2sql_dart":"기업 재무제표 DB 스키마 및 조건을 고려하여 질문에 적합한 SQL문을 생성합니다. 답변은 조건을 반드시 만족해야 합니다."
#dart 기반 SQL을 TEXT로 변환해주는 작업
"sql2text_dart":"주어진 `SQL 실행 쿼리` 와 `SQL 실행 결과`에서 확인할 수 있는 정보를 바탕으로 주어진 `질문`에 대해 답변해야 합니다. 답변은 조건을 반드시 만족해야 합니다.",
``` ```
- **모델 학습용 데이터 포맷 예시** - **모델 학습용 데이터 포맷 예시**
......
...@@ -43,7 +43,7 @@ llm = LLM( ...@@ -43,7 +43,7 @@ llm = LLM(
tensor_parallel_size=gpu_counts, tensor_parallel_size=gpu_counts,
max_model_len=args.model_len, max_model_len=args.model_len,
gpu_memory_utilization=0.8, gpu_memory_utilization=0.8,
trust_remote_code=True, # ! trust_remote_code=True,
) )
logger.info("LLM initialized successfully") logger.info("LLM initialized successfully")
......
...@@ -74,7 +74,7 @@ def create_answers( ...@@ -74,7 +74,7 @@ def create_answers(
messages=[ messages=[
{ {
"role": "system", "role": "system",
"content": JUDGE_TEMPLATE["single_turn"], "content": JUDGE_TEMPLATE["lotte_eval_template"],
}, },
{"role": "user", "content": prompt}, {"role": "user", "content": prompt},
], ],
...@@ -87,7 +87,7 @@ def create_answers( ...@@ -87,7 +87,7 @@ def create_answers(
messages=[ messages=[
{ {
"role": "system", "role": "system",
"content": JUDGE_TEMPLATE["single_turn"], "content": JUDGE_TEMPLATE["lotte_eval_template"],
}, },
{"role": "user", "content": prompt}, {"role": "user", "content": prompt},
], ],
......
{"id": 0, "category": "search_keyword", "questions": ["현대 물리학에서 다중우주 이론과 끈 이론의 관계에 대해 설명해줘."], "references": ["다중우주 이론과 끈 이론의 관계"]}
{"id": 0, "category": "search_keyword", "questions": ["차량 엔진 내 연료 효율을 극대화하는 방법에 대한 최신 연구 논문은?"], "references": ["차량 엔진 내 연료 효율 극대화 방법 논문"]}
{"id": 0, "category": "search_keyword", "questions": ["세상에서 가장 맛있는 음식을 알려주고 추천해줘"], "references": ["세상에서 가장 맛있는 음식"]}
{"id": 0, "category": "search_keyword", "questions": ["최근에 유행하고 있는 트렌드에는 뭐가있어?"], "references": ["최신 유행 트렌드"]}
{"id": 0, "category": "lotte_qa", "questions": ["롯데 창립일과 창업주가 누구야"], "references": ["1948년 6월 28일, 신격호"]}
{"id": 0, "category": "lotte_qa", "questions": ["롯데타워는 언제 개장했어?"], "references": ["2017년 4월 3일"]}
{"id": 0, "category": "lotte_qa", "questions": ["SKY31 컨벤션에 대해 설명해줘"], "references": ["롯데물산이 운영하는 회의 시설"]}
{"id": 0, "category": "lotte_qa", "questions": ["L-SWAT이 뭐야"], "references": ["Lotte(World Tower) - Special Weapons And Tactics, 롯데에서 운영하는 국내 최초이자 유일의 민간 테러대응팀, 계획적인 테러 위협을 롯데그룹 차원에서 직접 대비하기 위한 조직 "]}
{"id": 0, "category": "lotte_qa", "questions": ["롯데는 왜 롯데야?"], "references": ["젊은 베르테르의 슬픔의 여주인공인 샤를로테(샤롯데)에서 따온 것"]}
{"id": 0, "category": "lotte_qa", "questions": ["엔제리너스 아아 가격 얼마야"], "references": ["일반가: 4500원"]}
{"id": 0, "category": "", "questions": [""], "references": [null]}
{"id": 0, "category": "", "questions": [""], "references": [null]} {"id": 0, "category": "", "questions": [""], "references": [null]}
{"id": 0, "category": "", "questions": [""], "references": [null]} {"id": 0, "category": "", "questions": [""], "references": [null]}
{"id": 0, "category": "", "questions": [""], "references": [null]} {"id": 0, "category": "", "questions": [""], "references": [null]}
{"id": 0, "category": "", "questions": [""], "references": [null]} {"id": 0, "category": "", "questions": [""], "references": [null]}
{"id": 0, "category": "", "questions": [""], "references": [null]} {"id": 0, "category": "", "questions": [""], "references": [null]}
{"id": 0, "category": "sql2text_dart", "questions": ["## SQL 실행 쿼리 :\n{}\n\n## SQL 실행결과:\n {}\n\n## 질문 :\n{}}"], "references": [null]}
# 만들고 있음
{"id": 0, "category": "sql2text_dart", "questions": ["## SQL 실행 쿼리 :\nSELECT bsns_year AS '연도', corp_name AS '회사명', thstrm_amount AS '매출액' FROM ai_dart_corp_report WHERE corp_name = '삼성전자' AND account_nm = '매출액' AND fs_nm = '연결재무제표' AND thstrm_nm REGEXP '^제 [0-9]+ 기$' AND bsns_year BETWEEN YEAR(NOW()) - 4 AND YEAR(NOW()) LIMIT 20;\n\n## SQL 실행결과:\n 연도: 2020 / 회사명: 삼성전자 / 매출액: 236조 8,069억 8,800만 원 || 연도: 2021 / 회사명: 삼성전자 / 매출액: 279조 6,047억 9,900만 원 || 연도: 2022 / 회사명: 삼성전자 / 매출액: 302조 2,313억 6,000만 원\n\n## 질문 :\n근 5년간 삼전 매출 비교해줘"], "references": [null]}
{"id": 0, "category": "sql2text_dart", "questions": ["## SQL 실행 쿼리 :\nSELECT AVG(CAST(REPLACE(thstrm_amount, ',', '') AS SIGNED)) AS '평균 매출' FROM ai_dart_corp_report WHERE corp_name = '한진' AND account_nm = '매출액' AND fs_nm = '연결재무제표' AND thstrm_nm REGEXP '^제 [0-9]+ 기$' AND bsns_year BETWEEN 2021 AND 2023 LIMIT 20;\n\n## SQL 실행결과:\n 평균 매출: 2조 7,203억 6,028만 원\n\n## 질문 :\n한진의 2021년부터 2023년까지 평균 매출을 구해주세요}"], "references": [null]}
This diff is collapsed.
...@@ -2,4 +2,5 @@ ruff==0.4.9 ...@@ -2,4 +2,5 @@ ruff==0.4.9
transformers transformers
vllm vllm
openai openai
openpyxl openpyxl
\ No newline at end of file aphrodite
\ No newline at end of file
#!/bin/bash
# 변수 설정
huggingface-cli login --token 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 #hf key 입력해주세요.
API_KEY="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" #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에 결과가 병합되어 저장되었습니다."
#!/bin/bash #!/bin/bash
# 변수 설정 # 변수 설정
MODEL="Qwen/Qwen2.5-7B-Instruct" #허깅페이스 모델 huggingface-cli login --token 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 #hf key 입력해주세요.
API_KEY="sk-##" #openai api key 입력해주세요. API_KEY="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" #openai api key 입력해주세요.
GPU_DEVICES=2 # 사용할 GPU 번호
MODEL_LEN=4096 MODEL="LDCC/Chat-Qwen2.5-14B-32k" #허깅페이스 모델
GPU_DEVICES=0 # 사용할 GPU 번호
MODEL_LEN=32000
# 아래부터는 안건드려도 됩니다. # 아래부터는 안건드려도 됩니다.
OUTPUT_DIR="generated/$MODEL" OUTPUT_DIR="generated/$MODEL"
...@@ -12,22 +14,22 @@ EVAL_DIR="evaluated/$MODEL" ...@@ -12,22 +14,22 @@ EVAL_DIR="evaluated/$MODEL"
JUDGE_MODEL="gpt-4o" JUDGE_MODEL="gpt-4o"
# 생성 스크립트 실행 # 생성 스크립트 실행
python3 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
python3 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
# 평가 스크립트 실행 # 평가 스크립트 실행
python3 evaluator.py -o $OUTPUT_DIR -m $MODEL -k $API_KEY -t 30 -j $JUDGE_MODEL python evaluator.py -o $OUTPUT_DIR -m $MODEL -k $API_KEY -t 30 -j $JUDGE_MODEL
python3 lotte-evaluator.py -o $OUTPUT_DIR -m $MODEL -k $API_KEY -t 30 -j $JUDGE_MODEL python lotte-evaluator.py -o $OUTPUT_DIR -m $MODEL -k $API_KEY -t 30 -j $JUDGE_MODEL
# 점수 계산 스크립트 실행 # 점수 계산 스크립트 실행
python3 score.py -p "$EVAL_DIR/default.jsonl" python score.py -p "$EVAL_DIR/default.jsonl"
python3 score.py -p "$EVAL_DIR/1-shot.jsonl" python score.py -p "$EVAL_DIR/1-shot.jsonl"
python3 score.py -p "$EVAL_DIR/cot-1-shot.jsonl" python score.py -p "$EVAL_DIR/cot-1-shot.jsonl"
python3 lotte-score.py -p "$EVAL_DIR/lotte_single_turn.jsonl" python lotte-score.py -p "$EVAL_DIR/lotte_single_turn.jsonl"
# 점수 결합 스크립트 실행 # 점수 결합 스크립트 실행
python3 combine_scores.py -i "$EVAL_DIR" -o "$EVAL_DIR/combined_scores.xlsx" python combine_scores.py -i "$EVAL_DIR" -o "$EVAL_DIR/combined_scores.xlsx"
# 한 엑셀파일에 평가 결과를 종합시킨다. # 한 엑셀파일에 평가 결과를 종합시킨다.
python3 merge_results.py python merge_results.py
echo "merged_scores.xlsx에 결과가 병합되어 저장되었습니다." echo "merged_scores.xlsx에 결과가 병합되어 저장되었습니다."
...@@ -29,6 +29,9 @@ LOTTE_PROMPT_STRATEGY={ ...@@ -29,6 +29,9 @@ LOTTE_PROMPT_STRATEGY={
#텍스트를 SQL로 변환해주는 작업 #텍스트를 SQL로 변환해주는 작업
"text2sql":"DB 스키마 및 예시를 고려하여 질문에 적합한 SQL문을 단계별로 생각해가며 생성합니다. 답변은 조건을 반드시 만족해야 합니다.", "text2sql":"DB 스키마 및 예시를 고려하여 질문에 적합한 SQL문을 단계별로 생각해가며 생성합니다. 답변은 조건을 반드시 만족해야 합니다.",
#SQL를 텍스트로 변환해주는 작업
"sql2text":"주어진 `SQL 실행 쿼리` 와 `SQL 실행 결과`에서 확인할 수 있는 정보를 바탕으로 주어진 `질문`에 대해 답변해야 합니다. 답변은 조건을 반드시 만족해야 합니다.",
#롯데 관련 질문에 답변을 제공해주는 작업 #롯데 관련 질문에 답변을 제공해주는 작업
"lotte_qa":"", "lotte_qa":"",
...@@ -38,6 +41,11 @@ LOTTE_PROMPT_STRATEGY={ ...@@ -38,6 +41,11 @@ LOTTE_PROMPT_STRATEGY={
#검색된 문서를 질문과 관련된 내용만 남도록 요약해주는 작업 #검색된 문서를 질문과 관련된 내용만 남도록 요약해주는 작업
"mrc_summary":"다음 문서를 질문과 관련있는 내용만 남도록 요약하세요. 요약 할때 질문과 관련된 정보는 최대한 유지해야 합니다. 만약 문서의 내용이 질문과 관련이 없다면, 관련 내용을 찾을 수 없다고 답하세요.", "mrc_summary":"다음 문서를 질문과 관련있는 내용만 남도록 요약하세요. 요약 할때 질문과 관련된 정보는 최대한 유지해야 합니다. 만약 문서의 내용이 질문과 관련이 없다면, 관련 내용을 찾을 수 없다고 답하세요.",
#dart 기반 텍스트를 SQL로 변환해주는 작업
"text2sql_dart":"기업 재무제표 DB 스키마 및 조건을 고려하여 질문에 적합한 SQL문을 생성합니다. 답변은 조건을 반드시 만족해야 합니다.",
#dart 기반 SQL을 TEXT로 변환해주는 작업
"sql2text_dart":"주어진 `SQL 실행 쿼리` 와 `SQL 실행 결과`에서 확인할 수 있는 정보를 바탕으로 주어진 `질문`에 대해 답변해야 합니다. 답변은 조건을 반드시 만족해야 합니다.",
} }
PROMPT_STRATEGY = { PROMPT_STRATEGY = {
...@@ -176,6 +184,26 @@ JUDGE_TEMPLATE = { ...@@ -176,6 +184,26 @@ JUDGE_TEMPLATE = {
# 평가 출력 방식 # 평가 출력 방식
**주어진 Question에 집중하여** Model's Response에 대한 평가와 1~10의 점수를 부여한다. 답변에 대한 평가는 4~5 문장으로 규칙을 참고하여 상세히 작성한다. **주어진 Question에 집중하여** Model's Response에 대한 평가와 1~10의 점수를 부여한다. 답변에 대한 평가는 4~5 문장으로 규칙을 참고하여 상세히 작성한다.
# 출력 형식
평가: 평가 내용
점수: 숫자""",
"lotte_eval_template": """너는 질문에 대한 한국어 언어 모델의 답변을 매우 꼼꼼히 평가할 것이다. 공정한 평가를 위해 아래의 규칙을 준수한다.
# 기본 규칙
1. 질문의 요구사항을 충분히 반영하였는지 상세히 분석할 것.
2. 답변 과정에서 누락되었거나 포함되지 못하여 아쉬운 부분에 대하여 상세히 분석할 것.
3. 답변의 길이가 평가 결과에 영향을 미치지 않도록 할 것.
4. Additional Reference는 정답을 의미하며, 만약 해당 값이 제공된다면 평가 시 해당 정보를 참고할 것.
# 언어 요구사항
- 모델은 반드시 한국어로 답변해야 하며, 다른 언어로의 답변은 절대 허용되지 않는다.
- 예외적으로 질문이 영어로 답변할 것을 요구할 때에만 영어 답변이 허용된다.
- 한국어로 답변하지 않을 경우, 점수는 0점 처리된다.
- 언어 요구사항을 충족하는 것은 필수적이나, 이 요구사항의 충족이 답변의 질적 평가에 추가 점수로 이어지지는 않는다.
# 평가 출력 방식
**주어진 Question에 집중하여** Model's Response에 대한 평가와 1~10의 점수를 부여한다. 답변에 대한 평가는 4~5 문장으로 규칙을 참고하여 상세히 작성한다.
# 출력 형식 # 출력 형식
평가: 평가 내용 평가: 평가 내용
점수: 숫자""", 점수: 숫자""",
......
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