作者:Sherry Ger
什么是 ChatGPT?
首先,ChatGPT 太棒了! 它可以帮助你更高效地工作 —— 从总结 10,000 字的文档到提供竞争产品之间的差异列表,以及许多其他任务。
ChatGPT 是最著名的基于 Transformer 架构的大型语言模型 (LLM)。 但你可能听说过其他 LLM,包括 BERT(来自 Transformer 的双向编码器表示)、Bard(对话应用程序语言模型)或 LLaMA(LLM 元人工智能)。 LLMs 拥有多层神经网络,它们协同工作来分析文本和预测输出。 他们接受了从左到右或双向转换器的训练,可以最大限度地提高在上下文中跟随和前面单词的概率,以找出句子中接下来可能出现的内容。 LLMs 还拥有一种注意力(attention)机制,使他们能够有选择地关注文本的某些部分,以便识别最相关的部分。 例如,雷克斯很可爱,他是一只猫。 在这句话中,“他” 指的是 “猫” 和 “雷克斯”。
更多就是更多
大型语言模型通常通过参数数量进行比较 —— 越大越好。 参数的数量是模型大小和复杂性的度量。 模型拥有的参数越多,它可以处理、学习和生成的数据就越多。 然而,拥有更多的参数也意味着需要更多的计算和内存资源。 在训练过程中,通过使用优化算法来学习或更新参数,该算法试图最小化预测输出与实际输出之间的误差或损失。 通过调整参数,模型可以提高其在给定任务或领域的性能和准确性。
LLM 的培训费用昂贵
现代 LLMs 拥有数十亿个参数,这些参数是在数万亿个代币上进行训练的,成本高达数百万美元。 训练 LLM 包括识别数据集,确保数据集足够大以使其能够像人类一样执行功能,确定网络层配置,使用监督学习来学习数据集中的信息,最后进行微调。 不用说,对特定领域数据的 LLMs 进行再培训也非常昂贵。
GPT 模型如何运作?
生成式预训练 Transformer (GPT) 模型是一种神经网络,它使用 Transformer 架构从大量文本数据中学习。 该模型有两个主要组件:编码器和解码器。 编码器处理输入文本并将其转换为称为嵌入的向量序列,这些向量表示数字中每个单词/子词的含义和上下文。 然而,解码器通过基于嵌入和先前的单词预测序列中的下一个单词来生成输出文本。
GPT 模型使用一种称为 “注意力(attention)” 的技术来关注输入和输出文本中最相关的部分,并捕获单词之间的远程依赖性和关系。 该模型的训练方法是使用大量文本语料库作为输入和输出,并最小化预测单词和实际单词之间的差异。 然后可以通过使用更小、更专业的数据集对其进行微调或适应特定的任务或领域。
标记(token)
标记是 LLM 用来处理和生成语言的文本或代码的基本单位。 标记可以是字符、单词、子词或文本或代码的其他片段,具体取决于所选的标记化方法或方案。 它们被分配数值或标识符,并按序列或向量排列,然后输入模型或从模型输出。 标记化是将输入和输出文本分割成可由 LLM 模型处理的较小单元的过程。
例如,句子 “A quick brown fox jumps over a lazy dog” 可以标记为以下标记:“a”、“quick”、“brown”、“fox”、“jumps”、“over”、“a” ”、“lazy” 和 “dog”。
嵌入(Embeddings)
嵌入是向量或数字数组,表示模型处理和生成的标记的含义和上下文。 它们源自模型的参数,用于对输入和输出文本进行编码和解码。 嵌入有助于模型理解标记之间的语义和句法关系,并生成更相关和连贯的文本。 它们是基于 GPT 的模型使用的 Transformer 架构的重要组成部分。 它们的大小和尺寸也可能有所不同,具体取决于模型和任务。
预训练的 LLM 至少包含数万个单词、标记和术语的嵌入。 例如,ChatGPT-3 的词汇量为 14,735,746 个单词,维度为 1,536。 以下来自一个名为 distilbert-based-uncased 的小模型。 尽管这是一个小模型,但它的大小仍然有 100 兆字节。
转换器 - Transformer
Transformer 模型是一种神经网络,它通过跟踪序列数据(例如这句话中的单词)中的关系来学习上下文或含义。 在最简单的形式中,transformer 将接受输入并预测输出。 在 transformer 内,有一个编码器堆栈和一个解码器堆栈。
让我们深入研究编码器块和解码器块。 在编码器块中,有两个重要组成部分:自注意力神经网络(self-attention neural network)和前馈神经网络(feed-forward neural network)。
自注意力层至关重要,因为它建立在与当前单词相关的前一个单词对当前单词的 “理解” 之上。 例如,“it” 指的是 “the chicken crossed the road because it wants to know what the jokes are all about(小鸡过马路,因为它想知道笑话是什么)”中的小鸡。
编码器中的另一个重要层是前馈神经网络 (FFNN)。 FFNN 预测当前标记之后出现的单词。
转到解码器一侧,编码器-解码器注意力层脱颖而出。 编码器-解码器层专注于输入句子的相关部分,同时考虑到其下方的层和编码器堆栈的输出。
把它们放在一起:
我们将获取 input,对输入进行标记,并获取标记的标记 ID,然后将其转换为每个标记的嵌入。 从那里,我们将嵌入传递到 transformer 块中。 在该过程结束时,transformer 将预测一系列输出标记。 下图详细介绍了 transformer 模型。
解码器堆栈输出浮点数向量。 线性层(linear)将解码器堆栈生成的浮点向量投影为称为 Logits 向量的更大向量。 如果模型有 10,000 个单词的词汇,则线性层将解码器输出映射到 10,000 个单元向量。 Softmax 层将这些分数从 Logit 向量转换为概率(均为正值),并且加起来为 100%。 选择概率最高的单元格,并生成与其关联的单词作为此步骤的输出。
ChatGPT 和 LLMs 面临的挑战
- 他们接受的数据训练没有领域知识并且可能已经过时。 例如,幻觉是给出错误的答案,就好像它们是正确的一样,这在 LLMs 中很常见。
- 模型本身不具有从输入中应用或提取过滤器的天然能力。 示例包括时间、日期和地理过滤器。
- 对于用户可以查看的文档内容没有访问控制。
- 存在严重的隐私和敏感数据控制问题。
- 使用自己的数据进行训练并使其保持最新是很慢且非常昂贵的。
- ChatGPT 或其他 LLMs 的响应可能很慢。 通常,Elasticsearch® 会有毫秒级的查询响应。 对于 LLMs,最多可能需要几秒钟才能得到回复。 但这是预料之中的,因为 LLMs 正在执行复杂的任务。 此外,ChatGPT 按处理的 token 数量收费。 如果你有像电子商务网站的黑色星期五商品搜索这样的高速工作负载,那么它很快就会变得非常昂贵。 更不用说,它可能无法满足 <10ms 的查询 SLA(Service Level Agreement)。
- 解释 ChatGPT 或其他 LLMs 如何得出查询结果,即使不是不可能,也是很困难的。 除了幻觉之外,ChatGPT 和其他 LLMs 可能会产生不相关的响应,很难确定模型如何产生错误的答案。
Elasticsearch 适合什么地方?
Elasticsearch 除了原生通过 kNN 和 aNN 进行向量搜索(kNN 是所有文档的精确最近邻距离,aNN 是近似值)之外,还支持词袋(bag of words)和 BM25 信息检索方法。 对于 aNN,Elasticsearch 使用 HNSW(分层可导航小世界)算法来计算近似最近邻距离。 Elastic 可以缓解 LLM 的许多问题,同时让我们的用户利用 ChatGPT 和其他 LLM 可以提供的所有好东西。
Elasticsearch 可以用作矢量数据库,并跨文本和矢量数据执行混合检索。 当 Elasticsearch 与 LLMs 一起使用时,可以在三种模式中提供明显的优势:
- 为你的数据提供上下文并与 ChatGPT 或其他 LLMs 集成
- 使你能够携带自己的模型(任何第三方模型)
- 使用内置的 Elastic Learned Sparse Encoder 模型
方法 1:为你的数据提供上下文并与 ChatGPT 或其他 LLM 集成
下面介绍了如何将 LLMs 与数据分离,同时与生成式人工智能集成。
客户可以携带由 LLM 生成的自己的嵌入,并将其数据与嵌入一起提取到 Elasticsearch 中。 然后,客户可以将 Elasticsearch 中存储的自己数据(用户问题的上下文)中的相似性搜索结果传送到 ChatGPT 或其他 LLM,为用户构建基于自然语言的答案。
此外,新发布的倒数排名融合(RRF)允许用户执行混合搜索,可以对搜索结果进行组合和排名。 例如,BM25方法可以过滤相关文档以及矢量搜索以提供最佳文档。 借助 RRF,客户可以通过 Elasticsearch 而不是通过自己的应用程序本地获得最佳搜索结果,这大大降低了应用程序的复杂性和维护成本。
方法二:自带模型
最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 提供了让你拥有自己的 LLM 的能力。 通过机器学习,此功能已经可用一段时间了。 Elasticsearch 机器学习团队一直在搭建用于集成基于 Transformer 的模型的基础设施。 从 8.8 版本开始,你可以像通常在 Elasticsearch 中一样通过搜索 API 进行摄取和查询。 最重要的是,你可以将混合搜索方法与 RRF 结合使用,从而提供更好的相关性。 由于模型被管理并集成到 Elasticsearch 中,因此可以降低操作复杂性,同时获得最相关的搜索结果。
这种方法需要用户知道哪种模型最适合他们的用例以及与 Elastic 的商业关系。
方法三:使用内置的稀疏编码器模型
Elastic Learned Sparse Encoder 是 Elastic 开箱即用的语言模型,其性能优于 SPLADE(SParse Lexical AnD Expansion Model),而 SPLADE 本身就是最先进的模型。 Elastic Learned Sparse Encoder 解决了词汇不匹配问题,其中文档可能与查询相关,但不包含查询中出现的任何术语。 不匹配的一个例子可能是,如果我们询问 “how have American corporations have assisted with Covid-19 efforts”,那么呼吸机制造商可能不会出现在查询结果中。
就像其他搜索端点一样,可以通过 text_expansion 查询访问 Elastic Learned Sparse Encoder。 Elastic Learned Sparse Encoder 使我们的用户只需点击一下即可开始最先进的生成式 AI 搜索并立即产生结果。 Elastic Learned Sparse Encoder 也是 Elastic 的一项商业功能。
以下是使用 BEIR 基准测试的一些基准测试结果。 我们使用了几个标准化数据集(横轴)并应用了不同的检索方法(纵轴)。 正如你所看到的,BM25 和我们使用 RRF 的学习稀疏编码器的组合返回了最佳相关性分数。 当单独考虑时,RRF 的这些分数击败了 SPLADE 模型和我们的学习稀疏编码器模型(ELSER)。 我们在此处的博客上发布了更多详细信息。
术语和定义
神经网络(NN)
每个节点都是一个神经元。 将每个单独的节点视为其自己的线性回归模型,由输入数据(data)、权重(weights)、偏差(bias)(或阈值 - threshold)和输出组成。 数学表示可能如下所示:
∑wixi + bias = w1x1 + w2x2 + w3x3 + bias
output = f(x) = 1 if ∑w1x1 + b>= 0; 0 if ∑w1x1 + b < 0
一旦确定了输入层,就分配权重(w)。 这些权重有助于确定任何给定变量的重要性,与其他输入相比,较大的变量对输出的贡献更大。 然后将所有输入乘以各自的权重,然后求和。 然后,输出通过激活函数,该函数决定输出。 如果该输出超过给定阈值,它将激活该节点并将数据传递到网络中的下一层。 这导致一个节点的输出成为下一个节点的输入。 这种将数据从一层传递到下一层的过程就是前馈网络。 这只是神经网络的一种类型。
LLM 参数
权重(weights)是定义模型中不同层神经元之间连接强度的数值。 偏差是在通过激活函数之前添加到输入加权和中的附加数值。
SPLADE
SPLADE 是一种后期交互模型。 SPLADE 模型背后的想法是,使用像 BERT 这样的预训练语言模型可以识别单词之间的联系,并使用这些知识来增强稀疏向量嵌入。 当你有一个涵盖广泛主题的文档(例如关于二战电影的维基百科文章)时,你可以使用它 - 它包含情节、演员、历史和发行电影的工作室。
仅使用嵌入检索技术,文档与查询的相关性就成为一个问题,因为文档可以投影到大量维度上并使其接近于任何查询。 SPLADE 通过将所有标记级概率分布组合成一个分布来解决该问题,该分布告诉我们词汇表中每个标记与输入句子的相关性,类似于 BM25 方法。 Elastic Learned Sparse Encoder 是 SPLADE 模型的 Elastic 版本。
RRF
RRF 是一种混合搜索查询,它将具有不同相关指标的多个搜索结果集标准化并组合成单个结果集。 根据我们自己的测试,结合 RRF(BM25 + Elastic Learned Sparse Encoder)可产生最佳的搜索相关性。
总结
通过将 ChatGPT 等技术的创新能力与专有数据的业务环境相结合,我们可以真正改变客户、员工和组织的搜索方式。
检索增强生成 (Retrieval augmented generation,RAG) 弥合了支持生成式 AI 的大型语言模型与私有数据源之间的差距。 大型语言模型的众所周知的局限性可以通过基于上下文的检索来解决,使你能够构建深度参与的搜索。
原文:Demystifying ChatGPT: Different methods for building AI search | Elastic Blog