DISC-FinLLM 是一个专门针对金融场景下为用户提供专业、智能、全面的金融咨询服务的金融领域大模型,由复旦大学数据智能与社会计算实验室 (Fudan-DISC) 开发并开源。
我们将在该项目中开源如下资源:
- DISC-FinLLM-SFT 训练数据样例
- DISC-FinLLM 模型参数
- DISC-Fin-Eval Benchmark
- DISC-FinLLM-SFT 完整训练数据(ToDo)
- DEMO 部署代码(ToDo)
您可以通过访问这个链接来在线体验我们的 DISC-FinLLM。
目录
概述
DISC-FinLLM是一个金融领域的大语言模型,是由面向不同金融场景的4个模组:金融咨询、金融文本分析、金融计算、金融知识检索问答构成的多专家智慧金融系统。这些模组分别在金融NLP任务、人类试题、资料分析和时事分析等四个评测中展现出明显优势,证明了DISC-FinLLM能为广泛的金融领域提供强有力的支持。DISC-FinLLM能在不同应用场景下提供帮助,可用于实现不同的功能:
- 金融咨询: 该模组可以在中国金融语境下,与用户展开关于金融话题的多轮对话,或是为用户解释金融专业的相关知识,是由数据集中的金融咨询指令部分训练而来。
- 金融文本分析: 该模组可以帮助用户在金融文本上完成的信息抽取、情感分析、文本分类、文本生成等NLP任务,是由数据集中的金融任务指令部分训练而来。
- 金融计算: 该模组可以帮助用户完成与数学计算相关的任务,除了利率、增长率等基本计算,它还支持统计分析和包括Black-Scholes期权定价模型、EDF预期违约概率模型在内的金融模型计算。这一模组是由数据集中的金融计算指令部分训练而来。
- 金融知识检索问答: 该模组可以基于金融新闻、研报和相关政策文件为用户提供投资建议、时事分析、政策解读。它是由数据集中的检索增强指令部分训练而来。
模型效果演示
金融咨询
金融文本分析
金融计算
金融知识检索问答
DISC-Fin-SFT 数据集
DISC-FinLLM是基于我们构建的高质量金融数据集DISC-Fin-SFT在通用领域中文大模型Baichuan-13B-Chat上进行LoRA指令微调得到的金融大模型。DISC-Fin-SFT总共包含约25万条数据,分为四个子数据集,它们分别是金融咨询指令、金融任务指令、金融计算指令、检索增强指令。
数据集 | 数据量 | 输入长度 | 输出长度 |
---|---|---|---|
金融咨询指令 | 63k | 26 | 369 |
金融任务指令 | 110k | 676 | 35 |
金融计算指令 | 57k | 73 | 190 |
检索增强指令 | 20k | 1031 | 521 |
DISC-Fin-SFT | 246k | 351 | 198 |
金融咨询指令
金融咨询指令数据来源于三部分:
- Wealth-alpaca-lora 是一个英文的金融问答数据集,且其部分答案不符合中国国情和立场。因此我们将FiQA中的所有问题翻译成中文,并使用ChatGPT重新生成问题的答案,来提高这一数据集的质量。
- 金融名词解释。我们在网上收集了200多个金融领域的专业术语(如:杠杆收购),然后使用令ChatGPT为这些专业词汇生成相应的问答对,用以训练模型对金融术语的理解。
- 经管之家论坛上的公开发帖。我们利用self-chat prompting方法引导ChatGPT围绕帖子主题生成多轮的问答。
在引导ChatGPT生成数据的过程中,我们通过精心设计的prompt确保生成的问答符合中国的国情、立场、态度和语言风格。
金融任务指令
金融任务指令数据来源于两个部分:
- 金融NLP数据集。该部分是基于已有的金融NLP数据集,通过人工编写的prompt改编而来的。我们搜集了十余个开源的NLP中文数据集,可以分为情绪分析、信息抽取、文本生成、文本分类和翻译等几类。此数据集的分布如下所示:
数据集 | 主要任务类型 | 次要任务类型 | 数据量 |
---|---|---|---|
FPB | 情感分析 | 情感分析 | 18690 |
FIQA-SA | 情感分析 | 情感分析 | - |
FNSC | 情感分析 | 情感分析 | - |
CCKS-NEC-2022 | 信息抽取 | 因果抽取 | 7499 |
SmoothNLP IEE | 信息抽取 | 事件抽取 | 3256 |
SmoothNLP NHG | 文本生成 | 文本生成 | 4642 |
CCKS2022-event | 文本分类 | 事件类型分类 | 3578 |
Minds14 | 文本分类 | 意图识别 | 59143 |
Financial Report | 信息抽取 | 实体抽取 | 61705 |
OpenKG | 信息抽取 | 实体抽取 | 7672 |
OpenKG | 信息抽取 | 实体抽取 | 67921 |
FDDC2018 | 翻译 | 术语翻译 | 333 |
Wealth-alpaca-lora | 文本生成 | 关键词生成 | 41825 |
- 金融无标签文本数据集。我们基于无标注的金融文本构建金融阅读理解数据集。我们从东方财富网收集了87k篇文章,包括金融新闻和行业研报摘要。然后,引导ChatGPT先生成问题,再生成答案,得到(金融文本、问题、答案)这样的三元组,并进一步使用阅读理解任务模板改写为指令对,
金融计算指令
在金融计算中,表达式计算器、方程求解器、正态概率表、计数器四种工具可以帮助模型完成大多数的计算任务。四种工具各有不同的调用命令、输入和输出。例如,计算器的命令是 [Calculator(expression)→result]。在这一部分,构建金融计算指令的目的就是训练模型在合适的时候调用这些工具解决数学问题。四个工具的定义如下表所示:
工具名称 | 工具描述 |
---|---|
表达式计算器 | 输入:初等函数的数学表达式 |
输出:表达式的计算结果(小数表示) | |
方程求解器 | 输入:方程组 |
输出:方程组的解 | |
计数器 | 输入:包含数据样本的数组 |
输出:样本数量 | |
概率表 | 输入:数字 |
输出:正态分布累积分布函数在这个数字处的值 |
首先构建了一个种子任务库,其中的种子任务由三部分组成:根据金融考试人工改写的计算题、带有研报上下文的数据计算题、BELLE数据集中校园数学部分的通用数学题。特别地,根据Toolformer的方法,这些问题的答案中插入着上述四个工具的调用命令,它们代表着调用工具的方法和时机。随后,为了增加数据的数量和多样性,我们通过小样本思维链提示(Few-shot Chain-of-Thought Prompting)方法,让ChatGPT在提示词的引导下,根据种子任务生成超过5万个新问答对,其中的答案也带有插件命令。
检索增强指令
检索增强指令的构造分为三步。第一步,我们根据新闻和研报等金融文本构造金融分析问题。第二步,我们在知识库中检索与问题有关的文档,其中参考文档源于我们构建金融知识库,包含18k研报和69k金融新闻。第三步,我们将问题和参考资料结合在一起,生成问题的答案。在这个过程中,问题和答案是由ChatGPT通过Chain-of-Retrieval (CoR) prompting方法生成的。最终我们构建了一个由20k条检索增强指令组成的数据集,其中的指令涵盖了金融领域中主要的分析形式,包括行业分析、政策分析、投资建议、公司战略规划等。
我们展示了DISC-FinLLM-SFT 训练数据样例,您可以访问这个链接下载数据集。
模型微调
LoRA微调
针对金融领域的不同功能,我们首先采用了多专家微调的训练策略。我们在特定的子数据集上训练模型的各个模组,使它们彼此互不干扰,独立完成不同任务。为此,我们以Baichuan-13B-Chat为基座模型,使用LoRA方法高效地进行参数微调。
通过数据集的四个部分,分别训练4个LoRA专家模组。部署时,用户只需更换在当前基座上的LoRA参数就可以切换功能。因此用户能够根据使用需求激活/停用模型的不同模组,而无需重新加载整个模型。4个LoRA专家模组分别如下:
- 金融顾问:该模型用于多轮对话。由于我们的金融咨询指令数据十分丰富,该模型可以在中国的金融语境下做出高质量的回答,为用户解答金融领域的专业问题,提供优质的咨询服务。
- 文件分析师:该模型主要用于处理金融自然语言处理领域内的各种任务,包括但不限于金融文本中的信息抽取、情绪分析等。