File size: 17,072 Bytes
112ed8a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
#!/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 ๅœบๆ™ฏๅŸบๅ‡†้…็ฝฎ