大语言模型 (LLMs) 和新兴机器学习技术栈
编者按:过去,NLP 开发人员依赖于文本分类、命名实体识别和命名实体消歧等技术栈来优化 NLP 任务。然而,随着大语言模型(LLM)的快速发展,新的技术栈开始出现,以支持和加速这些大型语言模型的实现和应用。
让我们一起跟随 Langchain 的开发者,共同探讨 LLM 及 NLP 技术栈正在发生的变化,以及这一系列变化对开发者的意义。
以下是译文,Enjoy!
作者 | Harrison Chase & Brian Raymond
编译 | 岳扬
01 现有的 NLP 技术栈
直到最近,NLP 开发人员都一直依赖于传统优化 NLP 任务的技术栈,如文本分类(text classification)、命名实体识别(Named Entity Recognition)、命名实体消歧(Named Entity Disambiguation)。这种技术栈通常由数据预处理管道(data preprocessing pipeline)、机器学习管道(machine learning pipeline)和各种存储嵌入和结构化数据的数据库组成。
这种架构在生成大量的三元组(triples)、词嵌入(word embeddings)、句子嵌入(sentence embeddings)、Seq2Seq 模型的输出(sequence-to-sequence outputs)、语言模型概率值(language model probabilities)、注意力机制的权重(attention weights)等方面运作良好。开发人员通常会将这些结构化输出数据存储在 ElasticSearch、Postgres 或 Neo4j 数据库中,他们会将这些数据作为用户(或服务)可以查询的知识图谱来使用。
图 1. 现有的 NLP 技术栈
02 新兴的大语言模型(LLM)技术栈
自 2022 年秋季以来,一个旨在充分挖掘 LLM 潜力的新技术栈开始出现。与之前的技术栈相比,该技术栈着重于实现文本生成——与早期的机器学习模型相比,现代 LLM 最擅长这项任务。
这个新的技术栈由四个主要部分组成:数据预处理管道(data preprocessing pipeline)、嵌入终端(embeddings endpoint )+向量存储(vector store)、LLM 终端(LLM endpoints)和 LLM 编程框架(LLM programming framework) 。
旧的技术栈和新的技术栈之间有几个很大的不同之处:
首先,新的技术栈不那么依赖存储结构化数据的知识图谱(如三元组),因为诸如 ChatGPT、Claude 和 Flan T-5 等 LLM 比早期的 GPT 2 等模型编码了更多的信息。
第二,较新的技术栈使用现成的 LLM 终端(LLM endpoint)作为模型,而不是定制的 ML 管道(ML pipeline)(至少在刚开始时)。 这意味着今天的开发人员花费更少的时间来训练专门的信息提取模型(例如命名实体识别、关系提取和情感分析),并且可以在比较少的时间(和成本)内启动解决方案。
图 2. 新兴的大模型技术栈
2.1 数据预处理管道
新技术栈的第一个主要部分(数据预处理管道)与旧的技术栈没有太大变化。这一步包括用于摄取数据的连接器(例如 S3 bucket 和 CRM),数据变换层(data transformation layer)和下游连接器(如到向量数据库)。通常情况下,输入到 LLM 中最有价值的信息一般是最难处理的(PDF、PPTX、HTML 等),但也有一些容易处理的文件(例如.DOCX)包含用户不希望发送到推理终端的信息(如广告、法律模板等)。
从历史上看,这一步骤一般是由数据科学家为每个应用程序手工构建的。根据所涉及的数据类型,他们可能使用现成的 OCR 模型和几十到几百个自定义的正则表达式来转换和清理自然语言数据(natural language data),以便在下游机器学习管道(machine learning pipeline)中进行处理。对于非结构化数据,我们正在开发一款开源工具来加速这一预处理步骤,利用一系列计算机视觉文档分割模型(computer vision document segmentation models),以及 NLP 模型、Python 脚本和正则表达式来自动提取、清理和转换关键文档元素(例如标题、正文、页眉/页脚、列表等)。
我们(Langchain)目前正在开发一款跨时代的工具,以使开发人员能够轻松地将包含自然语言数据的大型和高度异构的语料库(例如,包含成千上万的 PDF、PPTX、聊天记录、抓取的 HTML 等的 S3 bucket)指向单个 API 终端,并接收干净的 JSON,为嵌入终端和存储在矢量数据库中做好准备。
2.2 嵌入终端和向量存储
嵌入终端(embeddings endpoint)和向量存储(vector store) 的使用代表了数据存储和访问方式的重大演变。以前的嵌入主要用于文档聚类等专有任务(niche task)。将文档及其嵌入存储在向量数据库中,使 LLM 终端的 critical engagement patterns 得以实现(下文将详细介绍)。这种架构的主要优势之一是能够直接存储原始嵌入,而不是将它们转换为结构化格式。 这意味着数据可以以其自然格式存储,从而实现更快的处理时间和更高效的数据检索。此外,这种方法可以更轻松地处理大型数据集,因为它可以减少在训练和推理过程中需要处理的数据量。
生成和存储文档嵌入(document embeddings)以及文档的 JSON 版本,为 LLM 与向量存储的对接创造了一个简单的机制。这对于需要实时处理的应用特别有用,比如聊天机器人(chatbots)。通过最大限度地减少数据检索所需的时间,系统可以更快地响应并提供更好的用户体验。使用嵌入(以及文档索引)和向量存储的另一个优点是,它可以更容易地实现迁移学习等技术,以实现更高效的微调和更好的性能。
2.3 LLM 终端
新技术栈的第三个核心组成是 LLM 终端。这是接收输入数据并产生 LLM 输出的终端。LLM 终端负责管理模型的资源,包括内存和计算,并提供可扩展和容错的接口,为下游应用程序提供 LLM 输出。
尽管大多数 LLM 供应商提供了几种不同类型的终端,本文我们用 LLM endpoints 来指代文本生成(text-generation)终端。如上所述,这是为许多新兴应用程序提供动力的新技术解锁(与更传统的 ML 管道相比)。这似乎有点简化了,但这些 LLM 终端公开的接口是文本字段作为输入,文本字段作为输出。
2.4 LLM 编程框架
新技术栈的最后一个主要内容是 LLM 编程框架。这些框架为使用语言模型构建应用程序提供了一组工具和抽象组件(abstractions)。 在 LangChain,这正是我们正在努力构建的框架。这些框架正在迅速发展,这使得它们很难被定义。尽管如此,我们还是在收集一组 abstractions,我们将在下面详细介绍。
这些框架的一个重要功能是编排所有不同的组件到目前为止,在新技术栈中,我们看到出现的组件类型有:LLM 提供商(在上一节中介绍)、嵌入模型、向量存储、文档加载器、其他外部工具(谷歌搜索等) 。在 LangChain 中,这些组件的组合方式被称为链。例如,我们有在向量存储上做 QA 的链,与 SQL 数据库交互的链,等等。
所有这些链都涉及在某个时候调用语言模型。调用语言模型时,主要挑战来自构建传递给语言模型的提示(prompt)。这些提示(prompt)通常是从其他组件中获取的信息加上基本提示模板的组合。LangChain 提供了一堆默认提示模板来开始使用这些链,同时构建了 LangChainHub[1]——一个供用户分享这些提示(prompt)的地方。
03 Open Questions
索引数据的最佳方式是什么?
现在很多人都在使用向量存储作为索引数据的主要方式,以便 LLM 能够与之交互。然而,这只是定义这些交互应该如何工作的第一步。现在有一个正在被积极探索的领域是研究将知识图谱与文档索引及其嵌入相结合可以在多大程度上提高 LLM 的推理质量。 此外,在可以预见的未来,大多数企业将继续需要高质量的结构化数据(通常在图数据库中)来与现有数据集和商业智能解决方案融合。 这意味着从中期来看,企业决策者实际上可能同时依赖向量数据库和图数据库来支持现有的应用程序和工作流。
微调(Fine Tuning)/再训练(Retraining)将会是什么样子?
现在像 LangChain 这样的 LLM 编程框架经常被用来将自有数据与预训练的 LLM 相结合,还有另一种方法是在自有数据上对 LLM 进行微调。微调有一些优点和缺点,从好的方面来说,它减少了对这种编排的大量需求。然而,从坏的方面来说,它的成本和时间花费都比较高,而且需要定期进行调整以保持更新。 看看这些权衡如何随着时间的推移而演变将会很有趣。
使用嵌入(embeddings)有哪些不同方式?
虽然目前主要的使用模式仍然是将数据保存在外部数据库中,而不是对其进行微调,但也有其他方法将其与 LLM 结合起来,而不是当前的方法(这些方法都涉及将数据传递到提示(prompt)中) 。令人高兴的是有 RETRO[2]这样的方法,它为文档获取嵌入(embeddings),然后直接处理这些嵌入(embeddings),而不是将文本作为提示(prompt)传递进来。虽然这些模型大多用于研究环境,但看看它们是否能成为主流,以及这对 LLM 编程框架有什么影响,将会很有意思。
04 总结 Conclusion
现在向这个新的 LLM 技术栈进行转变是一个令人兴奋的过程,它将使开发人员能够构建和部署更强大的 NLP 应用程序。新技术栈比旧技术栈更高效、更可扩展、更易于使用,而且它释放了 LLM 的全部潜力。随着开发人员继续寻找利用 LLM 力量的新方法,我们可以期待在未来几个月和几年内看到这一领域的更多创新。
END
参考资料
1.https://github.com/hwchase17/langchain-hub
2.https://arxiv.org/abs/2112.04426
本文经原作者授权,由 Baihai IDP 编译。如需转载译文,请联系获取授权。
原文链接:https://medium.com/@brian_90925/llms-and-the-emerging-ml-tech-stack-6fa66ee4561a
版权声明: 本文为 InfoQ 作者【Baihai IDP】的原创文章。
原文链接:【http://xie.infoq.cn/article/6eeff212d53c5966658ed4758】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论