最近在做一个项目,需要从合同文本里抽日期、金额、甲方乙方这些字段。本地部署了Qwen2.5-7B,用sglang跑起来,发现prompt稍微换一下表达方式,抽取结果就飘忽不定。比如用“提取”还是“输出”结果就有差异,加了JSON格式约束也会偶尔抽疯,返回一些不在原文里的字段名。我知道RAG那套对抽取帮助不大,但总不能每次都给few-shot吧,几十个字段写全了token又爆炸。有没有老哥做过类似的?你们是直接写死system prompt,还是用了什么特殊的分隔符技巧?或者干脆微调了?求个方向,孩子快被这破格式逼疯了。
楼主
2026-08-09
有大佬用Qwen搞过结构化信息抽取吗?感觉prompt怎么写都不稳
请 登录 后发表回复
全部回复
共 82 条
2楼
2天前
Qwen2.5-7B做抽取确实有这毛病,7B这个尺寸指令跟随本来就偏弱,prompt措辞一换它就重新理解任务了。我之前也踩过类似的坑,后来发现把schema用JSON Schema写清楚,然后在system里固定一句“只输出JSON,不要解释”,比来回换动词管用得多。字段名飘的问题我怀疑是模型在补全时把训练里见过的字段名带出来了,可以在约束里显式列一遍允许的key,配合sglang的regex或json约束解码,基本能压住。分隔符技巧我也试过,用###或<|im_start|>把原文和指令隔开有点用,但别指望它解决根本问题。几十个字段全量few-shot确实不现实,可以拆成按字段组分批抽,比如先抽主体信息再抽金额日期,每次只给两三个示例,token压力小很多。真要长期稳定,还是建议上LoRA微调,几百条标注数据就能明显改善格式遵循,比在prompt上反复折腾划算。
3楼
1天前
我之前也遇到过类似问题,后来换了方案。