DIRECT 解码|用 LLM 做序列标注,只生成标签 token 就够了
今天 arxiv 上挂了一篇让我多看了两眼的论文:DIRECT: Direct Decoding for Efficient and Aligned Sequence Labeling with Large Language Models,Yilei Wang、Jiaxin Gan 等六位作者,7 月 29 号提交。
信息抽取领域,序列标注(命名实体识别、事件抽取这类)用 LLM 做,效果上去了,效率始终跟不上。常规做法是让模型把整个标注序列重新生成一遍,输入多长输出就多长,推理成本跟文本长度成正比。小规模用用还行,到生产环境——批处理几千条、每条约 500 token——等待时间和算力账单就很真实了。
DIRECT 解决的问题正好是这个:把序列标注的推理过程从「重新写一篇文章」变成「只填几个空」。
训练时它加了一步 Direct Preference Optimization(DPO),放在 Supervised Fine-Tuning 之后,让模型更适应具体标注任务的需求,而不是光跟着标注格式走。解决的是「模型知道格式但不太听话」的问题——该标成「ORG」的地方标成了「PERSON」,或者实体边界画错了。
推理时加速这部分更有看头。DIRECT 做了受控解码加模板填充:输入文本先被当成固定前缀缓存下来(KV Cache),模型只需要生成标签 token,不需要重复编码整段输入。解码过程同时限制了输出格式和候选集,不会出现格式之外的乱输出。
举个例子,用 LLM 做命名实体识别,以前模型要把「张三昨天去了北京」从头到尾过一遍,再吐出一串标注。DIRECT 的做法是,这句话的编码结果复用,模型只需要吐出「张三 -> PERSON,北京 -> LOC」这几个标签 token。
序列标注任务里,输入文本占掉了绝大多数 token,标签输出通常只有几个到几十个 token。KV Cache 复用加上只生成标签 token,推理时的计算量直接从 O(输入长度 + 输出长度) 降到接近 O(输出长度),长文本场景尤其划算。
论文在八个数据集上做了实验,摘要没有列详细结果——详细的 benchmark 和对比在正文和附录中——但明确说了 performance 和 efficiency 都有显著提升。八数据集这个覆盖度,应该涵盖了 CoNLL、OntoNotes 这类常见序列标注 benchmark。
这套方法依赖两个前提:一是要有明确的标签候选集(知道任务可能标出哪些类型),二是有 SFT 加 DPO 的训练流程。不是零样本就能跑起来的方案,需要做模型训练和适配。只打算调 API 的用户门槛偏高,对有训练 pipeline 的团队,这个效率优化是实打实的。
KV Cache 复用加受控解码,对模型架构和推理框架有没有特殊要求?如果只能在特定框架或特定模型上跑通,实用价值就要打个折扣——这个要看论文正文有没有交代。
DIRECT 痛点清楚、方案直接,落地可预期。没有堆炫酷的架构,用 DPO 加解码优化把序列标注这条老路重新铺了一遍,铺得比以前平。在做信息抽取、文档理解、金融风控这些需要精确序列标注的团队,这篇值得翻一下正文,特别是推理效率那几页。
序列标注这个方向在 LLM 时代一度显得有点「旧」,真实业务里每天跑最多的恰恰就是这些细粒度任务。不是所有场景都需要模型说一大段话,很多时候,让它只输出该输出的那十几个 token,就够了。
相关链接
- arXiv: 2607.26891 — DIRECT: Direct Decoding for Efficient and Aligned Sequence Labeling with Large Language Models