揭秘 ChatGPT:构建 AI 搜索的不同方法

news2024/9/23 21:26:00

作者: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 预测当前标记之后出现的单词。

转到解码器一侧,编码器-解码器注意力层脱颖而出。 编码器-解码器层专注于输入句子的相关部分,同时考虑到其下方的层和编码器堆栈的输出。

把它们放在一起:

Transformer 模型的抽象图

 

我们将获取 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 一起使用时,可以在三种模式中提供明显的优势:

  1. 为你的数据提供上下文并与 ChatGPT 或其他 LLMs 集成
  2. 使你能够携带自己的模型(任何第三方模型)
  3. 使用内置的 Elastic Learned Sparse Encoder 模型

方法 1:为你的数据提供上下文并与 ChatGPT 或其他 LLM 集成

下面介绍了如何将 LLMs 与数据分离,同时与生成式人工智能集成。

使用 Elasticsearch 作为向量存储并与 LLM 集成

 

客户可以携带由 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)。 我们在此处的博客上发布了更多详细信息。

Elastic Learned Sparse Encoder 与其他流行检索方法的比较(来源 Elasticsearch)

 

术语和定义

神经网络(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/810916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot读取配置文件顺序

文章目录 一、前言二、SpringBoot配置文件目录读取顺序源码解析 三、SpringBoot配置文件类型读取顺序源码解析 一、前言 本文通过源码分析 SpringBoot 加载配置文件目录的顺序&#xff0c;以及 properties、xml、yml、yaml文件的读取顺序 二、SpringBoot配置文件目录读取顺序…

前端学习——Vue (Day7)

vuex 构建 vuex [多组件数据共享] 环境 state状态 mutations状态 mapMutations actions mapActions getters 模块 module (进阶语法) 综合案例 - 购物车 axios报错解决方案 import axios from axiosexport default {namespaced: true,state () {return {list: []}},mutations…

用户体系之账户设计

文章目录 前言一、需求分析1、登录功能2、退出功能3、账号绑定功能3、其他注意事项 二、账户设计1、表设计2、QA 三、实践1、账户密码登录2、手机号登录3、第三方授权登录4、账户统一 前言 随着互联网的发展&#xff0c;越来越多的应用、网站需要用户进行登录才能使用。为了方…

LeetCode 刷题 数据结构 数组 283题 移动零

难度&#xff1a;简单 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入:…

QGraphicsView实现简易地图2『瓦片经纬度』

前文链接&#xff1a;QGraphicsView实现简易地图1『加载离线瓦片地图』 地图采用GCJ02 Web 墨卡托投影&#xff0c;最小坐标&#xff1a;(-180.00000000000000,-85.05112877980655)&#xff0c;最大坐标&#xff1a;(180.00000000000000,85.05112877980655)。瓦片地图单张图片像…

如何通俗理解扩散模型?

扩散模型(Diffusion Model)是一类十分先进的基于扩散思想的深度学习生 成模型。生成模型除了扩散模型之外&#xff0c;还有出现较早的 VAE ( Variational Auto- Encoder&#xff0c;变分自编码器) 和 GAN ( Generative Adversarial Net &#xff0c;生成对抗网络) 等。 虽然它们…

Cpp学习——类与对象(2)

思维导图&#xff1a; 一&#xff0c;构造函数 1.定义 对于构造函数首先就要知道构造函数怎么写&#xff0c;构造函数怎么写呢&#xff1f;你要知道如下两点&#xff1a; 1.构造函数的函数名要与类名相同 2.构造函数是没有返回值的&#xff0c;但可以有参数。 因为这第二点&am…

ubuntu目录分析

在Ubuntu根目录下&#xff0c;以下是一些常见文件夹的含义&#xff1a; /bin&#xff1a;存放可执行文件&#xff0c;包含一些基本的命令和工具。 /boot&#xff1a;存放启动时所需的文件&#xff0c;如内核和引导加载程序。 /dev&#xff1a;包含设备文件&#xff0c;用于与硬…

关于计算机视觉的Open3D简介

一、说明 Open3D 是一个开源库&#xff0c;使开发人员能够处理 3D 数据。它提供了一组用于 3D 数据处理、可视化和机器学习任务的工具。该库支持各种数据格式&#xff0c;例如 .ply、.obj、.stl 和 .xyz&#xff0c;并允许用户创建自定义数据结构并在程序中访问它们。 Open3D 广…

【雕爷学编程】MicroPython动手做(16)——掌控板之图片图像显示

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

进程_PCB 的理解

目录 一. PCB 的概念 1. 为什么需要PCB 2. PCB的属性 二. task struct 1. task struct 介绍 2. 查看进程指令 3. PID 4. PPID 父进程是什么&#xff1f; 为什么要有父进程&#xff1f; 5. fork 创建子进程 1) fork 后的现象 为什么会打印两次&#xff1f; 2) 的返…

用C语言实现插入排序算法

1.设计思路 用插入排序对长度为n的待排序数组A进行排序的伪代码&#xff08;在代码中&#xff0c;A中元素的数目n用A.length来表示&#xff09;。 伪代码如下&#xff1a; INSERTION-SORT(A) for j2 to A.length:keyA[j] //将A[j]插入已排序序列A[1..j-1]ij-1while i>0…

【MTI 6.S081 Lab】Copy-on-write

【MTI 6.S081 Lab】Copy-on-write The problemThe solutionImplement copy-on-write fork (hard)实验任务Hints解决方案问题解决思考uvmcopykfreekallockpagerefcow_handlertrap 虚拟内存提供了一定程度的间接性&#xff1a;内核可以通过将PTE标记为无效或只读来拦截内存引用&a…

Quartz项目搭建与任务执行源码分析

数据库准备 准备一个MySQL数据库&#xff0c;版本为8.0&#xff0c;然后创建一个库&#xff0c;并从quartz官方的版本包中找到名称为tables_mysql_innodb.sql的脚本执行进去&#xff08;脚本内容文后也有提供&#xff09;。 项目依赖说明 创建一个Maven项目&#xff0c;引入…

Python方式实现简易弹道计算机

1 问题 本周无意间刷到了德国豹2A5坦克的火控介绍&#xff0c;想自己编写一个不考虑空气阻力以及测风影响的简易弹道计算机&#xff08;大口径火炮&#xff09;。 2 方法 由高中物理知识了解到&#xff0c;炮弹出膛之后基本就是抛物线列个抛物线方程就好了; 百度得火炮的弹道方…

【Django学习】(十六)session_token认证过程与区别_响应定制

一、认识session与token 这里就直接引用别人的文章&#xff0c;不做过多说明 网络应用中session和token本质是一样的吗&#xff0c;有什么区别&#xff1f; - 知乎 二、token响应定制 在全局配置表中配置 DEFAULT_AUTHENTICATION_CLASSES: [# 指定jwt Token认证rest_framew…

python_day17_多线程

threading模块 import timedef sing():while True:print("唱歌~~~~~~~~~~~~")time.sleep(1)def dance():while True:print("跳舞############")time.sleep(1) if __name__ __main__:sing()dance()此时为单线程 import threading import timedef sing(…

Java 异常处理的使用和思考

概念 异常处理的概念起源于早期的编程语言&#xff0c;如 LISP、PL/I 和 CLU。这些编程语言首次引入了异常处理机制&#xff0c;以便在程序执行过程中检测和处理错误情况。异常处理机制随后在 Ada、Modula-3、C、Python、Java 等编程语言中得到了广泛采用和发展。在 Java 中&a…

迁移学习《Efficient and Robust Pseudo-Labeling for Unsupervised Domain Adaptation》

1 摘要 问题&#xff1a;无监督域适应传统方法将超过一定置信度阈值的数据视为目标域的伪标记数据&#xff0c;因此选择合适的阈值会影响目标性能。 在本文中&#xff0c;提出了一种新的基于置信度的加权方案来获得伪标签&#xff0c;并提出了一种自适应阈值调整策略&#xff0…

oCPC实践录 | oCPC下机制设计变得毫无意义?(2)无声的战争

接上回oCPC实践录 | oCPC下机制设计变得毫无意义&#xff1f;&#xff08;1&#xff09;事出异常必有妖&#xff0c;互联网广告最开始采用的广义第一价格密封拍卖&#xff08;GFP)&#xff0c;对广告主而言&#xff0c;需要不断感知竞争对手的变化&#xff0c;修改报价&#xf…