鸣谢
本笔记特别参考BloombergGPT—金融领域大模型_金融大模型训练数据集-CSDN博客。
参考文献
[2303.17564] BloombergGPT: A Large Language Model for Finance (arxiv.org)
Part.1.关于trm
下一个出现概率最大的词是什么?类比搜索框的键入。
编码器、解码器
预处理
she is in a restaurant
→token化,赋予各个词id
→用向量替代id(此处三维)
【为了丰富语义语法等信息】512<12288GPT3
位置编码
对其位置编码【意义在于同时明确各自位置关系】
>>encoder
自注意力机制【关注本句中所有其他词】比如在这里注意到了“it”更应该【权重大】代表“animal”
此为一个头,而多头则并行运算关注“词性?”、“感情色彩?”、“实体?”【本过程由大量文本训练而调整】
通过多个注意力头并行计算,模型能够从不同的角度捕捉到输入序列中的多种依赖关系。例如,某些头可能专注于代词和先行词之间的关系,另一些头可能专注于动词和宾语之间的关系,还有一些头可能专注于捕捉句子的整体结构。
>>前馈FNN
Feed-Forward Neural Network,前馈神经网络就像一个聪明的助手,接收来自自注意力机制的信息,并通过两次复杂的思考(线性变换和激活函数),使得每个词的表示更加清晰和准确。最终,处理过的词向量将包含更多的上下文信息和特征,使得编码器在理解整个句子的意思时更加高效和准确。
以上,为一个编码器,实际上编码器有很多N个
>>decoder
至此我们有各个token的抽象表示,把这些传给解码器,
另外,dcdr还会先接收一个特殊值【意在把之前已经生成的文本也作为输入+输入抽象表示】,这样保证连贯
masking
进入流程,同样先经过嵌入层和位置编码,然后第一个多头,
【ecdr会关注所有其他词】but【dcdr会关注这个词和其前面的(掩码多头:遮住下文只给上文)】
第二个多头自注意力:本处使用前文生成的抽象表示,注意力需要捕捉【ecdr的输出&dcdr即将的输出】
【❓】我在这里作为解码器,我要去参考之前编码器输出的抽象表示。也就是说,我利用输入序列的上下文信息来生成更符合输入内容的目标序列。
next前馈神经网络
作为输入的数据不同:
- 编码器中的FNN:处理的是编码器自注意力机制之后的输出。这些输出是基于输入序列中每个词的上下文关系得到的表示。
- 解码器中的FNN:处理的是解码器第二个多头自注意力机制(编码器-解码器注意力机制)之后的输出。这些输出是基于解码器当前生成的序列和编码器输出的联合表示。
所处位置不同:
- 编码器中的FNN:直接位于编码器自注意力机制之后,每一层编码器的FNN处理的是经过自注意力机制后的表示。
- 解码器中的FNN:位于解码器第二个多头自注意力机制之后,每一层解码器的FNN处理的是经过掩码自注意力机制和编码器-解码器注意力机制后的联合表示。
最后多个堆叠dcdr
>>final
线性层+softmax层
【作用是把 解码器输出的表示 转换成 词汇表的概率分布,即下一个被生成token的概率】
所以模型有时候一本正经的胡说八道【幻觉】:
编码器来理解和表示输入序列,解码器用来生成输出序列
仅编码器 【自编码器模型】 Bert
仅解码器【自回归】gpt-2、3
【序列to序列】翻译T5、Bart
Part.2.关于blmbgGPT
要点
- 金融大语言模型(LLM for Finance, based on BLOOM)
- 模型参数量为500亿(复杂度和容量),使用了包含3630亿token的金融领域数据集以及3450亿token(训练过程中使用的文本量)的通用数据集
- 7680隐藏层维度,多头的头数为40
- 模型采用Unigram tokenizer
- 评估包含了两部分:金融领域评估与通用领域评估(金融领域取得好效果的同时,并没有以牺牲模型通用能力为代价)
※特别注意
出于安全性的考虑,BloogbergGPT模型不会被公开,本笔记仅截取部分被分享出来的模型训练和评估的相关经验和思考进行探讨,即对其某些思路或个别概念进行逐步学习(也就是说行文可能并不遵循模型实际流程,存在跳跃),架构不甚明晰,但其训练、评估的部分,笔者分享如下。
有很多部分没有放在ppt里讲,所以观感零碎。
数据集
FinPile
首先构建了FinPile——一个包含了新闻、档案、网络爬取的新闻稿件、英文财经文档等英文金融文档的金融领域数据集,同时也采用了通用的数据集。
金融数据集
金融领域数据集共包含了3630亿个token,占总数据集token量的54.2%,具体由以下几个部分构成:
- 金融领域相关网页,2980亿token,占比42.01%
- 金融领域知名新闻源,380亿token,占比5.31%
- 公司财报,140亿token,占比2.04%
- 金融相关公司的出版物,90亿token,占比1.21%
- bloomberg,50亿token,占比0.7%
❗因为包含一部分收费和私有数据,所以这份数据集不会被公开
通用数据集
通用数据集共包含了3450亿个token,占总数据集token量的48.73%,具体分为如下几个部分:
- The Pile数据集,1840亿token,占比25.9%
- C4-Colossal Clean crawl Corpus数据集,1380亿token,占比19.48%
- Wikipedia数据集,240亿token,占比3.35%
P16
❗数据集使用Unigram tokenizer对原始文本进行tokenize。
❗Byte Pair Encoding(字节对编码):就是寻找经常出现在一起的Byte对,合并成一个新的Byte加入词汇库中。
P17
MODEL介绍
部分模型结构
模型基于BLOOM模型的自回归结构(仅包含解码器的因果语言模型),具体包含了70层transformer decoder。
每个位置的表示只关注当前词和之前的词,不能看到未来的词。这确保了生成过程的自回归性质。
其他细节
另外一些细节如下(详见原论文3.1 Architecture):
-
前馈层(FFN)中的非线性函数采用GELU(一种基于高斯误差函数的平滑非线性激活函数,具有优良的性能和稳定性)
$$
GELU(x)=x⋅Φ(x)
$$
其中,
$$
Φ(x)≈
1
/
2
(1+tanh(
2
2/π
(x+0.044715x
3
)
))
$$
公式解释
- 标准正态分布的 CDF:Φ(x)\Phi(x)Φ(x) 是一个平滑的函数,表示在标准正态分布下小于或等于 xxx 的概率。它将输入映射到 [0,1][0, 1][0,1] 区间。
- 非线性变换:GELU 激活函数通过将输入 xxx 乘以其 CDF Φ(x)\Phi(x)Φ(x),引入了非线性特性,并且具有平滑的曲线。
GELU特性
- 平滑性:GELU 函数是光滑的,对输入的每个小变化都会有一个平滑的响应。这使得优化过程更加稳定。
- 非对称性:与 ReLU 或 Leaky ReLU 不同,GELU 不是简单的阈值函数,而是通过高斯分布的 CDF 来调整输出。这使得它在处理输入信号时更具柔性。
- 适应性:GELU 函数在负值区域也有梯度,这与 ReLU 这种在负值区域梯度为零的激活函数不同,使得它在训练时能够更好地保留信息。
-
位置编码采用ALiBi(Attention with Linear Biases)编码
ALiBi 编码通过在自注意力机制中引入线性偏置来处理序列中位置的信息。具体来说,ALiBi 通过在计算注意力权重时应用线性偏置来调整不同位置之间的注意力权重。这种方法使得模型在处理长序列时能够更有效地捕捉位置之间的相对关系。
工作原理
-
位置偏置:ALiBi 为每一对位置 (i,j)(i, j)(i,j) 引入一个线性偏置,偏置的计算是基于位置的差值 i−ji - ji−j。这个偏置在自注意力计算中与注意力权重相加,用于调整注意力的强度。
-
线性偏置:假设我们有一个长度为 LLL 的序列,对于位置 iii 和 jjj,ALiBi 的偏置计算公式可能是:
-
其中,α\alphaα 是一个可调节的超参数,决定了偏置的强度。
-
应用偏置:在自注意力机制中,计算注意力权重时,ALiBi 将偏置加到注意力得分上,从而影响注意力的计算。例如:
-
这样可以在训练过程中调整模型对不同位置的关注
在标准 Transformer 中,位置编码通常是基于绝对位置的。例如,使用正弦和余弦函数生成的绝对位置编码被加到输入嵌入中
问题:考虑一个非常长的文本序列,例如:
"the quick brown fox jumps over the lazy dog repeatedly in the meadow"
在这种情况下,绝对位置编码可能存在以下问题:
- 位置依赖性:绝对位置编码对位置的绝对值进行编码,可能无法灵活地调整位置之间的相对关系。例如,序列中的长距离依赖(如“jumps”与“dog”)可能没有得到充分建模。
- 长序列挑战:对于非常长的序列,绝对位置编码可能会变得不够有效,因为编码方式无法根据相对位置的变化动态调整模型的注意力分配。
-
-
模型在第一层多了一个layer normalization
在嵌入和位置编码之后,BloombergGPT 在解码器的最开始部分添加了 Layer Normalization。这一步骤用于标准化输入,确保每个层的输入具有均匀的分布,从而加快训练速度和提高模型的稳定性。
Input Tokens → Embedding Layer → Positional Encoding → Layer Normalization → Decoder Block 1
模型尺度
算力预算(40G内存A100共130万GPU小时),并且给中间checkpoint存储留出了约25%的时间预算。
不需要具体说明每种 GPU 的数量和型号
GPU 小时考虑了计算资源的总量和使用时间,而不仅仅是显卡的数量。它可以综合反映训练过程中的计算负荷和时间消耗
因此显卡的数量和训练时间结合起来才能准确描述计算资源的消耗
1 万 GPU 小时:表示 1 张 GPU 工作了 10,000 小时,或者 10 张 GPU 工作了 1,000 小时,等等。
- 模型参数量选择为500亿,token数据量为7000+亿
- 隐藏层维度为7680,多头的头数为40
训练
训练配置
经过优化(略),上述硬件的平均算力水平达到了102TFLOPs(Tera Floating Point Operations per Second),训练一步需要32.5秒。文章中记录模型共训练了139,200步,进行了约0.8个epoch,训练了53天。一个epoch都没有训练完的原因是这时验证集上的损失函数已经不再继续下降了。
总训练时间计算:
- 训练总时间 = 训练步数 × 每步时间 = 139,200 步 × 32.5 秒/步 = 4,537,400 秒
- 4,537,400 秒 ≈ 52.7 天
- 这与实际的 53 天训练时间非常接近,表明这些计算和时间数据是一致的。
“一步”的定义是什么?【❓】
评估
对比了BloombergGPT、GPT-NeoX、OPT、BLOOM、GPT-3在不同任务上的表现。注意,这里因为GPT-3模型无法获取,故仅在部分通用任务上进行了评测。
各个模型使用到的token数量、参数数量、计算量如下:
作者对每一个模型均独立进行了评测,并且在每一个任务中使用相同的标准prompt、相同的样例、不使用任务描述和任何CoT prompt(Chain of Thought)(是一种方法,要求模型在生成最终答案之前,先提供中间推理步骤或思路),以保证评测结果的公平性。
Prompt 指的是输入模型的文本提示或问题,用来引导模型生成相应的输出。它通常是模型接收的初始输入,用于指定任务或问题的背景。
例如,对于一个翻译任务,prompt 可能是“Translate the following sentence into French: ‘Hello, how are you?’”
对于有多个答案的任务,文章中采用了基于似然的分类方法(likelihood-based classification)进行评估;对于其他任务,文章采用贪心解码(greedy decoding)的方式进行评估。
示例任务:生成式问答
假设我们有一个问题:“What is the capital of France?”,我们的模型需要生成答案。
1. Likelihood-Based Classification
在这个方法中,我们首先生成多个候选答案,然后计算每个候选答案的似然值(即模型为该答案生成的概率),最终选择概率最高的答案。
步骤:
- 生成候选答案:
- 模型可能生成以下几个候选答案:
- “Paris”
- “Lyon”
- “Marseille”
- “Toulouse”
- 计算似然值:
- 模型会为每个候选答案计算一个概率,例如:
- “Paris”:0.75
- “Lyon”:0.10
- “Marseille”:0.05
- “Toulouse”:0.05
- 选择最佳答案:
- 由于“Paris”具有最高的似然值(0.75),因此它被选择为最终的答案。
2. Greedy Decoding
在贪心解码中,我们生成答案的过程是逐步进行的,每一步选择概率最高的单词。
步骤:
初始化:
- 开始标记(如“
”)。 逐步生成:
第一个单词
:
- 模型预测下一个单词的概率分布:
- “Paris”:0.70
- “Lyon”:0.15
- “Marseille”:0.10
- “Toulouse”:0.05
- 选择概率最高的单词“Paris”。
生成结束标记
:
- “Paris”是一个完整的答案,因此生成结束。
holdout loss
在模型训练过程中,数据集通常会被划分为多个部分:训练集、验证集和测试集。持出集通常指的是一个未参与训练的数据子集,专门用于评估模型的泛化能力。
假设你在训练一个机器学习模型来预测房价:
- 数据集划分:
- 你将数据集划分为:训练集(70%)、验证集(15%)、测试集(15%)。
- 其中,测试集被用作持出集。
- 训练模型:
- 使用训练集来训练模型,并利用验证集来调整超参数和监控模型性能,避免过拟合。
- 评估模型:
- 在模型训练完成后,使用持出集(测试集)来评估模型性能。计算模型在持出集上的损失值(holdout loss)。
结果解释:
- 如果持出集上的损失值很低,说明模型在未见过的数据上的表现良好,具有较好的泛化能力。
- 如果损失值较高,可能表示模型在持出集上的表现不好,可能是由于过拟合或模型没有捕捉到数据中的真实模式。
BPC?
作者首先在FinPile数据集预留的部分样本上对各个模型进行了bits per byte的评估。
bits per byte指标是评估语言模型的一种常见指标(侧重于衡量模型的压缩能力,即模型对信息的编码效率,表示每个字节需要多少比特来表示,这直接反映了模型在文本压缩方面的能力),
类似于perplexity(侧重于衡量模型的预测能力,即模型对下一个词或字节的预测准确性,它表示模型在遇到新的数据时的困惑程度),取值越小,模型越好。
具体计算方法可见How to compute bits per character (BPC)https://stats.stackexchange.com/questions/211858/how-to-compute-bits-per-character-bpc?
各个模型在各个类型的数据上的bits per byte值如下:
可以看出,BloombergGPT在金融语料上的bits per byte均好于其他模型,并且在财报(Filings)这个类别上表现尤其突出。
金融领域任务
金融领域任务共有6种类型,3种判别式任务、3种生成式任务。具体任务的格式如下:
P22
判别式任务(Discriminative Tasks)指模型需要判断或分类输入数据属于哪个类别
目标:输出是一个类别标签,模型需要判断输入数据属于哪个预定义的类别。
任务类型:通常包括文本分类、情感分析、命名实体识别(NER)等。
例子:
- 情感分析:判断给定文本的情感是正面、负面还是中立。
- 命名实体识别(NER):从文本中识别出并分类命名实体,如人名、地名、组织名等。
- 主题分类:根据文章内容判断文章属于哪个主题类别。
生成式任务(Generative Tasks)指模型根据输入生成新的文本或数据。模型不仅需要理解输入,还需要生成连贯、有意义的输出
目标:生成具有一定质量的文本或数据,输出是连续的、自由的文本内容。
任务类型:通常包括文本生成、机器翻译、问答系统等。
例子:
- 文本生成:根据给定的开头生成一段完整的文本。
- 机器翻译:将一种语言的文本翻译成另一种语言。
- 问答系统:根据问题生成一个合适的回答。
又将金融领域任务分成了外部任务和Bloomberg内部任务。在每个任务上,作者除了评估模型在任务上的表现,还评估了同一任务下不同模型生成结果之间两两比较的胜率(WR)。
外部任务
外部任务主要如下:
- ConvFinQA,标普500收益报告问答推理
- FiQA SA,金融新闻和微博客标题基于方面的情感三分类(正负中)
- FPB,金融新闻句子级别情感三分类(正负中)
- Headline,新闻标题在预定义标签下的二分类
- NER,信用风险评估数据的命名实体识别
由图,BloombergGPT在五项任务中的四项(ConvFinQA,FiQA SA,FPB和Headline)表现最佳,在NER(Named Entity Recognition)中排名第二。因此,BloombergGPT有其优势性。
P26
内部任务之情感分析
这个任务中的情感分析均为基于内部特定方面的情感分析数据集(aspect-specific)。
以情感分析为例,一个题为“某公司将裁员1万人”,在一般意义上表达了负面情感,但在金融情感方面,它有时可能被认为是积极的,因为它可能导致公司的股价或投资者信心增加。
探索性任务:NER
$$
Apple Inc. was founded by Steve Jobs, Steve Wozniak, and Ronald Wayne in Cupertino, California in 1976.
$$
NER目标:
从文本中识别出以下几种类型的命名实体:
NER标注示例:
Apple Inc. [ORG] was founded by Steve Jobs [PER], Steve Wozniak [PER], and Ronald Wayne [PER] in Cupertino [LOC], California [LOC] in 1976 [DATE].
NER(Named Entity Recognition,命名实体识别)在很大程度上是生成LLM尚未探索的任务,我们研究的LLM论文中没有一篇报告NER性能。因此,我们将NER视为一项探索性任务,并报告初步结果。
对于生成性LLM来说,NER可能是一项艰巨的任务,这有几个原因。
首先,NER是一项信息提取任务,更适合于编码器-解码器或仅编码器架构。LLM的生成性并没有给NER带来优势。
与其他任务相比,NER需要大量的即时工程和更多的案例训练才能获得合理的结果。特定于金融的NER有一些微妙之处,这使得零次或少次学习变得特别困难。
例如,如果有这样一个标题“彭博社:马斯克为推特和对中国的评论添加了新功能(Bloomberg: Mr. Musk adds new features to Twitter and comments on China)”。
根据说明和下游任务需求:
(1)报道新闻机构“彭博社”是否可以被标记,这取决于我们是否想要突出的实体,
(2)“马斯克先生”或“马斯克”是要被标记为PER(人物),
(3)“推特”可以被标记为ORG(组织)或PRD(产品),因为推特产品中添加了功能,而不是组织,
(4)“中国”可能标记为ORG或LOC(地区),尽管正确的标记可能是ORG。
P28
如果没有在提示中添加更详细的说明,LLM就不知道预期的标记行为。基于初步测试,将要预测的实体类型限制为ORG、PER和LOC,以在所有模型的内部NER任务中获得最佳性能。总的来说,过滤掉的实体不到1%。
因此,这里的NER只涉及到ORG、PER、LOC这三类实体。
同时探索性任务NER+NED是指识别出实体后再将实体链接到上市公司的股票简称。比如“AAPL announced that they will stop using Intel chips in future products.” 这句话NER的结果是“AAPL, Intel”,NER+NED的结果是 “AAPL, INTC”。
这两类任务涉及到的数据集包括了7个数据集,分别为BN(Bloomberg BN wire上内容)、BFW(Bloomberg First Word上的内容)、Filings(财报内容)、Headlines(Bloomberg news内容)、Premium(Bloogberg收录 的第三方新闻内容)、Transcripts(公司新闻发布会的文字记录)、Social Media。
最终,NER任务下,BloombergGPT仅在Headlines这一个数据集上得分最高;但在NER+NED任务下,BloombergGPT在除了Social Media任务的其他任务上均得分第一。
通用任务
作者在BIG-bench Hard(BIG-bench的一个子集,仅包含目前模型表现无法超过人类的任务)、常识测试(不提供任何背景知识,仅可以训练时使用的数据)、阅读理解、语言学(消歧、语法识别、蕴含判别等)等任务上进行了测试。
-
你在一个虚构的城市中,拥有三种资源:水、粮食和能源。你的任务是制定一个策略,确保城市在不同的气候条件下能够持续供应这三种资源。请考虑以下情景: 1. 干旱季节,水资源严重短缺。 2. 突发的能源需求增加。 3. 粮食生产受到自然灾害的影响。 你将如何调整资源分配以应对这些挑战,并保持城市的正常运转? 解答思路: 分析干旱季节:增加水资源的储备,采用节水技术,或开发替代水源(如海水淡化)。 应对能源需求增加:提升能源生产能力,或者从其他区域调配能源。 应对粮食生产自然灾害:引入粮食储备,调整农业生产计划,或者从外部采购粮食。 BIG-bench Hard 评估: 评估模型是否能够综合考虑这些复杂情景,并提出合理、连贯的策略。 检查模型在策略制定中的逻辑性、创造性和适应性。
-
BloombergGPT在1个任务上取得了第一名,在其余3个任务上取得了第二名(这里未考虑GPT-3)**。
问题:如果你在厨房里打开了冰箱,你最可能会找到什么物品? 选项: A. 计算机 B. 水果 C. 沙发 D. 手机
-
GPT-3在所有任务上排名第一,BloombergGPT在5/6个任务上排名第二**,且得分远高于BLOOM模型。
文本:马丁·路德·金在1963年发表了著名的《我有一个梦想》的演讲。在这次演讲中,他呼吁结束种族歧视,争取平等权利。 问题:马丁·路德·金在《我有一个梦想》演讲中呼吁了什么?
-
,GPT-3在综合排名第一,BloombergGPT综合排名第二**,且综合得分高于BLOOM模型。
问题:以下句子中哪个词是动词? 句子:The cat sleeps on the mat. 选项: A. cat B. sleeps C. on D. mat 请从选项中选择正确的词,并解释你的选择。
评测总结
在金融领域任务上,BloombergGPT综合表现最好;
在通用任务上,BloombergGPT的综合得分优于相同参数量级的其他模型,并且在某些任务上的得分要高于参数量更大的模型。
P34
all below:
这都说明,开发金融专用的大语言模型在金融领域取得好效果的同时,并没有以牺牲模型通用能力为代价。
这一结论也可以给我们一个启示,在其他特定领域,我们也可以开发专用的大语言模型。
BloombergGPT 诞生的原因——它是第一个专门为金融行业设计的大型语言模型。该模型将帮助Bloomberg在内的众多金融企业改进现有的金融 NLP任务,如情绪分析、命名实体识别、新闻分类和问答等。
模型在现有的特定金融领域 NLP 基准、Bloomberg内部基准以及大量流行通用 NLP 任务基准上得到了验证。BloombergGPT 在金融任务上的表现明显优于现有的类似规模的开放模型,同时在一般 NLP 基准测试中的表现与其他模型持平或更好。
媲美甚至优于更大规模的模型