大语言模型概述
wabicai
# 大语言模型概述
# 学习目标
通过本章,你将了解:
- 大语言模型(LLM)的发展历程
- Transformer架构原理
- 主流开源大模型对比
- LLM在金融量化中的应用
# 什么是大语言模型
**大语言模型(Large Language Model, LLM)**是使用海量文本数据训练的深度学习模型,能够理解和生成人类语言。
# 发展历程
2017 - Transformer架构诞生(Attention is All You Need)
2018 - BERT/GPT-1发布
2019 - GPT-2(15亿参数)
2020 - GPT-3(1750亿参数)
2022 - ChatGPT爆火
2023 - GPT-4、LLaMA、ChatGLM、Qwen等百花齐放
2024 - 开源模型逐步赶上闭源模型
1
2
3
4
5
6
7
2
3
4
5
6
7
# 核心能力
- 文本理解:理解语义、情感、意图
- 文本生成:写文章、回答问题、翻译
- 知识推理:逻辑推理、数学计算
- 代码生成:编写和优化代码
- 多模态:结合图像、语音等
# Transformer架构简介
# 核心创新:自注意力机制
传统RNN:逐个处理,难以并行
Transformer:一次处理所有token,完全并行
Self-Attention:
1. 计算Query、Key、Value
2. 计算注意力分数
3. 加权求和
Attention(Q, K, V) = softmax(QK^T / √d_k)V
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 架构组成
输入 → Embedding + Position Encoding
↓
Multi-Head Attention
↓
Feed Forward Network
↓
Layer Normalization
↓
输出
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 主流开源大模型
# 1. LLaMA系列 (Meta)
特点:
- 开源权重
- 参数量:7B、13B、70B
- 训练高效
- 性能优秀
使用场景:
- 本地部署
- 模型微调
- 研究用途
# 2. ChatGLM系列 (智谱AI)
特点:
- 中文友好
- 参数量:6B、130B
- 适合中文任务
- 开源免费商用
使用场景:
- 中文对话
- 中文理解
- 国内部署
# 3. Qwen系列 (阿里)
特点:
- 多模态能力
- 代码能力强
- 中英文均衡
- 持续更新
使用场景:
- 代码生成
- 多模态任务
- 企业应用
# 4. Mistral (Mistral AI)
特点:
- 7B模型性能优异
- 推理速度快
- 开源协议友好
# LLM在量化交易中的应用
# 1. 新闻情绪分析
"""
使用LLM分析财经新闻情绪
"""
from transformers import pipeline
# 加载情绪分析模型
sentiment_analyzer = pipeline(
"sentiment-analysis",
model="ProsusAI/finbert" # 金融领域BERT
)
# 分析新闻
news = "Apple发布超预期财报,营收同比增长15%"
result = sentiment_analyzer(news)
print(f"情绪: {result[0]['label']}")
print(f"置信度: {result[0]['score']:.4f}")
# 输出:
# 情绪: positive
# 置信度: 0.9856
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2. 财报解读
"""
使用LLM提取财报关键信息
"""
from transformers import AutoTokenizer, AutoModelForCausalLM
# 加载模型
model_name = "Qwen/Qwen-7B-Chat"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# 财报文本
report = """
公司2023年第四季度营收500亿元,同比增长20%。
净利润100亿元,同比增长25%。
研发投入80亿元,占营收16%。
"""
# 提问
prompt = f"请分析以下财报,提取关键指标和投资建议:\n\n{report}"
# 生成回答
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_length=512)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 3. 交易策略生成
"""
使用LLM辅助策略开发
"""
prompt = """
请帮我设计一个量化交易策略,要求:
1. 基于技术指标
2. 适合A股市场
3. 风险可控
4. 提供Python代码实现
"""
# 调用GPT-4 API
import openai
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
strategy_code = response.choices[0].message.content
print(strategy_code)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 4. 市场预测
"""
结合LLM和时间序列预测
"""
class LLMEnhancedPredictor:
"""LLM增强的预测系统"""
def __init__(self):
self.llm = pipeline("text-generation", model="Qwen/Qwen-7B")
def analyze_market_context(self, data):
"""分析市场环境"""
prompt = f"""
根据以下市场数据,分析当前市场状态:
- 大盘指数:{data['index']}
- 成交量:{data['volume']}
- 涨跌家数比:{data['ratio']}
请判断市场状态(牛市/熊市/震荡),并给出理由。
"""
response = self.llm(prompt, max_length=200)
return response[0]['generated_text']
def generate_trading_signal(self, technical_signal, market_context):
"""结合技术信号和市场环境生成交易建议"""
prompt = f"""
技术信号:{technical_signal}
市场环境:{market_context}
请给出交易建议(买入/卖出/观望)和原因。
"""
response = self.llm(prompt, max_length=150)
return response[0]['generated_text']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 实战:新闻驱动的交易策略
"""
完整的新闻驱动交易系统
"""
import pandas as pd
from transformers import pipeline
from datetime import datetime, timedelta
class NewsBasedTrading:
"""基于新闻情绪的交易系统"""
def __init__(self):
# 加载金融情绪分析模型
self.sentiment_analyzer = pipeline(
"sentiment-analysis",
model="ProsusAI/finbert"
)
def fetch_news(self, symbol, date):
"""获取新闻(示例)"""
# 实际应用中需要接入新闻API
news_list = [
"公司发布超预期财报,营收增长25%",
"CEO宣布重大战略调整,市场反应积极",
"分析师上调目标价至200美元"
]
return news_list
def analyze_sentiment(self, news_list):
"""分析新闻情绪"""
sentiments = []
for news in news_list:
result = self.sentiment_analyzer(news)[0]
sentiments.append({
'news': news,
'label': result['label'],
'score': result['score']
})
return sentiments
def calculate_sentiment_score(self, sentiments):
"""计算综合情绪得分"""
positive_score = 0
negative_score = 0
for s in sentiments:
if s['label'] == 'positive':
positive_score += s['score']
elif s['label'] == 'negative':
negative_score += s['score']
# 归一化到[-1, 1]
total = positive_score + negative_score
if total == 0:
return 0
net_score = (positive_score - negative_score) / total
return net_score
def generate_signal(self, sentiment_score, threshold=0.3):
"""生成交易信号"""
if sentiment_score > threshold:
return 'BUY'
elif sentiment_score < -threshold:
return 'SELL'
else:
return 'HOLD'
def backtest(self, symbol, start_date, end_date):
"""回测"""
signals = []
date_range = pd.date_range(start_date, end_date)
for date in date_range:
# 获取新闻
news = self.fetch_news(symbol, date)
# 分析情绪
sentiments = self.analyze_sentiment(news)
# 计算得分
score = self.calculate_sentiment_score(sentiments)
# 生成信号
signal = self.generate_signal(score)
signals.append({
'date': date,
'sentiment_score': score,
'signal': signal
})
return pd.DataFrame(signals)
# 使用示例
trader = NewsBasedTrading()
results = trader.backtest('AAPL', '2023-01-01', '2023-12-31')
print(results.head())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 部署与优化
# 1. 本地部署
"""
使用LLaMA.cpp本地部署
"""
from llama_cpp import Llama
# 加载模型
llm = Llama(
model_path="./models/llama-2-7b-chat.Q4_K_M.gguf",
n_ctx=2048,
n_threads=8
)
# 推理
output = llm(
"请分析苹果公司最新财报",
max_tokens=256,
temperature=0.7
)
print(output['choices'][0]['text'])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 2. API调用
"""
使用OpenAI API
"""
import openai
openai.api_key = "your-api-key"
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一个专业的量化分析师"},
{"role": "user", "content": "分析当前市场趋势"}
],
temperature=0.7,
max_tokens=500
)
print(response.choices[0].message.content)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3. 模型微调
"""
使用LoRA微调金融模型
"""
from peft import get_peft_model, LoraConfig, TaskType
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载基础模型
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B")
# LoRA配置
peft_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=8,
lora_alpha=32,
lora_dropout=0.1
)
# 获取PEFT模型
model = get_peft_model(model, peft_config)
# 准备金融领域数据
# financial_data = ...
# 微调
# trainer = Trainer(...)
# trainer.train()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 常见问题
# Q1: 个人如何使用大模型?
方案:
- API服务:OpenAI、Claude(最简单)
- 开源模型:LLaMA、ChatGLM(本地部署)
- 量化版本:GGUF、GPTQ(降低显存)
- 云服务:Hugging Face、Replicate
# Q2: 需要什么硬件?
推荐配置:
- 7B模型:16GB显存(RTX 3090/4090)
- 13B模型:24GB显存(RTX 3090×2)
- 70B模型:80GB显存(A100×4)或量化版本
替代方案:
- 使用量化模型(4-bit, 8-bit)
- 云GPU租用(AWS, AutoDL)
- API服务
# Q3: LLM在量化中的局限?
挑战:
- 幻觉问题:可能生成错误信息
- 时效性:训练数据有截止日期
- 数值计算:不如传统模型准确
- 成本:API调用或硬件成本高
解决:
- 结合传统方法
- 人工审核
- 实时数据补充
- 合理预算
# 进阶资源
# 推荐学习
- Hugging Face Course - Transformer教程
- LLaMA论文 - 高效训练大模型
- Attention is All You Need - Transformer原论文
# 开源项目
- LangChain:LLM应用框架
- LlamaIndex:数据索引和检索
- Guidance:结构化生成
# 下一步
深入学习
实战练习
- 部署本地LLM
- 微调金融模型
- 构建新闻分析系统
大模型是AI的未来,在量化交易中大有可为!
上一篇:深度学习基础 | 下一篇:Transformer原理与实现