ArenaLite / README_kr.md
sonsus's picture
Update README_kr.md
1d0d849

A newer version of the Streamlit SDK is available: 1.48.0

Upgrade

Arena-Lite (ꡬ Arena-Lite)

μ•„λ ˆλ‚˜-λΌμ΄νŠΈλŠ” ν…ŒμŠ€νŠΈμ…‹ λͺ…λ Ήμ–΄λ³„λ‘œ 비ꡐ할 λͺ¨λΈλ“€μ˜ ν† λ„ˆλ¨ΌνŠΈλ₯Ό μˆ˜ν–‰ν•˜μ—¬ μ •ν™•ν•˜κ²Œ λͺ¨λΈλ“€μ˜ μˆœμœ„λ₯Ό λ§€κΉλ‹ˆλ‹€. 이것은 reference 아웃풋과 λΉ„κ΅ν•˜μ—¬ 승λ₯ μ„ λ§€κΈ°λŠ” 방법보닀 μ •ν™•ν•˜λ©° 쑰금 더 μ €λ ΄ν•©λ‹ˆλ‹€.

더 μžμ„Έν•œ λ‚΄μš©μ— λŒ€ν•΄μ„œλŠ” μ•„λž˜μ˜ 링크λ₯Ό μ°Έμ‘°ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

Quickstart

λ‘œμ»¬μ—μ„œ 슀트림릿 μ•±μœΌλ‘œ μ‹œμž‘ν•˜κΈ° (μΆ”μ²œ!)

git clone [THIS_REPO]
# install requirements below. we recommend miniforge to manage environment
cd streamlit_app_local
bash run.sh

더 μžμ„Έν•œ λ‚΄μš©μ€ [THIS_REPO]/streamlit_app_local/README.md 을 μ°Έμ‘°ν•˜μ„Έμš”!

CLI μ‚¬μš©

  • cli와 μ›Ή 앱은 μ„œλ‘œ 같은 μ½”λ“œλ₯Ό ν™œμš©ν•˜λ©°, μ•„λž˜μ˜ 디렉토리에 μžˆμŠ΅λ‹ˆλ‹€.
    • varco_arena/
  • vscode μƒμ—μ„œ 디버깅을 μœ„ν•œ 프리셋 ν”„λ‘¬ν”„νŠΈλ³„ ν…ŒμŠ€νŠΈ λͺ…λ Ήμ–΄λŠ” λ‹€μŒ νŒŒμΌμ— μ ν˜€μžˆμŠ΅λ‹ˆλ‹€.
    • varco_arena/.vscode/launch.json
## gpt-4o-mini as a judge
python main.py -i "./some/dirpath/to/jsonl/files" -o SOME_REL_PATH_TO_CREATE -m tournament -e "gpt-4o-mini"
## vllm-openai served LLM as a judge
python main.py -i "./some/dirpath/to/jsonl/files" -o SOME_REL_PATH_TO_CREATE -e SOME_MODEL_NAME_SERVED -m tournament -u "http://url_to/your/vllm_openai_server:someport"

# dbg lines
## openai api judge dbg
python main.py -i "rsc/inputs_for_dbg/dbg_400_error_inputs/" -o SOME_WANTED_TARGET_DIR -e gpt-4o-mini
## other testing lines
python main.py -i "rsc/inputs_for_dbg/[SOME_DIRECTORY]/" -o SOME_WANTED_TARGET_DIR -e gpt-4o-mini
## dummy judge dbg (checking errors without api requests)
python main.py -i "rsc/inputs_for_dbg/dbg_400_error_inputs/" -o SOME_WANTED_TARGET_DIR -e debug

Requirements

pip install -r requirements.txt # python 3.11

# Linux인 경우
uvloop
# Windows인 경우
winloop

Argument

  • -i, --input : μž…λ ₯ 파일 or 디렉토리 or 파일λͺ…에 λŒ€ν•œ μ •κ·œ ν‘œν˜„μ‹
  • -o, --output_dir : 좜λ ₯ 파일이 μ €μž₯λ˜λŠ” 디렉토리
  • -e, --evaluation : 평가 λͺ¨λΈ (e.g. "gpt-4o-2024-05-13", "gpt-4o-mini", vllmμ—μ„œ λ„μš΄ λͺ¨λΈ λͺ… λ“±)
  • -m, --matching_method: 맀치 방식 (κΈ°λ³Έκ°’ "tournament", "league" (λΉ„μΆ”μ²œ) )
  • -k, --openai_api_key : OpenAI API Key
  • -u, --openai_url: 둜컬 vLLM OpenAI μ„œλ²„ μ‚¬μš© μ‹œ URL(ipμ£Όμ†Œ+포트)

advanced

  • -j, --n_jobs : asyncio.semaphore()에 전달될 인자. Arenaκ°€ μ§„ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 기본값인 32 μ΄ν•˜λ‘œ λ‚΄λ €λ³΄μž
  • -p, --evalprompt : ν•΄λ‹Ή 디렉토리 μ°Έμ‘°
  • -lr, --limit_requests : vLLM OpenAI μ„œλ²„ μš”μ²­ μ œν•œ (default: 7,680)
  • -lt, --limit_tokens : vLLM OpenAI μ„œλ²„ 토큰 μ œν•œ (default: 15,728,640)

Input Data Format

input jsonl κ°€μ΄λ“œ 링크

Contributing & Customizing

git clone 및 dependency μ„€μΉ˜ 후에 ν•  일

pip install pre-commit
pre-commit install

commit ν•˜κΈ° 전에 ν•  일

bash precommit.sh # 이게 μ½”λ“œλ“€μ„ λ‹€ λ¦¬ν¬λ§·ν•΄μ€„κ±°μž„

πŸ“ μ»€μŠ€ν…€ ν”„λ‘¬ν”„νŠΈ μΆ”κ°€ν•˜κΈ°

μƒˆλ‘œμš΄ 평가 ν”„λ‘¬ν”„νŠΈλ₯Ό μΆ”κ°€ν•˜λŠ” 과정은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 졜근 Judge 둜직이 parsed_output λ©”μ†Œλ“œλ§Œ μ‚¬μš©ν•˜λ„λ‘ κ°„μ†Œν™”λ˜μ–΄ 이전보닀 μ‰½κ²Œ ν”„λ‘¬ν”„νŠΈλ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ°€μž₯ κ°„λ‹¨ν•œ 방법은 llmbar_brief.py와 llmbar_brief.yaml νŒŒμΌμ„ λ³΅μ‚¬ν•˜μ—¬ μžμ‹ λ§Œμ˜ ν”„λ‘¬ν”„νŠΈλ₯Ό λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€.

1. ν”„λ‘¬ν”„νŠΈ .py 및 .yaml 파일 생성

  • varco_arena/varco_arena_core/prompts/ κ²½λ‘œμ— my_prompt.py와 my_prompt.yaml처럼 νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.
  • my_prompt.py:
    • ComparisonPromptBaseλ₯Ό μƒμ†λ°›λŠ” 클래슀λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
    • parsed_output(self, response) λ©”μ†Œλ“œλ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” LLM Judge의 응닡(response)을 λ°›μ•„, 승자λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ²°μ • 토큰(예: 'a', 'b')을 λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • my_prompt.yaml:
    • sampling_parameters, decision_tokens, prompt_template λ“± ν”„λ‘¬ν”„νŠΈμ— ν•„μš”ν•œ μš”μ†Œλ“€μ„ μ •μ˜ν•©λ‹ˆλ‹€.
    • prompt_template 에 λ“€μ–΄κ°€λŠ” λ¬Έμžμ—΄μ€ string.Template으둜 처리되며 BasePrompt.complete_prompt() ν•¨μˆ˜λ₯Ό 톡해 eval_utils.pyμ—μ„œ μ΅œμ’… μ™„μ„±λ©λ‹ˆλ‹€.
    • ${task}, ${generated}, ${model_id}λ₯Ό prompt_template에 μ‚¬μš©ν•˜μ§€ λ§ˆμ„Έμš”. μ˜ˆμ•½λœ ν‚€μ›Œλ“œλ“€μž…λ‹ˆλ‹€.

2. prompts/__init__.py에 ν”„λ‘¬ν”„νŠΈ 등둝

  • μƒμ„±ν•œ ν”„λ‘¬ν”„νŠΈ 클래슀λ₯Ό import ν•©λ‹ˆλ‹€.
    from .my_prompt import MyPrompt
    
  • NAME2PROMPT_CLS λ”•μ…”λ„ˆλ¦¬μ— μƒˆ ν”„λ‘¬ν”„νŠΈ 이름과 클래슀 객체λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
    NAME2PROMPT_CLS = dict(
        # ... κΈ°μ‘΄ ν”„λ‘¬ν”„νŠΈλ“€
        my_prompt=MyPrompt(),
    )
    
  • load_prompt ν•¨μˆ˜μ˜ promptname 인자의 Literal νƒ€μž… νžŒνŠΈμ— μƒˆ ν”„λ‘¬ν”„νŠΈ 이름을 μΆ”κ°€ν•©λ‹ˆλ‹€.
    def load_prompt(
        promptname: Literal[
            # ... κΈ°μ‘΄ ν”„λ‘¬ν”„νŠΈ 이름듀
            "my_prompt",
        ],
        # ...
    ):
    

3. eval_prompt_list.txt에 ν”„λ‘¬ν”„νŠΈ μΆ”κ°€

  • ν”„λ‘œμ νŠΈ 루트의 eval_prompt_list.txt νŒŒμΌμ„ μ—΄κ³ , μƒˆ ν”„λ‘¬ν”„νŠΈμ˜ 이름(my_prompt)을 μƒˆ 쀄에 μΆ”κ°€ν•©λ‹ˆλ‹€.

4. (ꢌμž₯) ν…ŒμŠ€νŠΈ 및 디버깅

  • ν”„λ‘¬ν”„νŠΈκ°€ μ˜λ„λŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 디버깅을 ꢌμž₯ν•©λ‹ˆλ‹€.
  • .vscode/launch.json 파일의 "VA" μ„€μ •μ—μ„œ argsλ₯Ό λ‹€μŒκ³Ό 같이 μˆ˜μ •ν•©λ‹ˆλ‹€.
    • "-p", "translation_fortunecookie" 뢀뢄을 "-p", "my_prompt"둜 λ³€κ²½ν•©λ‹ˆλ‹€.
    • ν•„μš”μ‹œ "-i", "..." 뢀뢄에 μƒˆ ν”„λ‘¬ν”„νŠΈμ— μ ν•©ν•œ ν…ŒμŠ€νŠΈ 데이터 경둜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • VS Code의 Run and Debug νƒ­(Ctrl+Shift+D)으둜 μ΄λ™ν•˜μ—¬ "VA" 섀정을 μ„ νƒν•˜κ³  F5 ν‚€λ₯Ό 눌러 디버거λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • -o 뒀에 λͺ…μ‹œν•œ output 디렉토리 μ•ˆμ—μ„œ result.json λ₯Ό μ°Ύμ•„μ„œ μ›ν•˜λŠ”λŒ€λ‘œ λ™μž‘ν–ˆλŠ”μ§€ ν™•μΈν•΄λ³΄μ„Έμš”. λͺ¨λ“  judge와 λ§€μΉ˜μ— ν™œμš©λœ ν”„λ‘¬ν”„νŠΈ 정보가 λ‹΄κ²¨μžˆμŠ΅λ‹ˆλ‹€.

문의: 손선일

  • λ‚΄κ°€ λ§Œλ“  ν”„λ‘¬ν”„νŠΈλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άμ–΄μš”
    • ./varco_arena/prompts/ 에선 각쒅 ν”„λ‘¬ν”„νŠΈ 클래슀 및 yaml 파일 ν˜•νƒœλ‘œ μ •μ˜λœ ν”„λ‘¬ν”„νŠΈλ₯Ό λ‘œλ“œν•©λ‹ˆλ‹€. 프리셋을 μ°Έμ‘°ν•˜μ—¬ μž‘μ„±ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.
  • ν…ŒμŠ€νŠΈμ…‹ λ³„λ‘œ λ‹€λ₯Έ 평가 ν”„λ‘¬ν”„νŠΈλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άμ–΄μš” (e.g. μž‘μ—…μ— 따라 λ‹€λ₯Έ ν”„λ‘¬ν”„νŠΈλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άμ–΄μš”)
    • μœ„ κ±Έμ–΄λ“œλ¦° 링크의 load_prompt λ₯Ό ν†΅ν•΄μ„œ promptname + task ν˜•νƒœλ‘œ ./varco_arena_core/manager.py:async_run ν”„λ‘¬ν”„νŠΈκ°€ λ‘œλ“œλ˜λ„λ‘ ν•΄λ†“μ•˜μŠ΅λ‹ˆλ‹€.

Special Thanks to (contributors)

  • 이민호 (@λŒ€ν™”λͺ¨λΈνŒ€, NCSOFT) github
    • query wrapper
    • rag prompt
  • 였주민 (@생성λͺ¨λΈνŒ€, NCSOFT)
    • overall prototyping of the system in haste

Citation

저희 μž‘μ—…λ¬Όμ΄ 도움이 λ˜μ—ˆλ‹€λ©΄ 저희도 도움을 λ°›μ•„λ³Ό 수 μžˆμ„κΉŒμš”?πŸ˜‰

@misc{son2024varcoarenatournamentapproach,
      title={VARCO Arena: A Tournament Approach to Reference-Free Benchmarking Large Language Models},
      author={Seonil Son and Ju-Min Oh and Heegon Jin and Cheolhun Jang and Jeongbeom Jeong and Kuntae Kim},
      year={2024},
      eprint={2411.01281},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2411.01281},
}

페이퍼 μ‹€ν—˜ 데이터 (μž¬ν˜„μš©)

https://huggingface.co/datasets/fgenie777/Arena-Lite-Experiments-Result-Data/tree/main