列表式交叉编码器微调 vs 智能体指令优化大模型重排器:医保医疗流程重排序系统性研究
原论文链接:https://arxiv.org/html/2608.09650v1
摘要
医保信息检索系统中,患者口语化提问与标准化临床术语存在巨大词汇鸿沟,医疗流程重排序是核心业务模块。本文针对工业落地场景,系统对比两类主流重排序技术路线:
- 小规模交叉编码器:采用MedCPT(109M)、MiniLM-L12(33M)两类骨干,搭配3种列表式排序损失、3种分层冻结策略完成微调;
- 大语言模型重排器:4B参数量Qwen3-Reranker,基于GPT-4.1搭建迭代智能体循环自动优化任务提示词。
本文自建医疗重排序专用数据集,覆盖708项医保服务、总计2647条带完整分级排序标签的患者查询样本。实验结果表明:经ListNet列表损失微调的109M MedCPT交叉编码器全面优于4B大重排器,NDCG@3提升2.6个百分点,斯皮尔曼秩相关系数提升13.3个百分点,参数量仅为后者的1/37。
本文完整提供LLM自动构建领域数据集流水线、18组对照网格实验、智能体提示迭代优化完整流程,并总结线上系统落地取舍方案;全部代码与样例数据集开源,支持其他垂直领域迁移复现。
关键词:信息检索;重排序;交叉编码器;列表式学习排序;智能体提示优化;医疗NLP;大模型重排器
1 引言
1.1 业务背景与痛点
患者咨询医保报销时,检索链路分为粗召回、重排序两阶段:召回器批量筛选候选医疗流程,重排器根据临床相关性完成打分排序。核心难点在于词汇鸿沟:患者使用口语、症状描述(如"走路膝盖疼"),医保目录为专业临床术语(如膝关节穿刺术),二者语义错位极易造成匹配错误,引发理赔判定失误、大量行政冗余。
现有两条技术路线各有短板:
- 零样本LLM重排器:泛化能力强,但4B及以上模型推理延迟高、GPU部署成本昂贵,缺少医疗领域专属校准;
- 交叉编码器微调:现有方案多采用点对/配对损失,无法直接优化NDCG等全局排序指标,完整候选列表排序效果受限。
1.2 本文四大核心贡献
- 搭建两阶段LLM自动化数据集生成流水线,通过质量过滤得到2647条标注样本,两名行业专家人工校验验证标注可靠性;
- 设计完整对照实验网格:2种编码器骨干 × 3种列表损失 × 3层冻结策略,合计18组配置,系统消融各变量影响;
- 提出GPT-4.1驱动的智能体提示迭代优化框架,自动挖掘领域专属提示词,构建强LLM基线;
- 给出工程落地结论:仅109M的领域微调交叉编码器,指标全面超越4B大模型,CPU即可部署,具备显著算力与延迟优势。
2 相关工作
- 交叉编码器检索:联合编码查询-文档对,精度优于双塔编码器;MedCPT、Clinical BERT等医疗预训练模型在生物检索表现突出,但过往微调极少采用列表式损失;
- LLM零样本重排:Qwen3、BGE等指令微调模型可直接完成重排序,但存在算力成本、领域适配短板;
- 列表式排序损失:LambdaLoss、ListNet、PListMLE直接优化NDCG全局指标,理论性能优于点/配对损失;
- 智能提示工程:传统提示依赖人工编写,本文实现自动化迭代寻优,无需领域专家手动撰写专业指令。
本文首次在真实医保生产任务上,定量对比列表微调小型交叉编码器 与智能体优化大模型重排器两套方案,给出可直接复用的工业实验结论。
3 任务定义与数据集构建
3.1 任务数学定义
输入患者查询qqq、候选医疗流程集合P={p1,...,pn}\mathcal{P}=\{p_1,...,p_n\}P={p1,...,pn},学习打分函数f(q,pi)∈Rf(q,p_i)\in\mathbb{R}f(q,pi)∈R,输出按临床相关性降序排列结果。核心评价指标NDCG@k:
DCG@k=∑i=1k2yπ(i)−1log2(i+1) \text{DCG@}k=\sum_{i=1}^k \frac{2^{y_{\pi(i)}}-1}{\log_2(i+1)} DCG@k=i=1∑klog2(i+1)2yπ(i)−1
NDCG@k=DCG@kIDCG@k \text{NDCG@}k=\frac{\text{DCG@}k}{\text{IDCG@}k} NDCG@k=IDCG@kDCG@k
yiy_iyi为真实相关性标签,IDCG代表理想排序DCG,NDCG归一至0~1区间。
查询分为三类:直接诊疗需求、症状描述、医保覆盖咨询。
3.2 两阶段LLM数据集生成流水线
基础素材:708项医保服务,领域专家映射得到1517种标准医疗流程。
阶段1:患者口语查询生成
每条服务生成2×2\times2×流程数量条查询,GPT-4o温度0.7;
采样维度:查询意图、正式度(70%关键词/30%对话口语)、同义词替换;强制禁止直接复制专业流程名称,还原真实患者表达。采用轮询分配规则,保证每类流程至少2次作为核心查询目标。
阶段2:相关性自动标注
独立调用GPT-4o(温度0),对每条查询下全部候选流程做相关性排序;若流程数量超过20,仅保留目标流程+19个随机干扰项,控制输入长度。
质量过滤规则
仅保留目标流程排名前三的样本,过滤语义不匹配噪声,最终数据集共2647条查询-排序列表。
人工校验
随机抽取100条样本,两名医保临床专家独立校验Top1/Top3匹配合理性:
专家A Top1通过率92%、Top3通过率92%;专家B Top1通过率97%、Top3通过率97%;
标注一致性Cohen κ=0.52(中等一致,源于标签分布极度倾斜),证明LLM标注贴合真实临床判断。
3.3 数据划分方案
按查询维度切分训练/验证/测试集,杜绝数据泄露:训练集75%、验证集15%、测试集10%;同一流程可分布在多子集,但单条查询仅属于一份集。
4 方法论
4.1 交叉编码器微调骨干模型
选用两类预训练交叉编码器:
- MedCPT-Cross-Encoder(109M):基于PubMed医疗文献日志预训练,医疗领域适配性强;
- MiniLM-L12-v2(33M):通用检索蒸馏轻量模型;
输入为(患者查询,医疗流程)文本对,输出一维相关性logit;训练批次为完整候选排序列表,全程采用列表损失计算梯度。
4.2 三类列表式排序损失
sis_isi为模型输出分数,yiy_iyi为真实相关性标签:
- LambdaLoss
LLambda=∑i∑j:yi>yj∣ΔNDCGij∣⋅log(1+e−(si−sj)) \mathcal{L}{\text{Lambda}}=\sum{i}\sum_{j:y_i>y_j}|\Delta\text{NDCG}_{ij}|\cdot\log(1+e^{-(s_i-s_j)}) LLambda=i∑j:yi>yj∑∣ΔNDCGij∣⋅log(1+e−(si−sj))
依据NDCG增益加权配对损失梯度; - ListNet
LListNet=−∑iPy(pi)logPs(pi) \mathcal{L}{\text{ListNet}}=-\sum{i}P_{y}(p_{i})\log P_{s}(p_{i}) LListNet=−i∑Py(pi)logPs(pi)
最小真实排序分布与模型softmax分布交叉熵; - PListMLE
LPListMLE=−∑iwi(sπ(i)−log∑j≥iexp(sπ(j))) \mathcal{L}{\text{PListMLE}}=-\sum{i}w_{i}\Big(s_{\pi(i)}-\log\sum_{j\geq i}\exp(s_{\pi(j)})\Big) LPListMLE=−i∑wi(sπ(i)−logj≥i∑exp(sπ(j)))
带位置权重的Plackett--Luce排序概率建模。
4.3 三层参数冻结策略
- 全解冻:全部参数参与训练;
- 冻结嵌入层:冻结词/位置/类型嵌入,约78%参数可训练;
- 冻结嵌入+前6层Transformer:仅后6层可训练,约40%参数可训练;
2模型 × 3损失 × 3冻结,构成完整18组消融实验网格。
4.4 智能体提示优化框架(Qwen3-Reranker-4B)
基线模型:4B参数量Qwen3-Reranker,采用GPT-4.1迭代寻优循环:
- 固定200条验证子集,计算每条NDCG@3;
- 筛选最优、最差各10条样例作为对比素材;
- 元提示输入历史迭代记录+正负样例,GPT-4.1一次性生成5条候选提示;
- 全部候选在验证集批量打分;
- 最优候选指标提升则更新全局提示,连续5轮无改善提前终止,总迭代上限30轮。
初始通用提示:Rank the candidates by relevance to the query.
迭代9轮后最优医疗专属提示:Order the procedures from most to least relevant based on how thoroughly each aligns with the stated symptoms, diagnostic needs, or procedural requests in the query.
提示优化收敛曲线说明
横坐标迭代轮次,纵坐标验证集NDCG@3;蓝点为每轮全部候选分数,红线为历史最优值。3轮即可完成主要收益提升,第9轮触发早停逻辑。
5 实验设置
5.1 评价指标
核心指标:NDCG@1 / NDCG@3 / NDCG@5、MRR、斯皮尔曼秩相关系数;模型选择、早停、超参调优均以NDCG@3为主指标。
5.2 基础统一训练超参(网格搜索阶段)
学习率2×10−52\times10^{-5}2×10−5,预热比例0.1,权重衰减0.01,梯度裁剪1.0;批次为32条完整排序列表;FP16混合精度;最大50 epoch,早停耐心5,最小训练15 epoch;相关性标签线性赋值:候选排名n则得分n,依次递减至1。
5.3 Optuna精细超参调优
从18组网格筛选前4最优配置,采用TPE采样、50次搜索,搜索空间如下:
| 超参数 | 搜索区间 |
|---|---|
| 学习率 | log均匀 5×10−6,10−45\\times10\^{-6}, 10\^{-4}5×10−6,10−4 |
| 权重衰减 | log均匀 10−4,0.110\^{-4}, 0.110−4,0.1 |
| 预热比例 | 均匀 0.01, 0.3 |
| 批次大小 | {16, 32, 64} |
| 早停耐心 | {5, 10, 15} |
| 学习率调度 | cosine / linear |
每组最优超参完成5次随机种子(42/123/456/789/1024)训练,测试集输出均值±标准差。
5.4 评估规范
全部模型选择、超参调优仅使用验证集(400条查询);测试集(263条)仅最终评估一次,杜绝数据泄露。
6 实验结果与分析
6.1 18组全网格搜索结果
MedCPT所有配置验证集NDCG@3全面高于MiniLM;最优4组均为MedCPT搭配ListNet/LambdaLoss、全解冻/冻结嵌入,验证集NDCG@3区间0.9611~0.9636;PListMLE、冻结前6层指标显著下滑,仅前4组进入精细调优环节。
6.2 调优后测试集最终指标
| 模型 | 损失 | 冻结策略 | 参数 | NDCG@1 | NDCG@3 | NDCG@5 | MRR | 斯皮尔曼相关 |
|---|---|---|---|---|---|---|---|---|
| MedCPT原始 | - | - | 109M | .9135 | .9153 | .9202 | .8569 | .5845 |
| MiniLM原始 | - | - | 33M | .9144 | .8804 | .8854 | .8466 | .4774 |
| MedCPT | ListNet | 全解冻 | 109M | .957±.003 | .961±.002 | .963±.002 | .924±.006 | .779±.011 |
| MedCPT | ListNet | 冻结嵌入 | 109M | .956±.004 | .960±.002 | .962±.003 | .924±.008 | .770±.013 |
| MedCPT | LambdaLoss | 全解冻 | 109M | .951±.003 | .958±.001 | .958±.001 | .921±.008 | .754±.017 |
| MedCPT | LambdaLoss | 冻结嵌入 | 109M | .951±.004 | .957±.003 | .958±.003 | .920±.008 | .748±.018 |
| Qwen3-4B(优化提示) | - | - | 4B | .941 | .936 | .940 | .898 | .646 |
最优方案:MedCPT+ListNet全解冻;对比原生MedCPT NDCG@3提升4.6pp;对比4B大模型NDCG@3高2.6pp,斯皮尔曼相关高13.3pp,参数量仅后者1/37;冻结嵌入与全解冻指标差距极小,冻结前6层精度大幅衰减;列表损失对全局排序相关性提升幅度最大,种子标准差极低(<0.003)。
6.3 损失与冻结消融结论
- 损失横向对比:验证集LambdaLoss小幅领先ListNet,但测试集ListNet表现更优;三类损失均可大幅提升斯皮尔曼相关(+10~19pp);
- 冻结策略:全解冻 ≈ 冻结嵌入 >> 冻结6层;MedCPT底层医疗预训练特征鲁棒性更强,冻结带来的精度损失小于MiniLM。
6.4 小交叉编码器 vs 4B大模型对比
最优微调109M交叉编码器在全部指标上超越提示优化后的4B Qwen3-Reranker,指标差距远大于多种子标准差;仅靠提示词优化无法替代领域列表式微调带来的全局排序校准能力。

7 工程落地讨论与实践结论
7.1 微调交叉编码器线上部署价值
最优109M MedCPT+ListNet方案普通CPU即可批量推理,4B大模型必须搭载GPU;大规模线上检索场景,算力、云服务成本差距极大,同时推理延迟更低。微调后NDCG提升4.6个百分点,全局排序相关性提升近20个百分点,线上理赔匹配准确率显著改善。
7.2 LLM合成数据集落地优势
人工标注医疗排序数据集成本极高;两阶段生成+过滤流水线可低成本产出高质量垂直领域标注,轮询保证流程全覆盖,Top3过滤有效过滤噪声,保险、临床等行业可快速复用该数据搭建方案。
7.3 智能体提示优化优缺点
优势:仅依靠验证集数据自动挖掘领域专属话术,无需医疗专家人工撰写提示;迭代3轮即可显著提升基线模型指标;
局限:仅做提示优化无法弥补大模型缺少领域列表微调的短板,最终指标显著低于微调小型编码器。
8 结论
本文在医保理赔真实业务场景,系统对比列表微调交叉编码器、智能体提示优化4B大重排器两套方案,完成2骨干×3损失×3冻结共18组对照实验。实验证明109M MedCPT搭配ListNet微调全面领先4B Qwen3-Reranker,NDCG@3提升2.6个百分点,斯皮尔曼相关提升13.3个百分点,参数量仅为后者1/37。
核心工程落地结论:
- LLM两阶段流水线可低成本构建垂直领域重排序标注数据集;
- 智能体迭代寻优是快速搭建强LLM基线的高效手段;
- 线上系统算力、延迟受限场景,领域微调小型交叉编码器是更优生产选型。
研究局限性
- 数据集仅来自单一医保服务商流程体系,跨国家、跨保险分类泛化性未验证;
- 全部标注由GPT-4o生成,会继承大模型固有偏倚,人工校验仅缓解部分偏差;
- 仅测试2款交叉编码器、1款大重排器,未覆盖BGE、GTE等主流重排模型;
- 冻结实验仅测试底层冻结,未探索冻结顶层、微调嵌入层的反向策略。
伦理说明
- 全程无患者隐私、PHI敏感数据,仅使用脱敏医保服务名称、流程、机器生成查询;
- 模型仅用于医保行政匹配辅助,不用于临床诊断、诊疗方案推荐;
- 合成数据会继承GPT-4o语言偏倚,对小众患者口语匹配存在潜在偏差;
- 核心结论证明小模型可替代大模型,降低线上推理算力消耗,绿色节能。
附录
附录A 18组网格验证集完整指标
| 模型 | 损失 | 冻结 | 参数 | NDCG@1 | NDCG@3 | NDCG@5 | MRR | 斯皮尔曼 |
|---|---|---|---|---|---|---|---|---|
| MedCPT原始 | - | - | 109M | .9265 | .9179 | .9222 | .8732 | .5995 |
| MedCPT | LambdaLoss | 全解冻 | 109M | .9702 | .9636 | .9622 | .9427 | .7785 |
| MedCPT | LambdaLoss | 冻结嵌入 | 109M | .9662 | .9611 | .9606 | .9360 | .7721 |
| MedCPT | LambdaLoss | 冻结6层 | 109M | .9601 | .9497 | .9523 | .9193 | .7364 |
| MedCPT | ListNet | 全解冻 | 109M | .9697 | .9635 | .9612 | .9418 | .7695 |
| MedCPT | ListNet | 冻结嵌入 | 109M | .9694 | .9621 | .9607 | .9373 | .7624 |
| MedCPT | ListNet | 冻结6层 | 109M | .9583 | .9479 | .9491 | .9222 | .7145 |
| MedCPT | PListMLE | 全解冻 | 109M | .9635 | .9589 | .9573 | .9257 | .7657 |
| MedCPT | PListMLE | 冻结嵌入 | 109M | .9626 | .9594 | .9572 | .9274 | .7648 |
| MedCPT | PListMLE | 冻结6层 | 109M | .9605 | .9492 | .9501 | .9210 | .7167 |
| MiniLM原始 | - | - | 33M | .9308 | .8963 | .8964 | .8691 | .5314 |
| MiniLM | LambdaLoss | 全解冻 | 33M | .9570 | .9471 | .9476 | .9099 | .7190 |
| MiniLM | LambdaLoss | 冻结嵌入 | 33M | .9552 | .9440 | .9452 | .9094 | .7031 |
| MiniLM | LambdaLoss | 冻结6层 | 33M | .9424 | .9288 | .9301 | .8835 | .6549 |
| MiniLM | ListNet | 全解冻 | 33M | .9462 | .9423 | .9412 | .9016 | .6964 |
| MiniLM | ListNet | 冻结嵌入 | 33M | .9428 | .9397 | .9392 | .9021 | .6904 |
| MiniLM | ListNet | 冻结6层 | 33M | .9340 | .9203 | .9225 | .8838 | .6270 |
| MiniLM | PListMLE | 全解冻 | 33M | .9529 | .9452 | .9442 | .9013 | .7061 |
| MiniLM | PListMLE | 冻结嵌入 | 33M | .9484 | .9429 | .9410 | .8943 | .6847 |
| MiniLM | PListMLE | 冻结6层 | 33M | .9417 | .9266 | .9271 | .8876 | .6489 |
附录B 最优4组Optuna调参结果
| 配置 | 学习率 | 批次大小 | 预热比例 |
|---|---|---|---|
| LambdaLoss + 全解冻 | 6.08e-5 | 16 | 0.099 |
| LambdaLoss + 冻结嵌入 | 7.25e-5 | 32 | 0.066 |
| ListNet + 全解冻 | 1.71e-5 | 16 | 0.204 |
| ListNet + 冻结嵌入 | 5.53e-5 | 32 | 0.173 |
附录C 数据集构建完整伪代码
python
# 输入:医保服务集合S,每项s对应医疗流程集合P_s
# 输出:训练数据集D = {(查询q, 流程排序列表π)}
D = []
for s in 全部医保服务:
proc_list = 该服务对应的所有流程
if len(proc_list) < 2:
continue
n_query = 2 * len(proc_list)
# 轮询分配每条查询的目标流程
target_seq = 轮询打乱后的proc_list, 总长度n_query
for i in range(n_query):
target_proc = target_seq[i]
# 随机采样三类生成参数
意图 = 覆盖咨询 / 症状描述 / 直接诊疗需求
正式度 = 70%关键词短句 / 30%口语对话
同义词开关 = 30%开启 / 70%关闭
# 裁剪候选集,最多20个
cand_set = [target_proc]
if len(proc_list) > 20:
cand_set += 随机抽取19个非目标流程
else:
cand_set = proc_list
# 阶段1:GPT-4o生成患者查询,禁止直接复制流程名,温度0.7
query = GPT4o_generate(s, cand_set, target_proc, 意图, 正式度, 同义词开关, temp=0.7)
# 阶段2:GPT-4o做相关性全排序,温度0
rank_list = GPT4o_rank(query, cand_set, temp=0.0)
# 获取目标流程在排序中的位次
target_rank = rank_list.index(target_proc) + 1
# 质量过滤:目标在前3才保留样本
if target_rank <= 3:
D.append((query, rank_list))
# 最终数据集总量2647条
附录D 智能体提示优化搜索流程
贪心树搜索逻辑:每轮基于当前最优提示生成5条候选,在验证集打分;仅保留本轮最高分进入下一轮迭代;连续5轮无提升终止迭代。
附录E 并行坐标消融图说明
可视化18组微调配置从基础模型到NDCG@1指标变化,颜色代表指标提升幅度,直观看出MedCPT+ListNet全解冻为最优配置。
参考文献
完整参考文献列表见原arXiv论文,涵盖临床预训练模型、列表排序损失、LLM重排、交叉编码器微调、检索优化相关文献。