Feature Stores and LLMs

特征存储和LLM

5 分钟阅读

编者按:非常感谢 Willem Pienaar (Feast), Mike Del Balso (Tecton), 和 Simba Khadder (FeatureForm) 为本文提供的评论和帮助。

LLM 代表了人工智能的新范式。对于传统机器学习中有用的工具和服务,有多少仍然与此相关,这是一个很大的开放性问题。一方面,这种新范式存在非常真实的新用例和需求。另一方面,现有的工具和服务拥有多年的经验、开发和功能强化。这些工具在新范式中仍然有用吗?

特征存储概述

一个特别有趣的案例研究是特征存储。在传统机器学习中,模型的输入不是原始文本或图像,而是一系列与手头数据点相关的工程化“特征”。特征存储是一个旨在集中和向模型提供 ML 特征的系统。通常有两个好处

  1. 一种跟踪在特定时间点存在的特征的方法,用于模型训练
  2. 一个在进行推理时使用的实时特征管道

这些如何应用于 LLM 应用呢?

第一点似乎不太相关。大多数人都在使用来自 OpenAI、Anthropic 等的预训练 LLM,而不是从头开始训练自己的模型。

另一方面,我们认为第二个好处(一个在进行推理时使用的实时特征管道)仍然非常相关。我们认为,实时特征管道(由特征存储启用)可用于实现 LLM 应用的实时个性化。尽管我们目前还没有看到很多这种情况,但我们相信随着应用程序变得更加高级,这将变得更加流行。

LLM 就像人一样,是一个“推理引擎”。如果您可以随时访问有关您的用户或业务的最新数据,那么许多任务的推理将变得更加容易。例如,如果您要求某人估计从 a 地到 b 地的驾驶时间,如果他们也知道 a 地和 b 地之间有哪些路段以及这些路段当前的交通状况,他们可能会做出更好的决定。

这种添加上下文或数据丰富的方式长期以来在传统 ML 中被广泛使用。一些模型有数千个特征。尽管 LLM 使仅使用用户 prompt 就可以解决某些 ML 任务,但只有在具有大量上下文数据的情况下,才能以具有竞争力的准确率完成大量任务。

Prompt 概述

语言模型应用在很大程度上由其 prompt 的构建方式定义。因此,在尝试思考特征存储如何影响语言模型应用之前,我们应该尝试了解构建 prompt 的不同方式,然后思考特征存储如何影响 prompt 构建。以下可能是三种最常见的 prompt 构建类型,从最不复杂到最复杂排序。

#1:硬编码的 prompt 字符串

这是指传递到语言模型的整个 prompt 由应用程序硬编码。没有对 prompt 进行任何自定义,因此输出中的所有变化都来自语言模型。这是一种非常简单的 prompt 策略,老实说,它可能太简单了,很少使用。

#2:整合用户输入

下一步是将用户输入整合到 prompt 字符串中。这意味着拥有一个 prompt 模板,并使用用户在运行时输入的变量填充变量。此类应用程序的一个示例可能是诗歌生成应用程序。此应用程序可以要求用户输入一个“主题”输入,然后格式化一个类似“写一首关于 {主题} 的诗”的 prompt,然后再将其传递给语言模型。这可以使用多个变量完成,但重要的部分是它在运行时接收用户输入并使用这些变量格式化字符串。

#3:整合基本的实时系统数据

通常,将基本的实时系统数据包含到 prompt 中会很有帮助。最常见的例子是包含当前日期和时间。这不是您想要硬编码的东西(因为它不断变化)。这有助于让语言模型了解系统/世界的当前状态。

#4:整合基于用户输入获取的外部数据

更进一步是使用用户提供的输入来获取更多信息以放入 prompt 中。所有问答应用程序都是很好的例子。这些应用程序通常使用如下 prompt 模板

Answer the following question: {question}
Only use the following information to answer:
{context}
Answer:

此 prompt 期望有两个变量:“问题”和“上下文”。问题通常在运行时由用户提供,而上下文是获取的(通常通过检索系统)与用户输入相关的数据。

这已经允许某种类型的“个性化”——根据所使用的检索器,该上下文可用于“个性化”应用程序,使其可以响应关于特定类型数据的问题。

特征存储 <> Prompt

这些是我们今天看到的主要四种 prompt 构建策略。我们认为特征存储可以增强 prompt 构建——通过允许包含实时的、复杂的且通常是基于用户的信息。

这是结合了现有 prompt 构建方法的关键思想。当我们插入当前日期和时间之类的东西时,我们正在将对世界当前状态的了解注入到 prompt 中——但它是非常简单和通用的知识。当我们插入基于用户输入获取的外部数据时,我们正在整合更多个性化数据——但这主要仅基于用户输入。

为了了解这如何发挥作用,我们可以访问 feast GitHub 存储库——最流行的开源特征存储之一。让我们看一下 README 上的示例。

在此示例中,我们正在获取实时的、用户特定的信息。在传统的 ML 模型中,此信息将作为特征值输入到模型中,但现在我们可以将其输入到 prompt 中!

为了展示如何做到这一点,我们设置了一个示例 notebook,展示如何将特征存储连接到 prompt 模板。将其放入 prompt 模板中允许我们很好地打包该逻辑并通过链传递它。当我们然后调用该链时,可以经由 feast 获取实时信息,并用于构建 prompt,然后将其传递到语言模型。

在此处查看此示例 notebook:这里。我们为各种特征存储执行此操作:feast、TectonFeatureForm。以下是使用 Tecton 执行此操作的代码示例——正如您所见——它非常简单!

这显然是一个简单的例子,但我们相信它突显了这种方法的强大之处,并暗示了未来这种情况将更加普遍。许多语言模型应用程序仍在努力起步,但随着时间的推移,我们相信实时、用户级的信息将用于构建 prompt 并提供卓越的、个性化的最终用户体验。潜在的应用示例包括具有实时上下文的聊天机器人、具有个性化上下文的营销内容以及根据最近的用户会话历史记录给出的推荐。随着我们走向这个世界,我们相信现有的特征存储已准备好帮助实现这一目标。