本项目报告、代码和数据资料已分享至会员群

加入会员群

我们团队在长期为金融、资讯类客户提供AI咨询方案时,反复遇到这类问题:如何在不损失精度的前提下,把重型大模型“轻量化”,让普通服务器甚至单机就能跑高性能NLP任务。本文正是基于这类真实项目的技术沉淀,系统介绍一套集成-蒸馏的工程化范式:先用多个强模型集成得到超高精度“教师模型”,再通过句子嵌入与线性回归训练“学生模型”,最终实现轻量模型在金融新闻情感分类上超越GPT-4。整套方案兼顾精度、速度、成本与可扩展性,已在真实业务中稳定运行。本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群,可与800+行业人士交流成长。

  1. 构建代表性金融新闻数据集
  2. 多LLM标注 → 集成构建教师模型
  3. 句子Transformer生成文本嵌入
  4. OLS线性回归学习教师输出
  5. 蒸馏得到轻量学生模型
  6. 规模化部署、低成本实时推理

本项目报告、代码和数据资料

下载资料(17页)

背景与问题:大模型好用,但难落地

在金融文本分析中,情感分类直接影响投研信号、舆情监控、风险预警等核心业务。过去我们对比过TextBlob、VADER、FinBERT等传统模型,也实测过PaLM-2、GPT-3.5、GPT-4、Gemini-Pro等大模型。结果显示,LLM在情感理解上显著优于传统模型,与人工标注一致性极高。但在规模化场景中,问题立刻显现:

  • 千万级文本调用API成本极高
  • 处理耗时长达数天甚至数周
  • 无法满足近实时业务需求
  • 模型不可控、难以本地化部署

这也是我们提出集成+蒸馏模式的初衷:保留大模型能力,剥离大模型负担,把能力装进轻量模型里

我们构建了覆盖多年、多行业、多新闻类型的新闻文本集,总计超万条样本,并在这批数据上系统评测了各类模型。以与人工标注一致率为指标,排名靠前的模型包括:Unicorn、GPT-4、Gemini-Pro等。

教师模型构建:多模型集成,精度再升级

集成学习的核心思想是:组合多个模型,得到比单一模型更稳、更强的输出。但并非随便组合就能提升,只有满足以下条件,集成才有意义:

  • 单个模型效果优于随机
  • 模型正确时预测相近
  • 模型出错时互不相关

我们采用迭代增量集成策略,从最优单模型开始,逐步加入能带来正向增益的模型,最终构建出最优教师集成系统。经过逐次测试,最优组合为:Unicorn + GPT-3.5 + GPT-4 + SigmaFSA + Bison。最终集成模型与人工标注一致率达到 90.4%,比最优单一模型再提升近6个百分点。

经过逐次测试,最优组合为:
Unicorn + GPT-3.5 + GPT-4 + SigmaFSA + Bison
最终集成模型与人工标注一致率达到 90.4%,比最优单一模型再提升近6个百分点。

教师模型集成效果对比

我们通过阈值规则将集成输出转为离散情感标签:

  • 大于1 → 正向
  • 小于-1 → 负向
  • 中间 → 中性

这套教师模型将作为后续蒸馏学习的“标准答案”。

学生模型构建:基于句子嵌入与OLS线性回归

相关技术图片

Python用langchain、OpenAI大语言模型LLM情感分析AAPL股票新闻数据及提示工程优化应用

利用langchain与OpenAI大语言模型对苹果股票新闻进行情感分析,结合提示工程优化,提升金融文本分类精度。

探索观点

为了让轻量模型学会教师模型的能力,我们选择句子嵌入(Sentence Embedding)+ 普通最小二乘回归(OLS)作为学生模型主体。
句子嵌入可以把不定长文本转为固定维度向量,高质量嵌入能保留文本语义信息。我们选用主流Sentence Transformer模型,包括微软E5系列、BGE系列、GTE系列、Sentence-T5系列等。
回归模型我们选择最简单的
线性回归
,原因很明确:

  • 结构简单、推理极快、部署成本极低
  • 可解释性强,适合金融等合规敏感场景
  • 在优质特征下效果远超预期
  • 支持单机、边缘设备、高并发场景
    模型的核心思路是:
    用文本嵌入拟合教师模型输出 → 蒸馏得到轻量可部署模型

核心实现代码

以下为项目核心代码和数据,变量、结构、注释均已重构,保留关键逻辑,省略部分配置与模型列表代码,便于学习与复现。

import datetime
import json
import numpy as np
import pandas as pd
from sentence_transformers import SentenceTransformer
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 存储实验结果
exp_result = {}
# 加载新闻数据与标注数据
with open("news_data.json", "r", encoding="utf-8") as f:
 news_content = json.load(f)
with open("news_labels.json", "r", encoding="utf-8") as f:
 news_label_info = json.load(f)
# 构建教师模型集成分数
for doc_id, label_info in news_label_info.items():
 total_score = sum([
 label_info["Text-Unicorn"],
 label_info["GPT-3.5-Turbo"],
 label_info["GPT-4-Original"],
 label_info["Sigma"],
 label_info["Text-Bison"],
 ])
 news_content[doc_id]["teacher_score"] = total_score
# 构建输入文本
sentence_list = []
for doc_id, content in news_content.items():
 sentence_list.append(f"{content['Headline']}. {content['Description']}")
# 选择需要测试的句子嵌入模型(部分省略)
emb_model_list = [
 "intfloat/e5-small-v2",
 "intfloat/e5-base-v2",
 "intfloat/e5-large-v2",
 "BAAI/bge-large-en-v1.5",
 "sentence-transformers/sentence-t5-large",
 ...... # 此处省略其余模型列表
]
# 遍历模型训练与评估
for idx, model_name in enumerate(emb_model_list):
 # 加载模型
 encoder = SentenceTransformer(model_name, trust_remote_code=True)
 # 计算参数量
 param_count = sum(p.numel() for p in encoder.parameters())
 start_time = datetime.datetime.utcnow()
 # 生成嵌入
 embeddings = encoder.encode(sentence_list, show_progress_bar=False)
 dim_num = embeddings.shape[1]
 time_cost = (datetime.datetime.utcnow() - start_time).total_seconds()
 # 构建训练数据
 out_df = pd.DataFrame.from_dict(news_content, orient="index")
 in_df = pd.DataFrame(embeddings, index=out_df.index)
 # 划分训练集测试集
 x_tr, x_te, y_tr, y_te = train_test_split(
 in_df, out_df, test_size=0.25, random_state=42
 )
 # 构建教师标签
 teacher_val = y_te["teacher_score"].values
 teacher_class = np.zeros(len(teacher_val))
 teacher_class[teacher_val <= -1] = -1
 teacher_class[teacher_val >= 1] = 1
 # 训练线性回归模型
 lr_model = LinearRegression()
 lr_model.fit(x_tr.values, y_tr["teacher_score"].values)
 # 预测与评估
 y_pred = lr_model.predict(x_te.values)
 y_pred = y_pred.flatten()
 y_pred_class = np.zeros(len(y_pred))
 y_pred_class[y_pred <= -1] = -1
 y_pred_class[y_pred >= 1] = 1
 match_num = np.sum(y_pred_class == teacher_class)
 acc = match_num / len(teacher_class) * 100
 print(f"模型 {model_name} 准确率: {acc:.2f}%")
 exp_result[f"LR_{model_name.split('/')[-1]}"] = {
 "params": param_count,
 "time": time_cost,
 "dim": dim_num,
 "acc": acc
 }
# 保存结果
result_df = pd.DataFrame.from_dict(exp_result, orient="index")
result_df.to_csv("model_compare_result.csv", index_label="model")

结果对比与分析

我们一共评测了38个模型,包括教师模型、主流LLM以及30个基于不同句子嵌入的轻量学生模型。整体结论非常明确:优质嵌入+简单回归,即可在金融情感任务上超过GPT-4

微软E5系列在各参数量级中表现都极为突出:

  • 小于1亿参数:e5-small-v2 最优
  • 1–2亿参数:e5-base-v2 最优
  • 3–4亿参数:e5-large-v2 最优

384维向量模型结果

  • LLM参考:Unicorn 89.04%,GPT-4 79.90%
  • 最优轻量模型:e5-small-v2 76.54%

768维向量模型结果

  • 最优:sentence-t5-large 80.40% (超过GPT-4)

1024维向量模型结果

  • 最优:e5-large-v2 80.21% (超过GPT-4)

多语言模型结果

核心价值:为什么这套方案值得企业落地

我们从真实业务视角总结这套集成+蒸馏模式的四大优势:

1. 效果更强

sentence-t5-large、e5-large-v2等轻量模型在金融新闻情感分类任务上准确率超过GPT-4,同时逼近90%+级别的教师集成模型。

2. 成本极低

大模型API调用千万级文本成本极高,而蒸馏后的轻量模型推理边际成本几乎为0,一次性训练,终身复用。

3. 速度极快

GPT-4单条推理约0.5秒,千万级文本需数十天;
轻量模型单条推理约0.005秒,千万级一天内即可完成

4. 可复用、可扩展

这套集成-蒸馏模式不局限于情感分类,可直接迁移到:

  • 时态判断
  • 新闻主题分类
  • 品牌安全检测
  • 文本风险分级
  • 政治倾向识别
  • 前瞻性陈述判断
  • 上千类网站内容分类

总结

本文提出一套LLM集成+句子嵌入+线性回归蒸馏的文本理解轻量化方案,在金融新闻情感分类任务上实现了轻量模型超越GPT-4的效果。整套方法工程化程度高、成本低、速度快、稳定可靠,适合大规模文本实时处理场景,是大模型从“演示可用”到“规模化可用”的关键桥梁。

封面