1.什么是向量数据

        向量数据库,也称为矢量数据库,是一种专门用于存储向量数据的数据库。随着大模型技术的迅速发展,向量数据库得到了广泛的应用。对于非数值型数据,如文本、音频和图像等,它们需要被转换为向量后才能参与机器学习的后续运算。例如,在自然语言处理和计算机视觉领域,我们需要将原始数据转换为向量,这个过程被称为数据的向量化。为了便于存储这些向量化后的数据,向量数据库应运而生。

       虽然向量数据库和传统的关系型数据库(如MySQL)在功能上相似,但它们存储的数据形式有所不同。向量数据库主要存储矢量数据,而传统数据库则主要存储结构化数据。这些矢量数据可以包含各种维度的信息,从简单的二元数据到复杂的高维数据。因此,向量数据库能够提供更丰富的数据存储和处理功能,适用于处理各种复杂的机器学习任务。

       总之,向量数据库是一种专门用于存储和处理矢量数据的数据库系统。随着大模型技术的普及,向量数据库的应用也越来越广泛。通过将非数值型数据转换为向量并存储在向量数据库中,我们可以更方便地处理各种复杂的机器学习任务。

2.Faiss数据库介绍

       Faiss是Facebook(现改名为Meta)开源的向量数据库,它是面向稠密向量高效的相似性检索与聚类引擎。它的主体代码基于C++编写,依赖BLAS库。不仅支持CPU,也支持GPU。faiss中最重要的功能是相似向量查询,那度量向量相似性的方法有:L2欧式距离、内积以及余弦相似度。向量存入faiss实际上是将向量存入faiss的索引结构中,大多数索引是要经过训练的,训练过程是为了获取向量的分布特征。

3.相似度度量在文本搜索的应用

        通常,我们需要在一篇文本中搜索与另一篇文本相似的文本,这种技术在搜索引擎、文献索引、数据分析等方面应用广泛。传统的文本搜索主要基于匹配算法或模式匹配,如AC文本自动机搜索算法、贪心匹配以及正则表达式。然而,传统的文本搜索算法存在许多缺陷。例如,在数据量特别大的情况下,尤其是TB级别的文献数据库,基于匹配或模式的搜索技术不再适用。本文旨在探讨使用相似度算法进行文本搜索,并结合大模型进行对话增强。这项技术有望解决目前大模型存在的一些问题(具体问题将在下文中介绍)。

4.大模型现阶段存在的技术问题

       首先,我们需要了解什么是大模型,在人工智能领域,大模型是指拥有超过10亿个参数的深度神经网络,它们能够处理海量数据、完成各种复杂的任务,如自然语言处理、计算机视觉、语音识别等。

       第一个缺陷:数据不新。今天我们所使用的百度文心一言,OpenAi的Gpt3.5以及Gpt4,讯飞的星火大模型都是在庞大的数据集上进行训练而来的,而我们知道,互联网的数据是实时都在变化的,每天的信息都在不断更新,而大模型现阶段最大的问题就是数据都是历史数据,不是新的数据。

       第二个缺陷:专业化能力较差,大模型是经过大量数据集训练而来的,这意味着一个通用大模型(不特指垂直领域的专业大模型)可以很好的回答一些通用问题,通俗的讲,大模型可以很轻松的回答简单的常识性问题,一些简单的代码或者文案大模型也能轻松应付,但是当我们尝试询问一个专业领域知识的问题是,大模型便开始胡编乱造起来了。

       第三个缺陷:个性化定制费用极高。虽然现在已经出现了许多大模型微调技术,例如著名的FFT(全量更新),PEFT(部分微调),RLAIF(基于强化学习的反馈微调技术),但是以上微调技术都必须要求有大量的GPU算力才行,而如今GPU算力稀缺,从互联网的云上GPU算力服务器价格来看,仅仅只是一个小时的训练费用就高达7元,模型部署费用更是高达350元/天,如此庞大的费用对于一个企业来说都是一笔不小的开支,就更不用说是我们这类普通人了。

       第四个缺陷:专业领域应用效能不足。大模型的理解和对话能力很强,但是在专业领域的应用不足,例如科研领域,教育领域,造成这种现象的几个原因便是上面提到的第二个,第三个缺陷。

5.我们的解决方案

       针对上面推到的问题,我们采用了一种更加低成本的方式去定制化大模型,通过Prompt(提示词工程技术),结合向量数据库的相似度搜索算法为对话赋能,使得大模型无需训练便可以获得自定义知识,从成本角度来讲,由于避免了训练阶段,高额的费用得到了节省。同时用户可以上传自定义的数据集,例如各种word文献,pdf文档甚至是ppt,大模型可以轻松的学习到里面的内容,并结合原来大模型的通用对话能力,实现自定义知识赋能。以下是具体的技术细节:

6技术细节:

(1)首先我们需要一个通用大模型的接口能力(这种对接价格和成本往往那个非常低,例如OpenAi的Gpt3.5 1千tokens仅仅只需要0.012元)

(2)将我们需要训练的数据集通过转化为文本形式,例如利用开源pypdf库,ocr,语音识别等技术从各式各样的文件形式,图片,视频等提取文本,转化为文本数据

(3)将文本数据进行清洗,例如去除特殊符号,换行符,无意义空白等

(4)将以上文本进行切割成指定大小块(方便向量数据库按照块检索和返回内容)

(5)将每一个文本块进行向量编码,具体编码的方式可以使用word2vec,ELMo,Bert等也可以使用一些大模型提供的编码能力,例如OpenAi的Embedding算法或者百度的ErineEmbedding_V1算法,同时也可以使用一些开源的hugginface的开源大模型编码方案。

(6)得到以上文本的编码向量之后,将以上向量存入Faiss数据库(之所以这样做是因为文本编码是耗时的,如果每次与模型对话都需要进行编码就会影响模型的整体输出速度,同时也为了发挥这些数据库自带的相似度搜索引擎的能力)

(7)在与模型对话的时候,用户输入的问题会被以上述同样的向量编码方式进行编码,之后将编码后的向量传入向量数据库,通过与每个快进行相似度计算,可以采用余弦相似度或者欧几里得距离,然后将相似度最大的几个块返回。

(8)找到这几个块在编码前的文本,将所有文本提取出来进行组合,通过使用Prompt技术将该段文本插入用户原始对话中,送入通用大模型,得到模型输出。

       以上是使用faiss向量数据库和向量相似度搜索进行模型对话增强和自定义个性化知识模型的方法。

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐