微调 DeepSeek-R1 进行股票交易及法律咨询应用(附代码)

为什么股票交易适合微调

在大模型应用当中最直接的方式就是用当前效果最好的模型, 但如果涉及到一些非常窄的决策领域, 例如股票交易, 或者法律咨询。。。那么微调也是一个比较好的方式, 特别是自己已经有验证过的高概率胜出(或者自认为高概率胜出)的股票逻辑。那我们自己可以构建对应的语料来微调deepseek, 以便他能够按照我们的逻辑来进行决策。

股票交易我一直有一个很简单的交易逻辑, 测算了一下胜率大概是75%左右。我自己也微调了一个deepseek小模型, 外部数据使用seekingalpha, 目前还在实验当中

针对股票交易的微调, 语料我就不公开了(一方面是自己还在优化,另外一方面是语料也不一定对, 别误导了大家, 简单来说就是监测到一只股票下降的值比较大,但是当行有判定。该公司的基本面没有变化,则判定买入), 微调的方式就按照下文的方式进行微调就可以,

注意:下列方式是针对法律咨询的应用, 但所有的细节都一样, 除了语料

大家可供参考.

DeepSeek发布其开源推理模型DeepSeek-R1颠覆了AI领域也使得整个中国ai领域甚至中国的资产都进行了重新的估值。deepseek以较低的成本提供与OpenAI的o1相媲美的性能。另外,DeepSeek已将其推理能力提炼成了几个较小的模型。

Deepseek-R1介绍

DeepSeek-R1 是由 DeepSeek(你也可以说他是幻方量化)开发的推理模型。基于 DeepSeek-V3-Base(总参数为671B,每次推理时活跃的参数为37B),DeepSeek-R1 使用强化学习(RL)在提供最终答案之前生成一系列思维链(CoT)。为了使这些能力更易于访问,DeepSeek 将其 R1 输出提炼成了几个较小的模型:

  • 基于 Qwen 的提炼模型: 1.5B、7B、14B 和 32B

  • 基于 Llama 的提炼模型: 8B 和 70B

Note: 对于14B模型,正确的变体是 DeepSeek-R1-Distill-Qwen-14B。 ✨

本文演示了如何微调其中一个模型(使用我们自己的自定义思维链数据集),然后保存和部署微调模型。

为什么 DeepSeek-R1 厉害

DeepSeek-R1 之所以厉害,主要是因为以下几个原因:

•开源可用性: 完全开源,允许无限制使用、修改和分发。

•成本效益的训练: 500 万美元进行训练 , 远低于大规模语言模型通常相关的成本。

•强化学习和 CoT 推理: 采用先进的强化学习技术来开发思维链推理。

•高效蒸馏: 蒸馏模型在保持强大推理能力的同时,资源利用效率高。

•活跃的社区和生态系统: 不断增长的工具生态系统、经过调优的模型和社区驱动的资源。现在几乎所有的大厂都宣布接入。

DeepSeek-R1 与 OpenAI 的 O3-Mini-High

推理模型差异

虽然 DeepSeek-R1 和 OpenAI 的 O3-Mini-High 推理模型都是为了高级问题解决而设计的,但它们有显著的区别:

开源 vs. 闭源

•DeepSeek-R1: 完全开源。

•OpenAI O3-Mini-High: 专有,受使用限制。

成本和可访问性

•DeepSeek-R1: 训练和操作成本更低。

•OpenAI O3-Mini-High: API 费用较高,运营成本更高。一般说来openai的模型都是行业里面最贵的。

性能和效率

•DeepSeek-R1: 使用 RLHF 和 CoT 推理以实现资源高效利用。

•OpenAI O3-Mini-High: 闭源性限制了优化

社区和生态支持

•DeepSeek-R1: 在 Hugging Face 上有着不断壮大的社区和经过精细调整的模型。

•OpenAI O3-Mini-High: 通过 OpenAI 的生态系统得到了强大的支持,但受专有限制。一般说来更多的是大家在单项的对问他,没办法对他进行特性的优化。而且很多时候其他模型好的话,很容易就被切换。比如以前我们就将open I的接口切换到了anthropic的接口。

这些差异使得 DeepSeek-R1 成为了一个吸引人的选择,可以实现高效的推理性能而不受专有限制。

搭建微调环境

环境设置和身份验证

安装依赖

使用喜欢的带有 GPU 访问权限的环境, 比如我直接使用L20。虽然该gpu更适合进行推理,但是用来进行微调嘛,随便一块gpu都是可以的。运行:

!pip install unsloth`                `!pip install --force-reinstall--no-cache-dir--no-deps git+https://github.com/unslothai/unsloth.git

Explanation: 这将安装 Unsloth - 一个可以加快微调速度的框架(速度提高了 2 倍,内存使用减少了 70%)。

unsloth特别适合用来在单卡上进行微调。

登录 Hugging Face 和 Weights & Biases

没有账号需要单独注册一个,这是必须的。

安全地检索您的 API token:

from huggingface_hub import login``hf_token = "your_huggingface_token"``login(hf_token)``   

然后,初始化 Weights & Biases (wandb):

import wandb``wb_token = "your_wandb_token"``wandb.login(key=wb_token)``run = wandb.init(`    `project='Fine-tune-DeepSeek-R1-Distill-Qwen-14B on Legal COT Dataset',`     `job_type="training",`     `anonymous="allow"``)

Explanation: 这些步骤确保了模型的安全下载和实验跟踪。

这里提示一下

  • 我们可以在这里对很多的模型进行微调,只要改一下模型的名字就可以。

  • 如果hugging face连接不上,那你需要手动这样模型下载上传到服务器。

加载模型和分词器

使用 Unsloth 进行 4 位量化加载深度 14B 模型 - DeepSeek-R1-Distill-Qwen-14B

`from unsloth import FastLanguageModel``max_seq_length = 2048` `dtype = None` `load_in_4bit = True``model, tokenizer = FastLanguageModel.from_pretrained(`    `model_name = "unsloth/DeepSeek-R1-Distill-Qwen-14B",`    `max_seq_length = max_seq_length,`    `dtype = dtype,`    `load_in_4bit = load_in_4bit,`    `token = hf_token,` `)` 

Explanation: 针对最多 2048 个标记的序列配置模型,使用 4 位量化以提高内存效率。这些参数都是可以调的。

预微调推理

使用法律推理提示测试模型的基准性能, 例如此处微调一个法律相关的模型。

定义提示并运行推理

prompt_style = """以下是描述任务的指令,配以提供更多上下文的输入。` `编写一个适当完成请求的响应。` `在回答之前,仔细考虑问题,并创建一条条逻辑和准确的响应链。`    `Output:``### 指示:``您是一位法律专家,具有法律推理、案例分析和法律解释的高级知识。``请回答以下法律问题。``### 问题:``{}``### 回复:``<think>{}"""``question = "两个当事人签订了合同,但一方声称他们是在受到胁迫的情况下签署的。哪些法律原则适用于确定合同的有效性?"``FastLanguageModel.for_inference(model)``inputs = tokenizer([prompt_style.format(question, "")], return_tensors="pt").to("cuda")``outputs = model.generate(`    `input_ids=inputs.input_ids,`    `attention_mask=inputs.attention_mask,`    `max_new_tokens=1200,`    `use_cache=True,``)``response = tokenizer.batch_decode(outputs)``print(response[0].split("### Response:")[1])``## 准备训练数据 🗃 ️🛠 ️🧾``加载并格式化数据集(这里我们使用法律思维链数据集)。⚖️📚🔍`` ```ini ``train_prompt_style = """以下是描述一个任务的指令,配以提供更多背景的输入。``写出一个适当完成请求的回应。``在回答之前,仔细考虑问题,并创建一个逻辑和准确的响应的逐步思路链。`     `Output:``### 指示:``您是一位法律专家,具有法律推理、案例分析和法律解释的高级知识。``请回答以下法律问题。``### 问题:``{}``### 响应:``<think>``{}``</think>``{}"""``EOS_TOKEN = tokenizer.eos_token
def formatting_prompts_func(examples):`    `inputs = examples["Question"]`    `cots = examples["Complex_CoT"]`    `outputs = examples["Response"]`    `texts = []`    `for input_text, cot, output_text in zip(inputs, cots, outputs):`        `text = train_prompt_style.format(input_text, cot, output_text) + EOS_TOKEN`        `texts.append(text)`    `return {"text": texts}

加载和映射数据集

from datasets import load_dataset``dataset = load_dataset("kienhoang123/QR-legal", "en", split="train[0:500]", trust_remote_code=True)``dataset = dataset.map(formatting_prompts_func, batched=True)``print(dataset["text"][0])``####Note: This is a pseudo dataset. Please create or use an appropriate dataset for your own use case.

使用 LoRA 进行精细调整

使用 LoRA(低秩适应)来高效地对模型进行微调,只调整关键层

model = FastLanguageModel.get_peft_model(`    `model,`    `r=16,`    `target_modules=[`        `"q_proj",`        `"k_proj",`        `"v_proj",`        `"o_proj",`        `"gate_proj",`        `"up_proj",`        `"down_proj",`    `],`    `lora_alpha=16,`    `lora_dropout=0,`    `bias="none",`    `use_gradient_checkpointing="unsloth",`    `random_state=3407,`    `use_rslora=False,`    `loftq_config=None,``)

配置和运行训练过程

从 TRL 初始化 SFTTrainer 并使用适当的训练参数

from trl import SFTTrainer``from transformers import TrainingArguments``from unsloth import is_bfloat16_supported``trainer = SFTTrainer(`    `model=model,`    `tokenizer=tokenizer,`    `train_dataset=dataset,`    `dataset_text_field="text",`    `max_seq_length=max_seq_length,`    `dataset_num_proc=2,`    `args=TrainingArguments(`        `per_device_train_batch_size=2,`        `gradient_accumulation_steps=4,`        `warmup_steps=5,`        `max_steps=60,`        `learning_rate=2e-4,`        `fp16=not is_bfloat16_supported(),`        `bf16=is_bfloat16_supported(),`        `logging_steps=10,`        `optim="adamw_8bit",`        `weight_decay=0.01,`        `lr_scheduler_type="linear",`        `seed=3407,`        `output_dir="outputs",`    `),``)

开始训练

trainer_stats = trainer.train()

微调后推理

使用相同的提示结构测试您的微调模型

question = “两个当事人签订了合同,但一方声称他们是在胁迫下签署的。哪些法律原则适用于确定合同的有效性?”

FastLanguageModel.for_inference(model)``inputs = tokenizer([prompt_style.format(question, "")], return_tensors="pt").to("cuda")``outputs = model.generate(`    `input_ids=inputs.input_ids,`    `attention_mask=inputs.attention_mask,`    `max_new_tokens=1200,`    `use_cache=True,``)``response = tokenizer.batch_decode(outputs)``print(response[0].split("### Response:")[1])

结论

DeepSeek-R1不仅效果好,而且成本比较低,同时还开源。一般情况下我们并不需要进行微调。但是如果我们完成的任务相对具体领域又比较窄,那这个时候我们用几千个或者几万条料去进行微调,以便更加精准地完成我们领域的任务,那这样就比较适合了。

后续还会详细介绍deepseek蒸馏, 以及对应的性能优化。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值