列表式交叉编码器微调 vs 智能体指令优化大模型重排器:医保医疗流程重排序系统性研究

列表式交叉编码器微调 vs 智能体指令优化大模型重排器:医保医疗流程重排序系统性研究

原论文链接https://arxiv.org/html/2608.09650v1

摘要

医保信息检索系统中,患者口语化提问与标准化临床术语存在巨大词汇鸿沟,医疗流程重排序是核心业务模块。本文针对工业落地场景,系统对比两类主流重排序技术路线:

  1. 小规模交叉编码器:采用MedCPT(109M)、MiniLM-L12(33M)两类骨干,搭配3种列表式排序损失、3种分层冻结策略完成微调;
  2. 大语言模型重排器: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 业务背景与痛点

患者咨询医保报销时,检索链路分为粗召回、重排序两阶段:召回器批量筛选候选医疗流程,重排器根据临床相关性完成打分排序。核心难点在于词汇鸿沟:患者使用口语、症状描述(如"走路膝盖疼"),医保目录为专业临床术语(如膝关节穿刺术),二者语义错位极易造成匹配错误,引发理赔判定失误、大量行政冗余。

现有两条技术路线各有短板:

  1. 零样本LLM重排器:泛化能力强,但4B及以上模型推理延迟高、GPU部署成本昂贵,缺少医疗领域专属校准;
  2. 交叉编码器微调:现有方案多采用点对/配对损失,无法直接优化NDCG等全局排序指标,完整候选列表排序效果受限。

1.2 本文四大核心贡献

  1. 搭建两阶段LLM自动化数据集生成流水线,通过质量过滤得到2647条标注样本,两名行业专家人工校验验证标注可靠性;
  2. 设计完整对照实验网格:2种编码器骨干 × 3种列表损失 × 3层冻结策略,合计18组配置,系统消融各变量影响;
  3. 提出GPT-4.1驱动的智能体提示迭代优化框架,自动挖掘领域专属提示词,构建强LLM基线;
  4. 给出工程落地结论:仅109M的领域微调交叉编码器,指标全面超越4B大模型,CPU即可部署,具备显著算力与延迟优势。

2 相关工作

  1. 交叉编码器检索:联合编码查询-文档对,精度优于双塔编码器;MedCPT、Clinical BERT等医疗预训练模型在生物检索表现突出,但过往微调极少采用列表式损失;
  2. LLM零样本重排:Qwen3、BGE等指令微调模型可直接完成重排序,但存在算力成本、领域适配短板;
  3. 列表式排序损失:LambdaLoss、ListNet、PListMLE直接优化NDCG全局指标,理论性能优于点/配对损失;
  4. 智能提示工程:传统提示依赖人工编写,本文实现自动化迭代寻优,无需领域专家手动撰写专业指令。

本文首次在真实医保生产任务上,定量对比列表微调小型交叉编码器智能体优化大模型重排器两套方案,给出可直接复用的工业实验结论。

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)−1log⁡2(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 交叉编码器微调骨干模型

选用两类预训练交叉编码器:

  1. MedCPT-Cross-Encoder(109M):基于PubMed医疗文献日志预训练,医疗领域适配性强;
  2. MiniLM-L12-v2(33M):通用检索蒸馏轻量模型;
    输入为(患者查询,医疗流程)文本对,输出一维相关性logit;训练批次为完整候选排序列表,全程采用列表损失计算梯度。

4.2 三类列表式排序损失

sis_isi为模型输出分数,yiy_iyi为真实相关性标签:

  1. 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增益加权配对损失梯度;
  2. ListNet
    LListNet=−∑iPy(pi)log⁡Ps(pi) \mathcal{L}{\text{ListNet}}=-\sum{i}P_{y}(p_{i})\log P_{s}(p_{i}) LListNet=−i∑Py(pi)logPs(pi)
    最小真实排序分布与模型softmax分布交叉熵;
  3. 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 三层参数冻结策略

  1. 全解冻:全部参数参与训练;
  2. 冻结嵌入层:冻结词/位置/类型嵌入,约78%参数可训练;
  3. 冻结嵌入+前6层Transformer:仅后6层可训练,约40%参数可训练;
    2模型 × 3损失 × 3冻结,构成完整18组消融实验网格。

4.4 智能体提示优化框架(Qwen3-Reranker-4B)

基线模型:4B参数量Qwen3-Reranker,采用GPT-4.1迭代寻优循环:

  1. 固定200条验证子集,计算每条NDCG@3;
  2. 筛选最优、最差各10条样例作为对比素材;
  3. 元提示输入历史迭代记录+正负样例,GPT-4.1一次性生成5条候选提示;
  4. 全部候选在验证集批量打分;
  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 损失与冻结消融结论

  1. 损失横向对比:验证集LambdaLoss小幅领先ListNet,但测试集ListNet表现更优;三类损失均可大幅提升斯皮尔曼相关(+10~19pp);
  2. 冻结策略:全解冻 ≈ 冻结嵌入 >> 冻结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。

核心工程落地结论:

  1. LLM两阶段流水线可低成本构建垂直领域重排序标注数据集;
  2. 智能体迭代寻优是快速搭建强LLM基线的高效手段;
  3. 线上系统算力、延迟受限场景,领域微调小型交叉编码器是更优生产选型。

研究局限性

  1. 数据集仅来自单一医保服务商流程体系,跨国家、跨保险分类泛化性未验证;
  2. 全部标注由GPT-4o生成,会继承大模型固有偏倚,人工校验仅缓解部分偏差;
  3. 仅测试2款交叉编码器、1款大重排器,未覆盖BGE、GTE等主流重排模型;
  4. 冻结实验仅测试底层冻结,未探索冻结顶层、微调嵌入层的反向策略。

伦理说明

  1. 全程无患者隐私、PHI敏感数据,仅使用脱敏医保服务名称、流程、机器生成查询;
  2. 模型仅用于医保行政匹配辅助,不用于临床诊断、诊疗方案推荐;
  3. 合成数据会继承GPT-4o语言偏倚,对小众患者口语匹配存在潜在偏差;
  4. 核心结论证明小模型可替代大模型,降低线上推理算力消耗,绿色节能。

附录

附录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重排、交叉编码器微调、检索优化相关文献。

相关推荐
liuyunshengsir2 小时前
从 TVM 到 TileLang:一文读懂深度学习编译器为什么走向 Tile 化
人工智能·深度学习·tvm·tilelang
海天一色y2 小时前
GSPO:重新定义大语言模型的强化学习训练范式
人工智能·机器学习·语言模型
云和数据.ChenGuang2 小时前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
watersink2 小时前
机器学习HMM
人工智能·机器学习
东方小月2 小时前
从零开发一个 Coding Agent(九):实现 Agent 的工具调用闭环
人工智能·前端框架·node.js
Luhui Dev2 小时前
如何在 WorkBuddy 中使用大角几何:从 MCP 接入到 AI 几何作图
人工智能·数学·算法·agent·luhuidev
孙启超3 小时前
【AI应用开发】什么是混合检索(Hybrid Search)?向量检索 + BM25 关键词检索,适用场景与 RRF 融合原理
人工智能·缓存·llm·向量数据库·bm25·向量化·ai应用开发
The moon forgets3 小时前
Qwen团队提出Ego2Robot, 第一人称视频助力具身VLA训练新数据
人工智能·机器学习·音视频