行业资讯

加入亿拓客·流量大师 撬动财富之门!!!

债券AI交易——中国大型券商的实践

wang 2026-06-09 行业资讯
债券AI交易——中国大型券商的实践
AI已经开始辅助最难被替代的债券交易了,完全替代交易员又需要多久?

一、一个273万亿市场的"翻译"难题

中国债券二级市场2024年成交额突破273.54万亿元,体量是股票市场的十倍。但这个庞大市场的运转方式却出人意料地"原始"——绝大多数交易不是在标准化的交易所完成,而是通过场外交易(OTC):交易员们在微信群、私聊窗口里扔出各种报价消息,broker得像淘金一样从这些聊天碎片里筛出有效信息,撮合买卖双方。

一条典型的RFQ(Request-for-Quote,报价请求)消息长这样:

"CCB Trust bid 102382759 next day+0, flat to valuation"

或者更复杂的:

"3.8/3.60*~/3000" —— 表示bid价3.8、offer价3.60,带星号需审批,面值3000万元

broker的核心竞争力是。一条好报价晚匹配几秒,可能就被同行截胡。在平均单笔交易600万元的量级下,这种延迟直接折算成财务损失。问题是,这些消息全是自由文本,没有统一格式,broker过去只能靠人工逐条阅读、理解、录入系统——我们称这个过程为RFQ解析

论文把这一任务定义为:从非结构化聊天文本中,提取包含18个字段的结构化交易记录(债券代码、买卖方向、价格、面值、结算速度、评级等)。


二、三个让通用AI"翻车"的硬骨头

硬骨头一:金融黑话的"语义迷宫"

债券交易有自己的方言体系。"valuation+1"在训练数据里几乎总是表示"按估值价加1元成交",但市场演化后出现了"+1 3.31 1.85Y"这种写法——这里的"+1"其实是T+1结算的意思,3.31才是价格。同一个符号,位置不同、搭配不同,意思截然不同。通用大模型没见过这种"黑话变体",很容易按老经验误读。

硬骨头二:长消息里的"俄罗斯套娃"

普通信息抽取任务假设"一条消息一个记录",但真实RFQ完全不是这样。平均一条消息塞了11.13条独立报价记录,多的能有几十条。这些记录还玩"共享上下文"——开头几行是公共信息,后面每条记录各自补充细节。整段扔给模型解析,不仅慢,还容易把A记录的价格套到B记录头上。

硬骨头三:市场在变,模型不能"失忆"

新债券品种、新交易习惯、新入行broker的表达方式……RFQ的格式永远在演化。传统正则表达式方案F1只有67.2%,且维护成本随规则膨胀而指数增长;直接拿通用LLM(如gpt-4o)来用,F1能到85%,但遇到新pattern照样抓瞎,重训模型又贵又慢。


三、Chat2Trade的三板斧:分块、检索、生成

针对上述问题,论文提出了一套"先拆后学再组装"的流水线,三个模块环环相扣:

第一板斧:消息分块——把"套娃"拆成独立零件

算法逐行扫描RFQ消息,识别两种关键行:

  • 独立行:包含债券名称或代码,意味着"这里开始一条新记录"
  • 共享行:不含债券标识,但携带了后续记录共用的上下文(比如统一的结算方式或评级前缀)

每条独立行往前"拉"上它前面的共享行,拼成一个完整的RFQ条目。原本最长4829 token的输入被压缩到922 token,输出从25088 token砍到1561 token。更关键的是,拆完后各条目可以并行处理,推理速度大幅提升。

第二板斧:少样本检索——让历史案例"现场教学"

债券报价的格式有强烈规律性。"ofr [代码] [价格]"和"bid [代码] [价格]"的解析逻辑几乎一样,模型不需要从零学,只需要"看几个例子就懂"。

系统先把历史训练数据模板化:把具体的数字、代码替换成占位符,保留结构骨架,建成模板库。遇到新消息时,同样做模板转换,用最长公共子序列(LCS)相似度快速找到最像的历史案例:

再用最大边际相关性(MMR)重排序,确保选出来的例子既相关又多样,避免"三个例子其实一回事"的冗余:

最后设个相似度门槛,太不像的干脆不放进提示词,防止模型被带偏。

第三板斧:记录抽取——在提示词里"开卷考试"

把分好的条目和检索到的少样本示例一起塞进微调后的LLM,让它照着例子"临摹"输出JSON。由于分块偶尔会把一行拆错或漏拆,最后再加一道去重校验,删掉重复或重叠的记录。


四、工程里的魔鬼细节

训练配方

基于Qwen2.5-1.5B和3B两个版本微调,batch size压到2,学习率,上下文窗口5120 token。为防止长消息里相似条目过多导致模型"偏科",每条长消息最多采样5个代表性条目训练。

损失函数是标准的自回归交叉熵:

CUDA内核加速:让检索飞起来

LCS相似度计算是整套系统的速度瓶颈。10,000条模板用CPU算要近1秒,完全无法满足实时交易需求。团队手写CUDA内核,256线程并行,x轴分发检索任务、y轴并行LCS计算,共享内存存模板、寄存器存临时变量——最终0.04秒搞定,提速25倍。

投机解码:猜对了就跳过

用一个小草稿模型预生成token,大模型批量验证。因为RFQ输出是高度模板化的JSON,小模型猜中的概率很高,猜对了大模型直接跳过,猜错了再老老实实逐token生成。这招让吞吐量从基线提升到19.4 requests/s,增幅50%。


五、数字说话:精度与速度的双重跨越

解析精度对比(Table 2)

方法
精确率
召回率
F1
短消息吞吐
长消息吞吐
整体吞吐
RegExp规则
67.20
67.13
67.16
1221.61
1209.53
1218.41
Qwen2.5-1.5B(无微调)
55.53
52.31
53.87
9.21
11.21
10.66
gpt-4o(无微调)
86.35
84.04
85.18
3.27
3.46
3.44
Chat2Trade-1.5B(本文)95.4295.0495.23
9.32
13.20
13.02
Chat2Trade-3B(本文)
95.18
95.13
95.16
5.78
10.23
9.67

几个值得品味的结论:

  • 1.5B微调 > 通用大模型:Chat2Trade-1.5B的F1比gpt-4o高出10个百分点,说明在垂直领域,"对症下药"比"大力出奇迹"更有效
  • 小模型+好架构 > 大模型+零样本:1.5B版本在速度和精度上双杀3B版本,工程优化释放了硬件潜力
  • 规则系统快但不可用:RegExp吞吐虽高,但每三条记录就错一条,生产环境无法容忍

持续学习:新黑话来了怎么办?

金融市场永远在变,模型部署后必然遇到训练时没见过的表达。论文设计了四阶段持续学习实验:基线 → 加入OOD1数据 → 加入OOD2 → 加入OOD3。

Chat2Trade的少样本适配策略(只更新模板库,不碰模型参数)在三阶段分别带来**+18.36%、+9.01%、+17.25%**的累积提升。作为对比,参数高效的DoRA方法仅提升4%-5%,且越学越忘;全量重训虽然能追上,但每阶段都要重新训练模型,成本不可接受。

消融实验:每个模块值多少?

  • 抽掉检索:F1掉1.9分(95.23→93.33),少样本示例是精度的重要保险
  • 抽掉分块:F1掉5.5分(95.23→89.70),直接退化成朴素微调,长消息处理能力崩塌
  • 把模板检索换成向量检索(bge-m3):F1掉15.5分(95.23→79.69),证明结构相似性语义相似性对RFQ任务更关键
  • 抽掉长消息下采样:F1掉2分,且长消息过拟合导致泛化变差

六、从论文到交易大厅:10个月的真实部署

Chat2Trade已在China Securities Co., Ltd.(中信建投证券)生产环境运行超10个月,支持100余名broker,高峰期每小时处理2,035条RFQ

论文设计了一个扎实的A/B测试:部署前,使用系统的broker组(A组)日均交易量仅为对照组(B组)的0.73倍;部署后,A组跃升至B组的2.67倍——相对交易量增长了3.67倍。broker的工作流从"主动翻聊天记录找机会"变成"系统实时推送匹配报价",交易机会捕获效率发生质变。


七、留给行业的思考

Chat2Trade的价值不止于一个债券交易工具,它示范了垂直领域LLM应用的几个关键原则:

  1. 领域知识要"显式"注入:与其指望模型自己悟出"valuation+1"和"+1 3.31"的区别,不如通过模板检索把相关案例送到它眼前
  2. 结构感知优于语义感知:对高度格式化的金融文本,LCS这种"看骨架"的相似度,比embedding这种"看意思"的相似度更靠谱
  3. 轻量持续学习是落地关键:金融数据分布永远在漂移,重训模型不现实,少样本检索提供了一条"不修改模型就能适应新pattern"的务实路径
  4. 小模型+系统工程 = 大模型效果:在特定任务上,1.5B模型配合精心设计的分块、检索、解码优化,完全可以超越通用大模型的零样本表现

(加入星球,获取论文和其它资料)

猜你喜欢

发表评论

发表评论: