--- title: Ko-FreshQA Leaderboard emoji: πŸš€ colorFrom: blue colorTo: green sdk: gradio app_file: app.py pinned: false license: apache-2.0 hf_oauth: true --- ## Ko-FreshQA Leaderboard ν•œκ΅­μ–΄ FreshQA 기반 μžλ™ 평가/λ¦¬λ”λ³΄λ“œ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. μ°Έκ°€μžκ°€ μ—…λ‘œλ“œν•œ CSV의 `model_response`λ₯Ό κΈ°μ€€ 데이터와 λ§€μΉ­ν•˜κ³ , Upstage Solar λͺ¨λΈλ‘œ Relaxed/Strict 평가λ₯Ό μˆ˜ν–‰ν•œ λ’€ κ²°κ³Όλ₯Ό λ¦¬λ”λ³΄λ“œμ— λ°˜μ˜ν•©λ‹ˆλ‹€. Gradio UI둜 μ‹€ν–‰λ©λ‹ˆλ‹€. ### 핡심 κΈ°λŠ₯ - 데이터셋 배포: DEV/TEST CSV λ‹€μš΄λ‘œλ“œ νƒ­ 제곡 - 제좜 및 μžλ™ 평가: μ—…λ‘œλ“œλœ CSVλ₯Ό 병합 β†’ 평가 β†’ μ§€ν‘œ 집계 β†’ λ¦¬λ”λ³΄λ“œ 반영 - 상세 μ§€ν‘œ: fact type, μ „μ œ μœ νš¨μ„±(vp/fp), hop(one/multi), 연도(old/new), 도메인별 정확도 - 제좜 μ œν•œ(μ˜΅μ…˜): μ‚¬μš©μžλ³„ ν•˜λ£¨ 3회 μ œν•œ κΈ°λŠ₯ (Hugging Face μ €μž₯μ†Œ 기반) --- ## 디렉터리 ꡬ쑰 - `app.py`: Gradio μ•± μ΄ˆκΈ°ν™” 및 νƒ­ ꡬ성 - `config.py`: ν™˜κ²½λ³€μˆ˜ λ‘œλ“œ 및 ν•„μˆ˜ μ„€μ • 검증 - `freshqa/` - `fresheval.py`: 단일 μƒ˜ν”Œ 평가 둜직 - `fresheval_parallel.py`: λ°μ΄ν„°ν”„λ ˆμž„ 병렬 평가 래퍼 - `freshqa_acc.py`: 평가 κ²°κ³Ό 집계(정확도 계산 및 도메인별 톡계) - `merge_csv_with_model_response.py`: κΈ°μ€€ 데이터와 μ‚¬μš©μž CSV 병합 - `src/` - `submission_handler.py`: μ œμΆœλΆ€ν„° λ¦¬λ”λ³΄λ“œ λ°˜μ˜κΉŒμ§€ 전체 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ - `submission_tracker.py`: 제좜 이λ ₯ 좔적(HF repo 기반, μ˜΅μ…˜) - `leaderboard_manager.py`: λ¦¬λ”λ³΄λ“œ CSV λ‘œλ“œ/μ €μž₯/ν‘œμ‹œμš© 정리 - `quick_csv_loader.py`, `hf_private_csv_loader.py`: HF Private repoμ—μ„œ CSV λ‘œλ“œ μœ ν‹Έ - `api_key_rotator.py`, `utils.py`: μœ ν‹Έλ¦¬ν‹° - `ui/` - `leaderboard_tab.py`, `submission_tab.py`, `dataset_tab.py`, `styles.css` - `data/leaderboard_results.csv`: λ¦¬λ”λ³΄λ“œ λˆ„μ  데이터 --- ## μš”κ΅¬ 사항 - Python 3.10 - Upstage API ν‚€(단일 λ˜λŠ” 닀쀑) - Hugging Face 토큰(HF Private repo μ ‘κ·Όμš©) - Hugging Face Dataset repo - κΈ°μ€€ 데이터: `FRESHQA_DATA_REPO_ID` / `FRESHQA_DATA_FILENAME` - (μ˜΅μ…˜) 제좜 좔적 μ €μž₯μ†Œ: `SUBMISSION_TRACKER_REPO_ID` - (μ˜΅μ…˜) λ¦¬λ”λ³΄λ“œλ₯Ό Hugging Face dataset에 λ°±μ—…ν•˜λ €λ©΄ `UPLOAD_LEADERBOARD_TO_HF=true` μ„€μ • μ„€μΉ˜: ```bash python -m venv venv && source venv/bin/activate pip install -r requirements.txt ``` λ˜λŠ” Conda: ```bash conda env create -f environment.yml conda activate freshqa-leaderboard ``` --- ## ν™˜κ²½ λ³€μˆ˜(.env) `env.example`λ₯Ό `.env`둜 볡사 ν›„ κ°’ μ±„μš°κΈ°: ```bash cp env.example .env ``` ν•„μˆ˜/μ£Όμš” λ³€μˆ˜ - HF_TOKEN - FRESHQA_DATA_REPO_ID - FRESHQA_DATA_FILENAME (κΈ°λ³Έκ°’: ko-freshqa_2025_total.csv) - UPSTAGE_API_KEY λ˜λŠ” UPSTAGE_API_KEYS(콀마 ꡬ뢄) - ENABLE_SUBMISSION_LIMIT (κΈ°λ³Έ: true) - SUBMISSION_TRACKER_REPO_ID (제좜 μ œν•œ μ‚¬μš© μ‹œ ν•„μš”) - UPLOAD_LEADERBOARD_TO_HF - true: λ¦¬λ”λ³΄λ“œλ₯Ό HF Private Dataset에도 λ°±μ—…(ꢌμž₯: 운영 ν™˜κ²½) - false: 둜컬 CSVμ—λ§Œ μ €μž₯(ꢌμž₯: 둜컬 개발) 검증: μ•± μ‹œμž‘ μ‹œ `Config.validate_required_configs()`κ°€ λˆ„λ½λœ ν•„μˆ˜ 섀정을 κ²€μ‚¬ν•©λ‹ˆλ‹€. --- ## μ‹€ν–‰ 둜컬: ```bash python app.py ``` κΈ°λ³Έ 포트: 7860 Hugging Face Spaces: - ν™˜κ²½λ³€μˆ˜ `SPACE_ID`κ°€ μ‘΄μž¬ν•˜λ©΄ Spaces λͺ¨λ“œλ‘œ λ™μž‘ν•©λ‹ˆλ‹€. Docker(μ˜΅μ…˜): - `Dockerfile`, `docker-compose.yml` 제곡 (ν•„μš” μ‹œ 섀정에 맞게 μˆ˜μ •) --- ## μ‚¬μš© 방법(Gradio UI) 1) 데이터셋 νƒ­ - DEV/TEST CSV λ‹€μš΄λ‘œλ“œ 2) 제좜 및 평가 νƒ­ - μ—…λ‘œλ“œ: TEST CSV에 `model_response`κ°€ μ±„μ›Œμ§„ 파일 - μž…λ ₯: 제좜자 이름, μ‚¬μš© λͺ¨λΈ, μ„€λͺ… - 평가: Upstage Solar λͺ¨λΈλ‘œ Relaxed/Strict λ™μ‹œ μˆ˜ν–‰ - 좜λ ₯: 전체/μ„ΈλΆ€ μ§€ν‘œκ°€ κ³„μ‚°λ˜μ–΄ λ¦¬λ”λ³΄λ“œμ— 반영 3) λ¦¬λ”λ³΄λ“œ νƒ­ - 제좜 κ²°κ³Όκ°€ `data/leaderboard_results.csv`에 λˆ„μ  - (μ˜΅μ…˜) `UPLOAD_LEADERBOARD_TO_HF=true`인 경우 Hugging Face Dataset에도 `leaderboard_results.csv`둜 μžλ™ μ—…λ‘œλ“œλ©λ‹ˆλ‹€. - 검색/μƒˆλ‘œκ³ μΉ¨ κ°€λŠ₯ --- ## λ™μž‘ 흐름(λ‚΄λΆ€) 1) 제좜 μ ‘μˆ˜: `src/submission_handler.py::process_submission` 2) μ‚¬μš©μž CSV λ‘œλ“œ β†’ κΈ°μ€€ 데이터와 병합: - `freshqa/merge_csv_with_model_response.py::merge_dataframe_with_model_response_df` 3) 평가: - `freshqa/fresheval_parallel.py::evaluate_dataframe` β†’ `freshqa/fresheval.py::FreshEval` 4) 정확도 집계: - `freshqa/freshqa_acc.py::calculate_accuracy`, `process_freshqa_dataframe` 5) μ €μž₯: - λ¦¬λ”λ³΄λ“œ: `src/leaderboard_manager.py::append_to_leaderboard_data` - (μ˜΅μ…˜) λ¦¬λ”λ³΄λ“œ HF μ €μž₯μ†Œ λ°±μ—…: `UPLOAD_LEADERBOARD_TO_HF=true`일 λ•Œλ§Œ - (μ˜΅μ…˜) 제좜 이λ ₯: `src/submission_tracker.py` (ENABLE_SUBMISSION_LIMIT=true 일 λ•Œλ§Œ) 주의: `ENABLE_SUBMISSION_LIMIT=false`인 경우, 제좜 이λ ₯ μΆ”μ μš© Hugging Face μ €μž₯μ†Œ 접근을 μ‹œλ„ν•˜μ§€ μ•Šλ„λ‘ μ½”λ“œκ°€ λ°˜μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. --- ## 제좜 μ œν•œ(μ˜΅μ…˜) - μ„€μ •: `ENABLE_SUBMISSION_LIMIT=true`(κΈ°λ³Έ) - μ €μž₯μ†Œ: `SUBMISSION_TRACKER_REPO_ID`에 `user_submissions.json` 관리 - 둜직: - ν•œ μ‚¬μš©μž ν•˜λ£¨ 3회 성곡 μ œμΆœκΉŒμ§€ 카운트 - ν•œκ΅­ μ‹œκ°„ κΈ°μ€€ 00:00에 일자 λ‹¨μœ„λ‘œ 카운트 - λΉ„ν™œμ„±ν™” μ‹œ(HF μ €μž₯μ†Œ μ ‘κ·Ό μ—†μŒ): `SubmissionHandler`κ°€ 좔적기λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠμŒ --- ## νŠΈλŸ¬λΈ”μŠˆνŒ… - μ‹œμž‘ μ‹œ β€œν•„μˆ˜ μ„€μ • λˆ„λ½β€ 였λ₯˜ - `.env`μ—μ„œ `UPSTAGE_API_KEY(or KEYS)`, `HF_TOKEN`, `FRESHQA_DATA_REPO_ID` 확인 - 제좜 μ œν•œ λΉ„ν™œμ„±ν™”μΈλ° HF 404 κ²½κ³ κ°€ λ³΄μž„ - ν˜„ 버전은 `ENABLE_SUBMISSION_LIMIT=false`일 λ•Œ 제좜 좔적기λ₯Ό μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šλ„λ‘ μˆ˜μ •λ¨ - HF 404 (제좜 μ œν•œ ν™œμ„±ν™”) - `SUBMISSION_TRACKER_REPO_ID` μ €μž₯μ†Œμ— `user_submissions.json`이 μ—†μœΌλ©΄ 졜초 μ ‘κ·Ό μ‹œ 404κ°€ λ‚  수 μžˆμŠ΅λ‹ˆλ‹€. νŒŒμΌμ„ 빈 JSON `{}`으둜 생성해 λ‘μ„Έμš”. --- ## λΌμ΄μ„ μŠ€/좜처 - λ³Έ λ¦¬λ”λ³΄λ“œλŠ” FreshQAμ—μ„œ μ˜κ°μ„ λ°›μ•„ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 문의 사항은 이슈둜 등둝해 μ£Όμ„Έμš”.