Sound / README_eval_flex.sh
Wendy-Fly's picture
Upload README_eval_flex.sh with huggingface_hub
112ed8a verified
#!/bin/bash
# โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
# โ•‘ AIPF ็ตๆดป่ฏ„ไผฐ่„šๆœฌไฝฟ็”จๆŒ‡ๅ— (้…ๅˆ run_eval_flex.sh) โ•‘
# โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
#
# ๆœฌๆ–‡ไปถๆ˜ฏ run_eval_flex.sh ็š„่ฏดๆ˜Žๆ–‡ๆกฃ๏ผŒไธ้œ€่ฆ็›ดๆŽฅๆ‰ง่กŒใ€‚
# ๅฎž้™…่ฟ่กŒ่ฏท็”จ: bash run_eval_flex.sh [ๅ‚ๆ•ฐ]
#
#
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ 1. ่ƒŒๆ™ฏไธŽๆ€่ทฏ โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
#
# AIPF (AI Policy Framework) ็š„ๆ ธๅฟƒ่ฏ„ๆต‹ไปปๅŠกๆ˜ฏ๏ผš็ป™ๅฎšไธ€ๆกๅพ…่ฏ„ๅ†…ๅฎน๏ผˆgolden set๏ผ‰๏ผŒ
# ๅœจไธ€ๆŠŠๅทฒๆŽ’ๅฅฝๅบ็š„"ๅฐบๅญ"๏ผˆruler๏ผŒ็บฆ 200 ๆกๆ ‡ๆณจๆ ทๆœฌ๏ผ‰ไธŠๆ‰พๅˆฐๅฎƒๅบ”่ฏฅๆ’ๅ…ฅ็š„ไฝ็ฝฎ๏ผŒ
# ไปŽ่€Œๅพ—ๅˆฐไธ€ไธชไธฅ้‡็จ‹ๅบฆๅˆ†ๆ•ฐใ€‚ๆ‰พไฝ็ฝฎ็š„่ฟ‡็จ‹ไพ่ต– LLM ๅš pairwise comparison๏ผˆไธคไธคๆฏ”่พƒ๏ผ‰ใ€‚
#
# ้—ฎ้ข˜ๅœจไบŽ๏ผšๅฐบๅญๆœ‰ 200 ๆก๏ผŒไธๅฏ่ƒฝ้€ๆกๆฏ”่พƒ๏ผˆๅคช่ดตๅคชๆ…ข๏ผ‰๏ผŒๆ‰€ไปฅ้œ€่ฆๆœ็ดข็ญ–็•ฅๆฅๅ†ณๅฎš
# "่ทŸๅฐบๅญไธŠ็š„ๅ“ชๅ‡ ๆกๅŽปๆฏ”"ใ€‚็›ฎๅ‰ๆœ‰ไธคไธชๅ…ณ้”ฎ็š„ๅฏ่ฐƒ็ปดๅบฆ๏ผš
#
# ใ€็ปดๅบฆไธ€๏ผšๆฏ”่พƒ่ฝฎๆฌก (num_rounds)ใ€‘
# - 8 ่ฝฎ๏ผšๆฏๆกๆ ทๆœฌ่ทŸๅฐบๅญๅš 8 ๆฌก LLM pairwise comparison๏ผŒ็ฒพๅบฆ้ซ˜ไฝ†ๆˆๆœฌ็ฟปๅ€
# - 4 ่ฝฎ๏ผšๅชๆฏ” 4 ๆฌก๏ผŒ็œไธ€ๅŠ LLM ่ฐƒ็”จ๏ผŒไฝ†ๅฏ่ƒฝไธๅคŸ็ฒพ็กฎ
#
# ใ€็ปดๅบฆไบŒ๏ผšๆ˜ฏๅฆ็”จ embedding ๅš warm-startใ€‘
# - ๆ—  warm-start๏ผš็ฌฌไธ€่ฝฎ็”จๅ‡ๅŒ€ๅˆ†ๆฎต้‡‡ๆ ท๏ผŒไปŽๅฐบๅญ้‡Œ็ญ‰้—ด่ท้€‰ๅ€™้€‰ๅŽปๆฏ”่พƒ
# - ๆœ‰ warm-start๏ผšๅ…ˆ็”จ embedding ๆจกๅž‹ (Qwen3-Embedding-8B) ๆŠŠๅพ…่ฏ„ๅ†…ๅฎนๅ’Œๅฐบๅญ
# ๅ…จ้ƒจ็ผ–็ ๆˆๅ‘้‡๏ผŒ็ฎ— cosine ็›ธไผผๅบฆๆ‰พๅˆฐๆœ€่ฟ‘้‚ป๏ผŒ็”จๆœ€่ฟ‘้‚ป็š„ rank ไฝœไธบๆœ็ดข่ตท็‚นใ€‚
# ่ฟ™ๆ ท็ฌฌไธ€่ฝฎๅฐฑ่ƒฝไปŽไธ€ไธช"ๅคงๆฆ‚ๅฏน"็š„ไฝ็ฝฎๅผ€ๅง‹ๆฏ”่พƒ๏ผŒๅŽ็ปญๅ‡ ่ฝฎ็”จๆฅๅพฎ่ฐƒ๏ผŒ
# ็†่ฎบไธŠๅฏไปฅ็”จๆ›ดๅฐ‘็š„่ฝฎๆฌก่พพๅˆฐๅŒๆ ท็š„็ฒพๅบฆใ€‚
#
# ๆ ธๅฟƒๅ‡่ฎพ๏ผšๅฆ‚ๆžœ warm-start ่ƒฝ็ป™ๅ‡บไธ€ไธช่ถณๅคŸๅฅฝ็š„ๅˆๅง‹ไฝ็ฝฎ๏ผŒ้‚ฃไนˆ 4 ่ฝฎๅพฎ่ฐƒๅฐฑ่ƒฝ
# ้€ผ่ฟ‘ 8 ่ฝฎ็š„็ฒพๅบฆ๏ผŒๅŒๆ—ถ LLM ่ฐƒ็”จ้‡ๅ‡ๅŠ โ†’ ๆˆๆœฌๅ‡ๅŠใ€้€Ÿๅบฆ็ฟปๅ€ใ€‚
#
#
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ 2. ๅ››็งๅฎž้ชŒ้…็ฝฎ โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
#
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ ้…็ฝฎ โ”‚ ๅ‘ฝไปค โ”‚ ๅซไน‰ โ”‚
# โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
# โ”‚ baseline โ”‚ --rounds 8 โ”‚ ็บฏ LLM 8่ฝฎ๏ผŒๆ— ่พ…ๅŠฉ๏ผŒ็ฒพๅบฆๅคฉ่Šฑๆฟ โ”‚
# โ”‚ ่ฝฎๆฌกๅ‡ๅŠ โ”‚ --rounds 4 โ”‚ ็บฏ LLM 4่ฝฎ๏ผŒ็œ‹็ฒพๅบฆๆމๅคšๅฐ‘ โ”‚
# โ”‚ warm+4่ฝฎ(top5) โ”‚ --rounds 4 โ”‚ embedding top5 ้ข„ไผฐ่ตท็‚น + LLM 4่ฝฎ โ”‚
# โ”‚ โ”‚ --warmstart โ”‚ ็”จๆœ€ๅฐ‘็š„้‚ปๅฑ…ๅš็ฒ—ไผฐ๏ผŒ็œ GPU ๆ—ถ้—ด โ”‚
# โ”‚ โ”‚ top5 โ”‚ โ”‚
# โ”‚ warm+4่ฝฎ(top100) โ”‚ --rounds 4 โ”‚ embedding top100 ้ข„ไผฐ่ตท็‚น + LLM 4่ฝฎ โ”‚
# โ”‚ โ”‚ --warmstart โ”‚ ็”จๆ›ดๅคš้‚ปๅฑ…ๅšๅŠ ๆƒๅนณๅ‡๏ผŒไฝ็ฝฎไผฐ่ฎกๆ›ด็จณ โ”‚
# โ”‚ โ”‚ top100 โ”‚ โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
#
#
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ 3. ๅฎŒๆ•ดๆต็จ‹ๅ›พ โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
#
# [golden_set.csv]
# โ”‚
# โ”œโ”€โ”€ (ๅฆ‚ๆžœ --warmstart top5/top100) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ Step 0a: batch_top{5,100}_match.py โ”‚
# โ”‚ โ†’ ๅŠ ่ฝฝ Qwen3-Embedding-8B โ”‚
# โ”‚ โ†’ ๅฏน golden_set ๅ’Œ ruler ๅˆ†ๅˆซๅš embedding โ”‚
# โ”‚ โ†’ ็ฎ— cosine ็›ธไผผๅบฆ๏ผŒๅ– top-K ๆœ€่ฟ‘้‚ป โ”‚
# โ”‚ โ†’ ่พ“ๅ‡บ emb_top{5,100}.jsonl โ”‚
# โ”‚ โ”‚
# โ”‚ Step 0b: add_estimated_position.py โ”‚
# โ”‚ โ†’ ่ฏป jsonl ้‡Œ top-K ้‚ปๅฑ…็š„ rank๏ผŒ็ฎ—ๅ‡ๅ€ผ โ”‚
# โ”‚ โ†’ ๅ†™ๅ…ฅ csv ็š„ estimated_position ๅˆ— โ”‚
# โ”‚ โ†’ ่พ“ๅ‡บ golden_with_warmstart.csv๏ผˆไธๆฑกๆŸ“ๅŽŸๅง‹ๆ–‡ไปถ๏ผ‰ โ”‚
# โ”‚ โ”‚
# โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€-โ”˜
# โ”‚
# โ–ผ
# Step 1: ็”Ÿๆˆ่ฟ่กŒๆ—ถ pipeline.yaml
# โ†’ ไปŽๅŸบๅ‡† pipeline.yaml ๅคๅˆถไธ€ไปฝๅˆฐ workspace
# โ†’ ่ฆ†็›– num_rounds ๅ’Œ search_method
# โ†’ ไฟ่ฏๅฎž้ชŒๅ‚ๆ•ฐไธŽๅŸบๅ‡†้…็ฝฎ้š”็ฆป๏ผŒไธๆ”นๅŽŸๆ–‡ไปถ
# โ”‚
# โ–ผ
# Step 2: prepare_local_eval_data.py
# โ†’ ๆŠŠ csv ่ฝฌๆˆ find_positions ้œ€่ฆ็š„ jsonl ๆ ผๅผ
# โ†’ ๅฆ‚ๆžœ csv ๆœ‰ estimated_position ๅˆ—๏ผŒไผš้€ไผ ๅˆฐ jsonl
# โ”‚
# โ–ผ
# Step 3: gen_find_positions_cfg.py
# โ†’ ่ฏป pipeline.yaml + ๅœบๆ™ฏๅ‚ๆ•ฐ
# โ†’ ็”Ÿๆˆ find_positions.py ็š„ๅฎŒๆ•ด้…็ฝฎ yaml
# โ†’ ๅŒ…ๅซ๏ผšLLM ๅœฐๅ€ใ€ruler ่ทฏๅพ„ใ€ๆœ็ดขๅ‚ๆ•ฐ็ญ‰
# โ”‚
# โ–ผ
# Step 4: find_positions.py๏ผˆๆ ธๅฟƒๆญฅ้ชค๏ผ‰
# โ†’ ้€ๆก่ฏปๅพ…่ฏ„ๆ ทๆœฌ
# โ†’ ๅฆ‚ๆžœๆœ‰ estimated_position โ†’ warm-start๏ผŒ็ฌฌไธ€่ฝฎ็›ดๆŽฅๆฏ”่ฏฅไฝ็ฝฎ็š„ ruler item
# โ†’ ๅฆ‚ๆžœๆฒกๆœ‰ โ†’ ๅ‡ๅŒ€ๅˆ†ๆฎต้‡‡ๆ ท้€‰ๅ€™้€‰
# โ†’ ๆฏ่ฝฎๆฏ”ๅฎŒๅŽ๏ผŒๆŒ‰ score ๅทฎๅผ‚้€‰ไธ‹ไธ€่ฝฎๅ€™้€‰๏ผˆheuristic_search ็ญ–็•ฅ๏ผ‰
# โ†’ ๅ…ฑๆฏ” num_rounds ่ฝฎ๏ผŒ่พ“ๅ‡บๆœ€็ปˆๆ’ๅ…ฅไฝ็ฝฎๅ’Œๅˆ†ๆ•ฐ
# โ”‚
# โ–ผ
# Step 5: evaluate_local_ruler_results.py
# โ†’ ๆŠŠ find_positions ็š„็ป“ๆžœๅ’Œ golden_set ็š„ ground truth ๅฏนๆฏ”
# โ†’ ่พ“ๅ‡บ้€ๆก case_results.jsonl + ๆฑ‡ๆ€ป metrics.json (precision/recall/f1)
#
#
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ 4. ็”จๆณ•็คบไพ‹ โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
# ๅฎž้ชŒ1: baseline โ€”โ€” ็บฏ heuristic 8่ฝฎ๏ผŒๆˆๆœฌๆœ€้ซ˜ไฝ†็ฒพๅบฆๆœ€ๅฅฝ
bash run_eval_flex.sh --rounds 8
# ๅฎž้ชŒ2: ่ฝฎๆฌกๅ‡ๅŠ โ€”โ€” ็บฏ heuristic 4่ฝฎ๏ผŒ็œ‹็ฒพๅบฆไธ‹้™ๅคšๅฐ‘
bash run_eval_flex.sh --rounds 4
# ๅฎž้ชŒ3: embedding top5 warm-start + 4่ฝฎ
# ็”จ Qwen3 embedding ๆ‰พ 5 ไธชๆœ€่ฟ‘้‚ป๏ผŒๅ‡ๅ€ผ rank ๅฝ“่ตท็‚น๏ผŒ็„ถๅŽ LLM ๅš 4 ่ฝฎๅพฎ่ฐƒ
# ้ข„ๆœŸ๏ผš็ฒ—ไผฐๅคŸ็”จ๏ผŒ็œ GPU๏ผˆๅช็ฎ— 5 ไธช้‚ปๅฑ…็š„็›ธไผผๅบฆ๏ผ‰
bash run_eval_flex.sh --rounds 4 --warmstart top5
# ๅฎž้ชŒ4: embedding top100 warm-start + 4่ฝฎ
# ็”จ 100 ไธช้‚ปๅฑ…ๅšๅŠ ๆƒๅนณๅ‡๏ผŒ่ตท็‚นไผฐ่ฎกๆ›ด็จณ
# GPU ๅผ€้”€็จๅคงไฝ†ไป่ฟœๅฐไบŽ LLM ่ฐƒ็”จๆˆๆœฌ
bash run_eval_flex.sh --rounds 4 --warmstart top100
# ๅช่ท‘ nsa ๅœบๆ™ฏ
bash run_eval_flex.sh --rounds 4 --warmstart top5 --scenario nsa
# ๅ…จ้ƒจๅœบๆ™ฏ (yss + nsa)
bash run_eval_flex.sh --rounds 4 --warmstart top100 --scenario all
# ๆŒ‡ๅฎšๆ—ฅๆœŸ + ๅช่ท‘ๅ‰ 50 ๆกๅš smoke test๏ผˆ้ชŒ่ฏๆต็จ‹่ƒฝ่ท‘้€š๏ผ‰
DATE=20260514 bash run_eval_flex.sh --rounds 4 --warmstart top100 --limit 50
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ 5. ๅ‚ๆ•ฐ่ฏฆ่งฃ โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
#
# --rounds N LLM pairwise ๆฏ”่พƒ็š„่ฝฎๆฌก๏ผˆ้ป˜่ฎค 8๏ผ‰
# ๆฏ่ฝฎ้€‰ 1 ไธชๅ€™้€‰่ทŸๅพ…่ฏ„ๆ ทๆœฌๅšๆฏ”่พƒ๏ผŒๆ‰€ไปฅ rounds=N ๆ„ๅ‘ณ็€
# ๆฏๆกๆ ทๆœฌๆถˆ่€— N ๆฌก LLM ่ฐƒ็”จใ€‚ๅ…ธๅž‹ๅ€ผ: 4 ๆˆ– 8
#
# --warmstart MODE embedding ้ข„ๅŒน้…ๆจกๅผ๏ผˆ้ป˜่ฎค none๏ผŒๅณไธๅš๏ผ‰
# - none: ไธๅš embedding๏ผŒ็ฌฌไธ€่ฝฎ็”จๅ‡ๅŒ€ๅˆ†ๆฎต้‡‡ๆ ท
# - top5: ็”จ batch_top5_match.py๏ผŒๅ– 5 ไธชๆœ€่ฟ‘้‚ป็š„
# rank ๅ‡ๅ€ผไฝœไธบๆœ็ดข่ตท็‚นใ€‚ๅฟซ๏ผŒไฝ†ไผฐ่ฎกๅฏ่ƒฝ็ฒ—
# - top100: ็”จ batch_top100_match.py๏ผŒๅ– 100 ไธชๆœ€่ฟ‘้‚ป็š„
# rank ๅ‡ๅ€ผไฝœไธบๆœ็ดข่ตท็‚นใ€‚็จๆ…ข๏ผŒไผฐ่ฎกๆ›ด็จณ
# ๆณจๆ„: warm-start ้œ€่ฆ GPU ่ท‘ Qwen3-Embedding-8B๏ผŒ
# ไฝ†่ฟ™ๆ˜ฏไธ€ๆฌกๆ€งๅผ€้”€๏ผŒ่ท‘ๅฎŒๅŽๆœ‰ cache_emb/ ็ผ“ๅญ˜๏ผŒ้‡่ท‘็ง’ๅ‡บ
#
# --scenario NAME ่ฏ„ไผฐๅœบๆ™ฏ๏ผˆ้ป˜่ฎค yss๏ผ‰
# - yss: youth_sexual_and_physical_abuse๏ผˆ้’ๅฐ‘ๅนด็›ธๅ…ณ๏ผ‰
# - nsa: ansa๏ผˆๅฆไธ€ไธชๅฎ‰ๅ…จ็ฑปๅˆซ๏ผ‰
# - all: ไธคไธช้ƒฝ่ท‘
#
# --limit N ๅชๅค„็†ๅ‰ N ๆกๆ ทๆœฌ๏ผˆไป… warmstart ็š„ embedding ้˜ถๆฎต็”Ÿๆ•ˆ๏ผ‰
# ็”จไบŽๅฟซ้€Ÿ้ชŒ่ฏๆต็จ‹ๆ˜ฏๅฆ่ท‘้€š๏ผŒไธๅฝฑๅ“ๆญฃๅผ่ฏ„ไผฐ
#
# --emb-batch-size N embedding ็ผ–็ ็š„ batch size๏ผˆ้ป˜่ฎค 4๏ผ‰
# GPU ๆ˜พๅญ˜ไธๅคŸๆ—ถๅฏไปฅ่ฐƒๅฐ๏ผˆๅฆ‚ 2 ๆˆ– 1๏ผ‰
#
# ็Žฏๅขƒๅ˜้‡:
# DATE=YYYYMMDD ๆŒ‡ๅฎš่ฏ„ไผฐๆ—ฅๆœŸๆ ‡็ญพ๏ผˆ้ป˜่ฎคๅฝ“ๅคฉ๏ผ‰๏ผŒๅฝฑๅ“่พ“ๅ‡บ่ทฏๅพ„
# RUN_ID=xxx ๆŒ‡ๅฎš่ฟ่กŒ ID๏ผˆ้ป˜่ฎคๆ—ถ้—ดๆˆณ๏ผ‰๏ผŒๅฝฑๅ“่พ“ๅ‡บ่ทฏๅพ„
#
#
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ 6. ่พ“ๅ‡บ็›ฎๅฝ•็ป“ๆž„ โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
#
# aipf_example/{ๅœบๆ™ฏ}/runs/{DATE}/{RUN_ID}_{TAG}/
# โ”œโ”€โ”€ configs/
# โ”‚ โ”œโ”€โ”€ pipeline_runtime.yaml # ๆœฌๆฌก่ฟ่กŒ็š„ๅฎž้™…ๅ‚ๆ•ฐ๏ผˆๅซ่ฆ†็›–ๅŽ็š„ rounds๏ผ‰
# โ”‚ โ””โ”€โ”€ pos_config/
# โ”‚ โ””โ”€โ”€ find_positions_*.yaml # find_positions.py ็š„ๅฎŒๆ•ด้…็ฝฎ
# โ”œโ”€โ”€ intermediate/
# โ”‚ โ”œโ”€โ”€ evr_*_local_eval_input.jsonl # ่ฝฌๆขๅŽ็š„่ฏ„ไผฐ่พ“ๅ…ฅ
# โ”‚ โ”œโ”€โ”€ emb_top{5,100}.jsonl # (ไป… warmstart) embedding ๅŒน้…็ป“ๆžœ
# โ”‚ โ”œโ”€โ”€ golden_with_warmstart.csv # (ไป… warmstart) ๅธฆ estimated_position ็š„ csv
# โ”‚ โ””โ”€โ”€ pairwise/ # LLM ๆฏ”่พƒ็š„ไธญ้—ด็ผ“ๅญ˜
# โ””โ”€โ”€ outputs/
# โ”œโ”€โ”€ find_positions/ # find_positions ็š„ๅŽŸๅง‹่พ“ๅ‡บ
# โ”œโ”€โ”€ *_case_results_*.jsonl # ้€ๆก่ฏ„ไผฐ็ป“ๆžœ๏ผˆๆฏๆกๆ ทๆœฌ็š„ไฝ็ฝฎๅ’Œๅˆคๅฎš๏ผ‰
# โ””โ”€โ”€ *_metrics_*.json # ๆฑ‡ๆ€ปๆŒ‡ๆ ‡ (precision / recall / f1)
#
# TAG ๆ ผๅผ: heuristic_r{N}[_warm_{top5|top100}]
# ไพ‹ๅฆ‚: heuristic_r4_warm_top5, heuristic_r8
# โ†’ ไธๅŒๅฎž้ชŒ็š„่พ“ๅ‡บ็›ฎๅฝ•่‡ชๅŠจ้š”็ฆป๏ผŒๆ–นไพฟๆจชๅ‘ๅฏนๆฏ”
#
#
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ 7. warm-start ็š„ๆ•ฐๆฎๆต่ฏฆ่งฃ โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
#
# warm-start ็š„ๆ ธๅฟƒๆ€่ทฏๆ˜ฏ"ๅ…ˆ็ฒ—ๅŽ็ฒพ"๏ผš
#
# a) batch_top{5,100}_match.py
# - ็”จ Qwen3-Embedding-8B ๆŠŠๅพ…่ฏ„ๆ ทๆœฌๅ’Œ ruler 200 ๆก้ƒฝ็ผ–็ ๆˆๅ‘้‡
# - ็ฎ— cosine ็›ธไผผๅบฆ็Ÿฉ้˜ต (N_sample x 200)
# - ๆฏๆกๆ ทๆœฌๅ– top-K ไธชๆœ€็›ธไผผ็š„ ruler item
# - ่พ“ๅ‡บ jsonl๏ผŒๆฏ่กŒๅŒ…ๅซ top-K ้‚ปๅฑ…็š„ rank/score/sim
# - embedding ๆœ‰็ผ“ๅญ˜๏ผˆcache_emb/ ็›ฎๅฝ•๏ผ‰๏ผŒ็ฌฌไบŒๆฌก่ท‘ๅŒๆ ท็š„ๆ•ฐๆฎ็ง’ๅ‡บ
#
# b) add_estimated_position.py
# - ่ฏป jsonl๏ผŒๅ–ๆฏๆกๆ ทๆœฌ top-K ้‚ปๅฑ…็š„ rank ๅšๅ‡ๅ€ผ
# - ไพ‹ๅฆ‚ top5 ้‚ปๅฑ… rank = [45, 50, 52, 48, 55] โ†’ estimated_position = 50
# - ๆŠŠ่ฟ™ไธชๅ€ผๅ†™ๅ…ฅ csv ็š„ estimated_position ๅˆ—
#
# c) prepare_local_eval_data.py
# - ่ฏป csv๏ผŒๅฆ‚ๆžœๆœ‰ estimated_position ๅˆ—ๅฐฑ้€ไผ ๅˆฐ jsonl
#
# d) find_positions.py โ†’ _heuristic_search()
# - ่ฏปๅˆฐ estimated_position=50 ๅŽ๏ผŒ็ฌฌไธ€่ฝฎ็›ดๆŽฅ่ทŸ ruler[50] ๅš LLM ๆฏ”่พƒ
# - ่€Œไธๆ˜ฏไปŽๅ‡ๅŒ€ๅˆ†ๆฎต้‡‡ๆ ทๅผ€ๅง‹๏ผˆๅฏ่ƒฝ้€‰ๅˆฐ ruler[0], ruler[50], ruler[100]...๏ผ‰
# - ๅŽ็ปญ่ฝฎๆฌกๆญฃๅธธๆŒ‰ score ๅทฎๅผ‚้€‰ๅ€™้€‰ๅพฎ่ฐƒ
# - ๆ•ˆๆžœ๏ผš่ตท็‚นๆ›ดๅ‡† โ†’ ๆ›ดๅฐ‘่ฝฎๆฌกๅฐฑ่ƒฝๆ”ถๆ•› โ†’ ็œ LLM ่ฐƒ็”จ
#
#
# โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
# โ”‚ 8. ็›ธๅ…ณๆ–‡ไปถ็ดขๅผ• โ”‚
# โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
#
# ่„šๆœฌ:
# run_eval_flex.sh โ† ๆœฌ่ฏดๆ˜Žๅฏนๅบ”็š„ไธป่„šๆœฌ
# run_eval.sh โ† ๅŽŸ็‰ˆ่ฏ„ไผฐ่„šๆœฌ๏ผˆๅ›บๅฎšๅ‚ๆ•ฐ๏ผŒไธๆ”ฏๆŒ warm-start๏ผ‰
# batch_top5_match.py โ† embedding top5 ๅŒน้…
# batch_top100_match.py โ† embedding top100 ๅŒน้…
# add_estimated_position.py โ† ๆŠŠ embedding ไผฐ่ฎก็š„ไฝ็ฝฎๅ†™ๅ›ž csv
#
# ๆตๆฐด็บฟ:
# pipeline/prepare_local_eval_data.py โ† csv โ†’ jsonl
# pipeline/gen_find_positions_cfg.py โ† ็”Ÿๆˆ find_positions ้…็ฝฎ
# pipeline/evaluate_local_ruler_results.py โ† ็ป“ๆžœ่ฏ„ไผฐ
#
# ๆ ธๅฟƒๅผ•ๆ“Ž:
# vendor/ranking_moderation/scripts/find_positions.py โ† ๅ…ฅๅฃ
# vendor/ranking_moderation/src/ranking_moderation/
# true_skill_ranking.py โ† _heuristic_search() / warm-start ้€ป่พ‘
# pairwise_comparison.py โ† LLM ่ฐƒ็”จๅšไธคไธคๆฏ”่พƒ
#
# ้…็ฝฎ:
# aipf_example/yss_ruler_eval/pipeline.yaml โ† yss ๅœบๆ™ฏๅŸบๅ‡†้…็ฝฎ
# aipf_example/nsa_ruler_eval/pipeline.yaml โ† nsa ๅœบๆ™ฏๅŸบๅ‡†้…็ฝฎ