什么是 ChatGPT?
首先,ChatGPT 太棒了!它可以帮助你更高效地工作——从总结一万字的文档到列出竞争产品的区别,以及许多其他任务。
ChatGPT 是基于 Transformer 架构最著名的大型语言模型 (LLM)。但你可能也听说过其他大型语言模型,包括 BERT(来自 Transformer 的双向编码器表示)、Bard(对话应用语言模型)或 LLaMA(Meta AI 大型语言模型)。大型语言模型具有多层神经网络,这些神经网络协同工作以分析文本并预测输出。它们接受左到右或双向 Transformer 的训练,以最大化上下文中后续和先前单词的概率,从而找出句子中接下来可能出现的内容。大型语言模型还具有注意力机制,使它们能够选择性地关注文本的某些部分,以识别最相关的部分。例如,Rex 很可爱,它是一只猫。“它”在这个句子中指的是“猫”和“Rex”。
理解大型语言模型 (LLM)
大型语言模型通常通过参数数量进行比较——参数越多越好。参数数量是衡量模型大小和复杂性的指标。模型的参数越多,它可以处理、学习和生成的数据就越多。然而,参数越多也意味着对计算和内存资源的需求越大。参数在训练过程中通过使用试图最小化预测输出和实际输出之间误差或损失的优化算法进行学习或更新。通过调整参数,模型可以提高其在给定任务或领域上的性能和准确性。
训练大型语言模型成本高昂
现代大型语言模型拥有数十亿个参数,这些参数在数万亿个 token 上进行训练,成本高达数百万美元。训练大型语言模型包括:识别数据集、确保数据集足够大以使其能够像人类一样执行功能、确定网络层配置、使用监督学习来学习数据集中的信息,最后进行微调。不用说,在特定领域的数据上重新训练大型语言模型也非常昂贵。
GPT 模型的工作原理是什么?
生成式预训练 Transformer (GPT) 模型是一种使用 Transformer 架构从大量文本数据中学习的神经网络。该模型有两个主要组成部分:编码器和解码器。编码器处理输入文本并将其转换为一系列称为嵌入的向量,这些向量以数字表示每个单词/子词的含义和上下文。然而,解码器通过根据嵌入和之前的单词预测序列中的下一个单词来生成输出文本。
GPT 模型使用一种称为“注意力”的技术来关注输入和输出文本中最相关的部分,并捕获单词之间的远程依赖关系和关系。该模型通过使用大量的文本语料库作为输入和输出,并最小化预测词和实际词之间的差异来进行训练。然后,它可以通过使用更小、更专业的数据集来微调或适应特定任务或领域。
Token
Token 是大型语言模型用来处理和生成语言的文本或代码的基本单元。根据所选择的标记化方法或方案,Token 可以是字符、单词、子词或文本或代码的其他片段。它们被赋予数值或标识符,并排列成序列或向量,然后被输入到模型中或从模型输出。
例如,句子“一只快速棕色的狐狸跳过一只懒惰的狗”可以被标记化为以下 Token:“一只”、“快速”、“棕色”、“狐狸”、“跳过”、“一只”、“懒惰”和“狗”。
嵌入
嵌入 是向量或数字数组,表示模型处理和生成的 token 的含义和上下文。它们源自模型的参数,并用于编码和解码输入和输出文本。嵌入帮助模型理解 token 之间的语义和句法关系,并生成更相关和连贯的文本。它们是 GPT 基模型使用的 Transformer 架构的重要组成部分。它们的大小和维度也可能不同,具体取决于模型和任务。
至少,预训练的 LLM 包含数万个单词、token 和术语的嵌入。例如,ChatGPT-3 的词汇量为 14,735,746 个单词,维度为 1,536。以下是来自名为 distilbert-based-uncased 的小型模型。尽管这是一个小型模型,但它的大小仍然超过 100 MB。
Transformer
Transformer 模型是一种神经网络,它通过跟踪顺序数据(如本句中的单词)中的关系来学习上下文或含义。最简单的形式是,Transformer 将接收一个输入并预测一个输出。在 Transformer 中,有一个编码器堆栈和一个解码器堆栈。
让我们深入研究编码器块和解码器块。在编码器块中,有两个重要的组件:自注意力神经网络和前馈神经网络。
自注意力层至关重要,因为它从与当前词相关的先前单词中构建了对当前词的“理解”。例如,“它”指的是“鸡”在“鸡过马路是因为它想知道笑话是什么”这句话中。
编码器中的另一个重要层是前馈神经网络 (FFNN)。FFNN 预测当前 token 之后出现的单词。
转向解码器方面,编码器-解码器注意力层脱颖而出。编码器-解码器层关注输入句子的相关部分,同时考虑其下方的层和编码器堆栈的输出。
综合起来
我们将获取输入,对输入进行标记化,并在将其转换为每个 token 的嵌入之前获取 token 的 token ID。从那里,我们将嵌入传递到 Transformer 块。在这个过程结束时,Transformer 将预测一系列输出 token。下图详细显示了 Transformer 模型。
解码器堆栈输出一个浮点数向量。线性层将解码器堆栈产生的浮点数向量投影到一个更大的向量,称为 logits 向量。如果模型具有 10,000 个单词的词汇量,则线性层将解码器输出映射到一个 10,000 单元的向量。Softmax 层将 logits 向量中的分数转换为概率——所有概率都为正数——并加起来等于 100%。选择概率最高的单元,并将其关联的单词作为此步骤的输出。
ChatGPT 和大型语言模型的挑战
- 它们在没有领域知识且可能过时的数据上进行训练。例如,幻觉是指将不正确的答案当作正确答案给出,这在大型语言模型中很常见。
- 模型本身不具备应用或从输入中提取过滤器的自然能力。例如,时间、日期和地理位置过滤器。
- 对文档用户可以查看哪些文档没有访问控制。
- 存在严重的隐私和敏感数据控制问题。
- 使用您自己的数据进行训练并保持最新状态速度慢且非常昂贵。
- ChatGPT或其他大型语言模型的响应可能很慢。通常,Elasticsearch 的查询响应时间为毫秒级。对于大型语言模型,获取响应可能需要几秒钟。但这在意料之中,因为大型语言模型正在执行复杂的任务。此外,ChatGPT 按处理的标记数量收费。如果您有高速度的工作负载,例如电商网站的黑色星期五商品搜索,它会很快变得非常昂贵。更不用说,它可能无法满足 <10ms 的查询 SLA。
- 很难(如果不是不可能的话)解释 ChatGPT 或其他大型语言模型如何得出查询结果。除了幻觉之外,ChatGPT 和其他大型语言模型可能会产生不相关的响应,很难确定模型是如何产生错误答案的。
Elasticsearch 与大型语言模型的集成
除了通过 kNN 和 aNN 原生支持向量搜索外(kNN 是所有文档的精确最近邻距离,aNN 是近似值),Elasticsearch 还支持词袋和 BM25 信息检索方法。对于 aNN,Elasticsearch 使用 HNSW(分层可导航小世界)算法来计算近似最近邻距离。Elastic 可以减轻大型语言模型的许多问题,同时让我们的用户能够利用 ChatGPT 和其他大型语言模型可以提供的所有优点。
Elasticsearch 可用作向量数据库,并对文本和向量数据执行混合检索。Elasticsearch 与大型语言模型一起使用时,可以提供明显优势的模式有三种。
- 为您的数据提供上下文并与 ChatGPT 或其他大型语言模型集成
- 使您能够自带模型(任何第三方模型)
- 使用内置的 Elastic Learned Sparse Encoder 模型
方法 1:为您的数据提供上下文并与 ChatGPT 或其他大型语言模型集成
下图显示了如何在将大型语言模型与生成式 AI 集成时将其与您的数据分开。
客户可以自带由大型语言模型生成的嵌入,并将他们的数据及其嵌入一起导入 Elasticsearch。然后,客户可以将 Elasticsearch 中存储的自身数据的相似性搜索结果(用户问题的上下文)提供给 ChatGPT 或其他大型语言模型,以构建基于自然语言的答案。
此外,新发布的倒排秩融合 (RRF) 允许用户执行混合搜索,这可以组合和排序搜索结果。例如,BM25 方法可以过滤相关文档以及向量搜索以提供最佳文档。使用 RRF,客户可以通过 Elasticsearch 本身实现最佳搜索结果,而不是通过他们自己的应用程序,这大大降低了其应用程序的复杂性和维护成本。
方法 2:自带模型
最近发布的Elasticsearch 相关性引擎
TM(ESRETM) 提供了自带大型语言模型的功能。此功能通过机器学习已经可用了一段时间。Elasticsearch 机器学习团队一直在为集成基于转换器的模型搭建基础设施。从8.8 版本开始,您可以像在 Elasticsearch 中通常一样通过搜索 API 导入和查询数据。最重要的是,您可以使用具有 RRF 的混合搜索方法,这可以提供更好的相关性。由于模型是在 Elasticsearch 中管理和集成的,因此它降低了操作复杂性,同时实现了最相关的搜索结果。
这种方法需要用户知道什么模型适合他们的用例,以及与 Elastic 建立商业关系。
方法 3:使用内置的稀疏编码器模型
Elastic Learned Sparse Encoder 是 Elastic 的开箱即用的语言模型,其性能优于 SPLADE(稀疏词法和扩展模型),SPLADE 本身就是一个最先进的模型。Elastic Learned Sparse Encoder解决了词汇不匹配问题,即文档可能与查询相关,但不包含查询中出现的任何术语。不匹配的一个例子是,如果我们问“美国公司如何协助应对新冠肺炎疫情”,那么呼吸机制造商可能不会出现在查询结果中。
Elastic Learned Sparse Encoder可以通过 text_expansion 查询像其他搜索端点一样访问。Elastic Learned Sparse Encoder 使我们的用户能够一键开始最先进的生成式 AI 搜索并立即获得结果。Elastic Learned Sparse Encoder 也是 Elastic 的商业功能。
以下是一些使用 BEIR 基准测试的结果。我们使用了几个标准数据集(横轴)并应用了不同的检索隐喻(纵轴)。如您所见,使用 RRF 的 BM25 和我们的 Learned Sparse Encoder 的组合返回了最佳相关性分数。与单独考虑时相比,这些使用 RRF 的分数优于 SPLADE 模型和我们的 Learned Sparse Encoder 模型。我们在我们的博客中发布了更多详细信息。
术语和定义
神经网络 (NN)
每个节点都是一个神经元。可以将每个单独的节点视为其自身的线性回归模型,由输入数据、权重、偏差(或阈值)和输出组成。
数学表示可能如下所示:
∑wixi + bias = w1x1 + w2x2 + w3x3 + bias
一旦确定输入层,就会分配权重 (w)。这些权重有助于确定任何给定变量的重要性,较大的权重对输出的贡献比其他输入更大。然后将所有输入乘以其各自的权重,然后求和。之后,输出将通过激活函数,该函数确定输出。如果该输出超过给定的阈值,则激活节点并将数据传递到网络中的下一层。这导致一个节点的输出成为下一个节点的输入。这个从一层到下一层传递数据的过程是一个前馈网络。这只是 NN 的一种类型。
大型语言模型参数
权重是定义模型中不同层之间神经元连接强度的数值。偏差是添加到加权输入和之前再通过激活函数的附加数值。
SPLADE
SPLADE 是一个后期交互模型。SPLADE 模型背后的思想是,使用预训练的语言模型(如 BERT)可以识别单词之间的连接,并利用该知识来增强稀疏向量嵌入。当您拥有涵盖广泛主题的文档(例如关于二战电影的维基百科文章——它包含情节、演员、历史和发行电影的制片厂)时,您会使用它。
仅使用嵌入检索技术,文档与查询的相关性成为一个问题,因为文档可以投影到大量的维度上,使其与任何查询都不接近。SPLADE 通过将所有标记级概率分布组合成单个分布来解决此问题,该分布告诉我们词汇表中每个标记与我们的输入句子的相关性,类似于 BM25 方法。Elastic Learned Sparse Encoder 是 SPLADE 模型的 Elastic 版本。
RRF
RRF 是一种混合搜索查询,它将具有不同相关指标的多个搜索结果集标准化并组合成单个结果集。根据我们自己的测试,结合 RRF(BM25 + Elastic Learned Sparse Encoder)可以产生最佳搜索相关性。
总结
通过结合 ChatGPT 等技术的创造能力和专有数据的业务上下文,我们可以真正改变客户、员工和组织的搜索方式。
检索增强生成 (RAG)弥合了为生成式 AI 提供动力的大型语言模型和私有数据源之间的差距。基于上下文的检索可以解决大型语言模型的众所周知的局限性,使您能够构建引人入胜的搜索体验。
本文中描述的任何功能或功能的发布和时间安排完全由 Elastic 决定。任何当前不可用的功能或功能可能无法按时或根本无法交付。
在这篇博文中,我们可能使用了或提到了第三方生成式 AI 工具,这些工具由其各自的所有者拥有和运营。Elastic 对第三方工具没有任何控制权,我们对其内容、操作或使用,以及您使用此类工具可能造成的任何损失或损害不承担任何责任。使用 AI 工具处理个人、敏感或机密信息时,请务必谨慎。您提交的任何数据都可能用于 AI 培训或其他目的。我们不能保证您提供的信息将被安全或保密地保存。在使用任何生成式 AI 工具之前,您应该熟悉其隐私实践和使用条款。
Elastic、Elasticsearch、ESRE、Elasticsearch Relevance Engine 和相关标记是 Elasticsearch N.V. 在美国和其他国家/地区的商标、徽标或注册商标。所有其他公司和产品名称是其各自所有者的商标、徽标或注册商标。
Elasticsearch 与行业领先的 Gen AI 工具和提供商具有原生集成。查看我们关于超越 RAG 基础知识的网络研讨会Beyond RAG Basics,或构建可用于生产环境的应用程序Elastic Vector Database。