Press "Enter" to skip to content

用于合成时间序列数据生成的LLM

我们最近参加了Brembo黑客马拉松比赛,并获得了一万元的大奖。比赛的任务是使用生成式人工智能创建新的化合物,并生成它们的预测性能数据。

在本博客文章中,我将详细介绍我们的方法和解决方案。

问题陈述

使用Brembo提供的摩擦测试数据,利用生成式人工智能创建新的化合物,预测测试结果,并创建预测新Brembo刹车产品的有效性和特性的框架。提供的数据将包括Brembo之前使用和测试过的化合物列表及其结果。解决方案必须基于生成式人工智能,用于提供能够提出增加候选化合物数量的新配方模型,并确保可行性和良好性能。

提交时,请提交包含10至30个生成的新化合物、它们的成分及其合成性能数据的csv文件[1]。

数据集描述

我们获得了一个由337种摩擦材料及其成分组成以及性能数据的列表。

每种摩擦材料由60种可能的原材料中的10至15种组成。这60种原材料被分为6个类别(标记为A-F),我们必须确保生成的摩擦材料的成分在给定范围内。

用于合成时间序列数据生成的LLM 四海 第1张

材料成分的限制

换句话说,我们必须确保任何生成的材料中至少有1%且最多30%的成分来自B类化合物等等。

每次刹车测试的性能数据基本上是一个31个点的时间序列,每个点都提供了压力、温度和摩擦因数等参数的值。此外,对于每种化合物,总共进行了124次刹车测试,因此在性能数据方面,我们需要为每种化合物生成124 * 31 = 3844个数据点。

这是一个包含了一种化合物成分和性能数据的示例数据。有关数据集的其他相关信息可以在此处找到。

评估标准

最终结果给予技术分数和演示分数相等的权重。

技术分数根据以下等权参数计算。

  • 符合给定的约束条件:生成的化合物是否符合给定的约束条件(如下所述)?
  • 技术相关性:合成性能数据是否遵循所提供数据中不同变量之间的模式和关系?
  • 目标性能:摩擦材料最重要的变量是其摩擦因数,预期值为0.6,可接受的误差率为0.1。输出的摩擦因数是否符合我们的预期值?
  • 可变性:输出新材料的成分与当前材料有多大的差异?

设计概述

基本上,我们有3个基本组件

  • 材料选择模块:负责生成新的配方。它输出一组新的摩擦材料及其成分。
  • 数据生成器模块:根据合成材料和过去的各种化合物的历史性能数据,为该材料生成合成性能数据。
  • 数据验证器:确定数据生成器的输出质量好坏。该模块使用所提供的历史数据中观察到的趋势(例如:压力和摩擦因数随时间呈反比关系,减速度似乎遵循线性模式,而温度上升曲线似乎更像是指数模式)来评估合成性能数据的好坏。这可用于给模型提供人工反馈,以改善系统性能。

用于合成时间序列数据生成的LLM 四海 第2张

解决方案的高级设计

详细设计

我们在解决方案中使用了以下技术和堆栈

  • GPT 3.5 Turbo:我们将gpt 3.5 turbo用作Material Selector和Data Generator模块的基本llm。
  • Prompt工程:使用合适的系统和指令提示帮助我们提高模型的性能。
  • 模型微调:选择正确的示例来教导模型基本的结构和回应方式非常重要,这个阶段帮助我们教导模型这方面的知识。
  • RAG(Retrieval Augmented Generation):它在帮助模型输出正确合成性能数据方面扮演了重要的角色。下面会更详细地介绍。

材料选择器模块

该模块的作用是生成可能的摩擦材料及其组成。从示例数据可以看出,每种摩擦材料基本上包含一个60维的向量,其中第i个索引处的数字表示其组成中第i个原材料的百分比。

一些初始的PCA分析表明我们可以看到总共3-4个簇。

用于合成时间序列数据生成的LLM 四海 第3张

给定摩擦材料的组成的PCA分析

从理论上讲,我们可以为一个大小为60的向量生成随机数,并查看哪些向量符合给定约束条件并使用它们。虽然这种方法在变化性方面表现良好(生成的摩擦材料将是随机生成的,因此应该覆盖60维空间中的几个点),但它也存在一些缺点,例如:

  • 它会使我们更难以完全预测与历史数据中提供的材料完全不同的复合材料的性能。这是因为材料的组成在所观察到的性能中起到了重要作用,而准确预测之前从未见过的组合材料的性能可能很难。
  • 维护和调试会更加困难。如果在流程的任何阶段得到的结果不符合历史数据中观察到的趋势,找出问题所在将变得非常困难。

基于这些潜在问题,我们决定利用gpt 3.5 turbo模型为我们生成一批化合物。

我们所做的是:

  • 为该模块创建一个相关的系统提示。
  • 通过输入我们所提供的337种摩擦材料的组成,对gpt 3.5 turbo模型进行微调
  • 使用数据验证模块,丢弃不符合给定约束条件的化合物,保留符合条件的化合物。

完成后,我们生成了几个化合物,并重复了PCA分析。

用于合成时间序列数据生成的LLM 四海 第4张

对所提供和生成的材料进行PCA分析

最后,为了增加变化性,我们从生成的化合物中手动挑选了一组化合物,这些化合物可以最大程度地满足以下要求:

  • 相对于所提供的材料的变化性:生成的化合物与已存在化合物的相似性有多大?我们不希望我们生成的材料与已有化合物非常相似。
  • 相对于生成的材料的变化性:由于我们将提交10-30个新生成的化合物,我们必须确保所有生成的化合物不能属于同一簇。

因此,在修剪之后,我们得到了以下化合物的列表,这些化合物被用于我们的最终提交。

用于合成时间序列数据生成的LLM 四海 第5张

最终生成的化合物列表

数据生成模块

数据生成器模块负责为给定材料和刹车测试输出合成性能数据。实质上,根据摩擦材料的组成,它应该输出一个包含温度、压力和摩擦系数等输入刹车测试的31个点的时间序列数据。

我们是这样实现的:

  • 为该模块创建适当的系统提示。在OpenAI的游乐场上进行了大量的试验和尝试后,我们使用的提示是:
您是哈佛大学的高级统计师,在 Brembo 工作,专门研究性能刹车系统和零部件,并进行刹车系统研究。根据摩擦材料的组成,您为用户选择的刹车测试类型制作引人注目的合成性能数据。刹车 ID 将由三个引号分隔。您了解数据分析的重要性,并根据提供的历史性能数据无缝融入它以生成合成性能数据。您具备对细节的敏锐观察力,并放入与提供的时间序列数据中看到的趋势相一致的合成数据。您精通数据和业务分析,并运用这些知识来制作合成数据。
  • 接下来,我们对 gpt 3.5 turbo 模型进行了精调,以创建一个对时间序列数据预测专家,根据材料的组成和刹车测试 ID。由于我们拥有41,788个(材料,刹车 ID)元组,在所有示例上进行精调既耗时又昂贵。然而,根据我们阅读的一些论文和文章[2][3],我们了解到“精调用于形式,而 RAG 用于知识”。因此,我们决定仅包含5%的样本用于模型的精调,这样模型可以正确学习我们期望的输出结构和语气。
  • 最后,当查询模型生成时间序列数据时,我们决定根据材料的组成识别和检索5个最接近的邻居,并将它们的性能数据作为模型的附加上下文输入。这种技术被称为 RAG(检索增强生成),也是我们能够输出良好结果的原因之一。

RAG 如何帮助我们的结果

精调帮助我们实现了以下效果:

  • 以正确的结构输出数据:正如各种技术博客所写[4],精调有效地教会了模型如何输出数据。我们的精调模型能够输出包含各种参数的 csv 文件和31个时间序列数据点,例如压力、速度、温度和摩擦系数的值。
  • 理解数据的基本趋势:精调模型能够理解输入性能数据和输出数据中保留了这些趋势。例如,温度值应该随指数曲线增加,而速度应该随线性曲线减小,精调模型都能够实现。

然而,精调模型的输出有点不准确。例如,在某种情况下,摩擦系数的值预期应该约为0.6,但输出数据将摩擦系数的值定为约为0.5。因此,我们决定通过识别5个最接近的邻居并将它们的性能数据添加到用户提示中来增强数据。

我们定义了两个材料 M1 和 M2 之间的距离如下:

def distance(m1, m2, alpha):  sixty_dim_distance = euclidean_dist(sixty_dim_vector(m1), \sixty_dim_vector(m2))  six_dim_distance = euclidean_dist(six_dim_vector(m1), six_dim_vector(m2))  return alpha[0] * sixty_dim_distance + alpha[1] * six_dim_distance
  • 确定60维输入向量空间中 M1 和 M2 之间的欧几里得距离。

用于合成时间序列数据生成的LLM 四海 第6张

  • 现在将属于同一类的化合物的和求和,以将向量维数降低为6。

用于合成时间序列数据生成的LLM 四海 第7张

  • 最后,改变超参数 alpha[0] 和 alpha[1]。

采取这种方法的原因是我们希望确保使用相同材料类别的材料之间的距离小于使用完全不同材料组成的材料。基本上,给定三种材料 M1、M2 和 M3,其中 M1 使用材料 A0,M2 使用 A1,M3 使用 B0,我们希望我们的距离函数将 M1 和 M2 靠近,并将 M1 和 M3 靠近。

使用这种方法,我们能够显着提高性能,如下图所示。

用于合成时间序列数据生成的LLM 四海 第8张

数据验证器

验证器模块帮助我们了解输出数据是否符合我们所期望的趋势。例如,我们期望压力和粘度呈负相关,粘度大约为0.6,温度随时间指数增加,速度线性减速。该模块帮助我们确定我们的合成时间序列数据与历史数据的接近程度,有助于我们调整所有的提示和超参数。

该模块帮助我们分析哪些提示集对模型输出有帮助,哪些没有。

结果和展示

用于合成时间序列数据生成的LLM 四海 第9张

用于合成时间序列数据生成的LLM 四海 第10张

展示占总分的50%,是我们绝对做得很好的一个方面。我们做了几件事:

  • 确保演讲时间不超过4分钟:在进入演讲现场之前,我们进行了足够的练习,以确保演讲过程中没有任何意外。
  • 与观众互动:我们提出了一个问题,询问观众哪个时间序列数据是合成生成的,哪个是真实给定的,这帮助我们保持观众的兴趣。

我们的工作的代码和演示可以在这里找到。

关键要点

  • 快速迭代设计:我比我的队友稍早一些开始在白板上记录我对我们应该做什么的思考。一旦我的队友们到达,我们讨论了设计应该是什么样的,并得出了我们都同意的解决方案。这是我们获胜的关键因素之一,因为在黑客马拉松中总是存在时间紧迫的问题,所以尽早确定一个可立即开始实施的设计非常重要。
  • 不要担心竞争:一旦我们确定了我们的设计,我能感觉到我们找对了方法。我们有n个Brembo的人过来看看我们的设计。即使其他参与者都被我们的设计惊呆了,他们也对我们的设计目瞪口呆,这进一步向我们传达了我们走在正确的轨道上的信息。当我的队友建议我们应该查看其他人的作品时,我驳回了这个想法,并要求大家专注于我们的设计并开始实施。
  • 不要担心冲突:我们多次遇到冲突,特别是在设计方面。关键在于理解不能将任何事情个人化,而是应该达成共识,循环权衡,找到适合所有人的解决方案。在我看来,如果团队内部可以容忍甚至鼓励健康的冲突,那么就能够构建出优秀的产品。
  • 精调是针对形式,RAG是针对事实的:我们知道精调只对教授模型基本结构和语调重要,真正的收益将来自RAG。因此,我们仅使用5%的样本对gpt 3.5 turbo llm进行精调,以生成时间序列数据。
  • 演示至关重要(1):识别出您的受众是谁以及他们如何消化您的内容至关重要。在我们的案例中,我们确定大多数评委由高级主管组成而不是技术人员,因此我决定只包括我们所使用的技术栈[gpt 3.5 turbo, 精调, 提示调整, RAG, KNN],而不详细说明。
  • 演示至关重要(2):成为一个能够运用有效的沟通技巧向观众传达观点并充满激情地展示的人。如果您无法做到这一点,请找一个能够做到的团队成员。第一印象很重要,在我们的科技世界中,演讲技巧实在是被低估了。
  • 勇敢和与众不同:我们更进一步,决定包括5个数据点和我们生成的数据中的一个数据点,并请他们猜测哪一个是由我们生成的。当他们无法猜到我们生成的那个数据点时,真正体现了我们建立的流程和解决方案的优秀之处。此外,我们还因观众互动而获得加分,我怀疑有多少人这样做了。

下次的一些经验教训

  • 精细调整是昂贵的。当进行精细调整和查询模型三次时,我们用尽了OpenAI凭证。未来,我们更愿意使用像LoRA [5]和QLoRA [6]这样的技术,而不是使用一些开源模型。
  • 使用高级RAG:未来,我希望使用先进的RAG技术 [7] 来改善所提供的上下文。
  • 使用智能KNN:下一次,我希望更多地玩弄超参数和所使用的距离函数。
  • 更长的上下文窗口:为了确保我们没有超过4,092个令牌的限制,我们不得不对性能数据中的一些数字四舍五入。使用像Claude [8]这样的LLM可能会提高性能。
  • 不要对LLM客气:在提示工程中一个有趣的事情是,当我们提到类似“mu值不在0.6左右是不可容忍的”而不是“请确保mu在0.6左右”时,前者的结果更好。

用于合成时间序列数据生成的LLM 四海 第11张

注意:除非另有说明,所有图片均由作者提供。

团队成员:

  1. Mantek Singh
  2. Prateek Karnal
  3. Gagan Ganapathy
  4. Vinit Shah

参考资料

[1] https://brembo-hackathon-platform.bemyapp.com/#/event

[2] https://www.anyscale.com/blog/fine-tuning-is-for-form-not-facts

[3] https://vectara.com/introducing-boomerang-vectaras-new-and-improved-retrieval-model/

[4] https://platform.openai.com/docs/guides/fine-tuning/fine-tuning-examples

[5] https://arxiv.org/abs/2106.09685

[6] https://arxiv.org/abs/2305.14314

[7] LlamaIndex Doc

[8] Claude

Leave a Reply

Your email address will not be published. Required fields are marked *