【云驻共创】大模型,向量数据库,prompt的关系是什么
一、引言
随着科技的飞速发展,人工智能(AI)已经成为了当今社会最为热门的话题之一。在AI领域,大模型、向量数据库和prompt是三个核心概念,它们在AI技术的发展中起着至关重要的作用。本文将详细介绍这三个概念,并探讨它们之间的区别和联系。
二、大模型(Large Models)
2.1 定义
大模型(Large Models),在人工智能领域,通常指的是具有大量参数的深度学习模型,这些模型能够处理和生成极其复杂的数据模式。大模型的参数数量可以从数百万到数十亿甚至更多,这使得它们在处理自然语言、图像识别、语音识别等任务时表现出色。
在以前,业界一般喜欢把这类模型称为“序列到序列模型(Sequence to Sequence)”,因为用户的输入是一个文本序列,模型的输出也是一个文本序列,所以就是“序列到序列”。
这就是大模型的行为表现,很简单,你输入一段文本, 它输出一段文本。
2.2 特点
你可以把大模型理解为人脑,而训练数据就像是历史记忆。
以下是大模型的几个关键特点:
- 强大的表示能力:大模型由于其庞大的参数规模,能够学习到更加丰富和细致的数据特征,从而在理解复杂任务时具有更强的表示能力。
- 泛化能力:大模型在多个任务上展示出了良好的泛化能力,即它们能够将在一个任务上学到的知识应用到其他相关的任务上,这一点在多模态学习、迁移学习等领域尤为重要。
- 预训练与微调:许多大模型采用预训练和微调的两阶段训练策略。在预训练阶段,模型在大规模的数据集上学习通用知识;在微调阶段,模型在特定任务的数据集上进行调整,以适应特定的应用场景。
- 计算资源需求:大模型的训练和推理需要大量的计算资源,包括高性能的GPU集群、高速的存储系统和高效的并行计算技术。
- 能源和成本:由于大模型需要大量的计算资源,它们的训练和运行通常伴随着较高的能源消耗和成本。
2.3 国产大模型
目前市面上可谓是百模大战,国内较火的大模型有以下几个
- 百度——“文心一言”大模型
- 阿里——“通义千问”大模型
- 腾讯——“混元助手”大模型
- 华为——“盘古”大模型
- 科大讯飞——“讯飞星火”大模型
- 网易——“玉言”大模型
- 360——“360智脑”大模型
- 京东——“言犀”大模型
- 清华智谱 ——“ChatGLM”大模型
- 等等
三、向量数据库(Vector Databases)
3.1 在大模型中的使用场景
有了大模型和Prompt工程,已经可以让大模型帮我们完成很多任务了,向量数据库并不是必须的。向量数据通常出现在需要外挂一些额外知识、或者输入太大需要分片等等情况来使用。
3.2 定义
大模型的最大输入长度,一般都有限制,单位是token。目前主流大模型至少支持4千以上,数万是常态,10万+的也有(注意token指的是一个英文单词,与中文汉字并不等价)
在使用大型模型时,通常会遇到需要存储和查询大量向量数据的情况。这些向量数据可能代表文本、图像、音频或其他类型数据的特征。
想象一下,你有一个非常大的图书馆,里面有很多书(数据),而你想快速找到与你手中的一张照片最相似的照片。如果我们希望大模型能够针对整个图书馆的书来回答用户的问题,一个明显的难点是整个图书管的书太多了,远远超过了大模型可处理的最长文本长度。此时我们可以借助向量数据库来解决这个问题。
向量数据库的工作原理可以分为几个关键步骤:数据插入、数据存储、数据索引和数据查询。下面我将用通俗易懂的语言来简单介绍这些步骤:
- 数据插入:当你有一些数据(比如图片、文本等)需要存储到向量数据库时,你首先会使用一个模型将这些数据转换成向量。这个模型会提取数据的关键特征,并将这些特征编码成一个数值列表,也就是向量。
- 数据存储:一旦数据被转换成向量,它就会被存储到数据库中。数据库会为每个向量分配一个唯一的标识符,这样你就可以在之后通过这个标识符来检索向量。
- 数据索引:为了能够快速查询向量,数据库会使用一种叫做索引的技术来组织向量。索引就像是一本目录,它帮助数据库快速找到相似的向量。有多种索引技术,比如哈希索引、树状索引等,它们都有各自的优势和适用场景。
- 数据查询:当你想要找到与某个向量相似的向量时,你会向数据库发送一个查询请求。数据库会使用索引来快速定位与查询向量最接近的向量,并返回这些向量及其关联的数据。
向量数据库的工作原理就像是有一个非常聪明的图书馆管理员,他知道每本书(数据)的内容和位置,当你给出一个主题(查询向量),他能够快速找到与这个主题最相关的书籍。向量数据库通过高效的存储和索引机制,使得在大规模数据中查找相似项变得快速和简单。
3.3 与传统数据库的区别
向量数据库的核心技术之一是将数据转化为向量形式,并使用索引结构对向量数据进行存储和查询。这些索引结构,如向量树、局部敏感哈希(LSH)等,能够更有效地支持向量数据的相似度搜索。通过这种方式,向量数据库能够实现高效的相似度搜索,这在处理大规模的向量数据集时尤为重要。这对于许多应用场景,如推荐系统、图像识别、自然语言处理等,是至关重要的。
用关系数据库理论上当然也可以。在关系型数据库中存储vector和page都不是问题。当需要计算哪一个页面和用户请求最相似时,我们可以遍历一次所有的vector,分别与用户请求计算相似度,然后找到最相似的那一条记录。但问题是计算相似度的开销不可忽略!!!
上面这个关系型数据库最大的问题是每一次都要计算N次相似度,耗时会较大。向量数据库的核心是解决相似度计算的效率问题。在向量数据库中,通常会使用名为Vector Quantization的技术,将向量间相似的计算转化为只包含加法和查表。两个128维向量相似度的计算(比如通过点乘计算),需要128次乘法和127次加法。而乘法开销远远大于加法。使用Vector Quantization技术,可以完全没有乘法计算,只含数次加法和数次查表。这就是向量数据库带来的好处。
3.4 RAG技术
随着大模型技术的不断发展,向量数据库也在不断地优化和升级。例如,大模型RAG(Retrieval-Augmented Generation)结合了信息检索和生成的功能,向量数据库在这类模型中的应用也成为热门话题。这显示了向量数据库在支持先进的大模型技术方面的潜力和价值。
向量数据库(Vector Database)是一种专门用于存储、管理、查询和检索向量(Vectors)的数据库。由于向量本质上是一串数字,因此不管是文本、图片、语音、视频只要可以转换为数字的,都可以存到向量数据库中。
常见的是使用向量模型如text2vec、m3e、bge等将文本转换为向量,使用clip、unet等图像模型将图片转为向量,同样声学模型可以将语音转换为向量。当然也有更复杂的多模态模型可以同时对文本、图片进行处理。
大致流程如下图:
RAG技术,首先使用检索技术,查找与用户问题最相关的文档,然后把文档和问题组合成提示词输入到模型中,由模型推理生成最终结果。如下图所示,最简单的就是左边这种模式,是原生的RAG技术。当然,这种原生的技术存在缺陷,一般效果不会特别好,因此有了右边优化的技术,添加了不少流程和步骤去帮助我们更好的生成回答。
大模型中的向量数据库通过其高效的相似度搜索和灵活的存储查询能力,为处理多维向量数据提供了强大的支持,推动了各种应用场景的发展和创新。
3.5 LangChain 的RAG示例
以下两种方法取自 LangChain 的RAG示例
3.5.1 父文档检索(Parent Document Retriever)
父文档检索的思路是,我利用相似度召回了一个语义上相似的小块,然后返回一个能提供完整上下文信息的大块,这样可以帮助模型更好的理解上下文的语义,进行高质量的回答。
LangChain 中的 Parent Document Retriever 就相当于结合了不同粒度的文本块去构建检索过程,具体的实现流程如下:
首先就是使用两个文本分割器去将文本切分为父文档块和子文档块,然后建立向量存储区存储子块,建立内存存储区存储父块。之后我们需要创建 Parent Document Retriever,将上面定义好的分割器、存储器,并执行add_documents 方法将文档添加到检索器中。
在使用的时候,调用 get_relevant_documents 方法,这个时候实际上会调用向量检索返回子块的 ID,然后根据子块ID 将对应父块的内容返回给用户。
3.5.2 多向量检索(MultiVector Retriever)
多向量检索的思路是为同一篇文档提供不同视角的向量建模,例如:分割文档、做摘要、假设性问题等
- 分割文档:就是将文档切分为不同大小的块,然后分别构建向量
- 摘要:为每个文档创建摘要,将其与文档一起嵌入(或者替代文档);可以利用大模型进行文档总结,输出摘要内容。摘要一般包含了整篇文档的语义信息,但是会比原文要更精简。当然,使用大模型进行总结的时候,需要对大模型效果进行评估,正常来说 6B、7B 大小的模型效果不会太好。
- 假设性问题:为每个文档创建适合回答的假设性问题,将其与文档一起嵌入。这个是一个典型的逆向思维的例子,就是根据现在有的这篇文档,先让大模型提出几个这篇文档能够解答的问题,然后将这些问题编码成向量进行存储。这其实基于一个假设就是如果一篇文章能回答某一个问题,那么也可以回答与其相似的问题,当然,这个假设在一般情况下都是成立的,因此可以拿来使用。
四、Prompt
4.1 什么是Prompt
在大模型中,特别是在自然语言处理(NLP)和深度学习领域,prompt是指一个特定的输入,用于引导模型生成或预测期望的输出。这种技术被广泛应用于生成式预训练Transformer模型,如GPT系列。
prompt在大模型中起到了一个桥梁的作用,连接了模型的预训练阶段和具体的应用任务,使得模型能够更准确地理解和生成期望的输出。
4.2 为什么输入会被称为Prompt
那么为什么好端端的输入会被称为Prompt?这是因为在大模型成功之前,一般而言模型的能力都是单一的。一个可以做“文本分类”的模型做不了“关键词识别”,所以人们对模型的使用方法也是单一的。
由于大模型不一样,它的能力更全面、更通用,人们可以通过输入不同的文本来让大模型执行不同的任务,因此Prompt一词便出现了。
4.3 prompt的形式
Prompt可以是多种形式,包括文本、图像或其他模态的数据。在NLP中,prompt通常是一段文本,用于启动或指导模型进行某种特定的任务。例如,在问答系统中,prompt可能是一个问题,模型根据这个问题生成答案。在文本生成任务中,prompt可以是一个句子的开头,模型接着生成完整的句子或段落。
4.4 prompt与微调的区别
近年来,prompt-based learning或prompt engineering在NLP领域变得非常流行。这种方法的核心思想是通过设计合适的prompt来更好地利用预训练模型的知识,从而在各种NLP任务上实现更好的性能。与传统的微调(fine-tuning)方法相比,prompt-based learning有时能够更灵活地适应不同的任务,并且可能需要的计算资源更少。
4.5 思维链
思维链,一种典型的Prompt工程。就是在给模型示例时,把中间的计算步骤拆解一下,一步一步来计算,如下图(以清华智谱的 ChatGLM4 为例),我们发现,模型在作答时也会跟着我们的思路去拆解问题,然后得到正确答案。
以下是在ChatGLM4中使用思维链的一个范例
问题:小明有12个苹果,他有买了两袋苹果,每袋苹果有3个,问小明现在总过有几个苹果。
答案:初始有12个苹果,买了两袋苹果,
每袋苹果有3个,所以买了的苹果数量为2*3=6个。
总共苹果数为初始数量加上买了的数量,即12+6=18个苹果。
问题:小红有10个香蕉,他给了小明1个香蕉,又买了4个香蕉,问小红现在总共有几个香
蕉。
请问答案是什么?答案: 小红初始有10个香蕉,给了小明1个香蕉后,剩余10-1=9个香蕉。之后又买了4个香蕉,所以小红现在的香蕉总数为9+4=13个。
五、区别与联系
5.1 区别
大模型通常是指能够处理庞大数据和复杂任务的机器学习模型,比如GPT-4就是一种大模型(国内大模型有百度的文心一言、阿里的通义千问、华为的盘古、清华智谱的ChatGLM 等等)。
向量数据库则是一种存储大量向量数据并支持高效向量检索的技术。
而prompt则是一种对模型输入进行设计的方法,它可以帮助指导大模型生成更加准确和有针对性的输出。
5.2 联系
这三者之间的关系在于,大模型可以通过向量数据库进行向量化存储,并且通过prompt进行输入引导以生产更具针对性的输出,向量数据库可以帮助大模型进行向量检索和相关性匹配,而prompt可以帮助大模型更好地理解用户输入并生成相关的输出。
因此,这三者可以相互配合,共同用于解决各种复杂的自然语言处理和信息检索任务。
六、总结
经过上面的描述,你应该对大模型、向量数据库、prompt有了一个比较完善的认知了。下面用一个不是非常恰当的例子做一个简要的概述。
我们假设大模型是辆跑车,那么prompt 就是方向盘,车再好也得有方向盘才能开到目的地,而向量数据库有点像导航 APP,给你提供最新的路况信息,没有向量数据库的话就只能凭记忆(训练大模型时使用的历史资料)开车,万一路况有变可能会遇到麻烦或走岔了路(得到错误回答)。
再比如你问大模型:“你们村的村长是谁?”。由于你们村太小,大模型可能并不知道(大模型训练时,没有相关训练集),或者知道的是很久以前的信息(大模型一般只知道截至至训练时刻的历史数据)。但如果向量数据库里有你们村历任村长的信息,并且提供给大模型,大模型就可以告诉你当前的村长是谁了。
七、参考文献
1.大模型,向量数据库,prompt的关系是什么 https://www.zhihu.com/question/636122996
2.从 LangChain 中学习检索增强 https://zhuanlan.zhihu.com/p/664199788
本文参与华为云社区【内容共创】活动第26期。
任务16:大模型,向量数据库,prompt的关系是什么?
- 点赞
- 收藏
- 关注作者
评论(0)