当前位置: 首页 > news >正文

BloombergGPT: A Large Language Model for Finance——面向金融领域的大语言模型

这篇文章介绍了BloombergGPT,一个专门为金融领域设计的大语言模型(LLM)。以下是文章的主要内容总结:

  1. 背景与动机

    • 大语言模型(如GPT-3)在多个任务上表现出色,但尚未有针对金融领域的专门模型。

    • 金融领域的自然语言处理(NLP)任务复杂且术语独特,需要领域特定的模型。

  2. 模型构建

    • BloombergGPT是一个500亿参数的模型,结合了金融领域数据和通用数据。

    • 训练数据包括3630亿token的金融数据(来自Bloomberg的新闻、文件、社交媒体等)和3450亿token的通用数据(如The Pile、C4、Wikipedia)。

    • 使用Unigram分词器,并采用ALiBi位置编码,支持更长的序列推理。

  3. 训练与优化

    • 模型基于BLOOM架构,使用ZeRO优化混合精度训练,训练了约53天,消耗了1.3M GPU小时。

    • 训练过程中通过调整学习率和添加dropout来应对训练不稳定性。

  4. 评估与结果

    • 金融任务上,BloombergGPT显著优于其他模型,特别是在情感分析、命名实体识别(NER)和金融问答任务上。

    • 通用任务上,BloombergGPT表现与更大的模型(如BLOOM和GPT-3)相当,甚至在某些任务上超越它们。

    • 模型在BIG-bench Hard、知识评估、阅读理解和语言任务上表现优异。

  5. 应用与示例

    • BloombergGPT可以生成Bloomberg查询语言(BQL),帮助用户更自然地与金融数据交互。

    • 在新闻领域,模型可以生成新闻标题,辅助记者工作。

    • 在金融问答任务中,模型能够准确回答关于公司CEO等问题。

  6. 伦理与开放性

    • 由于金融数据的敏感性,模型未公开发布,但作者分享了训练经验,以帮助其他研究者。

    • 讨论了模型在生成有害内容方面的潜在风险,并强调了在金融领域应用中的伦理考虑。

  7. 未来工作

    • 计划进一步研究模型在金融任务上的微调、减少偏见和毒性,以及分词策略对模型性能的影响。

BloombergGPT是一个专门为金融领域设计的大语言模型,结合了领域特定和通用数据,在金融任务上表现出色,同时在通用任务上也具有竞争力。文章详细介绍了模型的构建、训练、评估和应用,并讨论了伦理和未来研究方向。这里是自己的论文阅读记录,感兴趣的话可以参考一下,如果需要阅读原文的话可以看这里,如下所示:

摘要

自然语言处理(NLP)在金融科技领域的应用广泛且复杂,涵盖情感分析、命名实体识别、问答系统等任务。大语言模型(LLMs)在各种任务中表现出色,然而,目前尚未有专门针对金融领域的大语言模型被报道。本文介绍了BloombergGPT,一个拥有500亿参数的语言模型,该模型在广泛的金融数据上进行训练。我们基于彭博社的丰富数据源构建了一个包含3630亿个token的数据集,这可能是迄今为止最大的领域特定数据集,并辅以3450亿个token的通用数据集。我们在标准的LLM基准测试、开放的金融基准测试以及一系列内部基准测试上验证了BloombergGPT的性能,这些内部基准测试最能反映我们的预期使用场景。我们的混合数据集训练使得模型在金融任务上显著优于现有模型,同时在通用LLM基准测试上也不逊色。此外,我们解释了模型选择、训练过程和评估方法,并发布了训练日志(附录C),详细记录了我们在训练BloombergGPT过程中的经验。

目录

  1. 引言
    1.1 BloombergGPT
    1.2 更广泛的贡献

  2. 数据集
    2.1 金融数据集(3630亿token,占训练的51.27%)
    2.1.1 网络数据(2980亿token,占训练的42.01%)
    2.1.2 新闻数据(380亿token,占训练的5.31%)
    2.1.3 公司文件(140亿token,占训练的2.04%)
    2.1.4 新闻稿(90亿token,占训练的1.21%)
    2.1.5 彭博数据(50亿token,占训练的0.70%)
    2.2 公共数据集(3450亿token,占训练的48.73%)
    2.2.1 The Pile(1840亿token,占训练的25.9%)
    2.2.2 C4(1380亿token,占训练的19.48%)
    2.2.3 维基百科(240亿token,占训练的3.35%)
    2.3 分词

  3. 模型
    3.1 架构
    3.2 模型规模
    3.3 训练配置
    3.4 大规模优化

  4. 训练过程

  5. 评估
    5.1 少样本方法
    5.2 保留损失
    5.3 金融任务
    5.4 外部金融任务
    5.5 内部任务:情感分析
    5.6 探索性任务:命名实体识别
    5.7 BIG-bench Hard
    5.8 知识评估
    5.9 阅读理解
    5.10 语言任务
    5.11 总结

  6. 相关工作

  7. 伦理、局限性与影响
    7.1 伦理使用
    7.2 开放性

  8. 结论
    附录A 架构
    附录B 外部金融任务细节
    附录C 训练日志

1. 引言

2020年GPT-3的发布展示了训练超大规模自回归语言模型(LLMs)的强大优势。GPT-3拥有1750亿参数,是前一代GPT-2模型的百倍规模,并在多种流行的LLM任务中表现出色,包括阅读理解、开放式问答和代码生成。这一性能在多个其他模型中得到了复现(Chowdhery et al., 2022; Scao et al., 2022; Zhang et al., 2022)。此外,有证据表明,大型模型表现出涌现行为;随着模型规模的增加,它们能够获得小型模型所不具备的能力(Wei et al., 2022)。一个显著的涌现行为是模型能够通过少样本提示(few-shot prompting)执行任务,即模型仅需几个示例就能学会任务。随着语言模型规模的增加,这种能力显著提升,远超随机水平。总的来说,少样本提示极大地扩展了模型支持的任务范围,并降低了用户为新的语言任务寻求自动化的门槛。

在GPT-3之后,模型的规模进一步增长,达到了2800亿参数(Gopher, Rae et al., 2021)、5400亿参数(PaLM, Chowdhery et al., 2022)和1万亿参数(Megatron, Korthikanti et al., 2022)。研究还探索了实现高性能LLM的其他重要方面,例如不同的训练目标(Tay et al., 2022)、多语言模型(Scao et al., 2022)、更高效的小型模型(Black et al., 2022),以及寻找数据和参数高效的训练规模(Hoffmann et al., 2022)。

这些努力几乎都集中在通用LLM上,这些模型在涵盖广泛主题和领域的数据集上进行训练。虽然这些模型包括一些专门领域的数据集(例如代码(Chen et al., 2021)或生物医学文章(Gao et al., 2021)),但重点仍然是构建具有广泛能力的LLM。最近,仅使用领域特定数据训练模型的尝试表明,尽管这些模型规模较小,但在这些领域内的任务上表现优于通用LLM,例如科学(Taylor et al., 2022)和医学(Bolton et al., 2023; Luo et al., 2022; Lehman et al., 2023)。这些发现激励了进一步开发专注于特定领域的模型。

金融科技(FinTech)是一个庞大且不断增长的领域,NLP技术在其中扮演着越来越重要的角色(Xing et al., 2018; Fisher et al., 2016; Dredze et al., 2016)。金融NLP任务(Shah et al., 2022)包括情感分析(Araci, 2019)、命名实体识别(Salinas Alvarado et al., 2015)、新闻分类(Sinha and Khandait, 2020)和问答系统(Chen et al., 2021, 2022)。虽然这些任务与通用NLP基准测试中的任务相似,但金融领域的复杂性和术语要求一个领域特定的系统。由于生成式LLM在少样本学习、文本生成、对话系统等方面的吸引力,拥有一个专注于金融领域的LLM将非常有价值。虽然已经有针对金融领域的掩码语言模型(Araci, 2019),但目前尚未有针对该领域任务进行调优或评估的LLM。

1.1 BloombergGPT

我们训练了BloombergGPT,一个拥有500亿参数的语言模型,支持金融行业内的广泛任务。我们没有构建一个通用LLM,也没有完全依赖领域特定数据训练一个小型LLM,而是采取了一种混合方法。通用模型涵盖多个领域,能够在各种任务上表现出色,并在训练时无需专门化。然而,现有领域特定模型的结果表明,通用模型无法完全替代它们。在彭博社,我们支持大量且多样化的任务,这些任务通常由通用模型处理,但绝大多数应用属于金融领域,更适合特定模型。因此,我们着手构建一个在金融基准测试上表现最佳,同时在通用LLM基准测试上保持竞争力的模型。

我们通过构建迄今为止最大的领域特定数据集来实现这一目标,该数据集基于彭博社现有的数据创建、收集和整理资源。作为一家主要提供金融数据的公司,彭博社的数据分析师在过去四十年中收集并整理了大量的金融语言文档。我们拥有广泛的金融数据档案,涵盖了多个主题,并仔细跟踪了数据来源和使用权限。我们将这些数据与公共数据集结合,创建了一个包含超过7000亿个token的大型训练语料库。使用该语料库的一部分,我们训练了一个基于BLOOM风格的500亿参数模型,该模型的设计基于Hoffmann et al. (2022) 和 Le Scao et al. (2022) 的指导。我们在标准LLM基准测试、开放金融基准测试以及一系列彭博社内部基准测试上验证了该模型,这些内部基准测试最能反映我们的预期使用场景。我们的结果表明,混合训练方法使得模型在金融任务上大幅优于现有模型,同时在通用NLP基准测试上表现相当或更好。

1.2 更广泛的贡献

除了构建一个用于金融数据的LLM外,我们的目标是为更广泛的研究社区做出贡献。具体而言,我们在本文中记录的经验为社区对文献中几个开放问题的理解提供了证据。

领域特定的大语言模型。现有的少数领域特定LLM要么完全在领域特定数据源上训练(Luo et al., 2022; Bolton et al., 2023; Taylor et al., 2022),要么将非常大的通用模型适配到领域特定任务(Singhal et al., 2022; Lewkowycz et al., 2022)。我们的替代方法——在领域特定和通用数据源上训练LLM——尚未被研究过。由此产生的模型在领域特定任务上表现非常出色,同时在通用基准测试上保持了强大的性能。

训练数据。几乎所有语言模型都主要依赖于网络抓取的数据,例如C4(Raffel et al., 2020)和The Pile(Gao et al., 2021)(其中包括OpenWebText2)。这些数据在使用前可能会以各种方式进行清理或子集化(Touvron et al., 2023; Rae et al., 2020; Scao et al., 2022; Jernite et al., 2022),但数据重复(Carlini et al., 2020)和有害语言的问题仍然存在(Welbl et al., 2021)。我们的训练数据在LLM训练中较为特殊,因为它包含了大量来自可靠来源的经过整理和准备的数据。

评估。LLM评估仍然是一个具有挑战性且不断发展的领域(Gehrmann et al., 2022; Goyal et al., 2022),新的基准测试试图标准化跨模型的评估(Liang et al., 2022; Srivastava et al., 2022)。然而,对于领域特定任务,评估与实际使用场景之间仍然存在不匹配。评估基于可用的数据集,而不一定基于模型在实际中的使用方式。我们提供了公共金融NLP基准测试(Shah et al., 2022; Chen et al., 2021)以及一系列彭博社内部任务的结果,这些任务更符合我们的预期使用场景,并直接评估了模型执行感兴趣任务的能力。

模型规模。早期的LLM在2000亿到4000亿token的语料库上进行单次训练(Brown et al., 2020),而Hoffmann et al. (2022) 提出模型训练不足,转而专注于用更多数据训练较小的模型,这一策略最近被Touvron et al. (2023) 采用。我们基于Hoffmann et al. (2022) 的指导选择了模型规模,并在我们的语料库中选择了5690亿token来训练一个500亿参数的模型,以产生一个与更大模型竞争的模型。

分词器。在组装训练数据后,分词的关键步骤是将文本转换为适合语言模型的格式。这一步骤的重要性常常被忽视(Mielke et al., 2021),许多早期的LLM使用相同的分词器和词汇表,这意味着我们几乎没有证据支持其他分词器。我们采取了不同的方法,使用Unigram模型而不是基于贪婪合并的子词分词器,因为它在推理时保存了概率,允许更智能的分词(Kudo, 2018)。

模型构建挑战。GPT-3及后续模型是大型团队的成果,需要大量的计算资源。最初复现这些结果的工作,例如OPT(Zhang et al., 2022),未能匹配原始模型的性能。随着每个后续模型的发布,社区的理解、经验和软件工具不断增加。在开发BloombergGPT的过程中,我们受益于BLOOM项目(Scao et al., 2022)中开发的现有代码,这表明一个中等规模的团队可以在领域特定数据上生成一个具有竞争力的模型。我们详细描述了训练BloombergGPT的经验,以支持未来的训练工作,并解决上述每个问题。

2. 数据集

为了训练BloombergGPT,我们构建了“FinPile”,一个包含各种英文金融文档的综合数据集,包括新闻、公司文件、新闻稿、网络抓取的金融文档以及从彭博社档案中提取的社交媒体内容。这些文档是通过我们的业务流程在过去二十年中获取的。我们将FinPile与广泛用于训练LLM的公共数据结合,形成了一个训练语料库,其中大约一半是领域特定文本,另一半是通用文本。有关完整训练集的细分,请参见表1。为了提高数据质量,我们对每个数据集(The Pile, C4, Wikipedia, FinPile)进行了去重处理(Lee et al., 2022a);因此,表1中报告的统计数据可能与其他论文中报告的不同。

2.1 金融数据集(3630亿token,占训练的51.27%)

彭博终端在过去四十年中提供了对广泛的结构化和非结构化金融数据及分析的访问。在实现这一使命的过程中,彭博分析师整理了一组金融文档,这些文档要么是内部创建的,要么是从外部来源获取的。我们利用这一广泛的经过整理和维护的文档集合来创建FinPile,其中包括公司文件、金融新闻和其他与金融市场相关的数据。

FinPile中包含的一些文档,如公司文件,是公开的,尽管收集这些文档并对其进行预处理以用于LLM训练并非易事。其他文档,如(部分)彭博新闻,必须购买。其余文档是私有的,可以通过彭博终端访问。最后,我们清理了这些数据,去除了标记、特殊格式和模板。

需要注意的是,FinPile中的每个文档都带有时间戳,日期范围从2007年3月1日到2022年7月31日;文档的质量和数量在这一时间范围内逐渐增加。虽然我们在这项工作中没有使用日期信息,但我们计划在未来使用它,例如评估模型在不同时间段的学习情况。虽然我们无法发布FinPile,但我们在训练过程中使用的大型、精心整理和干净的领域特定数据集的经验,可能会为社区提供有关构建金融LLM的优势和挑战的有益见解,特别是构建领域特定模型的一般经验。我们在表2中提供了FinPile的细分和分析,并在下面简要描述了包含的数据类型。

2.1.1 网络数据(2980亿token,占训练的42.01%)

彭博社通过识别包含金融相关信息的网站来收集网络内容。虽然这一类别占据了FinPile的大部分,但其分类较为粗略,内容主要按网站域名的地理位置分类。在这些特定位置的来源中,例如“美国”(占总量的15.95%)、“亚太”(占总量的4.72%)和“英国”(占总量的1.98%),文档类型高度多样化,正如网络爬虫所预期的那样。虽然网络来源在现有的公共LLM训练数据集中很常见,但彭博的网络爬虫专注于包含金融相关信息的高质量网站,而不是对网络进行通用爬取。

2.1.2 新闻数据(380亿token,占训练的5.31%)

新闻类别包括所有新闻来源,不包括彭博记者撰写的新闻文章。总体而言,FinPile中有数百个英文新闻来源,包括“彭博电视新闻转录”(占总量的0.41%),这些是彭博电视新闻的转录。通常,该数据集中的内容来自与金融社区相关的可靠新闻来源,以保持事实性并减少偏见。

2.1.3 公司文件(140亿token,占训练的2.04%)

公司文件是由(公开)公司编制并公开的财务报表。在一些国家,如美国,上市公司被要求定期编制并提交财务报表;例如,10-K年度报告和10-Q季度报告。在我们的数据集中,大部分文件来自EDGAR,这是美国证券交易委员会(SEC)的在线数据库(占总量的1.90%)。文件通常是包含表格和图表的PDF文档,其中包含密集的财务信息,这些信息在彭博社进行了处理和标准化。文件与通常用于训练LLM的文档类型有显著不同,但包含对金融决策至关重要的信息。

2.1.4 新闻稿(90亿token,占训练的1.21%)

新闻稿类别包含通常由公司发布的与财务相关的新闻稿。与文件一起,新闻稿代表了公司的大部分公开沟通。然而,与文件不同,新闻稿在内容和风格上与新闻报道相似。

2.1.5 彭博数据(50亿token,占训练的0.70%)

这一类别包括彭博撰写的新闻和其他文档,如观点和分析。最大的来源是“彭博新闻”(占总量的0.44%)和“彭博第一手新闻”(占总量的0.13%),这是彭博撰写的实时新闻通讯。虽然彭博新闻涵盖了广泛的主题,但通常专注于与金融社区相关的内容。该数据集包含长度不一的文档。

2.2 公共数据集(3450亿token,占训练的48.73%)

我们在训练语料库中使用了三个广泛知名且可用的公共数据集。

2.2.1 The Pile(1840亿token,占训练的25.9%)

The Pile(Gao et al., 2021)是用于训练GPT-Neo(Black et al., 2021)、GPT-J(Wang and Komatsuzaki, 2021)和GPT-NeoX(20B)(Black et al., 2022)的数据集。我们将The Pile包含在训练数据中,原因如下。首先,它已成功用于训练LLM。其次,它经过了大量的数据清理和预处理。第三,它包含多个领域,我们相信这种多样化的数据将有助于模型对新领域的泛化,甚至可能支持金融数据的训练。例如,FreeLaw和GitHub等领域对彭博社处理法律文档和软件开发的团队非常有用。The Pile的创建者故意包含了重复内容,重复因子与内容的感知质量成正比。然而,由于我们对每个数据集进行了去重处理,The Pile的规模显著减少。此外,请注意我们的分词器(§2.3)是在The Pile上训练的。

2.2.2 C4(1380亿token,占训练的19.48%)

Colossal Clean Crawled Corpus(C4)是用于训练LLM的常见数据集,最初用于支持训练T5(Raffel et al., 2020)。尽管它与Pile-CC有重叠,但C4的清理和处理方式不同;因此,我们认为将C4与The Pile一起包含可以增加价值,而不仅仅是重复文档。我们发现C4包含高质量的自然语言文档,这得益于多层次的清理,尽管其他人注意到跨网站域的分布不寻常,其中很大一部分数据来自专利(Dodge et al., 2021)。

2.2.3 维基百科(240亿token,占训练的3.35%)

The Pile和C4都包含过时的维基百科副本,因此包含最新的维基百科页面可能有助于模型的事实性。因此,我们包含了2022年7月1日的英文维基百科转储。该数据集的分词效率较低(每个token 3.06个字符),表明标记量高于平均水平,这表明进一步的清理可能有助于未来的模型训练。

2.3 分词

我们选择了Unigram分词器(Kudo, 2018),而不是基于贪婪合并的子词分词器,例如Byte Pair Encoding(BPE)(Sennrich et al., 2016)或Wordpiece(Schuster and Nakajima, 2012; Wu et al., 2016),基于Kudo and Richardson (2018) 和 Bostrom and Durrett (2020) 的有希望的结果。遵循GPT-2(Radford et al., 2019),我们将数据视为字节序列而不是Unicode字符,并将256个字节中的每一个作为token包含在内。

并行分词器训练。Unigram分词器的实现效率太低,无法一次性处理整个Pile数据集,因此我们使用拆分和合并的方法。我们将Pile中的22个领域中的每一个拆分为256个大小大致相等的块。然后,我们在每个22×256(总计=5,632)块上训练一个词汇量为65,536(2^16)的Unigram分词器。我们首先合并每个领域的256个分词器,然后将22个结果分词器合并以获得最终的分词器。

Unigram分词器相当于token上的概率分布(即单字语言模型),我们通过对相应token的概率进行加权平均来合并分词器,权重由用于训练分词器的数据的相对大小(以字节为单位)确定。结果是一个包含700万token的分词器。为了将词汇量减少到2^17个token,我们丢弃了概率最小的token并重新归一化。为了确保我们不需要一个词汇表外的token,我们还添加了36个(256个可能中的)未在The Pile中出现的字节作为token,以及一个<|endoftext|> token。

选择词汇量大小时有各种考虑因素。对于LLM来说,大词汇量的一个优势是更多的信息可以放入上下文窗口中。另一方面,大词汇量也有开销:更大比例的模型参数需要用于token嵌入。我们基于词汇量从25,000到550,000的实验选择了2^17个token的词汇量。对于每个词汇量大小,我们对C4数据集进行分词,并计算数据集的总大小(以字节为单位),其中每个token使用log2(词汇量大小)位表示。我们的启发式方法是选择导致C4编码表示最小的词汇量大小。这给了我们125,000的词汇量大小,然后我们将其四舍五入到最接近的2的幂(2^17,或131,072个token)。我们的分词器相对于标准词汇量大小(约50,000个token)较大。有关分词效率的分析,请参见表3。

3. 模型

3.1 架构

我们的模型是一个基于BLOOM(Scao et al., 2022)的解码器因果语言模型。我们概述了架构,详细信息见附录A。

该模型包含70层Transformer解码器块,定义如下:

3.2 模型规模

大小。我们的模型大小基于Chinchilla缩放定律(Hoffmann et al., 2022),特别是他们的方法1和方法2。我们从40GB A100 GPU上的130万GPU小时的总计算预算开始。由于我们采用激活检查点来减少内存占用,这导致每次迭代的额外成本为0.33×TFLOPs。为了考虑这一额外成本,我们将0.75×130万代入Chinchilla方程,而不是全额。

从Hoffmann et al. (2022) 中,我们使用方法1和方法2的数据,并对它们的对数版本拟合回归线。这给出了:

这些计算表明,我们的数据集约7000亿token对于给定计算预算的“Chinchilla最优”配置来说太小了(假设只对数据进行一次遍历)。虽然我们可以增加通用训练数据的数量,但我们可用的领域特定训练数据有限。FinPile已经是最大的领域特定训练集之一,我们不希望它占总训练数据的比例低于一半。

由于我们受到数据的限制,我们选择了最大的模型,同时确保我们可以在所有token上进行训练,并保留总计算预算的30%作为缓冲,以应对不可预见的故障、重试和重启。这导致我们选择了500亿参数的模型,这也是我们计算预算的Chinchilla最优大小。图1总结了缩放定律,并展示了BloombergGPT与其他模型的比较。

形状。为了确定如何将500亿参数分配给不同的模型组件(即模型的“形状”),我们遵循Levine et al. (2020) 的建议,对于总自注意力层数L,最优隐藏维度D通过以下公式获得:

3.3 训练配置

训练。BloombergGPT是一个PyTorch模型,使用标准的从左到右的因果语言建模目标进行训练。遵循Brown et al. (2020),我们希望所有训练序列的长度完全相同,在我们的情况下为2048个token,以最大化GPU利用率。为了实现这一点,我们使用<|endoftext|> token作为文档分隔符,将所有分词后的训练文档连接起来。然后,我们将这个token序列分成2048个token的块。请注意,使用这种方法,每个训练序列可能包含来自不同领域的多个文档。此外,由于我们使用ALIBi位置编码,BloombergGPT在推理时可以应用于超过2048个token的序列。为了提高优化效率,训练序列被分组为批次,如下所述。

优化。我们使用AdamW优化器(Loshchilov and Hutter, 2019)。我们将β1​设置为0.9,β2设置为0.95,权重衰减设置为0.1。遵循Brown et al. (2020),我们将最大学习率设置为6e-5,并使用余弦衰减学习率调度器进行线性预热。我们在前1800步中预热学习率。遵循Hoffmann et al. (2022),最终学习率是最大学习率的0.1倍,即6e-6。我们还采用了批次大小预热(Brown et al., 2020):在前7200步中,我们使用1024的批次大小(210万token),然后切换到2048的批次大小(420万token)进行剩余的训练。

训练不稳定性。LLM优化需要在极其复杂的非凸损失表面上运行凸优化算法。之前的工作报告了在训练LLM时的各种不稳定性。例如,Chowdhery et al. (2022) 发现,在训练PaLM时,尽管启用了梯度裁剪,损失仍然大约出现了20次峰值。他们通过从峰值开始前大约100步的检查点重新启动训练,然后跳过200-500个数据批次来缓解这些问题。他们假设峰值是由于特定数据批次与特定模型参数状态的组合引起的。同样,在OPT训练期间,Zhang et al. (2022) 注意到梯度和激活范数的峰值,或训练困惑度的发散。在这些行为之后,他们降低了学习率,这稳定了这些范数并允许训练继续。有趣的是,Scao et al. (2022) 只报告了一次损失峰值,模型自行恢复。

硬件堆栈。我们使用AWS提供的Amazon SageMaker服务来训练和评估BloombergGPT。我们使用训练时可用的最新版本,并在总共64个p4d.24xlarge实例上进行训练。每个p4d.24xlarge实例有8个NVIDIA 40GB A100 GPU,具有NVIDIA NVSwitch节点内连接(600 GB/s)和NVIDIA GPUDirect使用AWS Elastic Fabric Adapter(EFA)节点间连接(400 Gb/s)。这总共提供了512个40GB A100 GPU。为了快速访问数据,我们使用Amazon FSX for Lustre,它支持每TiB存储单元高达1000 MB/s的读写吞吐量。

3.4 大规模优化

为了训练BloombergGPT,其内存占用超过了云实例上可用的GPU内存,我们依赖于ZeRO优化的第3阶段(Rajbhandari et al., 2020)。我们使用AWS的专有SageMaker Model Parallelism(SMP)库,该库支持将大型模型自动分布在多个GPU设备和实例上(Karakus et al., 2021)。在尝试了各种技术后,我们平均实现了102 TFLOPs,每个训练步骤需要32.5秒。我们发现以下设置在我们的训练中表现最佳。

ZeRO优化(第3阶段)。ZeRO将训练状态(模型参数、梯度和优化器状态)分片到一组GPU上。我们将模型分片到128个GPU上,并且在训练期间有4个模型副本。

MiCS。Zhang et al. (2022b) 减少了云训练集群的训练通信开销和内存需求。MiCS包括分层通信、2跳梯度更新、规模感知模型分区等功能。

激活检查点。Chen et al. (2016) 通过删除激活来最小化训练内存消耗,代价是在反向传递期间进行额外的计算。当启用激活检查点时,在正向传递后仅保留层输入和输出,而任何中间张量都从内存中丢弃。在反向传递期间,这些中间张量可能会被重新计算。我们对每个Transformer层应用激活检查点。

混合精度训练。为了减少内存需求,正向和反向传递在BF16中完成,而参数以全精度(FP32)存储和更新。ALiBi矩阵以全精度计算并以BF16存储。我们还使用FP32计算Attention块中的融合softmax,并将其结果存储在BF16中。最后,损失函数中的softmax计算在FP32中完成。

融合内核。另一种优化可能性是将多个操作组合成单个GPU操作。这既可以减少计算图中的中间结果的峰值内存使用,也有助于提高速度。类似于Megatron-LM(Shoeybi et al., 2019),我们在SMP的自注意力模块中使用了一个掩码因果softmax融合内核。在实践中,我们观察到速度提高了4-5 TFLOPs,并避免了给定其余配置的内存不足错误。

4. 训练过程

训练BloombergGPT的过程涉及基于模型训练进展的决策。我们分享了一些这一过程的亮点。详细描述见训练日志(附录C)。图2显示了训练和验证集的学习曲线。实线显示(平滑的)训练损失,虚线显示保留验证集上的损失。线条颜色的变化表示优化超参数配置的变化,无论是按计划还是响应验证损失的增加或停滞。该图显示了成功模型训练运行的路径。为了呈现清晰的图表,图中未显示其他尝试的不同模型配置、回滚后覆盖的部分运行或未在最终模型中使用的其他训练策略。

我们总共训练了139,200步(约53天),并在完成训练数据的约80%后结束了模型训练(5690亿token,总共有7090亿token)。我们提前结束了训练,因为保留开发集上的损失不再改善,尽管更长的训练可能会带来进一步的改进。

我们在前7200步中使用1024的预热批次大小,之后切换到2048的常规批次大小(颜色从黑色变为蓝色)。批次大小的变化在7200步时表现为验证损失的明显曲率变化。大多数剩余的训练表现稳定,训练和验证损失逐渐减少。在后期阶段,即115,500步之后,我们观察到验证损失持平或增加,因此需要进行干预。我们依次应用了以下纠正修改:

  • 第115,500步(蓝色到橙色):将学习率缩小到三分之二

  • 第129,900步(橙色到绿色):将学习率减半,并添加dropout(概率为0.1)

  • 第137,100步(绿色到红色):再次将学习率减半

我们在146,000步时结束了运行,基于验证损失缺乏可观察的进展。我们选择了139,200步的检查点作为最终模型,基于验证损失和下游评估。

5. 评估

我们在两大类任务上评估了BloombergGPT的性能:金融特定任务和通用任务。金融特定任务帮助我们测试了在高质量金融特定数据上训练是否会在金融任务上产生更好结果的假设。通用任务调查了我们的模型性能是否与之前发布的结果直接可比。对于金融任务,我们组装了公开可用的金融数据集,其中包括一系列NLP任务。然后,为了直接测试BloombergGPT在彭博社感兴趣任务上的能力,我们还包含了一系列从彭博社内部高质量评估集中提取的任务,用于情感分析和命名实体识别。对于通用任务,我们从多个现有基准测试中提取结果,并将结果分为以下几类:BIG-bench Hard、知识评估、阅读理解和语言任务。每类任务的数量和组的定义见表5。

我们根据模型大小、训练数据类型、整体性能以及最重要的访问权限,将BloombergGPT与三个最接近的模型进行了比较。表6提供了模型大小和计算的概述。

  1. GPT-NeoX(Black et al., 2022):根据Liang et al. (2022),该模型是500亿参数以下表现最好的可用模型。

  2. OPT66B​(Zhang et al., 2022):我们选择与OPT66B66B​进行比较,因为我们的模型大小和结构大致匹配,尽管我们的模型更小。

  3. BLOOM176B(Scao et al., 2022):虽然该模型比BloombergGPT大得多,但我们使用相同的模型架构和软件堆栈。我们注意到BLOOM176B176B​是多语言的,因此虽然它更大,但它也训练了更多语言的数据。

所有三个模型都使用了一些我们在训练语料库中使用的通用数据集。我们还报告了原始GPT-3(Brown et al., 2020)的外部可用结果。

我们更倾向于自己运行模型,以确保相同的评估设置,并将任何由他人报告且未由我们运行的结果放入一个单独的组中。为了公平比较模型,我们避免任何提示调优和其他可能导致某些模型改进结果的技术。因此,每个任务都通过“标准”提示进行测试(见表7),即不改变底层模型的任何参数,没有任务描述,也没有Chain-of-Thought提示(Wei et al., 2022b)。呈现给模型的少样本示例数量取决于任务,我们在相应部分中包含了这些细节。对于每组结果,我们进一步呈现了类似于Liang et al. (2022) 的胜率,表示在所有模型对之间的个体任务比较中“获胜”的比例。

5.1 少样本方法

对于给定一组候选答案的任务,我们执行基于似然的分类,遵循Brown et al. (2020)。我们考虑三种分类方法:常规、校准和归一化。正式定义为:

其中α是候选答案,s是上下文,len测量子词token的数量。我们报告每个模型和任务的最佳方法的性能。对于其他任务,我们通过贪婪解码生成。

我们使用官方拆分,并在可能的情况下报告测试集上的性能。如果测试标签不公开,我们报告开发集上的性能。如果数据集的官方拆分不存在,我们通过选择20%的示例作为测试集,其余作为训练集来创建训练和测试拆分。所有少样本上下文示例都从训练集中采样。为了减少少样本评估的方差,我们为每个测试示例采样不同的少样本,除非另有说明。为了保持一致性,对于每个测试示例,所有模型在我们的评估中都有相同的输入形式。

5.2 保留损失

我们首先测试BloombergGPT如何建模金融数据的语言分布。我们评估了不同模型在包含FinPile所有部分的保留数据集上的每字节比特数。为了限制数据泄漏并更好地模拟LLM的实际使用,我们选择了一个时间上保留的数据集,该数据集严格在训练集之后,并在训练集和保留集之间进行去重。在评估过程中,对于超过2048个token的文档,我们使用半窗口大小的滑动窗口方法作为上下文。这意味着任何超过前2048个token的token在预测时至少有1024个token作为上下文。我们按FinPile中的文档类型报告损失细分。

图3显示,BloombergGPT始终优于其他模型。虽然这是预期的,并且主要作为健全性检查,但它也提供了有关其他模型泛化能力的宝贵见解。例如,BloombergGPT与Filings类别的差距最大,可能是因为这些文档虽然是公开的,但通常以PDF格式存在,因此未包含在任何现有数据集中。

5.3 金融任务

金融中最常考虑的NLP任务在更广泛的NLP文献中也很常见;但是,这些任务在金融数据上执行时具有不同的特征和挑战。以情感分析为例,标题如“公司将裁员10,000人”在一般意义上表现出负面情感,但在某些情况下,可能被视为对公司金融情感的正面,因为它可能导致股价或投资者信心上升。我们使用公共和内部基准测试的组合来评估BloombergGPT、BLOOM176B、GPT-NeoX和OPT66​B的性能。所有考虑的任务类型及其相应的提示模板见表7。

5.3.1 外部金融任务

我们的公共金融基准测试包括来自FLUE基准测试(Shah et al., 2022)的四个任务和ConvFinQA数据集(Chen et al., 2022)。由于大多数这些金融任务的LLM性能尚未广泛报告,因此没有标准的测试框架。因此,我们将它们适应于少样本设置(见§5.1)。我们设计实验的指导原则是选择少样本数量,使得所有模型的平均性能最佳。虽然这些任务的非LLM自定义模型的数字可用,但由于评估设置的差异,我们在此省略报告。因此,我们的声明仅限于LLM之间的比较。我们评估了以下任务(更多细节见附录B):

  • FPB(Malo et al., 2014):金融短语库数据集包括对金融新闻句子的情感分类任务。任何可能对投资者有利/不利的新闻被视为正面/负面,否则为中性。我们创建了自己的拆分,并在5-shot设置中报告按支持加权的F1分数。

  • FiQA SA(Maia et al., 2018):第二个情感分析任务是预测英文金融新闻和微博标题中的方面特定情感,这些数据作为2018年金融问答和意见挖掘挑战的一部分发布。虽然原始数据集在连续尺度上标注,但我们将数据离散化为分类设置,包括负面、中性和正面类别。与FPB一样,我们创建了自己的拆分,包括微博和新闻,并使用5-shot设置,报告加权F1。

  • Headline(Sinha and Khandait, 2020):这是一个二元分类任务,判断黄金商品领域的新闻标题是否包含某些信息。这个人工标注的数据集包含关于“黄金”的英文新闻标题。每个新闻文章携带以下标签的子集:“价格或否”、“价格上涨”、“价格下跌”、“价格稳定”、“过去价格”、“未来价格”、“过去一般”、“未来一般”、“资产比较”。我们使用官方文档将每个标签转化为问题,使用5-shot,并报告所有类别的平均加权F1分数。

  • NER(Salinas Alvarado et al., 2015):这是一个命名实体识别任务,数据来自为信用风险评估从提交给SEC的金融协议中收集的金融数据。标注的实体类型遵循标准CoNLL格式(Tjong Kim Sang and De Meulder, 2003),并标注为PER、LOC、ORG和MISC。由于在少样本设置中学习预测空输出非易事,我们删除了不包含任何实体的句子。由于MISC标签的定义模糊,我们进一步删除了MISC标签。所有模型都需要更多的少样本才能表现良好,因此我们选择了20-shot,并报告实体级别的F1分数。

  • ConvFinQA(Chen et al., 2022):给定来自S&P 500收益报告的输入,包括文本和至少一个包含财务数据的表格,任务是回答需要对输入进行数值推理的对话问题。该任务需要数值推理、对结构化数据和金融概念的理解,并且模型需要将后续问题与对话轮次相关联。

对于ConvFinQA,我们使用整个黄金对话及其上下文作为模型的输入。随着对话的每一“轮”结束,该“轮”及其答案被附加为未来轮次的上下文。我们报告公共开发集上的精确匹配准确率。

BloombergGPT在五个任务中的四个(ConvFinQA、FiQA SA、FPB和Headline)中表现最佳,在NER中排名第二(表8)。因此,BloombergGPT在我们测试的所有模型中胜率最高。与同等大小的模型相比,ConvFinQA的差距尤其明显,该任务由于需要使用对话输入对表格进行推理并生成答案而具有挑战性。

5.3.2 内部任务:情感分析

对于彭博社内部任务,我们考虑了方面特定的情感分析,这在金融文献中很常见。我们使用的所有数据集都是英文的。

我们的标注过程包括一个发现阶段,在此期间我们建立标注和采样程序,了解每个示例通常需要多少标注者,并确定标注者所需的培训水平(Tseng et al., 2020)。根据任务的复杂性,我们的标注者是彭博社的金融专家团队、顾问工作者或两者的组合。在每种情况下,平局由额外的标注者裁决,模糊示例被排除。本节中的所有数据集都由2个标注者标注,第三个标注者打破任何平局。

我们使用与外部数据集类似的五样本评估来测量LLM在内部数据集上的性能。由于数据集很大,我们随机抽样最多1k个测试示例。我们报告按每个标签的支持加权的F1。请注意,与外部数据集类似,我们内部数据集中使用的未标记版本可能出现在FinPile中,因此在训练期间被BloombergGPT看到。然而,由于FinPile的一部分也可在网上获得,我们比较的其他LLM可能也在未标记版本上进行了训练。数据集统计信息见表9。

  • 股票新闻情感:该任务是预测新闻故事中对公司的方面特定情感。数据集包括来自彭博社、高级内容和网络内容的英文新闻故事。标注为“正面”、“负面”或“中性”表示新闻故事可能会增加、减少或不改变公司的长期投资者信心。

  • 股票社交媒体情感:该任务类似于“股票新闻情感”,但我们使用与财务相关的英文社交媒体内容而不是新闻。

  • 股票转录情感:该任务也类似于“股票新闻情感”,但我们使用公司新闻发布会的转录而不是新闻。转录通过语音识别提供,有时经过人工编辑。长转录被分块处理,我们数据集中的每个块通常包含70到80个token。

  • ES新闻情感:虽然该任务是预测新闻故事中对公司(方面)的方面特定情感,但目标不是表明对投资者信心的影响。如果新闻故事包含反映公司环境和社会政策的好、坏或中性新闻的内容,则故事被标注为“正面”、“负面”或“中性”。

  • 国家新闻情感:该任务与其他情感任务不同,目标是预测新闻故事中对国家的情感。数据集包括来自彭博社、高级内容和网络内容的英文新闻故事。如果新闻故事暗示该国经济的增长、收缩或现状,则故事被标注为“正面”、“负面”或“中性”。

表10显示,在四个内部方面特定情感任务中,BloombergGPT的表现优于所有其他测试模型,且优势显著。唯一一个模型表现相似的任务是社交媒体情感任务,而BloombergGPT在其他三个任务中比其他模型至少高出25分,最高超过60分。

5.3.3 探索性任务:NER

尽管NER是一个成熟的NLP任务,使用BERT(Wu and Dredze, 2019; Luoma and Pyysalo, 2020)和T5(Liu et al., 2022)风格的模型已经取得了最先进的结果,但生成式LLM的NER在很大程度上仍是一个未探索的任务。NER不在HELM(Liang et al., 2022)中,BIG-bench(Srivastava et al., 2022)中只有一个(波兰语)任务,我们研究的LLM论文中也没有报告NER性能。因此,我们考虑NER作为一个探索性任务,并报告初步的NER结果,因为它在金融领域非常重要。

NER对于生成式LLM来说可能是一个困难的任务,原因有几个。NER是一个信息抽取任务,更适合编码器-解码器或仅编码器的架构。生成式LLM的生成特性在NER任务上并没有优势。我们发现,与其它任务相比,NER需要大量的提示工程和更多的示例才能获得合理的结果。金融领域的NER具有一些细微差别,这使得零样本或少样本学习尤其困难。

例如,考虑以下(虚构的)标题:“Bloomberg:马斯克先生为Twitter添加了新功能并评论了中国”。根据我们的标注指南和下游任务需求:(a)报道的新闻机构“Bloomberg”可以被标注或不标注,这取决于我们是否只关注重要实体;(b)“马斯克先生”或仅“马斯克”可以被标注为PER(人物);(c)“Twitter”可以被标注为ORG(组织)或PRD(产品),因为新功能是添加到Twitter产品而不是组织;(d)“中国”可以被标注为ORG或LOC(地点),尽管正确的标注可能是ORG。如果没有在提示中添加详细的标注指南,LLM将无法知道预期的标注行为。

基于初步测试,我们确定了以下设置,以便在所有模型的内部NER任务上获得最佳表现。首先,我们将预测的实体类型限制为ORG、PER和LOC。总共过滤掉了不到1%的实体。我们还删除了所有不包含实体的文档(即所有“O”标签)。这些修改旨在增加少样本提示中所见示例的有用性。我们预计,进一步研究NER的提示工程可能会产生更好的结果。

我们考虑了来自不同领域的七个Bloomberg内部NER数据集:

  • BN NER:这是一个命名实体识别任务,识别2017年至2020年间出现在Bloomberg新闻长文(“BN wire”)中的实体。

  • BFW NER:类似于“BN NER”,但我们使用的是2018年至2020年间来自“Bloomberg First Word”短文的实体。

  • Filings NER:该任务的目标是识别公司提交的强制性财务披露文件中出现的实体。数据集包含2016年至2019年间的文件样本。

  • Headlines NER:该任务的目标是识别Bloomberg新闻英文标题中出现的实体。数据集包含2016年至2020年间的标题样本。

  • Premium NER:该任务的目标是识别Bloomberg收录的第三方英文新闻内容子集中出现的实体。数据集包含2019年至2021年间的新闻样本。

  • Transcripts NER:该任务的目标是识别公司新闻发布会转录稿中出现的实体。数据集包含2019年至2020年间的转录稿样本。

  • Social Media NER:该任务的目标是识别与金融相关的英文社交媒体内容中出现的实体。数据集包含2009年至2020年间的社交媒体内容样本。

由于我们的数据集规模较大,我们从每个过滤后的内部数据集中随机抽取了4,000个训练样本和500个测试样本。我们使用20-shot提示进行评估,并使用F1分数作为评估指标。内部NER任务的结果好坏参半(表12)。更大的BLOOM176​B在大多数NER任务中表现最好。在同等规模的模型中,BloombergGPT表现最佳,一次排名第一(Headlines),四次排名第二(BN、Premium、Transcripts、Social Media),一次排名第三(BFW),一次排名最后(Filings)。

探索性任务:NER+NED

命名实体消歧(NED)将文本中提到的实体链接到知识库或其他结构化信息源中的已知实体。在金融领域,我们试图将文本中提到的公司链接到其股票代码,即唯一标识特定股票市场上某只股票的缩写。

我们通过评估联合NER+NED任务直接测试LLM完成此任务的能力:识别文档中提到的公司的股票代码。这要求模型首先识别公司提及,然后生成相应的股票代码。例如,给定“AAPL宣布他们将在未来产品中停止使用英特尔芯片”,正确的NER输出应为“AAPL, Intel”,而正确的NER+NED输出应为“AAPL, INTC”。

该任务的一个优势在于它对提取确切文本跨度的变化具有鲁棒性。虽然NER评估需要精确匹配,但股票代码可以在不首先识别跨度的情况下成功生成。此外,它还评估了模型对公司、其各种表面形式以及公司与股票代码映射的了解。

我们通过运行最先进的实体链接系统来创建此任务的评估数据,该系统用于金融数据中的公司实体,覆盖每个领域的Bloomberg内部NER标注文档。我们删除了没有链接股票代码的文档。按照我们的NER评估方法,我们从每个过滤后的内部数据集中随机抽取了4,000个训练样本和500个测试样本。我们使用20-shot提示进行评估,并使用F1分数作为评估指标。

表12显示,BloombergGPT在所有模型中表现最佳,除了在社交媒体数据上,它仅次于BLOOM176​B。在我们的社交媒体数据中,公司通常通过其股票代码被提及,这消除了模型链接提及的要求,并将任务还原为NER。这些结果进一步凸显了BloombergGPT在金融任务上的优势。

5.4 BIG-bench Hard

我们现在转向评估BloombergGPT在标准的通用自然语言处理任务上的表现。虽然我们模型的重点是金融任务,但包含通用训练数据可能不仅有助于提高金融任务的表现,还能使我们的模型在更标准的自然语言处理数据集上表现良好。我们从BIG-bench Hard(Suzgun等,2022)开始,这是BIG-bench(Srivastava等,2022)中最具挑战性的任务子集。它只包括在构建时最佳可用模型无法通过标准提示技术达到高于人类平均表现的任务。

5.5 知识评估

接下来,我们通过模型在没有提供额外上下文或资源的情况下回答问题(闭卷问答)的场景来评估知识。这包括多项选择题,我们报告准确率。我们遵循Brown等(2020)的模板。场景列表如下:

  • ARC(Clark等,2018):从三年级到九年级的科学考试中收集的多项选择题,包括简单和具有挑战性的部分。

  • CommonsenseQA(Talmor等,2019):需要不同类型常识知识的多项选择题问答数据集。

  • MMLU(Hendrycks等,2021):在57个学科中手动收集的多项选择题知识问题。

  • PhysicalQA(PiQA,Bisk等,2020):关于物理世界如何运作的问题。

5.6 阅读理解

我们将阅读理解基准定义为模型可以根据输入文本中包含的信息生成正确答案的任务。我们的分组包括开卷问答任务,与Brown等(2020)不同,他们将开卷问答任务分为不同的类别。我们遵循Brown等(2020)的模板,并报告准确率。我们包括以下任务:

  • BoolQ(Clark等,2019):关于维基百科段落的Yes/No问题。

  • OpenBookQA(Mihaylov等,2018):给定一本科学事实书,应用于新情境的多项选择题,涉及小学水平的科学问题。

  • RACE(Lai等,2017):来自中学和高中英语考试的多项选择题数据集。

  • Multi-Sentence Reading Comprehension(MultiRC,Khashabi等,2018):短段落和多句子问题。

  • Reading Comprehension with Commonsense Reasoning(ReCoRD,Zhang等,2018):关于CNN和每日邮报新闻文章的自动生成问题。

表16反映了与上述评估类似的排名:虽然GPT-3表现最佳,但BloombergGPT紧随其后。除了OpenBookQA,BloombergGPT在BLOOM176​B、GPT-NeoX和OPT66​B中表现最佳。令人惊讶的是,BLOOM176​B在这一类别中表现显著落后。

5.7 语言任务

我们将语言任务定义为那些不直接与面向用户的应用相关的场景。这些任务评估了模型的消歧、语法或蕴含理解能力。这些任务旨在直接评估模型对语言的理解能力。我们遵循Brown等(2020)的模板,并报告准确率。任务列表如下:

  • Recognizing Textual Entailment(RTE,Dagan等,2007;Haim等,2006;Giampiccolo等,2007;Bentivogli等,2009):给定两个文本片段,识别其中一个文本的含义是否蕴含在另一个文本中。

  • Adversarial NLI(ANLI,Nie等,2020):对抗性构建的蕴含检测任务。

  • CommitmentBank(CB,De Marneffe等,2019):自然发生的语篇,其最后一句包含一个从句嵌入谓词。

  • Choice of Plausible Alternatives(COPA,Gordon等,2011):给定一个前提和两个备选方案,任务是选择与前提具有更合理因果关系的备选方案。

  • Words in Context(WIC,Pilehvar和Camacho-Collados,2019):确定一个词在两个句子中是否具有相同的含义。

  • Winograd(Levesque等,2011):当代词在语义上明确时,确定代词所指的单词。

  • Winogrande(Sakaguchi等,2019):对抗性挖掘的具有挑战性的Winograd示例。

  • HellaSWAG(Zellers等,2019):选择故事或指令集的最佳结尾。

  • StoryCloze(Mostafazadeh等,2016):为五句话长的故事选择正确的结尾句子。

结果(表17)显示,语言任务的结果与知识类别类似。BloombergGPT略微落后于GPT-3,但优于其他模型。与阅读理解类别类似,BLOOM176​B落后于BloombergGPT。

5.8 总结

在数十个任务和多个基准测试中,一个清晰的画面浮现出来。在我们比较的数十亿参数模型中,BloombergGPT表现最佳。此外,在某些情况下,它的表现与更大的模型(数百亿参数)相当甚至超越。虽然我们的目标是让BloombergGPT成为金融任务中的顶尖模型,并且我们包含了通用训练数据以支持特定领域的训练,但该模型在通用数据上的能力仍然超过了同等规模的模型,在某些情况下甚至与更大的模型相当或超越。

6. 定性样本

我们现在分享一些来自我们模型的定性示例,以突出我们领域专业化的优势。

生成Bloomberg查询语言。 BloombergGPT的一个用例是使与金融数据的交互更加自然。现有的数据检索方式是通过Bloomberg查询语言(BQL)。BQL可以用于与不同类别的证券进行交互,每个类别都有其自己的字段、函数和参数。BQL是一个非常强大但复杂的工具。如图4所示,BloombergGPT可以通过将自然语言查询转换为有效的BQL来使BQL更加易于使用。

新闻标题建议。 其他用例在新闻领域得到了很好的支持。由于它训练了许多新闻文章,它可以用于许多新闻应用,并协助记者完成日常工作。例如,在构建新闻简报时,记者可能需要为每个新部分撰写简短的标题。虽然维护一个专门用于此任务的模型可能成本过高,但BloombergGPT开箱即用表现良好(图5)。

金融问答。 由于金融领域训练数据的存在,我们能够查询BloombergGPT以获取与金融世界相关的知识。例如,它在识别公司CEO方面表现良好。图6展示了几个示例,包括来自其他模型的输出。虽然BloombergGPT正确识别了CEO,但GPT-NeoX没有,而FLAN-T5-XXL完全失败,始终忽略了公司名称。

7. 相关工作

大语言模型。 大语言模型(LLM)是自然语言处理(NLP)领域的一个重要研究方向。早期的语言模型基于n-gram(Brown等,1992)和循环神经网络(Mikolov等,2010;Sutskever等,2011)。随着Transformer架构的引入(Vaswani等,2017),语言模型的规模和性能得到了显著提升。Radford等(2018)展示了使用自回归语言建模目标进行预训练的模型在迁移学习中表现出色。Radford等(2019)进一步表明,扩大模型规模和训练数据可以使得自回归语言模型在不同的下游任务中表现良好,而无需任何额外的监督微调。

Brown等(2020)表明,进一步扩大模型规模会导致新模型能力的出现,并提高模型的鲁棒性。自Brown等(2020)发布GPT-3以来,许多其他研究人员构建了大语言模型,以研究数据量、数据质量、网络架构、参数规模、数据规模、分词和开源策略(Raffel等,2020;Zhang等,2022a;Black等,2022;Rae等,2021;Hoffmann等,2022;Chowdhery等,2022;Lieber等,2021;Zeng等,2022;Tafjord和Clark,2021;Smith等,2022;Scao等,2022;Taylor等,2022;Lin等,2022;Soltan等,2022)。

领域特定的大语言模型。 领域特定训练对于掩码(仅编码器)语言模型的价值已经得到广泛认可。常见的做法是在领域特定数据上从头训练BERT模型(Devlin等,2019),或在现有模型上继续预训练新的领域特定数据(Gururangan等,2020)。遵循这些策略,BioBERT(Lee等,2020)将BERT适应于生物医学领域,SciBERT则在科学出版物上进行训练(Beltagy等,2019)。这些论文的结果表明,领域内训练使得模型在各种生物医学文本挖掘任务中优于之前的最先进模型。进一步的例子包括用于临床领域的ClinicalBERT(Huang等,2019)、用于科学生物医学论文的BioMedRoBERTa(Gururangan等,2020),以及用于Twitter数据的BERTweet和Bernice(Nguyen等,2020;DeLucia等,2022)。

由于训练超过100亿参数的自回归(仅解码器)语言模型的成本显著高于训练不到10亿参数的掩码语言模型,因此领域特定的自回归模型的例子较少。然而,现有的方法遵循相同的两种策略。适应现有模型,medPaLM(Singhal等,2022)将PaLM适应于生物医学领域,Minerva(Lewkowycz等,2022)则适应于数学推理任务。

最近,出现了一些从头训练的仅解码器模型,用于领域特定数据。一个流行的领域是蛋白质序列,因为它们可以用类似语言的序列表示,但不被自然语言模型覆盖(例如,Lin等,2022;Xiao等,2021;Nijkamp等,2022)。然而,即使对于自然语言领域的模型,也可能有好处。Galactica是在大量科学数据集上训练的,并包括处理科学符号的特殊处理(Taylor等,2022)。虽然在科学任务上表现非常出色,但Galactica在更标准的自然语言处理任务上也表现出色。BioGPT(Luo等,2022)和BioMedLM(Bolton等,2023)都是在生物医学数据上训练的较小的GPT风格模型。Lehman等(2023)比较了在领域特定数据上训练的编码器/解码器模型与从通用训练中适应的模型。研究大生成语言对话模型的研究人员也得出了关于使用领域特定训练数据的好处的类似结论(Zhang等,2020;Roller等,2021;Thoppilan等,2022)。

这些发现突显了领域内预训练的优势,尤其是在有足够数据的情况下,正如我们的情况一样。受Galactica的通用能力的启发,我们使用公共数据增强了我们的私有数据,目的是研究模型是否可以在不牺牲通用领域性能的情况下获得领域内能力。

训练数据。 大规模原始文本数据语料库对于训练LLM至关重要。因此,现在有几个可用的语料库涵盖了广泛的来源。

Colossal Clean Crawled Corpus(C4,Raffel等,2020)从Common Crawl中提取数据,创建了一个经过处理的训练语料库。The Pile是一个精心策划的语料库,包含了广泛的数据来源(Gao等,2021)。这些数据集基于或包括网络爬取数据(OpenWebText2),并增加了来自高质量来源的数据(Pubmed,Arxiv)。各种努力旨在清理数据集,特别是网络数据,通过删除不需要或有害的文本(Touvron等,2023;Rae等,2020)。BLOOM(Scao等,2022)精心选择了数据来源,并包含了各种过滤机制(Jernite等,2022)。

虽然网络数据是获取大量多样化数据的有效策略,但强有力的清理工作仍然会导致数据伪影、重复(Carlini等,2020)、各种类型的有毒语言(Weibl等,2021),并且可能导致少数群体声音的边缘化(Xu等,2021)。Dodge等(2021)研究了C4,以更好地理解元数据以及包含和排除的数据。他们的研究结果表明,C4包含机器生成的文本,由于排除过滤器而存在偏见,并且可能包含来自自然语言处理任务评估数据集的示例。Zeng等(2022)也进行了类似的努力,记录了他们在训练中文大语言模型时进行的预处理。

Lee等(2022a)研究了去重对模型性能的影响,发现去重减少了训练数据的记忆,允许更好地估计泛化误差,并在不影响性能的情况下减少了训练时间和成本。这些见解突显了构建高质量训练语料库的重要性和挑战。正如第2节所讨论的,Bloomberg的核心业务是策划和提供对数据集的访问,我们使用这些数据集构建了高质量的数据集FinPile来训练BloombergGPT,从而在金融任务上取得了最佳表现。

评估。 语言模型所处理的任务大大增加,需要与传统任务特定系统非常不同的评估过程。LLM评估有两种范式:第一种是通过自动评估在多种场景中评估模型(Liang等,2022;Srivastava等,2022),第二种是通过将模型集成到用户工作流程中进行外在和任务特定的评估(例如,Lee等,2022b;Goyal等,2022)。

虽然第二种策略对于评估模型在产品中的部署是必要的,但在第一种策略的规模上运行这些人类评估是不可行的,因此在引入新模型时通常遵循第一种策略。在我们的案例中,我们结合了来自多个现有基准的通用评估,这些基准有不同的目标。Srivastava等(2022)旨在通过向整个研究社区征集任务来实现最大覆盖,而HELM(Liang等,2022)建议通过特定数据集在各种“场景”中进行评估。早期的语言模型论文开发了自己的评估方案(Brown等,2020)。虽然这些基准允许模型之间的并排比较,但确保所有实验参数(提示、解码策略、少样本示例等)相同是具有挑战性的。因此,我们在评估中区分了报告和验证的数字(第5节)。

除了通用评估外,我们还需要进行有针对性的领域评估。之前的领域特定模型如Galactica(Taylor等,2022)选择了一组模型可能表现良好的任务。在他们的案例中,这些是各种科学任务。然而,金融自然语言处理领域没有标准的基准。虽然最近关于FLUE(Shah等,2022)的工作旨在提供这样的基准,但它对相关任务的覆盖有限,没有建议的少样本学习评估策略,并且一些注释的质量较低。为了提供外部可比较的结果,我们为FLUE开发了少样本策略,但也决定用公司内部基准来增强公开可用的评估任务。

模型规模。 大语言模型训练在计算成本和人力成本上仍然昂贵。确定最佳的训练数据量以及模型形状和大小以充分利用资源变得重要。

Kaplan等(2020)首先研究了语言模型性能对架构、参数规模、计算能力和数据集大小的依赖性。他们报告说,模型参数数量、数据集大小和计算量根据幂律平滑地提高了自回归语言建模目标的性能。Hernandez等(2021)对数据转移对不同分布的影响进行了类似调查,发现这也遵循幂律。除了研究对损失的影响外,Rae等(2021)通过训练各种规模的模型分析了规模对不良属性(如偏见和毒性)的影响。

比较模型架构,Levine等(2020)研究了使用自注意力的模型的扩展,并得出了深度与宽度分配的指导方针。Tay等(2021)报告说,模型形状(深度与宽度比)即使对预训练目标影响最小,也会影响下游任务的性能。Tay等(2022b)进一步研究了不同模型架构的扩展效应,并表明架构选择在扩展时是相关的,并且vanilla transformer架构扩展得最好。

对本工作特别重要的是Hoffmann等(2022)的研究,他们研究了在固定计算预算下模型规模和训练token数量对模型性能的影响。他们假设现有的大语言模型训练不足,模型规模和训练token数量应同等扩展。他们通过Chinchilla证明了这一假设,Chinchilla是一个显著较小但性能优于大多数最大LLM的模型。这些发现为“Chinchilla最优”训练较小的模型打开了大门,这些模型实现了强大的性能,并且推理运行效率比其较大的对应模型高得多。这些发现促使我们考虑使用标准架构的近乎Chinchilla最优的模型。

分词。 分词和词汇选择在模型性能中起着关键作用,因为它们可以帮助模型学习有意义的表示并泛化到未见过的单词。字节对编码(BPE)(Sennrich等,2016)通过反复合并训练集中最频繁的序列对,直到达到预定的词汇量,从而学习一个贪婪的自下而上的词汇表。Radford等(2018)通过将基础词汇限制为所有可能的字节而不是所有Unicode字符来适应BPE。Wordpiece分词(Schuster和Nakajima,2012)也通过反复合并最大化训练数据可能性的序列对来学习一个贪婪的自下而上的词汇表,这与Sennrich等(2016)的方法略有不同。

与BPE和Wordpiece不同,Unigram分词器(Kudo,2018)通过首先初始化一个大的词汇表并反复丢弃那些增加损失(例如,训练数据的对数似然)最少的词汇项来学习一个自上而下的词汇表。通过构造,Unigram模型可以以几种不同的方式对输入文本进行分词。也就是说,Unigram模型保存了概率,允许在推理时进行更智能的分词。最后,SentencePiece(Kudo和Richardson,2018)适应了上述方案,以处理不以空格分隔的语言。Beltagy等(2019)构建了一个特定于科学文本的词汇表,并观察到他们的领域特定训练的词汇表与非领域特定的BERT词汇表只有42%的重叠。同样,Lewis等(2020)表明,专门的生物医学词汇表在序列标注任务上持续提高了性能。Lieber等(2021)构建了一个更大的词汇表以确保分词效率,作者声称这减少了训练时间并提高了语义表示。这些发现表明,选择最能反映训练领域的分词器和伴随词汇表的重要性。出于这些原因,我们决定训练自己的Unigram分词器,而不是依赖现有的公共分词器。

位置嵌入。 基于Transformer的模型依赖位置嵌入来编码文本中单词的位置和位置信息。编码序列位置以及这种选择对模型性能的影响已经被广泛研究。这些包括正弦嵌入(Vaswani等,2017)、旋转位置嵌入(Su等,2021a)、添加相对位置偏置(Raffel等,2020)以及向注意力头添加线性偏置(Press等,2022)。Press等(2022)策略的一个副作用是,可以在不损失较长序列性能的情况下在较短序列上进行训练。这有两个好处:首先,模型学会泛化(外推)到更长的序列;其次,模型可以在较短的序列上进行训练,从而减少训练时间。

8. 伦理、局限性和影响

大语言模型的快速发展和采用伴随着关于这些模型的伦理、使用和局限性的严格讨论。关于这些主题的更完整讨论,我们建议读者参考Bommasani等(2021);Bender等(2021);Birhane等(2022);Weidinger等(2021,2022)。我们讨论与BloombergGPT开发直接相关的问题。

伦理使用。 金融是技术应用的一个敏感领域,确保准确、真实的信息对我们的产品、客户以及公司在市场中的声誉至关重要。另一方面,我们的客户也渴望采用最先进的技术来支持他们的工作流程。为了向金融界提供自然语言应用,我们开发了严格的风险和测试评估流程。该流程包括仔细的注释指南(Tseng等,2020)、由中央风险和合规组织以及产品负责人(如新闻编辑室)进行的多级预发布审查,以及发布后的监控。此外,我们根据所有适用法规进行自然语言处理和人工智能系统的研究、开发和部署。

同样,毒性和偏见是我们作为一家公司对任何我们生产的内容(无论是来自人类还是机器)都格外谨慎的领域。由于我们模型中有害语言生成的潜在性的测量取决于其应用领域,量化生成不当内容的可能性仍然是一个开放的问题。我们特别感兴趣的是研究FinPile(它更干净,包含较少的明显偏见或有毒语言的示例,如新闻稿)是否减少了模型生成不当内容的倾向。随着我们开发基于该技术的产品,我们将应用现有的测试程序以及风险和合规控制,以确保安全使用。

开放性。 社区中正在进行的辩论涉及LLM应该如何发布(如果有的话)。虽然不公开的模型无法被社区全面评估,但分发模型可能导致恶意用途。特别是对于像BloombergGPT这样的模型,它训练了大量的新闻稿、新闻文章和文件,发布模型存在通过模仿滥用的高风险。

我们见证了许多不同的策略来减轻与发布LLM相关的风险。一种策略是自由和公开地分享训练好的模型(Scao等,2022),并依赖许可证来规定模型应该如何和不应该如何使用。另一种策略要求个人申请访问训练好的模型参数(Zhang等,2022a;Touvron等,2023)。更严格的方法是提供对模型的API访问,但不提供底层模型参数或模型训练数据的详细信息(Brown等,2020)。最后,有些人完全不提供对模型的访问(Chowdhery等,2022;Hoffmann等,2022)。每个决定都反映了模型使用、潜在危害和业务决策的组合。

Bloomberg的核心业务之一是提供对数十年来收集的数据的访问。众所周知,LLM容易受到数据泄露攻击,并且给定模型权重,可以提取大量文本片段(Carlini等,2020,2022)。此外,即使有选择性地向研究人员提供访问,也不能保证模型不会被泄露。在没有强有力的隐私保证的情况下,我们必须担心提供对模型权重的访问意味着提供对FinPile的访问。出于这个原因,我们谨慎行事,并遵循其他LLM开发者的做法,不发布我们的模型。

尽管如此,我们在训练和评估BloombergGPT过程中的见解和经验有助于社区对这些模型的理解。特别是,我们的经验可能对那些构建领域特定模型的人有用。在开发BloombergGPT的过程中,我们发现OPT的日志、BLOOM团队的经验以及非开放模型如GPT-3、PaLM、Chinchilla和Gopher的工作对我们的工作至关重要。为了支持这一传统,我们包括了我们的训练日志(附录C)。

9. 结论

我们介绍了BloombergGPT,这是一个在金融自然语言处理领域表现最佳的LLM。

我们的模型为关于训练领域特定模型的有效方法的持续对话做出了贡献。我们混合领域特定和通用数据的训练策略产生了一个在金融和通用任务上平衡表现的模型。此外,我们的工作为选择Chinchilla最优规模的模型提供了另一个数据点。最后,我们希望我们的模型训练日志能为那些训练自己LLM的人提供指导。

我们有几个有趣的方向可以探索。首先,任务微调在LLM中产生了显著的改进,我们计划考虑在金融领域中模型对齐的独特机会(Wei等,2021;Ouyang等,2022)。其次,通过在FinPile上训练数据,我们选择了可能表现出较少有毒和偏见语言的数据。这对最终模型的影响尚不清楚,我们计划进行测试。第三,我们试图了解我们的分词策略如何改变最终的模型。这些是我们希望与BloombergGPT一起探索的一些新研究方向。

我们在通用LLM基准测试中取得了强劲的结果,并在金融任务上优于可比模型。我们将此归因于(按影响递减顺序):1. 精心策划的内部数据集;2. 我们独特的分词器选择;3. 最新的架构。我们将继续开发BloombergGPT的金融应用,以进一步探索这些建模选择的好处。

相关文章:

BloombergGPT: A Large Language Model for Finance——面向金融领域的大语言模型

这篇文章介绍了BloombergGPT&#xff0c;一个专门为金融领域设计的大语言模型&#xff08;LLM&#xff09;。以下是文章的主要内容总结&#xff1a; 背景与动机&#xff1a; 大语言模型&#xff08;如GPT-3&#xff09;在多个任务上表现出色&#xff0c;但尚未有针对金融领域的…...

来说数据库

什么是数据库&#xff1f; 是部署在操作系统上&#xff0c;把数据按一定的数据模型组织、永久存储&#xff0c;并可以被用户共享的软件系统。 其实数据库&#xff0c;可以理解为&#xff0c;把数据都存成文件&#xff0c;有很多的文件和很多的目录&#xff0c;不好管理&#xf…...

教程:从pycharm基于anaconda构建机器学习环境并运行第一个 Python 文件

1. 安装 PyCharm 访问 PyCharm 官方网站&#xff1a;https://www.jetbrains.com/pycharm/。下载社区版&#xff08;免费&#xff09;或专业版&#xff08;收费&#xff0c;提供更多功能&#xff09;。按照操作系统的安装指导安装 PyCharm。安装后打开 PyCharm&#xff0c;并根…...

嵌入式驱动开发详解11(INPUT子系统)

文章目录 前言input子系统简介主要结构体API函数input子系统驱动框架上报事件后续设备树配置方式参考文献 前言 按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux 内核为此专门做了一个叫做 input 子系统的框架来处理输入事件。输入设备本质上还是字符设备&…...

动态规划解决目标和问题

代码随想录链接:代码随想录 思路: 可以将数组分为两部分&#xff0c;其中一部分记作left&#xff0c;其中数字的符号全为,而另外一部分记作right&#xff0c;其中数字的符号全为-。这里全为-的意思不是真正的符号为-&#xff0c;而表示这一堆数字在计算时取值为负 因此有如下…...

【漏洞分析】UDF提权漏洞——CVE-2016-6662-MySQL ‘malloc_lib’变量重写命令执行

0x00 前言 最近在做渗透笔记&#xff0c;其中有一个靶机在getshell后&#xff0c;需要进行提权。发现靶机使用root启动的mysql服务&#xff0c;那么尝试使用UDF提权。于是在提权成功后&#xff0c;花了一天时间特意搜了一下整个UDF提权的漏洞原理和利用&#xff0c;加深理解。…...

特种设备安全管理人员免费题库限时练习(判断题)

56.(判断题)特别重大事故、重大事故、较大事故和一般事故,负责事故调查的人民政府应当自收到事故调查报告之日起15日内做出批复。 A.正确 B.错误 答案:错误 57.(判断题)每一类事故灾难的应急救援措施可能千差万别,因此其基本应急模式是不一致的。 A.正确 B.错误 答案:错…...

linux-25 文件管理(三)复制、移动文件,cp,mv

命令cp是copy的简写&#xff0c;而mv则是move的简写。那既然copy是用于实现复制文件的&#xff0c;那通常一般我们要指定其要复制的是谁&#xff1f;而且复制完以后保存在什么地方&#xff0c;对吧&#xff1f;那因此它的使用格式很简单&#xff0c;那就是cp srcfile dest&…...

中国科技统计年鉴EXCEL版(2021-2023年)-社科数据

中国科技统计年鉴EXCEL版&#xff08;2021-2023年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90028724 https://download.csdn.net/download/paofuluolijiang/90028724 中国科技统计年鉴提供了从2021至2023年的详尽数据&#xff0c;覆盖了科技…...

Idea(中文版) 项目结构/基本设置/设计背景

目录 1. Idea 项目结构 1.1 新建项目 1.2 新建项目的模块 1.3 新建项目模块的包 1.4 新建项目模块包的类 2. 基本设置 2.1 设置主题 2.2 设置字体 2.3 设置注释 2.4 自动导包 2.5 忽略大小写 2.6 设置背景图片 3. 项目与模块操作 3.1 修改类名 3.2 关闭项目 1. I…...

jenkins入门--安装jenkins

下载地址https://www.jenkins.io/ jdk 安装 &#xff1a;Jenkins需要安装对应版本的jdk,我在安装过程中显示需要21,17 Java Downloads | Oracle jenkins安装过程参考全网最清晰Jenkins安装教程-windows_windows安装jenkins-CSDN博客 安装完成后&#xff0c;浏览器输入127.0.…...

基于Springboot + vue实现的小型养老院管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…...

shell基础使用及vim的常用快捷键

一、shell简介 参考博文1 参考博文2——shell语法及应用 参考博文3——vi的使用 在linux中有很多类型的shell&#xff0c;不同的shell具备不同的功能&#xff0c;shell还决定了脚本中函数的语法&#xff0c;Linux中默认的shell是 / b in/ b a s h &#xff0c;流行的shell…...

Mac 安装psycopg2出错:Error:pg_config executable not found的解决

在mac 上执行pip3 install psycopg2-binary出现如下错误&#xff1a; Error:pg_config executable not found然后我又到终端里执行 brew install postgresql16 显示 Warning: You are using macOS 15. We do not provide support for this pre-release version. It is expe…...

UniApp | 从入门到精通:开启全平台开发的大门

UniApp | 从入门到精通:开启全平台开发的大门 一、前言二、Uniapp 基础入门2.1 什么是 Uniapp2.2 开发环境搭建三、Uniapp 核心语法与组件3.1 模板语法3.2 组件使用四、页面路由与导航4.1 路由配置4.2 导航方法五、数据请求与处理5.1 发起请求5.2 数据缓存六、样式与布局6.1 样…...

Kafka3.x KRaft 模式 (没有zookeeper) 常用命令

版本号&#xff1a;kafka_2.12-3.7.0 说明&#xff1a;如有多个地址&#xff0c;用逗号分隔 创建主题 bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic demo --partitions 1 --replication-factor 1删除主题 bin/kafka-topics.sh --delete --boots…...

【竞技宝】CS2:NertZ离队Liquid光速加盟!

2025年1月7日&#xff0c;目前CS2的赛事正处于空窗期中&#xff0c;很多队伍在近期都在进行阵容上的调整&#xff0c;其中出现了很多震惊观众的转会消息。今日凌晨&#xff0c;HEROIC官宣队内的NertZ选手正式离队&#xff0c;此后Liquid很快发布消息宣布了NertZ的加盟。 今日凌…...

PDFMathTranslate: Star13.8k,一款基于AI的PDF文档全文双语翻译PDF文档全文双语翻译,保留格式神器,你应该需要它

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 PDFMathTranslate是一个开源项目&#xff0c;旨在为用户提供便捷的PDF科学论文翻译解决方案。它不仅能够翻译文本&#xff0c;还能保留公式、图表、目…...

滑动窗口——最小覆盖子串

一.题目描述 76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 二.题目解析 题目还是很好理解的&#xff0c;就是在字符串s中找到一个子串&#xff0c;该子串包含字符串t的所有字符。返回最短的子串。如果s中不包含这样的子串就返回一个空串。 需要注意的是&#…...

2012mfc,几种串

串,即是由符组成的串,在标准C,标准C,MFC中串这一功能的实现是不相同的,C完全兼容了C. 1.标准C中的串 在标准C中没有串数据类型,C中的串是有符类型的符数组或符类型的符指针来实现的.如: char name[26]"This is a Cstyle string"; //或char *name"This is a…...

基于SpringBoot的乐器商城购物推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Jurgen提出的Highway Networks:LSTM时间维方法应用到深度维

Jurgen提出的Highway Networks&#xff1a;LSTM时间维方法应用到深度维 具体实例与推演 假设我们有一个离散型随机变量 X X X&#xff0c;它表示掷一枚骰子得到的点数&#xff0c;求 X X X 的期望。 步骤&#xff1a; 列出 X X X 的所有可能取值 x i x_i xi​&#xff08;…...

asp.net core中的 Cookie 和 Session

在 Web 开发中&#xff0c;用户会话管理是非常重要的&#xff0c;尤其是在需要保持用户状态和身份验证的应用中。ASP.NET Core 提供了多种状态管理技术&#xff0c;如 Cookie 和 Session&#xff0c;它们可以帮助你管理用户会话、存储数据并实现用户身份验证等功能。下面将详细…...

【STM32+CubeMX】 新建一个工程(STM32F407)

相关文章&#xff1a; 【HAL库】 STM32CubeMX 教程 1 --- 下载、安装 目录 第一部分、新建工程 第二部分、工程文件解释 第三部分、编译验证工程 友情约定&#xff1a;本系列的前五篇&#xff0c;为了方便新手玩家熟悉CubeMX、Keil的使用&#xff0c;会详细地截图每一步Cu…...

IO进程day1

一、思维导图...

剧本字幕自己看

Hello English learners! Welcome back to my channel! My name is Ethan, and today we’re diving into a topic we deal with every day—traffic. 大家好,英语学习者们!欢迎回到我的频道!我是Ethan,今天我们要聊一个每天都会遇到的话题——交通。 When I drive somewh…...

Java排序

Map Stream 排序 最簡單的排序方式 Map<String,String> _lineMap = _itRow.next();_lineMap = _lineMap.entrySet().stream().sorted((i1,i2)>i1.getKey().compareTo(i2.getKey())).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(e1,e2)->e…...

Geoserver修行记-后端调用WMS/WMTS服务无找不到图层Could not find layer

项目场景 调用geoserver地图服务WMS,找不到图层 我在进行地图服务调用的时候&#xff0c;总是提示我找不多图层 Could not find layer&#xff0c;重点是这个图层我明明是定义了&#xff0c;发布了&#xff0c;且还能够正常查看图层的wms的样式&#xff0c;但是在调用后端调用…...

JavaScript代码片段二

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... JavaScript统计文字个数、特殊字符转义、动态插入js代码、身份证验证 统计文字个数 f…...

Opencv图片的旋转和图片的模板匹配

图片的旋转和图片的模板匹配 目录 图片的旋转和图片的模板匹配1 图片的旋转1.1 numpy旋转1.1.1 函数1.1.2 测试 1.2 opencv旋转1.2.1 函数1.2.2 测试 2 图片的模板匹配2.1 函数2.2 实际测试 1 图片的旋转 1.1 numpy旋转 1.1.1 函数 np.rot90(kl,k1)&#xff0c;k1逆时针旋转9…...

ebpf 笔记

eBPF(extened Berkeley Packet Filter)是一种内核技术,它允许开发人员在不修改内核代码的情况下运行特定的功能 https://zhuanlan.zhihu.com/p/712220029 eBPF技术简介 - 阅读清单 - 腾讯云开发者社区-腾讯云 从石器时代到成为“神”&#xff0c;一文讲透eBPF技术发展演进史 …...

C++编程基础之override关键字

在C中&#xff0c;override关键字用于显式地标识派生类中的成员函数是对基类中虚函数的重写&#xff0c;具有以下重要作用和使用说明&#xff1a; 作用 增强代码可读性&#xff1a;通过使用override关键字&#xff0c;能够清晰地向阅读代码的人表明该函数是有意重写基类中的虚…...

自动化之数据库:docker部署mongo,为下一步的使用打下基础

以下是一个详细的Docker Compose配置示例&#xff0c;用于设置一个包含三个节点的MongoDB副本集&#xff0c;并确保安全性&#xff08;使用账号密码进行认证&#xff09;。所有节点都将设置在同一个Docker网络&#xff08; py-mongo &#xff09;下&#xff0c;以便于未来的扩…...

VR+智慧消防一体化决策平台

随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术与智慧城市建设的结合越来越紧密。在消防安全领域&#xff0c;VR技术的应用不仅能够提升消防训练的效率和安全性&#xff0c;还能在智慧消防一体化决策平台中发挥重要作用。本文将探讨“VR智慧消防一体化…...

新能源网站提升用户体验的关键

新能源网站的用户体验对于吸引和留住访问者至关重要。一个优秀的用户体验可以增加用户的满意度&#xff0c;提高他们对网站的忠诚度。在设计新能源网站时&#xff0c;关键在于简洁明了的界面和易于导航的布局。用户应该能够轻松找到他们需要的信息&#xff0c;而不会感到困惑或…...

【12_多数元素】

问题 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。 多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 思路 使用摩尔投票算法来解决。该算法的基本思想是维护一个候选人和一个…...

深入理解 Android 中的 ActivityInfo

深入理解 Android 中的 ActivityInfo 在 Android 开发中&#xff0c;ActivityInfo 是一个非常重要的类&#xff0c;它包含了关于 Activity 的元信息。这些信息通常是从 AndroidManifest.xml 文件中提取的&#xff0c;开发者可以通过 ActivityInfo 类来获取和操作这些信息。本文…...

【通识安全】煤气中毒急救的处置

1.煤气中毒的主要症状与体征一氧化碳中毒&#xff0c;其中毒症状一般分为轻、中、重三种。 (1)轻度&#xff1a;仅有头晕、头痛、眼花、心慌、胸闷、恶心等症状。如迅速打开门窗&#xff0c;或将病人移出中毒环境&#xff0c;使之吸入新鲜空气和休息&#xff0c;给些热饮料&am…...

windows从0开始配置llamafactory微调chatglm3-6b

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、准备工作1、创建python虚拟环境(annoconda)2、配置pytorch傻瓜版3、llamafactory配置4、微调数据准备 一、准备工作 1、创建python虚拟环境(annoconda) 本篇文…...

IM-Magic Partition Resizer(分区调整软件) v7.5.0 多语便携版

IM-Magic Partition Resizer是一款功能强大的分区调整软件&#xff0c;允许用户调整并重新分配硬盘分区空间&#xff0c;从而在不丢失数据的情况下改变分区的大小和位置。 软件功能 支持调整和重新分配硬盘分区的空间大小。能够将分区扩大或缩小而不会导致数据丢失。可以改变分…...

matlab中高精度计算函数vpa与非厄米矩阵本征值的求解

clear;clc;close all tic %并行设置% delete(gcp(nocreate));%关闭之前的并行 cparcluster(local); c.NumWorkers50;%手动设置线程数(否则默认最大线程为12) parpool(c, c.NumWorkers); %并行设置%w1; u2.5;N30;valstozeros(2*N2,100); v10linspace(-3,3,100).;parfor jj1:leng…...

流程图(四)利用python绘制漏斗图

流程图&#xff08;四&#xff09;利用python绘制漏斗图 漏斗图&#xff08;Funnel Chart&#xff09;简介 漏斗图经常用于展示生产经营各环节的关键数值变化&#xff0c;以较高的头部开始&#xff0c;较低的底部结束&#xff0c;可视化呈现各环节的转化效率与变动大小。一般重…...

Elasticsearch:索引mapping

这里写目录标题 一、介绍二、动态mapping三、mapping属性&#xff08;1&#xff09;analyzer&#xff08;分析器&#xff09;(2) coerce&#xff08;强制类型转换&#xff09;&#xff08;3&#xff09;copy_to&#xff08;合并参数&#xff09; 一、介绍 二、动态mapping 三…...

AI赋能跨境电商:魔珐科技3D数字人破解出海痛点

跨境出海进入狂飙时代&#xff0c;AI应用正在深度渗透并重塑着跨境电商产业链的每一个环节&#xff0c;迎来了发展的高光时刻。生成式AI时代的大幕拉开&#xff0c;AI工具快速迭代&#xff0c;为跨境电商行业的突破与飞跃带来了无限可能性。 由于跨境电商业务自身特性鲜明&…...

计算机网络之---信号与编码

信号 在物理层&#xff0c;信号是用来传输比特流的物理量&#xff0c;它可以是电压、电流、光强度等形式&#xff0c;通常通过电缆、光纤或者无线信道等媒介传播。 信号主要分为以下两种类型&#xff1a; 模拟信号&#xff08;Analog Signal&#xff09;&#xff1a;信号在时间…...

腾讯云AI代码助手编程挑战赛-FinChat

作品简介 FinChat 是一款极具创新性的智能股票分析工具&#xff0c;依托国内顶尖大语言模型打造而成。它专为日常忙碌、无暇顾及金融市场&#xff0c;却又手握闲钱渴望投资的人群量身定制。核心功能包括&#xff1a; 自动剖析股票数据&#xff1a;迅速生成深度专业研报。实时…...

2025年PMP考试最新报名通知

经PMI和中国国际人才交流基金会研究决定&#xff0c;中国大陆地区2025年第一期PMI认证考试定于3月15日举办。在基金会网站报名参加本次PMI认证考试的考生须认真阅读下文&#xff0c;知悉考试安排及注意事项&#xff0c;并遵守考试有关规定。 一、时间安排 &#xff08;一&#…...

蓝凌EIS智慧协同平台 fi_message_receiver.aspx SQL注入漏洞复现(CVE-2025-22214)

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为成长型企业打造的沟通、协同、社交的移动办公平台,旨在提升企业内部沟通、协作和信息共享的效率。该平台集成了各种协同工具和功能,全面满足企业的办公需求。具体来说,它覆盖了审批、流程、财务、行政、人事、客户等全在线业务…...

我用AI学Android Jetpack Compose之入门篇(2)

我跑成功了第一个Compose应用&#xff0c;但我还是有很多疑问&#xff0c;请人工智能来解释一下吧。答案来自 通义千问 文章目录 1.请解释一下Compose项目的目录结构。根目录模块目录&#xff08;通常是app&#xff09;app/build.gradleapp/src/mainapp/src/main/uiapp/src/ma…...

确认2D Tilemap Editor安装后仍然没有基础的Tile

Create > 2D 新建里面什么Tile类型都有&#xff0c;就是没有最基础的Tile。 在Assets文件夹中&#xff0c;点击右键 > Create > C# Script&#xff0c;新建一个脚本&#xff0c;代码内容复制粘贴进去 using UnityEngine; using UnityEngine.Tilemaps;[CreateAssetMe…...