PolarDB PostgreSQL大模型实践-原理篇
随着ChatGPT的问世,人们开始认识到大语言模型(LLM,Large language model)和生成式人工智能在多个领域的潜力,如文稿撰写、图像生成、代码优化和信息搜索等。LLM已成为个人和企业的得力助手,并朝着超级应用的方向发展,引领着新的生态系统。本文介绍如何基于PolarDB PostgreSQL版向量数据库和LLM构建企业专属Chatbot的第一部分-原理介绍。
背景信息
越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前,大语言模型在处理通用问题方面表现较好,但由于训练语料和大模型的生成限制,对于垂直专业领域,则会存在知识深度和时效性不足的问题。在信息时代,由于企业的知识库更新频率越来越高,并且企业所拥有的垂直领域知识库(例如文档、图像、音视频等)往往是未公开或不可公开的。因此,对于企业而言,如果想在大语言模型的基础上构建属于特定垂直领域的AI产品,就需要不断将自身的知识库输入到大语言模型中进行训练。
目前有两种常见的方法实现:
微调(Fine-tuning):通过提供新的数据集对已有模型的权重进行微调,不断更新输入以调整输出,以达到所需的结果。这适用于数据集规模不大或针对特定类型任务或风格进行训练,但训练成本和价格较高。
提示调整(Prompt-tuning):通过调整输入提示而非修改模型权重,从而实现调整输出的目的。相较于微调,提示调整具有较低的计算成本,需要的资源和训练时间也较少,同时更加灵活。
综上所述,微调的方案投入成本较高,更新频率较低,并不适合所有企业。提示调整的方案是在向量库中构建企业的知识资产,通过LLM+向量库构建垂直领域的深度服务。本质是利用数据库进行提示工程(Prompt Engineering)将企业知识库文档和实时信息通过向量特征提取然后存储到向量数据库,结合LLM可以让Chatbot的回答更具专业性和时效性,也更适合中小型企业构建企业专属Chatbot。
在机器学习领域,为了能够处理大量的非结构化的数据,通常会使用人工智能技术提取这些非结构化数据的特征,并将其转化为特征向量,再对这些特征向量进行分析和检索以实现对非结构化数据的处理。将这种能存储、分析和检索特征向量的数据库称之为向量数据库。
基于PolarDB PostgreSQL版构建的ChatBot的优势如下:
借助PolarDB PostgreSQL版的PGVector插件,可以将实时内容或垂直领域的专业知识和内容转化为向量化的embedding表示,并存储在PolarDB PostgreSQL版中,以实现高效的向量化检索,从而提高私域内容的问答准确性。
作为新一代关系型云原生数据库,PolarDB PostgreSQL版既拥有分布式设计的低成本优势,又具有集中式的易用性。实现了计算节点及存储节点的分离,提供即时生效的可扩展能力和运维能力。在云原生分布式数据库领域整体处于国际领先水平。
PGVector插件目前已经在开发者社区以及基于PostgreSQL的开源数据库中得到广泛应用,同时ChatGPT Retrieval Plugin等工具也及时适配了PostgreSQL。这表明PolarDB PostgreSQL版在向量化检索领域具有良好的生态支持和广泛的应用基础,为用户提供了丰富的工具和资源。
2.什么是向量数据库?
在机器学习领域,为了能够处理大量的非结构化的数据,我们通常会使用人工智能技术提取这些非结构化数据的特征,并将其转化为特征向量,再对这些特征向量进行分析和检索以实现对非结构化数据的处理。我们把这种能存储,分析和检索特征向量的数据库称之为向量数据库。
基于PolarDB-PG构建ChatBot的优势如下:
借助PolarDB-PG的pgvector插件,可以将实时内容或垂直领域的专业知识和内容转化为向量化的embedding表示,并存储在PolarDB-PG中,以实现高效的向量化检索,从而提高私域内容的问答准确性。
作为新一代关系型云原生数据库,PolarDB-PG既拥有分布式设计的低成本优势,又具有集中式的易用性。实现了计算节点及存储节点的分离,提供即时生效的可扩展能力和运维能力。在云原生分布式数据库领域整体处于国际领先水平。
pgvector插件目前已经在开发者社区以及基于PostgreSQL的开源数据库中得到广泛应用,同时ChatGPT Retrieval Plugin等工具也及时适配了PostgreSQL。这表明PolarDB-PG在向量化检索领域具有良好的生态支持和广泛的应用基础,为用户提供了丰富的工具和资源。
3. pgvector
PGVector 的索引算法是 IVFFLAT(同pase插件的向量算法,在最新版本的pgvector中引入HNSW算饭)。IVFFLAT是一种基于倒排索引的近似最近邻搜索算法,可以用于高效地查询向量之间的相似度。它将向量空间分为若干个划分区域,每个区域都包含一些向量,并创建倒排索引,用于快速地查找与给定向量相似的向量。
IVFFLAT是IVFADC算法的简化版本,适合于召回精度要求高,但对查询耗时要求不严格(100ms级别)的场景。相比其他算法,IVFFlat算法具有高召回率高精度、算法和参数简单,空间占用小的优势。
PGVector插件的实现基于PolarDB-PG的扩展机制,利用C语言编写实现了多种向量计算算法和数据类型。其中插件算法的具体流程如下:
高维空间中的点基于隐形的聚类属性,按照kmeans等聚类算法对向量进行聚类处理,使得每个类簇有一个中心点。
检索向量时首先遍历计算所有类簇的中心点,找到与目标向量最近的n个类簇中心。
遍历计算n个类簇中心所在聚类中的所有元素,经过全局排序得到距离最近的k个向量。
本期PolarDB PostgreSQL大模型实践的原理先介绍到这里,后续上手操作请关注下篇文章。