欢迎来到第16章
大语言模型:金融文本分析的新范式
本章学习路线图
本章学习目标:开启金融文本分析新范式
通过本章学习,您将能够:
- 理解大语言模型背后的核心技术演进,特别是 Transformer 架构的革命性意义。
- 识别大语言模型在现代金融领域的关键应用场景,例如情绪分析和文本摘要。
- 掌握通过 API 调用大语言模型,对真实金融文本进行自动化分析的基本技能。
核心问题:信息隐藏在字里行间
金融市场每天都会产生海量的非结构化文本数据:
- 上市公司年报、季报、临时公告
- 财经新闻、分析师报告
- 社交媒体讨论、论坛帖子
这些文本蕴含着影响市场走向的关键信息,但传统计量方法难以有效处理。
传统方法的局限性
传统文本分析方法,如“词袋模型”或基于词典的方法,常常忽略了最重要的元素:语境 (Context)。
大语言模型为我们提供了一个前所未有的强大工具,来理解、分析和量化这些信息。
LLM 格局:商业模型的领跑者
近年来,大语言模型取得了突破性进展,形成了由少数巨头引领的格局。
- OpenAI 的 GPT 系列:
- 以 GPT-4 / GPT-4o 为代表。
- 在逻辑推理、代码生成和多语言能力上树立了行业标杆。
- 展现了强大的通用问题解决能力。
- Google 的 Gemini 模型:
- 原生多模态设计,能同时理解和处理文本、图像、音频和视频。
- 拥有极大的上下文窗口(Context Window),能处理百万级Token的输入。
这些顶尖模型的具体架构和参数是具有极高商业价值的机密。
开源模型的崛起
与此同时,开源社区也涌现出许多性能卓越的模型,推动了技术的普及和创新。
Llama 系列 |
Meta AI |
性能强大,拥有从7B到70B多种尺寸,生态系统丰富 |
Mistral / Mixtral |
Mistral AI |
效率极高,采用“专家混合”(MoE)架构,以较小模型尺寸实现顶级性能 |
悟道 / 文心一言 |
智源研究院 / 百度 |
中国在LLM领域的代表性成果,中文处理能力强大 |
ChatGLM |
清华大学 & 智谱AI |
中英双语支持良好,是本章稍后实践环节将使用的模型 |
回顾历史:语言模型如何一步步演化至今?
在 Transformer 诞生之前,处理序列数据(如文本)的主流模型是循环神经网络(RNN)。
RNN/LSTM的固有缺陷:难以处理长文本
尽管 RNN 和 LSTM 在许多任务上表现出色,但它们存在两个难以克服的瓶颈:
- 梯度消失/爆炸:信息在长序列中传递时,会逐渐丢失或变得不稳定,导致模型“遗忘”了靠前的输入。
- 顺序计算限制:必须按顺序处理单词,无法进行并行计算,导致训练效率低下,尤其是在处理长篇文档(如年报)时。
这直接限制了模型处理长距离依赖关系的能力。
缺陷1:梯度消失问题
信息在 RNN 中长距离传递时,就像一个越传越弱的信号。
缺陷2:顺序计算的效率瓶颈
RNN 的计算是严格串行的,无法利用现代硬件的并行处理能力。
革命的到来:2017年论文《Attention is All You Need》
2017年,Google Brain 团队发表了一篇划时代的论文,提出了 Transformer 架构,彻底摒弃了 RNN 的循环结构,仅依赖一种名为 “注意力机制” 的核心组件。
这一改变极大地提高了训练效率(可并行化),并显著增强了模型捕捉长距离依赖关系的能力。
基础:什么是Tokenization和Embedding?
在进入模型内部前,文本需要经过两步预处理:
- 分词 (Tokenization):将原始文本字符串切分成一个个更小的单元,称为“标记”(Token)。
- 嵌入 (Embedding):将每个 Token 映射到一个高维的数字向量(Vector)。这个向量代表了该 Token 的初始语义含义。
什么是序列到序列(Seq2seq)模型?
要理解 Transformer,首先要理解它所属的范式:序列到序列(Seq2seq)。
- 定义:输入一个序列,输出另一个序列的模型。
- 序列(Sequence):一系列按顺序排列的标记(Token)。
- 向量表示:在模型内部,每个 Token 都被表示为一个高维向量。
机器翻译 |
中文句子 |
英文句子 |
聊天机器人 |
用户的问题 |
机器人的回答 |
文本摘要 |
一篇长文章 |
几句核心摘要 |
注意力机制的QKV类比
我们可以将注意力机制类比为在图书馆查阅资料的过程:
- Query (Q): 你当前正在处理的词,即你的“查询问题”。
- Key (K): 句子中所有可供参考的词,像是图书馆里所有书籍的“关键词索引”。
- Value (V): 句子中所有词本身包含的信息,像是书籍的“具体内容”。
过程:用 Q 去和每一个 K 计算“相似度”,这个分数决定了应该从对应的 V 中提取多少信息。
两种主流路径:编码器模型 vs. 解码器模型
在实际应用中,编码器和解码器可以独立使用,形成了两大主流模型分支:
编码器架构:BERT
- 全称:Bidirectional Encoder Representations from Transformers
- 由多个编码器堆叠而成。
- 特点:能同时看到左右两侧的上下文,是“完形填空”大师。
- 天生适合:理解任务,如文本分类、情绪分析、命名实体识别。
解码器架构:GPT
- 全称:Generative Pre-trained Transformer
- 由多个解码器堆叠而成。
- 特点:只能看到左侧的上下文,是“句子接龙”大师。
- 天生适合:生成任务,如对话、写作、代码生成。
大语言模型的“三级火箭”训练法
大语言模型的训练是一个成本高昂且复杂的过程,通常分为三个核心阶段。
第一阶段:通过自监督学习进行“预训练”
预训练(Pre-training)是模型学习语言基础规律的阶段。
- 核心思想:使用自监督学习(Self-supervised Learning)方法,让模型从海量无标签文本中自动学习语言规律。
- 数据来源:整个互联网的公开文本、书籍、论文等。
- 优势:无需人工标注数据,训练数据的获取成本极低。这是训练极其复杂模型的必要前提。
预训练任务示例:BERT vs. GPT
不同的模型架构采用不同的自监督任务:
BERT: 完形填空
- 任务: 遮蔽语言模型 (Masked Language Model, MLM)
- 做法: 随机遮盖(mask)掉一些词,让模型根据双向上下文预测被遮盖的词。
- 例子:
研究[MASK]市场需要[MASK]数据。
- 目标: 训练深度语境理解能力。
GPT: 句子接龙
- 任务: 下一词预测 (Next Word Prediction)
- 做法: 给定一段文本,让模型根据单向上下文预测下一个最可能出现的词。
- 例子:
研究金融市场需要...
- 目标: 训练连贯的文本生成能力。
第二阶段:针对特定任务进行“微调”
预训练好的模型是一个通用的“语言专家”,但还不是特定任务的“专才”。
微调(Fine-tuning)就是将这个通用模型适配到具体任务上的过程。
微调数据点示例
表16.1:金融领域微调数据示例
任务:情绪分类 文本:“该公司本季度营收超出预期,利润实现强劲增长。” |
情绪:正向 |
任务:新闻摘要 文本:“中国人民银行今日宣布将下调存款准备金率0.5个百分点,旨在通过释放长期资金来稳定市场流动性……” |
摘要:央行宣布降准0.5个百分点以稳定市场流动性。 |
任务:命名实体识别 文本:“特斯拉公司(Tesla, Inc.)的首席执行官埃隆·马斯克表示……” |
{ "公司": "特斯拉公司", "人物": "埃隆·马斯克" } |
第三阶段:基于人类反馈的强化学习 (RLHF)
为了让模型的输出更符合人类的偏好(例如,更有用、更无害),研究人员引入了 RLHF。
金融应用(1): 情绪分析的革命
传统的情绪分析依赖于固定的词典,但金融领域的词汇含义高度依赖上下文。
- 经典例子:“liability”
- 通用语境:“累赘”,负面情绪。
- 金融语境:“负债”,中性词汇。公司的资产负债表必然包含负债,适度的负债是正常经营的一部分。
- LLM的优势:BERT 这类模型能够深刻理解上下文,准确区分“吃苹果”和“苹果电脑”中的“苹果”,从而对金融文本的情绪做出更精准的判断。
研究前沿:利用LLM情绪信号构建交易策略
学术界已经涌现出大量利用 LLM进行情绪分析并指导投资的研究。
- Lira-Lopez 和唐跃华教授 的研究发现,使用 ChatGPT 分析新闻标题产生的情绪,可以构建出能够获得超额收益的交易信号。
- 李雪君、屠致远及周德馨教授 的研究则表明,GPT-4 具有一定分析公司信息披露文本并生成简短、高质量分析报告的能力。
金融应用(2): 实体与文本的模糊匹配
在处理来自不同数据库的数据时,我们经常会遇到实体名称不统一的问题。
- 例如:
'国际商业机器公司'
, 'IBM Corp.'
, 'IBM'
可能指向同一家公司。
传统方法依赖于复杂的规则或编辑距离算法,效果有限。
大语言模型可以理解这些字符串背后的语义,从而实现高效、精准的模糊匹配,极大提升了金融研究中的数据清洗和整合效率。
金融应用(3): 金融领域专属模型的构建
为了让 LLM 在金融领域表现更出色,有三种主流的优化方案。
方案1:领域预训练 (From Scratch)
使用海量的金融和经济文本(如所有EDGAR文件、分析师报告)从头开始预训练一个模型。
- 优点: 效果最好,模型“天生”就是金融专家,对领域术语和语境有最深刻的理解。
- 缺点: 成本极其高昂,需要巨大的算力和时间,只有少数大型机构能够承担。
方案2:领域微调 (Fine-tuning)
在通用预训练模型(如 BERT)的基础上,使用金融领域的有标签数据进行微调。
- 优点: 性价比高,效果显著提升,成本远低于从头预训练。FinBERT 就是一个成功的例子。
- 缺点: 仍然需要高质量的、针对特定金融任务的标注数据。
方案3:提示工程 (Prompting)
直接使用现成的强大模型(如 GPT-4, Gemini),通过精心设计的提示(Prompt)来引导模型在金融任务上表现更好。
- 优点: 最便捷、成本最低,无需训练,可以快速验证想法。
- 缺点: 效果依赖于提示的质量和基础模型的能力,对于非常专业的任务可能不够深入。
提示工程:与模型对话的艺术
提示(Prompt) 是我们与大语言模型交互的输入,其质量直接影响输出的准确性。
提示工程进阶:零样本 vs. 少样本
我们可以通过在提示中提供示例来进一步提升模型性能。
实践环节:国产大语言模型 ChatGLM 介绍
接下来,我们将通过一个国产优秀模型 ChatGLM 来进行实践。
- 开发方:清华大学 KEG 实验室与智谱 AI 公司。
- 特点:
- 开源,允许本地部署和行业微调。
- 提供在线 API 服务,方便开发者调用。
- 中英双语能力均衡。
- 发展:其基础模型 GLM-130B 在斯坦福大学的评测中,性能不弱于 GPT-3。
ChatGLM 的应用场景
作为一个开源的大模型,ChatGLM 的应用方式非常灵活:
- 网页直接使用:通过官网
chatglm.cn
以对话形式直接体验。
- API 调用:通过编程方式获取其在线服务,适合处理批量任务。
- 本地私有化部署:将模型部署在本地服务器上,保障数据安全和隐私。
- 企业级定制:基于 GLM-130B 进行二次开发,构建企业专属的大模型。
网页端功能(1): 对话与信息获取
用户可以通过网页界面直接与 GLM 大模型对话,获取信息和建议,其功能类似于我们熟悉的 ChatGPT。
网页端功能(2): 代码生成与执行
更进一步,ChatGLM 还可以在安全的沙盒环境中,为用户的任务编写并执行 Python 代码。例如,我们可以用自然语言提供数据,让它生成并运行绘图代码。
实践:为何需要API进行批量文本分析?
虽然网页界面很方便,但如果我们要处理成百上千份文档,手动复制粘贴是不可行的。这时就需要通过 API (Application Programming Interface) 进行编程调用。
API 就像一个程序间的“信使”,允许我们的代码请求另一个程序(如 ChatGLM)的服务并接收结果,实现自动化处理。
API 工作原理:餐厅点餐的比喻
步骤1:安装库并准备数据
首先,我们需要安装并导入智谱 AI 的官方 Python 库。
#| code-line-numbers: true
# 使用 pip 在您的环境中安装 zhipuai 库
# !pip install zhipuai
import zhipuai
import os # 导入os库以安全地处理API密钥
# 这是我们将要分析的金融文本
# 为了演示,我们直接在代码中定义它
# 在实际项目中,这部分会是从文件中读取
financial_text = '文本提到了市场银行对客户人民币汇率衍生交易量萎缩的情况,但随后强调了央行改革完善贷款市场报价利率(LPR),进一步推进人民币利率市场化,带来客户应对利率市场波动风险定制衍生交易方案的需求。这说明虽然市场环境存在挑战,但改革带来了新的机遇。'
步骤2:配置 API 密钥
为了安全,强烈建议将 API 密钥存储为环境变量,而不是直接写入代码。
#| code-line-numbers: true
# 从环境变量中读取 API 密钥 (推荐做法)
# 这样可以避免将敏感信息暴露在代码中
# 在您的系统中设置环境变量 'ZHIPUAI_API_KEY'
# zhipuai.api_key = os.environ.get("ZHIPUAI_API_KEY")
# 为了本课程演示的便利,我们在此处直接赋值
# 警告:请务必替换为您的真实API密钥,并妥善保管
zhipuai.api_key = "YOUR_API_KEY" # <--- 在此处替换
步骤3:构建请求并发起调用
我们构建一个包含指令和文本的 prompt,然后调用 zhipuai.model_api.invoke
。
#| code-line-numbers: true
# 构建发送给模型的 prompt
prompt = [
{
"role": "user",
"content": f"你是一位资深的金融分析师。请判断以下披露文本的情绪,并给出理由。你的回答应为'正向', '负向'或'中性',并附上分析。文本如下:```{financial_text}```"
}
]
# 调用模型API
response = zhipuai.model_api.invoke(
model="chatglm_turbo", # 指定使用的模型
prompt=prompt,
temperature=0.1, # 降低随机性,使分析结果更稳定
top_p=0.7
)
步骤4:解析并打印模型返回的结果
API 的返回是一个包含多个字段的 JSON 对象,我们需要从中提取出有用的信息。
#| code-line-numbers: true
# 检查请求是否成功
if response['success']:
# 提取模型生成的回答内容
model_output = response['data']['choices'][0]['content']
# 提取本次调用的token消耗信息
usage_info = response['data']['usage']
print("--- 模型分析结果 ---")
print(model_output)
print("\n--- Token 消耗信息 ---")
print(f"总消耗 tokens: {usage_info['total_tokens']}")
else:
print("--- API 调用失败 ---")
print(f"错误代码: {response['code']}")
print(f"错误信息: {response['msg']}")
模型输出的分析结果示例
对于我们输入的示例文本,模型可能会给出如下的分析:
这段披露文本的情绪可以判断为中性偏正向。原因如下: 1. 机遇与挑战并存:文本首先提到了交易量萎缩的挑战(负面因素),但更强调了利率市场化改革带来的新机遇(正面因素),整体视角是积极的。 2. 主动应对:文本描述了公司如何利用专业优势,拓展新的服务品种并积极为客户提供方案,展示了公司在逆境中的积极应对和持续发展。
综上,这段披露文本整体呈现出中性偏正向的情绪,展示了公司在面临市场挑战时积极应对、稳健发展的态度。
这个结果不仅给出了结论,还提供了判断依据,展示了 LLM 强大的文本理解和推理能力。
本章总结:关键要点回顾
- 技术核心是 Transformer
- 其“注意力机制”是 LLM 成功的基石,它克服了 RNN 的瓶颈。
- 实现了高效的并行训练和对长距离依赖的捕捉。
- “预训练 + 微调 + RLHF” 的三阶段范式
- 使得构建强大且与人类价值观对齐的 AI 成为可能。
本章总结:关键要点回顾
- 金融应用潜力巨大
- LLMs 在情绪分析、文本匹配、信息提取和摘要等领域展现出巨大潜力。
- 能够将非结构化文本数据转化为量化洞见。
- 实践途径灵活多样
- 我们可以通过网页交互、API 调用或私有化部署等多种方式,将 LLM 的强大能力整合到我们的金融分析工作流中。
思考与讨论
- 模型选择:在金融文本分析任务中,您认为从头预训练、领域微调和直接使用 API 这三种方法,各自的优劣是什么?(请从成本、性能、数据隐私、开发周期等角度考虑)
- 应用畅想:除了本章提到的应用,您还能想到哪些创新的方式,可以在金融市场中使用大语言模型?
- 风险与挑战:使用大语言模型进行金融分析(甚至交易决策)可能存在哪些风险?(例如,模型产生“幻觉”、数据偏见、过度拟合等)