Blame view

docs/issues/issue-2026-04-16-bayes寻参-clothing_top771数据集上寻参.md 13.1 KB
d3dd01d3   tangwang   自动寻参:
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
  Prompt - 1
  
  二、在大标注集上寻参
  
  我以前经过过一轮调参,是基于54个评测样本(queries.txt),过程中发现的最优的参数是这一组:
  0.641241 {'es_bias': '7.214', 'es_exponent': '0.2025', 'text_bias': '4.0', 'text_exponent': '1.584', 'text_translation_weight': '1.4441', 'knn_text_weight': '0.1', 'knn_image_weight': '5.6232', 'knn_tie_breaker':
      '0.021', 'knn_bias': '0.0019', 'knn_exponent': '11.8477', 'knn_text_bias': '2.3125', 'knn_text_exponent': '1.1547', 'knn_image_bias': '0.9641', 'knn_image_exponent': '5.8671'}
  
  这一组参数分布比较极端,text_bias太大(文本项得分事0~1的,加上4被稀释的很大),图片的exponent太大,不过在这个数据集上面确实是最好的,我觉得有过拟合的可能,因此要扩大数据集,先扩展标注集,然后使用扩展的标注集,继续进行寻参。
  
  因此新建了一个标注集合,标注任务也已经完成:Clothing Filtered 771。请启动寻参任务,把任务跑起来,以后等程序跑完了应该能拿到寻参结果,下次你可以结合程序执行的结果进行结论分析。
  
  至于调参方式,请参考以前的一轮调参:
  我当时的调参需求:
  
  请对coarse_rank fusion公式进行调参:
    目前的baseline是这一组,Primary_Metric_Score: 0.637642:
    coarse_rank:
    ...
      fusion:
        es_bias: 10.0
        es_exponent: 0.05
        text_bias: 0.1
        text_exponent: 0.35
        text_translation_weight: 1.0
        knn_text_weight: 1.0
        knn_image_weight: 2.0
        knn_tie_breaker: 0.3
        knn_bias: 0.2
        knn_exponent: 5.6
        knn_text_bias: 0.2
        knn_text_exponent: 0.0
        knn_image_bias: 0.2
        knn_image_exponent: 0.0
    评估指标在/data/saas-search/artifacts/search_evaluation/batch_reports/batch_20260415T150754Z_00b6a8aa3d.md
    请以这个为基准,发散思维,进行宽一点的范围调参。因为每次重启、评测都需要几分钟,请写一个调参的框架,基于框架、设定好多组参数、写好脚本,每轮收集效果自动的调整参数分布(因为笛卡尔积、多种参数调参成本太高,因此考虑贝叶斯调参等方法通
    过多轮迭代通过脚本自动收敛)
    每次调整参数后需要重启backend (有时候重启backend后eval-web好像也挂了,如果有可以追查原因并修复)
    ./restart.sh backend
    注意:请你调试脚本、进行一轮分析,最终要沉淀一套调参脚本,我下次可以重新跑(还是针对这组参数调参),能自动迭代(调整参数分布)、收集每组参数的指标、调优到最优的参数组合。
  
  
  
  你当时给出的调参脚本( “种子实验 + 随机探索 + 基于历史最优分布的自适应采样”反复迭代。搜索范围已经放宽,新增了多组偏离 baseline 很远的 seed,也保留了 baseline 附近抖动,适合长时间慢慢收敛。):
  
    长时间自动调参脚本已经配好,核心文件是:
  
    - 调参主程序:scripts/evaluation/tune_fusion.py
    - 宽范围搜索空间:scripts/evaluation/tuning/coarse_rank_fusion_space.yaml
    - 后台长跑启动脚本:scripts/evaluation/start_coarse_fusion_tuning_long.sh
    - 续跑脚本:scripts/evaluation/resume_coarse_fusion_tuning_long.sh
    - 使用说明:scripts/evaluation/tuning/README.md
  
    直接启动一轮:
  
    ./scripts/evaluation/start_coarse_fusion_tuning_long.sh
  
    如果想跑更久一点:
  
    MAX_EVALS=48 BATCH_SIZE=3 CANDIDATE_POOL_SIZE=512 RUN_NAME=coarse_fusion_long_001 \
    ./scripts/evaluation/start_coarse_fusion_tuning_long.sh
  
    看日志:
  
    tail -f artifacts/search_evaluation/tuning_launches/<run_name>.log
  
    看结果目录:
  
    ls artifacts/search_evaluation/tuning_runs/<run_name>/
  
    续跑:
  
    ./scripts/evaluation/resume_coarse_fusion_tuning_long.sh <run_name>
  
    每轮会自动做这些事:
  
    - 生成一批候选 coarse_rank.fusion 参数
    - 写入配置并重启 backend
    - 检查 eval-web,必要时自愈拉起
    - 跑评测并收集 Primary_Metric_Score
    - 更新 trials.jsonl、leaderboard.csv、summary.md
    - 基于历史结果调整下一轮采样分布
  
  上面只是历史的寻参任务的参考。现在请你使用新的数据集来进行寻参。
  要注意的是这个数据集比较大,因此每一轮行参任务耗时会比较长,进行大范围的精细的搜索不太可取。考虑仔细分析上次寻参的结果,在已有成果上,进行精细搜索,如果已有成果还不太够,可以在小数据集上进行粗搜,然后再到大数据集上寻参。
  
  
  
  Response - 1
935f6e1b   tangwang   coarse_rank 搜参结果 ...
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
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
  跑完了,这个 `run_dir` 已经完成,没有在继续运行的调参进程。
  
  结果目录:
  - [summary.md](/data/saas-search/artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/summary.md)
  - [leaderboard.csv](/data/saas-search/artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/leaderboard.csv)
  - [trials.jsonl](/data/saas-search/artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/trials.jsonl)
  
  **结论**
  1. 这轮 18 个 live eval 全部跑满了。  
  [summary.md](/data/saas-search/artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/summary.md:11)
  
  2. 大集 `clothing_top771` 上,最优仍然是 fusion-only baseline,`Primary_Metric_Score=0.487476`
  [summary.md](/data/saas-search/artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/summary.md:17)
  
  3. 这轮优化器已经很接近 baseline,但没有超过。  
     最接近的是:
     - `bo_012 = 0.485027`
     - `bo_018 = 0.484691`
     - `bo_013 = 0.483849`  
     与 baseline 的差距分别是 `-0.002449`、`-0.002785`、`-0.003627`
  
  4. 小集上那种“极端参数”没有迁移成功。  
     典型例子:
     - `seed_low_knn_global = 0.447485`
     - `seed_legacy_bo340 = 0.477537`
     - `seed_bigset_text_stable = 0.449802`  
     说明大集不支持此前那类明显更激进的形态。
  
  **怎么解读这轮**
  这轮最重要的收获不是“找到新最优”,而是把大集上的有效区间摸清了。
  
  大集上表现较好的候选,虽然具体值不同,但有几个共同点:
  
  1. `text_bias` 普遍很低。  
     排名前几的候选大多在 `0.02 ~ 0.10` 附近,baseline 的 `0.1` 并不吃亏。  
     这和小集里 `text_bias=4.0` 的方向明显相反。
  
  2. `es_exponent` 往往比 baseline 更高。  
     baseline 是 `0.05`,而靠前候选很多在 `0.15 ~ 0.28`
     这说明大集上 lexical 这一路适度增强是有价值的,但提升幅度还不足以抵消其它项的副作用。
  
  3. `text_translation_weight` 往往高于 baseline。  
     靠前候选多数在 `1.3 ~ 1.7`,比 baseline 的 `1.0` 明显更高。  
     这是这轮最值得保留的信号之一。
  
  4. `knn_image_weight` 可以比 baseline 更高,但不能只靠“强图像+极端非线性”硬推。  
     很多接近最优的点把 `knn_image_weight` 提到了 `4+`,但最终仍没超过 baseline。  
     说明 image 通路能帮忙,但必须和其它项配平。
  
  5. `knn_bias` 低值是一个信号,但不是充分条件。  
     不少高分候选把 `knn_bias` 压得很低,甚至接近 `0`
     但单独走“低 knn_bias + 低 knn_exponent”的路线并不好,`seed_low_knn_global` 已经证伪了这一点。
  
  6. `knn_text_exponent` 和 `knn_image_exponent` 从 `0` 放开后,能接近 baseline,但还没形成稳定优势。  
     靠前候选里这两个参数经常被拉高,说明它们不是完全无用;但从结果看,它们更像是“补偿项”,不是决定性增益项。
  
  **对上次担心的过拟合,这轮能下什么判断**
  可以比较明确地说:
  
  - 小集 54 条上得到的极端解,确实存在明显过拟合迹象。
  - 到 771 条大集后,最稳的仍是原 baseline 一类的“温和融合”方案。
  - 但是 baseline 也不是绝对最优形态,至少有两类方向值得继续缩圈:
    - 更高的 `es_exponent`
    - 更高的 `text_translation_weight`
  
  **下一轮缩圈建议**
  我建议不要再做同样宽度的 14 维长跑了,信息已经够了。下一轮可以做“baseline 附近精修”。
  
  建议缩圈到这组范围:
  
  - `es_bias: 7.5 ~ 11.5`
  - `es_exponent: 0.12 ~ 0.28`
  - `text_bias: 0.01 ~ 0.15`
  - `text_exponent: 0.20 ~ 0.55`
  - `text_translation_weight: 1.20 ~ 1.75`
  - `knn_text_weight: 0.75 ~ 1.35`
  - `knn_image_weight: 1.2 ~ 4.8`
  - `knn_tie_breaker: 0.18 ~ 0.32`
  - `knn_bias: 0.001 ~ 0.25`
  - `knn_exponent: 3.5 ~ 8.0`
  - `knn_text_bias: 0.001 ~ 0.3`
  - `knn_text_exponent: 0.4 ~ 1.3`
  - `knn_image_bias: 0.001 ~ 0.35`
  - `knn_image_exponent: 2.0 ~ 5.8`
  
  如果要更激进地降成本,我建议直接冻结这几个:
  - `text_bias=0.1`
  - `knn_tie_breaker=0.24~0.30` 小范围
  - `knn_text_bias` 缩很小
  - `knn_image_bias` 缩很小
  
  然后重点打这 6 个:
  - `es_exponent`
  - `text_translation_weight`
  - `knn_image_weight`
  - `knn_bias`
  - `knn_exponent`
  - `knn_text_exponent`
  
  **额外发现**
  流程上还有一个问题,这轮后半段 `bo_018` 在成功前重复失败了很多次,主要是:
  - `build_annotation_set.py batch` 非零退出
  - 少量 `restart.sh backend` 非零退出
  
  不过守护逻辑最终还是把任务跑完了。这个从 [summary.md](/data/saas-search/artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/summary.md:30) 的 failures 和 daemon log 都能看到。说明“自动续跑”已起作用,但评测链路本身还不够干净。
  
  如果你愿意,我下一步可以直接继续两件事里的一个:
  1. 按这轮结论,给你生成一个 `clothing_top771_v2` 缩圈搜索空间并启动下一轮
  2. 先处理 `build_annotation_set.py batch` 偶发失败的问题,减少下一轮长跑中的无效重试
  
  
  
  **参数列表(4 套)**
  - `baseline`(top771 最优,`seed_baseline`
    - `es_bias: 10.0`, `es_exponent: 0.05`  
    - `text_bias: 0.1`, `text_exponent: 0.35`, `text_translation_weight: 1.0`  
    - `knn_text_weight: 1.0`, `knn_image_weight: 2.0`, `knn_tie_breaker: 0.3`  
    - `knn_bias: 0.2`, `knn_exponent: 5.6`  
    - `knn_text_bias: 0.2`, `knn_text_exponent: 0.0`  
    - `knn_image_bias: 0.2`, `knn_image_exponent: 0.0`
  - `54 条上得到的极端解`(`seed_legacy_bo234`
    - `es_bias: 7.214`, `es_exponent: 0.2025`  
    - `text_bias: 4.0`, `text_exponent: 1.584`, `text_translation_weight: 1.4441`  
    - `knn_text_weight: 0.1`, `knn_image_weight: 5.6232`, `knn_tie_breaker: 0.021`  
    - `knn_bias: 0.0019`, `knn_exponent: 11.8477`  
    - `knn_text_bias: 2.3125`, `knn_text_exponent: 1.1547`  
    - `knn_image_bias: 0.9641`, `knn_image_exponent: 5.8671`
  - `bo_012`(`Primary_Metric_Score=0.485027`
    - `es_bias: 6.6233`, `es_exponent: 0.2377`  
    - `text_bias: 0.049`, `text_exponent: 0.4446`, `text_translation_weight: 1.6236`  
    - `knn_text_weight: 1.0344`, `knn_image_weight: 1.3565`, `knn_tie_breaker: 0.212`  
    - `knn_bias: 0.0052`, `knn_exponent: 4.4639`  
    - `knn_text_bias: 0.1148`, `knn_text_exponent: 1.0926`  
    - `knn_image_bias: 0.0114`, `knn_image_exponent: 5.2496`
  - `bo_018`(`Primary_Metric_Score=0.484691`
    - `es_bias: 8.8861`, `es_exponent: 0.2794`  
    - `text_bias: 0.0189`, `text_exponent: 0.2`, `text_translation_weight: 1.7178`  
    - `knn_text_weight: 1.7459`, `knn_image_weight: 4.2658`, `knn_tie_breaker: 0.2814`  
    - `knn_bias: 0.001`, `knn_exponent: 1.4923`  
    - `knn_text_bias: 4.0`, `knn_text_exponent: 0.9309`  
    - `knn_image_bias: 0.01`, `knn_image_exponent: 5.8289`
  
  **怎么找(可复现)**
  -`leaderboard.csv` 找(含分数+参数一行全):`artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/leaderboard.csv`
    - 例:`rg '^2,bo_012,' artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/leaderboard.csv`
  -`trials.jsonl` 找(最权威,调参器实际写入的 params):`artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/trials.jsonl`
    - 例:`rg '\"name\": \"bo_012\"' artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/trials.jsonl`
    - 例:`rg '\"name\": \"seed_legacy_bo234\"' artifacts/search_evaluation/tuning_runs/coarse_fusion_clothing_top771_resilient_20260422T091650Z/trials.jsonl`
  
  **已补到 `config.yaml`**
  - 我已把这 4 套参数作为“注释 presets”补在 `coarse_rank.fusion` 旁边:`config/config.yaml:236`
  - 注意:你当前 `config/config.yaml` 里 `coarse_rank.fusion` 的生效值是 `knn_bias=0.6 / knn_exponent=0.4`,更像 `seed_low_knn_global`,不是本次大集最优的 baseline。
  
  
  
  
  
  
  # request 2
  
  
  固定这些参数(不再参与寻参):
  es_bias: 6.62, es_exponent: 0.24 
  text_bias: 0.05 text_exponent: 0.445, text_translation_weight: 1.0
  knn_text_weight: 1.0, knn_image_weight: 1.35, knn_tie_breaker: 0.212
  knn_bias: 0.0052, 
  
  然后对以下参数进行寻参:
  knn_exponent(0.3-6.0)
  knn_text_bias (0.0~0.3)  knn_text_exponent (0.2 ~ 3.0)
  knn_image_bias (0.0~0.3)   knn_image_exponent (1.0~7.0)
  设计好搜参脚本后跑起来,注意程序启动起来之后要检测是否运行稳定了,确保可以长时间运行直到全部跑完