大语言模型兵马未动,数据准备粮草先行
从OpenAI正式发布ChatGPT开始,大型语言模型(LLM)就变得风靡一时。对业界和吃瓜群众来说,这种技术最大的吸引力来自于理解、解释和生成人类语言的能力,毕竟这曾被认为是人类独有的技能。类似CoPilot这样的工具正在迅速融入开发者的日常工作,而由ChatGPT驱动的应用程序也开始变得日益主流。
大语言模型的流行,另一方面也要归功于普通开发者也能轻松用上这样的技术。随着大量开源模型陆续涌现,每天都有新的科技初创公司提出基于大语言模型的解决方案。
然而,就算到了AI时代,数据依然是一种“新的石油”。在机器学习领域,数据充当了训练、测试和验证模型的原材料。高质量、多样化、有代表性的数据对于创建准确、可靠和健壮的大语言模型至关重要。
我们在构建自己的大语言模型时可能会面临挑战,特别是在收集和存储数据这方面。大量非结构化数据如何处理,以及该如何存储和管理对数据的访问,这些可能只是各种挑战中的一小部分。
本文将探讨与数据管理有关的挑战,借此让读者清楚了解数据在大语言模型中的关键作用,并在此基础上,为读者在自己的大语言模型项目中有效管理数据提供所需知识。
首先,一起看看有关大语言模型的基础知识吧。
大语言模型的工作原理以及现有模型的选择
从较高层次来看,大语言模型的工作原理很简单:将单词(或句子)转换为一种称为嵌入(Embedding)的数值表达。这些“嵌入”捕获了单词间的语义含义和关系,模型就是借此理解语言的。例如,大语言模型会学习到“狗”和“小狗”这两个词是相关的,并且会将它们放在数值空间中更接近的位置,而“树”这个词则会较远。
大语言模型最关键的部分是神经网络,这是一类受到人脑功能启发创建出的计算模型。神经网络可以从训练数据中学习这些嵌入及其相互之间的关系。与大多数机器学习应用一样,大语言模型需要大量数据。通常情况下,对于模型训练而言,数据量越大、质量越高,模型的准确性就越高,这意味着我们需要一种良好的方法来管理大语言模型用到的数据。
权衡现有模型时需要考虑的因素
幸运的是,对于开发者而言,目前有很多开源的大语言模型可供选择,其中不乏一些流行的,甚至可商用的,例如Databricks提供的Dolly、Meta提供的Open LLaMA等。
面对如此广泛的选择,想要找到合适的开源大语言模型可能就有些棘手了。我们必须了解大语言模型所需的计算和内存资源。模型的大小(例如输入参数为30亿与70亿之间的模型)会影响运行和使用模型所需的资源量。因此必须考虑选择能与自己能力相匹配的模型。例如,一些DLite模型专门设计为能在笔记本电脑上运行,而不需要高成本的云资源。
在研究每个大语言模型时,一定要注意该模型是如何训练的,以及通常适用于什么样的任务。这些区别也会影响我们的选择。此时的规划工作包括:筛选开源模型,了解每个模型的最佳适用场景,并预测自己将需要为每个模型使用的资源。
根据需要大语言模型的应用程序或环境,我们可以选择从现有大语言模型开始,也可以选择从零开始训练一个自己的大语言模型。对于现成的大语言模型,我们可以直接使用它,或者也可以使用额外的数据对模型进行微调,使其更符合自己所要处理的任务特点。
为了根据需求选择最佳方法,还要求我们对用于训练大语言模型的数据有深入了解。
大语言模型中使用的数据类型
当涉及到大语言模型的训练时,通常使用的数据是文本数据。然而,这些文本数据的性质可能有很大差异,了解可能遇到的不同类型数据是很重要的。一般来说,大语言模型用到的数据可分为两种类型:半结构化数据和非结构化数据。结构化数据(即以表格数据集形式表示的数据)通常不太可能用在大语言模型的训练工作中。
· 半结构化数据
半结构化数据会以某种预定义的方式组织,并遵循某种模型。这种组织方式使得数据的搜索和查询变得相当简单直接。在大语言模型领域,半结构化数据的类型有很多,例如文本语料库,其中的每一项都与某些标签或元数据相关联。半结构化数据的其他例子包括:
新闻文章,每篇文章都与一个类别(如体育、政治或技术)相关联。
用户评论,每条评论都与评分和产品信息相关联。
社交媒体帖子,每个帖子都与发布者、发布时间和其他元数据相关联。
在这些情况下,大语言模型可能会根据新闻文章预测类别,根据评论文本预测评分,或根据内容预测社交媒体帖子蕴含的情绪。
· 非结构化数据
另一方面,非结构化数据缺乏预定义的组织或模型。这些数据通常以文本为主,并且可能包含日期、数字和事实,这使得它更加复杂,难以处理和分析。在大语言模型领域,非结构化数据非常普遍,例如:
书籍、文章和其他长篇内容
从采访或播客中提取的文本记录
网页或文档
由于缺乏明确的标签或组织标记,非结构化数据对大语言模型的训练更具挑战性。然而,这类数据也可以产生更通用的模型。例如,用大量书籍语料库训练出的模型可能会学会生成逼真的散文,就像GPT-3那样。
可想而知,数据是大语言模型的核心。但这些数据如何从原始状态转换为大语言模型可以使用的格式?让我们将焦点转移到其中涉及的关键过程上。
大语言模型的数据管道和数据摄入
用于获取和处理大语言模型数据的基本构件在于数据管道(Data pipeline)和数据摄入(Data ingestion)的概念。
1.数据管道是什么?
数据管道在原始的非结构化数据与完全训练好的大语言模型之间形成了一个通道,借此确保数据被正确地收集、处理和准备,使其能够在大语言模型构建过程的训练和验证阶段顺利使用。
数据管道是一组流程,可将数据从源头移动到一个可以存储和分析的目的地。通常情况下,其中包括:
数据提取:从源头提取数据,这个源头可以是数据库、数据仓库,甚至外部API。
数据转换:原始数据需要经过清洗和转换,以便转换为适合分析的格式。转换包括处理缺失值、纠正不一致的数据、转换数据类型或对类别变量进行独热编码(One-hot encoding)。
数据加载:转换后的数据被加载到存储系统(例如数据库或数据仓库)。这些数据随后可以立即用于机器学习模型中。
当谈论数据摄入时,我们指的是这些管道过程的前端,即数据的获取和为后续使用所进行的准备。
2.大语言模型的数据管道是什么样子的?
虽然大语言模型的数据管道在一般情况下可能与数据团队使用的大多数管道有所相似,但大语言模型为管理的数据提出了一些独特的挑战。例如:
数据提取:大语言模型的数据提取通常更复杂、多样化且计算密集。由于数据来源可能是网站、书籍、文本记录或社交媒体,每个来源都有自己的细微差别,需要独特的方法。
数据转换:由于大语言模型的数据来源范围非常广泛,每种类型数据的每个转换步骤都将不同,需要独特的逻辑将数据处理成大语言模型可以用于训练的更标准化的格式。
数据加载:在许多情况下,数据加载的最后一步可能需要使用非常规的数据存储技术。非结构化文本数据可能需要使用NoSQL数据库,而不像很多数据管道那样使用关系型数据存储。
大语言模型的数据转换过程包括了与自然语言处理(NLP)中类似的技术:
词元化:将文本分解为单个单词或词元(Token)。
停用词去除:消除常用词如“and”、“the”和“is”。然而,根据大语言模型所训练任务的不同,有时候这类停用词可能会被保留,这可能是为了保留重要的句法和语义信息。
词形还原:将单词减少到其基本形式或词根形式。
可想而知,将所有这些步骤结合起来,从各种来源摄取海量数据,可能会导致一个非常复杂且庞大的数据管道。为了顺利完成任务,我们需要适合的工具和资源。
数据摄入的常见工具
数据工程领域有几个极其流行的工具可以帮助我们处理构成数据管道的一部分复杂数据摄入过程。如果正在构建自己的大语言模型,我们的大部分开发时间将用于收集、清理和存储用于训练的数据。那些能够帮助我们管理大语言模型数据的工具可以按以下方式加以分类:
管道编排:用于监视和管理数据管道中过程的平台。
计算:处理大规模数据所用的资源。
存储:用于存储有效大语言模型训练所需的大量数据的数据库。
让我们详细看看这三类工具。
1.管道编排
Apache Airflow是一个流行的开源平台,可用于以编程方式编写、调度和监视数据工作流。它可以帮助我们使用基于Python的编程接口创建复杂数据管道,这种接口不仅功能丰富,而且易于使用。Airflow中的任务可以组织成有向无环图(DAG),其中每个节点代表一个任务,边表示任务之间的依赖关系。
Airflow已被广泛用于数据提取、转换和加载操作,它已经成为数据摄入过程中的宝贵工具。Linode Marketplace提供了Apache Airflow,用户可以借此通过简单的设置快速上手使用。
2.计算
除了使用诸如Airflow之类的工具进行管道管理,我们还需要能够可靠地运行大规模处理所需的计算资源。随着摄入大量文本数据并从许多来源进行下游处理,我们的任务将需要能够根据需求扩展计算资源,最好是以水平的方式进行扩展。
Kubernetes是一种流行的可扩展计算选项。Kubernetes带来了灵活性,能与许多工具(包括Airflow)很好地集成。通过利用托管的Kubernetes,我们可以快速、简单地启动灵活的计算资源。
3.存储
数据库对于数据摄入过程至关重要,它可充当经过清理和转换后摄入数据的主要目的地。我们可以采用各种类型的数据库。具体使用哪种类型,这取决于数据的性质和用例的具体要求:
关系型数据库使用表格结构来存储和表示数据。它适用于具有清晰关系和数据完整性至关重要的数据。尽管我们的大语言模型将依赖于非结构化数据,但像PostgreSQL这样的关系型数据库也可以处理非结构化数据类型。
NoSQL数据库:NoSQL数据库包括面向文档的数据库,它不使用表格结构来存储数据,适用于处理大量非结构化数据,可提供高性能、高可用性和易扩展性。
作为大语言模型数据存储的替代方案,一些工程师更喜欢使用分布式文件系统,例如AWS S3或Hadoop。虽然分布式文件系统是存储大量非结构化数据的好选择,但需要额外的工作来组织和管理大型数据集。
在Linode Marketplace提供的各种存储选项中,我们可以看到托管的PostgreSQL和托管的MySQL。这两个选项都易于设置,可与大语言模型数据管道连接。
虽然小型大语言模型可能会使用较少的数据进行训练,并且可以使用较小的数据库(如单个PostgreSQL节点),但更重的用例将需要处理大量数据。在这些情况下,我们可能需要类似PostgreSQL Cluster的东西来支持将要处理的数据量,并为大语言模型管理数据以及可靠地提供数据服务。
在选择用于管理大语言模型数据的数据库时,别忘了考虑数据的性质和具体要求。我们摄入的数据类型将决定哪种数据库最适合自己的需求。当然,实际用例要求(如性能、可用性和可扩展性)也是重要的考虑因素。
有效和准确地摄入数据对大语言模型的成功至关重要。通过正确使用工具,我们可以为自己的管道构建可靠、高效的数据摄入过程,处理大量数据,并确保大语言模型具备学习和提供准确结果所需的一切。
总结
大语言模型的迅猛崛起在技术领域开辟了新的大门。这项技术对开发者来说易于访问,但如何管理大语言模型的数据以及利用数据来训练新的大语言模型或调整现有大语言模型,将决定开发者能否在长期范围内持续获得成功。