当前位置:首页 > 数码 > 向量数据库落地通常 (向量数据库是什么)

向量数据库落地通常 (向量数据库是什么)

admin8个月前 (04-27)数码47

本文基于京东外部向量数据库vearch启动通常。Vearch是对大规模深度学习向量启动高性能相似搜查的弹性散布式系统。详见:

探求

首次意识向量数据库,一脸懵逼?

向量是什么?如何将文本转换为向量?如何确定维度?如何定义表结构?如何选择索引模式,建表参数如何性能?检索参数如何性能?分片数正本数如何选择等等

随着对文档的逐渐相熟以及和vearch相关共事的沟通,以上疑问迎刃而解,详细的不再赘述。关键记住以下几点:

1、文本转向量:驳回大模型网关接口domn/embeddings传入对应的模型如:text-embedding-ada-002-2和待转换的文本即可;

2、向量维度:这个和向量转换所驳回的模型有关,细节不用关注;

3、建表参数的选择以及表结构:关键在于retrieval_type检索模型的选择,详细的可以参考文档。经过综合思考,选择驳回HNSW:

字段标识字段含意类型能否必填备注metric_type计算模式string是L2或许InnerProductnlinks节点街坊数量int是自动32efConstruction构图时寻觅节点街坊环节中在图中遍历的深度int是自动40

"retrieval_type":"HNSW",

"retrieval_param":{

"metric_type":"InnerProduct",

"nlinks":32,

"efConstruction":40

留意:1、向量存储只允许MemoryOnly

2、创立索引不须要训练,index_size值大于0均可

详细的建示意例见后文。

4、分片数和正本数结合实践数据量评价,假设无法评价,依照起码资源放开即可,后续可裁减。

通常

1、建表(space)

为了简化操作,履行db(库)-space(表)一对一的打算,弱化库的概念。经过一系列探求之后定义出了通用的space结构:

"name":"demphah",

"partition_num":3,

"replica_num":3,

"engine":{

"name":"gamma",

"index_size":1,

"id_type":"String",

"retrieval_type":"HNSW",

"retrieval_param":{

"metric_type":"InnerProduct",

"nlinks":32,

"efConstruction":100,

"efSearch":64

"properties":{

"vectorVal":{

"type":"vector",

"dimension":1536

"contentVal":{

"type":"string"

"chunkFlagId":{

"type":"string",

"index":true

"chunkIndexId":{

"type":"integer",

"index":true

字段说明:

engine、partition_num等都是固定的参数,properties中所列字段皆为通用字段,假设有裁减字段如:skuId,storeId追加即可

字段名含意类型说明vectorVal文本向量vector维度与选择模型有关contentVal源文本string

chunkFlagId文件惟一idstring文件的标识id,用于串联分块后的片段chunkIndexId文件分段位置integer从0开局,递增skuId...

裁减字段见上

这里file的概念可以了解为一个单元,或许是一个文件,也或许是一个url,总之就是一个数据全体。

2、分段写入

这里针对通用文件形容,比如提供一个pdf文件如何导入向量库:

a.首先上行文件到oss,而后依据对应的fileKey失掉到文件数据流

b.再依据各种拆分场景(按行、字节数、正则拆分等)分红片段

c.分段写入向量库:

*将字符串转换为向量并拔出数据库

*目前一切的常识库治理端写入全走这个方法

*@paramdbName数据库称号

*@paramspaceName空间称号

*@paramstr字符串

*@paramflagId标记ID

*@paramchunkIndexId块索引ID

*@paramproperties属性

privatevoidembeddingsAndInsert(StringdbName,StringspaceName,Stringstr,StringflagId,IntegerchunkIndexId,Map<String,Object>properties){

//先向数据库写入一条记载,记载以后文档的写入操作

intsuccess=knbaseDocRecordService.writeDocRecord(spaceName,flagId,chunkIndexId.longValue(),0,str);

if(success<=0){

log.error("writeDocRecord失败{},{},{}",spaceName,flagId,chunkIndexId);

//分块转向量并写入

List<Float>embeddings=GatewayUtil.baseEmbeddings(str);

if(CollectionUtils.isEmpty(embeddings)){

KnBaseVecDtoknBaseVecDto=buildKnBaseVecDto(newFeaVector(embeddings),flagId,chunkIndexId,str);

Map<String,Object>newPros=JsonUtil.obj2Map(knBaseVecDto);

if(MapUtils.isNotEmpty(properties)){

newPros.putAll(properties);

//{"_index":"kn_base_file_db","_type":"kn_base_file_space","_id":"-8182839813441244911","status":200}

Stringinsert=VearchUtil.insert(dbName,spaceName,null,newPros);

if(StringUtils.isBlank(insert)||!insert.contains("_index")){

log.error("写入失败的块:{},{}",chunkIndexId,insert);

3、数据记载

上文写常识库的环节有个 knbaseDocRecordService.writeDocRecord 的逻辑,用于记载写入的片段。下文详细引见其中用到的表:

1、表1space记载表

注:关键用于记载创立的space,以及查问管控,如禁用某个space等

CREATETABLE`xxx_vearch_spaces`(

`id`bigint(20)unsignedNOTNULLAUTO_INCREMENTCOMMENT'自增主键',

`type`tinyint(3)NOTNULLCOMMENT'类型',

`status`tinyint(3)NOTNULLCOMMENT'形态',

`space`varchar(127)NOTNULLCOMMENT'空间标识',

`db`varchar(127)NOTNULLCOMMENT'库标识',

`desc`varchar(127)NOTNULLCOMMENT'空间形容',

`ext`varchar(4095)NOTNULLDEFAULT''COMMENT'裁减字段',

`creator`varchar(127)NOTNULLDEFAULT''COMMENT'创立人',

`created`timestampNOTNULLCOMMENT'创立期间',

`modifier`varchar(127)NOTNULLDEFAULT''COMMENT'修正人',

`modified`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'修正期间',

`deleted`tinyint(3)NOTNULLDEFAULT'0'COMMENT'已删除(0:否;1:是)',

PRIMARYKEY(`id`)USINGBTREE,

UNIQUEKEY`uniq_space_db`(`space`,`db`)USINGBTREE

)ENGINE=InnoDBAUTO_INCREMENT=0DEFAULTCHARSET=utf8mb4

2、表2file记载表

注:关键用于记载space下的file,以及查问管控,如禁用某个file,以及关联查问对应的所有片段。

CREATETABLE`xxx_spaces_knbase`(

`id`bigint(20)unsignedNOTNULLAUTO_INCREMENTCOMMENT'自增主键',

`status`tinyint(3)NOTNULLCOMMENT'形态',

`space`varchar(127)NOTNULLCOMMENT'空间标识',

`file_name`varchar(255)NOTNULLCOMMENT'文件名',

`file_desc`varchar(511)NOTNULLCOMMENT'文件形容',

`byte_num`bigint(20)unsignedNOTNULLCOMMENT'字符数',

`hit_count`int(10)unsignedNOTNULLCOMMENT'命中次数',

`ext`varchar(4095)NOTNULLDEFAULT''COMMENT'裁减字段',

`creator`varchar(127)NOTNULLDEFAULT''COMMENT'创立人',

`created`timestampNOTNULLCOMMENT'创立期间',

`modifier`varchar(127)NOTNULLDEFAULT''COMMENT'修正人',

`modified`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'修正期间',

`deleted`tinyint(3)NOTNULLDEFAULT'0'COMMENT'已删除(0:否;1:是)',

`file_flag_id`varchar(255)DEFAULTNULLCOMMENT'文件惟一标识',

向量数据库

PRIMARYKEY(`id`)USINGBTREE,

KEY`idx_space`(`space`)USINGBTREE

)ENGINE=InnoDBAUTO_INCREMENT=0DEFAULTCHARSET=utf8mb4

3、表3paragraph记载表

CREATETABLE`xxx_knbase_doc_record`(

`id`bigint(20)unsignedNOTNULLAUTO_INCREMENTCOMMENT'自增主键',

`space`varchar(127)NOTNULLCOMMENT'空间标识',

`file_flag_id`varchar(255)NOTNULLCOMMENT'文件标识',

`d_index`bigint(20)unsignedNOTNULLCOMMENT'文档位置',

`hit_count`int(10)unsignedNOTNULLCOMMENT'命中次数',

`ext`varchar(4095)NOTNULLDEFAULT''COMMENT'裁减字段',

`creator`varchar(127)NOTNULLDEFAULT''COMMENT'创立人',

`created`timestampNOTNULLCOMMENT'创立期间',

`modifier`varchar(127)NOTNULLDEFAULT''COMMENT'修正人',

`modified`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'修正期间',

`deleted`tinyint(3)NOTNULLDEFAULT'0'COMMENT'已删除(0:否;1:是)',

PRIMARYKEY(`id`)USINGBTREE,

UNIQUEKEY`uniq_space_file_idx`(`space`,`file_flag_id`,`d_index`)USINGBTREE

)ENGINE=InnoDBAUTO_INCREMENT=0DEFAULTCHARSET=utf8mb4

总结

向量数据库关于大模型运行落地来说至关关键,有些无法外露的外部数据可以存储在向量库中,用于外部检索。随着向量库中数据的丰盛,大模型推理回答的才干也将愈加精准。

上文的设计比如space中的chunkFlagId可以关联出原始的整个文件;chunkIndexId可以控制数据的查问范围,另一方面可以经过此字段成功分页(vearch目前不允许分页查问)以及全文导出。xxx_knbase_doc_record表中记载了片段的记载,可用于计算片段的chunkIndexId,一方面防止重复,另一方面保障属性的递增,可用于裁减很多才干。

目前向量数据库的检索只允许基本的向量检索和关键字检索,后续会逐渐优化混合检索等打算以提高检索准确率等。


向量数据库是干嘛用的?

向量数据库是一种新型的数据库,它与传统的关系型数据库不同,采用了一种全新的数据模型。在向数据库中,数据被组织成了一系列的向量,每个向量都包含了一组属性。这些向量之间可以建立关系,通过这种关系来查询数据。

向量数据库的主要作用是用于数据分析和挖掘。传统的数据库主要用来存储数据,而向量数据库则更加注重数据的分析和挖掘。它可以快速地查询和分析大量的数据,从而帮助企业和组织更好地了解他们的业务和市场情况。

向量数据库的另一个重要功能是数据建模。在传统的关系型数据库中,数据建模是一个非常困难的任务。但是向量数据库则提供了一个更加方便的数据建模工具,使得数据建模变得更加简单和高效。

除此之外,向量数据库还可以帮助组织和企业更好地进行数据安全和保护。它可以对数据进行加密和压缩,从而保护数据的机密性和完整性。

总之,向量数据库是一种非常先进的数据库,它主要应用于数据分析和挖掘,数据建模以及数据安全和保护。它可以帮助组织和企业更好地了解他们的业务和市场情况,并且保护他们的数据安全。

数据库向量化是什么意思

数据库向量化是指将数据存储为向量的形式,以便在数据库中更有效地进行查询和分析。 这种技术在许多应用程序中都得到了广泛的应用,如文本分类、图像识别、推荐系统等。 数据库向量化可以使数据库中的数据更易于处理和分析,从而为用户提供更好的数据体验。 通过数据库向量化技术,用户可以更快速地进行查询和分析。 在传统的数据存储模式中,数据库中的数据往往是以完整的文本或图像形式存储的,而这种存储方式会导致查询和分析速度非常缓慢。 通过向量化,数据可以被转换成更具体的形式,以便更快速地进行处理和分析。 数据库向量化技术在许多应用程序中都得到了广泛的应用。 例如,在推荐系统中,向量化可以将用户视为向量,根据用户的购买历史、浏览记录等信息,将其与其他商品的向量进行比较,从而推荐最符合用户兴趣的商品。 在文本分类中,向量化可以将文章转换为向量,然后通过比较不同文章的向量,实现自动分类。 这些应用程序的实现都离不开数据库向量化技术的支持。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 向量数据库

“向量数据库落地通常 (向量数据库是什么)” 的相关文章

向量数据库是什么-简易百科 (向量数据库是什么意思)

向量数据库是什么-简易百科 (向量数据库是什么意思)

引言 随着大数据时代的到来,数据存储和处理成为了至关重要的一环。传统的关系型数据库已无法满足某些场景的需求,例如大规模高维数据的处理和分析。在这种背景下,向量数据库应运而生,为解决大规模向量...

纯向量数据库和向量插件的局限-未来向量技术发展趋势 (向量数据库是什么)

纯向量数据库和向量插件的局限-未来向量技术发展趋势 (向量数据库是什么)

For nearly a year, the debate surrounding vector databases has persisted, yet we have lacked a com...

抖音云原生向量数据库的演变-从非主流到新常态 (啥叫云原生)

抖音云原生向量数据库的演变-从非主流到新常态 (啥叫云原生)

向量数据库:非结构化数据检索的新利器 一、向量数据库产生的背景 1、非结构化数据检索问题 传统上,数据通常被存储在结构化表格中,具有固定的字段和类型。随着互联网和社交媒体的兴起,非结构化数据...

三大开源向量数据库大比拼-深度学习与数据科学时代的比较

三大开源向量数据库大比拼-深度学习与数据科学时代的比较

向量数据库的定义 最简单的定义是,向量数据库将信息存储为向量(向量嵌入),向量是数据对象的数值版本。因此,向量嵌入是针对非常大的非结构化或半非结构化数据集进行索引和搜索的强大方法。这些数据集...

TensorDB-GPU-加速的未来-高性能向量数据库与 (tensorflow)

TensorDB-GPU-加速的未来-高性能向量数据库与 (tensorflow)

向量检索是一项强大的信息处理技术,它将文本、图像、音频等数据转化为数学向量,从而实现高效的搜索和分析功能,向量数据库作为大模型的一项重要基础设施已经被广泛应用。当前,全球范围内从事相关行业的公司纷...

推进产业开展-腾讯云联结50家企业独特编制-国际首个向量数据库规范颁布 (推进产业发展工作)

推进产业开展-腾讯云联结50家企业独特编制-国际首个向量数据库规范颁布 (推进产业发展工作)

11月15日,在腾讯云向量数据库技术及产业峰会上,腾讯云片面更新向量数据库多项外围性能,最高允许千亿级向量规模和500万QPS峰值才干,同时和信通院一同联结50多家企业独特颁布了国际首个向量数据库...