16 大语言模型

金融文本分析的新范式

欢迎来到第16章

大语言模型:金融文本分析的新范式

本章学习路线图

本章学习路线图 一个包含七个步骤的学习路线图,从背景动机到总结展望。 本章学习路线图 1背景与动机 2技术溯源 3核心揭秘 4模型炼成 5金融实战 6动手实践 7总结与展望

本章学习目标:开启金融文本分析新范式

通过本章学习,您将能够:

  1. 理解大语言模型背后的核心技术演进,特别是 Transformer 架构的革命性意义。
  2. 识别大语言模型在现代金融领域的关键应用场景,例如情绪分析和文本摘要。
  3. 掌握通过 API 调用大语言模型,对真实金融文本进行自动化分析的基本技能。

核心问题:信息隐藏在字里行间

金融市场每天都会产生海量的非结构化文本数据:

  • 上市公司年报、季报、临时公告
  • 财经新闻、分析师报告
  • 社交媒体讨论、论坛帖子

这些文本蕴含着影响市场走向的关键信息,但传统计量方法难以有效处理。

传统方法的局限性

传统文本分析方法,如“词袋模型”或基于词典的方法,常常忽略了最重要的元素:语境 (Context)

传统方法 vs. 语境理解 一个对比图,左侧是传统词袋模型将句子拆分为孤立的词,右侧是LLM理解词与词之间的关系。 传统方法:词袋模型 "苹果公司发布财报..." 苹果 发布 财报 语序和关系丢失 LLM:语境理解 "苹果公司发布财报..." 是一个[公司实体] 执行了[发布]动作 对象是[财务文件]

大语言模型为我们提供了一个前所未有的强大工具,来理解、分析和量化这些信息。

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) 工作原理 展示RNN如何按顺序处理单词并将信息(隐藏状态)传递给下一个时间步的图示。 核心思想:逐词处理,传递“记忆” "The" RNN "cat" RNN "sat" RNN 隐藏状态(h)是模型对截至当前内容的“记忆”

RNN/LSTM的固有缺陷:难以处理长文本

尽管 RNN 和 LSTM 在许多任务上表现出色,但它们存在两个难以克服的瓶颈:

  1. 梯度消失/爆炸:信息在长序列中传递时,会逐渐丢失或变得不稳定,导致模型“遗忘”了靠前的输入。
  2. 顺序计算限制:必须按顺序处理单词,无法进行并行计算,导致训练效率低下,尤其是在处理长篇文档(如年报)时。

这直接限制了模型处理长距离依赖关系的能力。

缺陷1:梯度消失问题

信息在 RNN 中长距离传递时,就像一个越传越弱的信号。

梯度消失可视化 图中展示了一个长序列,早期输入的信息对后期输出的影响逐渐减弱,如同一个褪色的箭头。 长距离依赖的“遗忘”效应 "财报" "显示" ... "利润" "下滑" 信息传递 早期“财报”一词的语义信息,很难有效影响到对“下滑”的理解。

缺陷2:顺序计算的效率瓶颈

RNN 的计算是严格串行的,无法利用现代硬件的并行处理能力。

顺序计算 vs. 并行计算 对比RNN的顺序计算(一步接一步)和Transformer的并行计算(同时进行)。 RNN: 顺序计算 W1 W2 W3 Wn 时间 (T) = n * t 一步一步来,耗时长 Transformer: 并行计算 W1 W2 W3 Wn 时间 (T) = t 齐头并进,效率高

革命的到来:2017年论文《Attention is All You Need》

2017年,Google Brain 团队发表了一篇划时代的论文,提出了 Transformer 架构,彻底摒弃了 RNN 的循环结构,仅依赖一种名为 “注意力机制” 的核心组件。

Attention Is All You Need 论文 一个代表 Transformer 论文的图标,强调其革命性地位。 Attention Is All You Need Ashish Vaswani, et al. (Google Brain, 2017) "We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence..."

这一改变极大地提高了训练效率(可并行化),并显著增强了模型捕捉长距离依赖关系的能力

基础:什么是Tokenization和Embedding?

在进入模型内部前,文本需要经过两步预处理:

  1. 分词 (Tokenization):将原始文本字符串切分成一个个更小的单元,称为“标记”(Token)。
    • "美联储加息" -> ["美联储", "加息"]
  2. 嵌入 (Embedding):将每个 Token 映射到一个高维的数字向量(Vector)。这个向量代表了该 Token 的初始语义含义。
Tokenization and Embedding 从文本到Token再到Embedding向量的过程。 "财报向好" Tokenization 财报 向好 Embedding [0.1, -0.4, ...] [0.9, 0.2, ...]

什么是序列到序列(Seq2seq)模型?

要理解 Transformer,首先要理解它所属的范式:序列到序列(Seq2seq)

  • 定义:输入一个序列,输出另一个序列的模型。
  • 序列(Sequence):一系列按顺序排列的标记(Token)。
  • 向量表示:在模型内部,每个 Token 都被表示为一个高维向量。
任务 输入序列 输出序列
机器翻译 中文句子 英文句子
聊天机器人 用户的问题 机器人的回答
文本摘要 一篇长文章 几句核心摘要

Transformer的核心:注意力(Attention)机制

注意力机制是 Transformer 的灵魂。它允许模型在处理一个词时,“关注”到输入序列中所有其他词的相关性。

  • 直观理解:当我们理解句子 “美联储加息导致市场下跌,因为它暗示了紧缩的货币政策” 时,注意力机制能帮助模型准确地将 “它” 这个代词与 “美联储加息” 这个事件关联起来,即使它们在句子中相隔较远。
  • 核心作用:计算输入序列中任意两个词之间的“相关性得分”,从而有效地捕捉非邻近词汇之间的语义关系。

注意力机制的QKV类比

我们可以将注意力机制类比为在图书馆查阅资料的过程:

  • Query (Q): 你当前正在处理的词,即你的“查询问题”。
  • Key (K): 句子中所有可供参考的词,像是图书馆里所有书籍的“关键词索引”。
  • Value (V): 句子中所有词本身包含的信息,像是书籍的“具体内容”。
Query, Key, Value Analogy for Attention 用图书馆查资料的比喻解释QKV机制:用查询(Q)去匹配所有关键词(K),然后根据匹配度加权提取内容(V)。 Query (Q) 当前词 "它" Q 1. 匹配 Keys (K) Key: "美联储" Key: "加息" Key: "市场" Key: "下跌" ... 2. 加权求和 Values (V) V 得到富含上下文的 新向量表示

过程:用 Q 去和每一个 K 计算“相似度”,这个分数决定了应该从对应的 V 中提取多少信息。

注意力机制的数学表达

注意力机制的计算可以概括为一个简洁的公式:

\[ \large{\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V} \]

  • \(Q, K, V\) 分别是查询、键和值的矩阵。
  • \(QK^T\) 计算查询与所有键的相似度得分。
  • \(\sqrt{d_k}\) 是一个缩放因子,用于稳定梯度。
  • \(\text{softmax}\) 函数将得分归一化,得到权重。
  • 最后将权重乘以值 \(V\) 进行加权求和。

Transformer 架构概览:编码器与解码器的协同工作

Transformer 模型由两个核心部分组成:编码器(Encoder)和解码器(Decoder)。

简化的Transformer架构图 展示了编码器处理输入,将其转换为上下文向量,然后解码器使用该向量生成输出的基本流程。 编码器 (Encoder)“理解”输入 Self-Attention Feed Forward Nx 输入序列 解码器 (Decoder)“生成”输出 Self-Attention Encoder-Decoder Attn Feed Forward Nx 输出序列 上下文向量
  • 编码器(左侧):负责“理解”输入序列,将其转换为富含上下文信息的数字表示。
  • 解码器(右侧):负责“生成”输出序列,它会参考编码器的输出和已生成的内容来预测下一个词。

两种主流路径:编码器模型 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)就是将这个通用模型适配到具体任务上的过程。

微调过程示意图 一个通用的预训练模型,加上一个任务专用的层,然后用少量有标签数据训练,成为一个微调后的专家模型。 通用预训练模型 (例如 BERT) + 任务专用层 (例如 分类器) 微调后的 模型 使用少量带标签的数据(如“新闻-情绪”)进行训练

微调数据点示例

表16.1:金融领域微调数据示例
Input (指令/文本) Output (模型应输出)
任务:情绪分类
文本:“该公司本季度营收超出预期,利润实现强劲增长。”
情绪:正向
任务:新闻摘要
文本:“中国人民银行今日宣布将下调存款准备金率0.5个百分点,旨在通过释放长期资金来稳定市场流动性……”
摘要:央行宣布降准0.5个百分点以稳定市场流动性。
任务:命名实体识别
文本:“特斯拉公司(Tesla, Inc.)的首席执行官埃隆·马斯克表示……”
{ "公司": "特斯拉公司", "人物": "埃隆·马斯克" }

第三阶段:基于人类反馈的强化学习 (RLHF)

为了让模型的输出更符合人类的偏好(例如,更有用、更无害),研究人员引入了 RLHF

RLHF 流程图 展示RLHF的三个步骤:1. 收集人类偏好数据;2. 训练一个奖励模型来模拟这些偏好;3. 使用强化学习根据奖励模型微调LLM。 1. 收集偏好数据 Prompt -> 多个回答 人类对回答排序 (好 > 中 > 差) 2. 训练奖励模型 用排序数据训练 模型学会给回答 打“偏好分” 3. 强化学习微调 用奖励模型作为裁判 引导LLM生成 更高分的回答

金融应用(1): 情绪分析的革命

传统的情绪分析依赖于固定的词典,但金融领域的词汇含义高度依赖上下文。

  • 经典例子:“liability”
    • 通用语境:“累赘”,负面情绪。
    • 金融语境:“负债”,中性词汇。公司的资产负债表必然包含负债,适度的负债是正常经营的一部分。
  • LLM的优势:BERT 这类模型能够深刻理解上下文,准确区分“吃苹果”和“苹果电脑”中的“苹果”,从而对金融文本的情绪做出更精准的判断。

研究前沿:利用LLM情绪信号构建交易策略

学术界已经涌现出大量利用 LLM进行情绪分析并指导投资的研究。

  • Lira-Lopez 和唐跃华教授 的研究发现,使用 ChatGPT 分析新闻标题产生的情绪,可以构建出能够获得超额收益的交易信号。
  • 李雪君、屠致远及周德馨教授 的研究则表明,GPT-4 具有一定分析公司信息披露文本并生成简短、高质量分析报告的能力。

金融应用(2): 实体与文本的模糊匹配

在处理来自不同数据库的数据时,我们经常会遇到实体名称不统一的问题。

  • 例如: '国际商业机器公司', 'IBM Corp.', 'IBM' 可能指向同一家公司。

传统方法依赖于复杂的规则或编辑距离算法,效果有限。

大语言模型可以理解这些字符串背后的语义,从而实现高效、精准的模糊匹配,极大提升了金融研究中的数据清洗和整合效率。

金融应用(3): 金融领域专属模型的构建

为了让 LLM 在金融领域表现更出色,有三种主流的优化方案。

金融模型构建方案对比 对比从头预训练、微调和提示工程的成本与性能的二维图。 成本 / 开发周期 → 性能 / 专业性 → 领域预训练 成本极高性能最强 领域微调 (FinBERT) 成本中等性能优异 提示工程 成本最低性能依赖基础模型

方案1:领域预训练 (From Scratch)

使用海量的金融和经济文本(如所有EDGAR文件、分析师报告)从头开始预训练一个模型。

  • 优点: 效果最好,模型“天生”就是金融专家,对领域术语和语境有最深刻的理解。
  • 缺点: 成本极其高昂,需要巨大的算力和时间,只有少数大型机构能够承担。

方案2:领域微调 (Fine-tuning)

在通用预训练模型(如 BERT)的基础上,使用金融领域的有标签数据进行微调。

  • 优点: 性价比高,效果显著提升,成本远低于从头预训练。FinBERT 就是一个成功的例子。
  • 缺点: 仍然需要高质量的、针对特定金融任务的标注数据。

方案3:提示工程 (Prompting)

直接使用现成的强大模型(如 GPT-4, Gemini),通过精心设计的提示(Prompt)来引导模型在金融任务上表现更好。

  • 优点: 最便捷、成本最低,无需训练,可以快速验证想法。
  • 缺点: 效果依赖于提示的质量和基础模型的能力,对于非常专业的任务可能不够深入。

提示工程:与模型对话的艺术

提示(Prompt) 是我们与大语言模型交互的输入,其质量直接影响输出的准确性。

  • 角色扮演提示:在提问前,先给模型设定一个“专家”角色。 > “你是一位资深的金融分析师,精通财务报表解读。” 这个简单的提示可以激活模型在相应领域的知识,使其回答更专业。

  • 指令式提示:对于 BERT 这类非对话模型,可以将任务指令和待分析文本拼接在一起作为输入。 > “请分析以下新闻文本的情绪。文本是:[在此处插入新闻文章]”

提示工程进阶:零样本 vs. 少样本

我们可以通过在提示中提供示例来进一步提升模型性能。

零样本 vs. 少样本提示 对比两种提示工程方法:零样本直接提问,少样本提供一两个例子让模型学习。 零样本 (Zero-shot) 任务: 判断情绪 文本: "公司利润大幅增长。" 情绪: ? 直接提问,不给示例 少样本 (Few-shot) 文本: "市场需求萎缩。" -> 负向 文本: "营收符合预期。" -> 中性 文本: "公司利润大幅增长。" 情绪: ? 提供一两个示例,让模型学习

实践环节:国产大语言模型 ChatGLM 介绍

接下来,我们将通过一个国产优秀模型 ChatGLM 来进行实践。

  • 开发方:清华大学 KEG 实验室与智谱 AI 公司。
  • 特点
    • 开源,允许本地部署和行业微调。
    • 提供在线 API 服务,方便开发者调用。
    • 中英双语能力均衡。
  • 发展:其基础模型 GLM-130B 在斯坦福大学的评测中,性能不弱于 GPT-3。

ChatGLM 的应用场景

作为一个开源的大模型,ChatGLM 的应用方式非常灵活:

  1. 网页直接使用:通过官网 chatglm.cn 以对话形式直接体验。
  2. API 调用:通过编程方式获取其在线服务,适合处理批量任务。
  3. 本地私有化部署:将模型部署在本地服务器上,保障数据安全和隐私。
  4. 企业级定制:基于 GLM-130B 进行二次开发,构建企业专属的大模型。

网页端功能(1): 对话与信息获取

用户可以通过网页界面直接与 GLM 大模型对话,获取信息和建议,其功能类似于我们熟悉的 ChatGPT。

ChatGLM网页界面示意图 一个简化的聊天机器人界面,展示用户和机器人之间的问答。 👤 请解释什么是金融中的Alpha? 🤖 Alpha(α)是衡量投资组合相对于其 基准(如S&P 500指数)表现的指标。 正Alpha意味着... 负Alpha则意味着... 输入您的问题...

网页端功能(2): 代码生成与执行

更进一步,ChatGLM 还可以在安全的沙盒环境中,为用户的任务编写并执行 Python 代码。例如,我们可以用自然语言提供数据,让它生成并运行绘图代码。

代码生成与执行流程 从自然语言指令到生成代码再到输出图表的过程。 1. 自然语言指令 "请绘制2010-2022年 全球航空业收入图..." 2. 生成代码 import pandas df.plot() 3. 输出图表

实践:为何需要API进行批量文本分析?

虽然网页界面很方便,但如果我们要处理成百上千份文档,手动复制粘贴是不可行的。这时就需要通过 API (Application Programming Interface) 进行编程调用。

API 就像一个程序间的“信使”,允许我们的代码请求另一个程序(如 ChatGLM)的服务并接收结果,实现自动化处理。

API 工作原理:餐厅点餐的比喻

API工作原理 用顾客、服务员和厨房的比喻解释API:你的代码是顾客,API是服务员,远程服务器是厨房。 你的代码(顾客) API(服务员) 远程服务器(厨房) 1. 请求 (点单) 4. 响应 (上菜) 2. 传递 3. 返回

步骤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 强大的文本理解和推理能力。

本章总结:关键要点回顾

  1. 技术核心是 Transformer
    • 其“注意力机制”是 LLM 成功的基石,它克服了 RNN 的瓶颈。
    • 实现了高效的并行训练和对长距离依赖的捕捉。
  2. “预训练 + 微调 + RLHF” 的三阶段范式
    • 使得构建强大且与人类价值观对齐的 AI 成为可能。

本章总结:关键要点回顾

  1. 金融应用潜力巨大
    • LLMs 在情绪分析、文本匹配、信息提取和摘要等领域展现出巨大潜力。
    • 能够将非结构化文本数据转化为量化洞见。
  2. 实践途径灵活多样
    • 我们可以通过网页交互、API 调用或私有化部署等多种方式,将 LLM 的强大能力整合到我们的金融分析工作流中。

思考与讨论

  1. 模型选择:在金融文本分析任务中,您认为从头预训练、领域微调和直接使用 API 这三种方法,各自的优劣是什么?(请从成本、性能、数据隐私、开发周期等角度考虑)
  2. 应用畅想:除了本章提到的应用,您还能想到哪些创新的方式,可以在金融市场中使用大语言模型?
  3. 风险与挑战:使用大语言模型进行金融分析(甚至交易决策)可能存在哪些风险?(例如,模型产生“幻觉”、数据偏见、过度拟合等)

Q & A

感谢聆听