大模型崛起,向量数据库却凉透了?老码农这样看

【向量数据库】Milvus 向量数据库介绍 Milvus是一个于2019年创建的数据库,其目标是存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大规模嵌入向量。作为一个专门设计用于处理输入向量查询的数据库,它能够在万亿级别上索引向量。与现有的关系型数据库主要处理按照预定义模式的结构化数据不同,Milvus从底层开始设计,处理从非结构化数据转换而来的嵌入向量。随着互联网的发展与演进,非结构化数据变得越来越普遍,包括电子邮件、论文、物联网传感器数据、Facebook照片、蛋白质结构等等。 阅读详情

不论是RAG,还是Agent,几乎每个LLM 驱动的应用程序都可能会用到向量数据库。那么,向量数据库是什么?与传统数据库有何不同?又如何选择向量数据库呢?本文是老码农关于向量数据库的学习笔记。

一、什么是向量数据库?

首先,我们需要理解什么是向量?

向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点,例如一个词或一张图片,由描述其许多特性的值的集合组成。这些变量有时被称为“特征”或“维度”。例如,一张图片可以表示为像素值的向量,整个句子也可以表示为单词嵌入的向量。

一些常用的数据向量如下:

  • 图像向量,通过深度学习模型提取的图像特征向量,这些特征向量捕捉了图像的重要信息,如颜色、形状、纹理等,可以用于图像识别、检索等任务;
  • 文本向量,通过词嵌入技术如Word2Vec、BERT等生成的文本特征向量,这些向量包含了文本的语义信息,可以用于文本分类、情感分析等任务;
  • 语音向量,通过声学模型从声音信号中提取的特征向量,这些向量捕捉了声音的重要特性,如音调、节奏、音色等,可以用于语音识别、声纹识别等任务。

向量数据库是一种将数据存储为高维向量的数据库,高维向量是特征或属性的数学表示。每个向量都有一定数量的维度,根据数据的复杂性和粒度,维度可以从几十到几千不等。向量通常是通过对原始数据(如文本、图像、音频、视频等)应用某种变换或嵌入函数来生成的。嵌入函数可以基于各种方法,例如机器学习模型、单词嵌入、特征提取算法。向量数据库采用索引策略来简化向量相似的特定查询。这在机器学习应用程序中特别有用,因为相似性搜索经常用于发现可比较的数据点或生成建议。

图片

向量数据库的主要功能包括:

  • 管理: 向量数据库以原始数据形式处理数据,能够有效地组织和管理数据,便于AI模型应用。
  • 存储: 能够存储向量数据,包括各种AI模型需要使用到的高维数据。
  • 检索: 向量数据库特别擅长高效地检索数据,这一个特点能够确保AI模型在需要的时候快速获得所需的数据。这也是向量数据库能够在一些推荐系统或者检索系统中得到应用的重要原因。

向量数据库的主要优点是,它允许基于数据的向量距离或相似性进行快速准确的相似性搜索和检索。这意味着,可以使用向量数据库,根据其语义或上下文含义查找最相似或最相关的数据,而不是使用基于精确匹配或预定义标准查询数据库的传统方法。向量数据库可以搜索非结构化数据,但也可以处理半结构化甚至结构化数据。例如,可以使用向量数据库执行以下操作,根据视觉内容和风格查找与给定图像相似的图像,根据主题和情感查找与给定文档相似的文档,以及根据功能和评级查找与给定产品相似的产品。

二、向量数据库的工作机理

向量数据库的构建是为了适应向量嵌入的特定结构,并且它们使用索引算法根据向量与查询向量的相似性来有效地搜索和检索向量。

向量数据库的工作原理可以通过CPU和GPU的工作原理进行类比。CPU和GPU分别是计算机的运算和图形处理核心,而向量数据库则是大模型的记忆和存储核心。在大模型学习阶段,向量数据库接收多模态数据进行向量化表示,让大模型在训练时能够更高效地调用和处理数据。通过多线程机制和矩阵运算,GPU提供了强大的计算能力,让大模型的训练变得更加快速和高效。

区别于传统数据库,向量数据库主要有三点不同:数据向量化,向量检索和相似度计算。数据的向量化采用embedding 技术, 嵌入作为一个桥梁,将非数字数据转换为机器学习模型可以使用的形式,使它们能够更有效地识别数据中的模式和关系。一般的,文本是一维向量,图像是二维矩阵,视频相当于三维矩阵。这些嵌入实质上是存储数据的上下文表示的数字列表(即向量)。在存储层内,数据库以m个向量堆栈的形式存储,每个向量使用n个维度表示一个数据点,总大小为m×n。为了查询性能的原因,这些堆栈通常通过分片进行划分。

向量检索是输入一个向量,从数据库中查找与输入向量最相似的topN个向量返回。要在向量数据库中执行相似性搜索和检索,需要使用表示所需信息或条件的查询向量。查询向量可以从与存储向量相同类型的数据导出,或者从不同类型的数据导出。使用相似性度量来计算两个向量在向量空间中的距离。相似性度量可以基于各种度量,如余弦相似性、欧氏距离、向量内积,hamming距离、jaccard指数。

其中,向量检索算法是向量数据库的核心之一。向量检索可以看为是近似最近邻搜索,通过预先的索引构建来减小数据查询时的搜索空间,加快检索速度。目前主要的几种检索算法有:

  • 基于树的方法,例如KDTree和Annoy
  • 基于图的方法,例如HNSW
  • 基于乘积量化的方法,例如SQ和PQ
  • 基于哈希的方法,例如LSH
  • 基于倒排索引的方法

向量数据库中的索引可以按照数据结构和压缩级别两个层次进行组织实现。根据数据结构建立索引的分类如下:

在这里插入图片描述

根据数据压缩方式建立索引, 主要包括平坦压缩和量化压缩。平坦压缩是指以未经修改的形式存储向量的索引,量化中索引的底层向量被分解成由较少字节组成的块(通常通过将浮点数转换为整数)以减少内存消耗和搜索过程中的计算成本。

图片

相似性搜索和检索的结果通常是与查询向量具有最高相似性得分的向量的排序列表。然后,您可以访问与原始源或索引中的每个向量关联的相应原始数据。

三、向量数据库的分类

根据向量数据库的的实现方式, 我们可以将向量数据库大致分为4类:原生的向量数据库、支持向量的全文检索数据库、支持向量的NoSQL数据库和支持向量的关系型数据库。

1. 原生的向量数据库

原生的向量数据库是专门为存储和检索向量而设计的。包括Chroma, LanceDB, Marqo, Milvus/ Zilliz, Pinecone, Qdrant, Vald, Vespa, Weaviate等, 所管理的数据是基于对象或数据点的向量表示进行组织和索引。这里只介绍其中的三种,具体信息可以参考各自的官网。

  • Faiss

Faiss是一个用于高效相似性搜索和密集向量聚类的开源库。Faiss是用C++编写的,带有完整的Python/numpy包装器,一些常用算法都有GPU实现,成为了很多开源向量数据库的基础。

图片

Faiss能构建不同的索引类型,并提供了欧式距离或者点积的相似度计算功能,有些索引类型是简单的基线,例如精确搜索。大多数可用的索引结构需要考虑搜索时间,搜索质量,每个索引向量使用的内存等。

Faiss支持多种向量搜索技术,提供了能够在不同大小的向量集中搜索的算法,甚至可以处理那些超过内存容量的向量集。

Faiss的主要优势之一是速度和可扩展性,即使在具有数十亿个向量的数据集中也可以进行快速搜索。此外,还提供了用于评估和调整参数的辅助代码。

  • Pinecone

Pinecone是一个基于云的向量数据库,可以开发实时相似性搜索应用,能够以毫秒级的延迟存储和探索高维向量嵌入,适用于推荐系统、图片和视频搜索以及自然语言处理等应用。

Pinecone 的主要功能包括自动索引、实时更新、查询自动调整和用于与当前流程进行简单交互的 REST API。其架构专为可扩展性和稳健性而构建,可以轻松管理海量数据,同时保持高可用性。

图片

Pinecone是一个可以托管的向量数据库平台,也就是说有商用方案,也有免费使用方案。其主要特点包括:

  • 支持全托管服务
  • 高度可伸缩
  • 实时数据摄取
  • 低延迟的搜索
  • 与LangChain集成

Pinecone 采用了多种安全措施来保护用户的数据安全和隐私。多层次的访问控制机制可以控制用户的访问权限和操作权限,同时采用了数据加密、传输加密等技术来保护数据的安全性,还提供了数据备份和恢复等功能,可以防止数据丢失和损坏。

Pinecone 在性能方面表现非常出色,它能够支持高达 1 百万次的QPS,且具有低延迟和高吞吐量的特点,还具有分布式部署、实时索引构建和高效的向量相似度搜索等优点,可以帮助用户快速处理大规模的向量数据。

此外,Pinecone 还支持多种编程语言和框架,如 Python、Java、TensorFlow 等,使得用户可以轻松地将其集成到自己的应用程序中。

  • Milvus

Milvus是一个开源的分布式向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。

Milvus 基于 Faiss、Annoy、HNSW 等向量搜索库构建,可以轻松管理数百万个实体,可以根据不同的数据特点选择最合适的索引算法,核心是解决稠密向量相似度检索的问题。在向量检索的基础上,Milvus 支持数据分区分片、数据持久化、增量数据摄取、标量向量混合查询、time travel 等功能,同时大幅优化了向量检索的性能,可满足任何向量检索场景的应用需求。

图片

Milvus 还具有分布式部署、高可用性和高扩展性等优点,可以帮助用户快速处理海量的向量数据。它也提供了多种安全措施来保护用户的数据安全和隐私,支持 SSL/TLS 加密和访问控制等技术,可以防止数据被非法访问和窃取,还提供了数据备份和恢复等功能,可以保护数据的完整性和可用性。

此外,Milvus 还提供了多种客户端 SDK,如 Python、Java、C++ 等,使得用户可以方便地使用不同的编程语言来访问和操作 Milvus。

2.支持向量的全文检索数据库

这类数据库包括Elastic/Lucene、OpenSearch和Solr。它们都具有丰富的文本检索功能,如可定制的标记器,分词器,停用词列表和N-grams等,大部分都基于开源库,且有大型集成的生态系统,包括了向量库。

例如,Elasticsearch,是一个支持各种类型数据的分布式搜索和分析引擎。Elasticsearch在7.3 版本中,添加了对向量数据索引的支持,支持混合查询,但是向量检索采用的仍然是暴力计算,性能损耗较大。在8.0版本引入了knn search其实就是一种近似最近邻搜索算法,相似度支持欧式距离,点积和余弦相似性,knn search底层其实使用的是HNSW。遗憾的是,这种方式无法进行混合检索。

3.支持向量的NoSQL 数据库

几乎所有这些NoSQL数据库都是最近才通过添加向量搜索扩展而具备向量能力的,所以如果要是使用的话一定要做好测试。Cassandra,Rockset,Azure Cosmos DB和MongoDB等都纷纷宣布了增加向量搜索的计划。NoSQL数据库的向量搜索性能可能差别很大,这取决于所支持的向量函数、索引方法和硬件加速。

例如,RedisVector是一个向量数据库,专注于向量数据的有效处理。它擅长存储和分析大量向量数据,包括张量、矩阵和数值数组。通过 利用内存数据存储Redis,RedisVector可提供高性能的查询响应时间。它提供内置的索引和搜索功能,可以快速搜索和查找相似的载体,RedisVector还支持各种距离测量,用于比较向量和执行复杂的分析操作。通过对向量数据的操作,包括元素级算术和聚合,RedisVector 为处理向量提供了一个多功能环境,适用于处理和分析高维向量数据的机器学习应用,从而能够创建定制的推荐系统和基于相似性的准确搜索。

对于支持向量的NoSQL 数据库,探索尝试未尝不可,但在生产环境中使用要慎之又慎。

4.支持向量的SQL 数据库

这些大都是关系型数据库并且支持sql查询,例如SingleStoreDB, PostgreSQL, Clickhouse和Kinetica的pgvector/Supabase Vector等。它们都宣布包含了向量搜索功能,如点积,余弦相似度,欧几里得距离和曼哈顿距离,并且使用相似度分数找到n个最近邻。由于提供了混合查询,可以将向量与其他数据结合起来以获得更有意义的结果。另外,大多数SQL数据库都可以作为服务部署,可以在云上进行完全的管理。

图片

例如,Postgres 通过 pg_vector 和 pg_embdding 两个插件来实现向量数据库,让PG数据库支持向量索引检索的能力。其索引算法使用的是基于Faiss的IVF Flat索引,提供了优异的召回率。

四、向量数据库的一些对比

1.编程语言支持

Chroma是一个Python/TypeScript包装器,基于C++编程语言的有OLAP数据库Clickhouse以及开源向量索引HNSWLib。但如今,快速响应且可扩展的数据库通常使用现代语言如Golang或Rust编写。在专为向量数据库而构建的供应商中,唯一使用Java构建的是Vespa。

2.开源与否

Pinecone是完全闭源的,Zilliz也是一个闭源的完全托管的商业解决方案,但它完全建立在Milvus之上,其他向量数据库至少在代码库方面是源代码可用的,具体的许可证决定了代码的可许可性以及如何部署。

图片

3.检索算法

众多向量数据库的检索算法都采用了HNSW,其中,Milvus 的检索算法支持最为丰富。

在这里插入图片描述

4.部署方式

向量数据库的典型部署方式包括本地部署和托管/云原生,两者都遵循CS架构。还有一种新的选择是嵌入式模式,其中数据库本身与应用程序代码紧密耦合,以serverless的方式运行。目前,只有Chroma和LanceDB可用作嵌入式数据库。

图片

综上所述,主流向量数据库的部分指标对比如下:

图片

此外,在选择向量数据库时,还需要特别考量以下因素:

  • 可扩展性: 能够高效处理高维度大数据量并能够根据数据需求的增长进行扩展。
  • 性能: 速度和效率对数据库至关重要,需要在数据搜索、搜索性能和执行各种向量操作方面表现出色。
  • 灵活性: 支持广泛的数据类型和格式,并且可以轻松适应不同的应用场景。
  • 易用性: 这些数据库易于使用和管理,易于安装和配置,具有直观的API,并且有良好的文档和支持。
  • 可靠性: 需要有可靠和稳定的声誉。

五、向量数据库与其他类型数据库的对比

传统数据库,如关系数据库,旨在存储结构化数据。这意味着数据被组织到预定义的表、行和列中,确保数据的完整性和一致性。传统数据库往往针对CRUD进行优化,旨在高效地创建、读取、更新和删除数据条目,使其适用于从 Web 服务到企业软件的各种应用程序。但是,一旦定义了数据库结构,进行更改可能会非常复杂且耗时。这种刚性可确保数据一致性,但灵活性可能不如某些现代数据库的无模式或动态模式性质。

图片

与在行和列中存储多种标准数据类型(如字符串、数字和其他标量数据类型)不同,向量数据库引入了向量这种新的数据类型,并围绕此数据类型构建优化,专门用于实现快速存储、检索和最近邻搜索语义。在传统数据库中,使用查找完全匹配项的索引或键值对对数据库中的行进行查询,并返回这些查询的相关行。

特别地, 向量数据库与图数据库的对比如下:

图片

六、向量数据库在大模型中的应用

基于大模型的应用经常一些面临挑战,例如生成不准确或不相关的信息;缺乏事实一致性或常识;重复或自相矛盾;有偏见的或令人反感等。为了克服这些挑战,可以使用向量数据库来存储与所需领域的不同主题、关键词、事实、观点和/或来源的信息。然后,在使用一个大模型时,通过AI插件从向量数据库中传递信息,以生成更具信息性和吸引力的内容,符合目标意图和指定风格。

借助向量数据库,我们能够快速加载和存储事件作为嵌入,并使用向量数据库作为为AI模型提供动力的大脑,提供上下文信息,长期记忆检索,语义上的数据关联等等。向量数据库的典型使用方式如下:

\1. 使用embeding 技术创建向量

\2. 将这些向量存储到向量数据库

\3. 应用索引策略来组织管理向量

\4. 使用查询向量执行相似性搜索

\5. 从向量数据库中取得相似的向量

实际上,向量数据库在不同的领域和应用程序中都有着许多用例,涉及自然语言处理(NLP)、计算机视觉(CV)、推荐系统(RS)和其他需要对数据进行语义理解和匹配的领域。在向量数据库中存储信息的一个用例是使大型语言模型(LLM)能够基于AI插件生成更相关、更连贯的文本。

由于向量数据库将要查询的数据存储为嵌入向量,并且语言模型(LLM)也将其内部的知识编码为嵌入向量,因此在生成式问答应用中是天生一对。向量数据库充当知识库的功能,而LLM可以直接在嵌入空间中查询数据的子集,一般可以使用以下方法进行操作:

\1. 用户通过界面用自然语言提出问题。

\2. 问题的文本被传递给嵌入模型,然后返回一个句子嵌入向量。

\3. 问题向量被传递给向量数据库,通过ANN搜索返回与之最相似的前k个结果。这一步非常关键,因为它大大缩小了LLM在下一步中的搜索空间。

\4. 构建一个LLM提示(基于开发者预定义的模板),将其转换为嵌入向量,并传递给LLM。使用类似LangChain的框架可以方便地执行此步骤,因为可以动态构建提示语,并调用LLM的本地嵌入模块,而无需为每个工作流编写大量自定义代码。

\5. LLM在前k个结果中搜索信息,并生成问题的答案,答案发送回用户。

图片

结合LLM和向量数据库可以构建许多其他有用的应用程序。然而,了解向量数据库的一些潜在限制是必要的。在搜索应用中,它们不一定优先考虑关键词短语的精确匹配来确定相关性。存储和查询的数据必须适应所使用的嵌入模型的最大序列长度(对于类似BERT的模型,这个长度不超过几百个词)。目前,最好的方法是利用像LangChain和LlamaIndex这样的框架,将数据分块或压缩成适合底层模型上下文的固定大小的向量。

同样,向量数据库也面临着许多与其他数据库技术相同的挑战, 需要继续努力提高可扩展性、近似精度、延迟性能和经济性。许多向量数据库在核心数据库能力方面需要提升,例如安全性、弹性、运营支持和工作负载支持的多样化。随着AI应用的成熟,未来需要的不仅仅只限于向量搜索功能。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
一篇文章带你学会向量数据库Milvus(一) 向量数据库是一种专用系统,旨在通过向量嵌入和数值表示来管理和检索非结构化数据,这些数据项捕获图像、音频、视频和文本内容等数据项的本质。与使用精确搜索操作处理结构化数据的传统关系数据库不同,向量数据库在使用近似最近邻 (ANN) 算法等技术进行语义相似性搜索方面表现出色。此功能对于开发跨各个领域的应用程序(包括推荐系统、聊天机器人和多媒体内容搜索工具)以及解决 AI 和 ChatGPT 等大型语言模型带来的挑战至关重要,例如理解上下文和细微差别以及 AI 幻觉。像Milvus。 阅读详情

相关推荐

AI应用开发实战指南:从RAG到Agent的现代技术栈解析

在人工智能技术快速发展的今天,检索增强生成(RAG)和智能体(Agent)已成为构建现代AI应用的核心技术。RAG通过将外部知识库与生成模型结合,有效解决了模型知识更新滞后和事实性错误的问题,其原理是先将文档向量化存储,再根据查询检索相关片段作为生成依据。智能体则代表了一种更高级的系统设计范式,通过让大模型作为决策中枢,协调调用各种工具来完成复杂任务。这两项技术的工程价值在于能够显著提升AI应用的准确性、可控性和自动化程度,广泛应用于智能客服、数据分析、知识管理等领域。本文聚焦于如何在实际项目中有效整合RA

356

10分钟了解向量数据库

向量数据库(Vector Database),也叫矢量数据库,主要用来存储和处理向量数据。在数学中,向量是有大小和方向的量,可以使用带箭头的线段表示,箭头指向即为向量的方向,线段的长度表示向量的大小。两个向量的距离或者相似性可以通过汉明距离、欧式距离或者余弦距离得到。图像、文本和音视频这种非结构化数据都可以通过某种变换或者嵌入学习转化为向量数据存储到向量数据库中,从而实现对图像、文本和音视频的相似性搜索和检索。

zxm2015的博客 8万+

向量数据库简介

向量数据库(Vector Database)是一种专门用于存储和查询向量数据的数据库系统。向量数据库通常使用高效的向量索引技术,支持基于向量相似度的查询和检索,可以应用于图像搜索、自然语言处理、推荐系统、机器学习等领域。与传统的关系型数据库不同,向量数据库通常使用基于向量的数据模型,将向量作为数据的核心表示形式。向量数据库可以存储和处理大量的向量数据,支持高效的向量相似度计算和查询。常见的向量索引技术包括 KD-Tree、LSH、HNSW 等,它们可以在高维空间中快速定位和检索向量数据。

zhangzhechun的专栏 2416

什么是向量数据库?向量数据库概念,详细入门

向量数据库是一种专门用于存储和查询向量数据的数据库。向量数据也就是embedding向量。典型结构是一个一维教组,其中的元素是教值(通常是浮点数)。这些数值表示对象或数据点在多维空间中的位置、特征或属性。

秃了也弱了 1万+

2024年程序员生存报告:哪些技术正在崛起?

2023年,大家还在讨论“AI会不会取代程序员”;2024年,问题变成了——“不会用AI的程序员,会不会被取代?企业正在抢的“技术缺口”是什么?哪些技术能帮你从“写CRUD的码农”变成“设计AI系统的工程师”?学这些技术需要踩哪些坑?范围覆盖:AI工程化、系统语言、数据基础设施、可持续技术四大方向。生成式AI工程化:不是“让AI写代码”,而是“把AI模型做成可部署、可监控、可迭代的产品”(比如把ChatGPT变成企业专属的AI客服);边缘智能。

架构师的AI之路,分享AI应用开发架构的学习与实践。 533

Qt 插件开发 plugin 超详细 有源码

Qt 插件化开发框架类似于前后端的微服务的场景,授权哪个微服务则前端可以使用哪个微服务,插件就行硬件插卡一样,可以被随时删除、插入和修改,所以结构很灵活,容易修改,方便软件的升级和维护;插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已;动态库需要访问.lib文件,而且在程序运行时必须保证.lib存在,否则无法正常启动;

q610098308的专栏 6546

年薪98w!又一新兴岗位崛起!这才是码农们未来5年最好的就业方向!

曾经热门的开发框架、大数据工具等,已不再是就业的金钥匙。如果认为会调用API就是懂大模型、能进行二次开发,那就大错特错了。制造、医疗、金融等各行业都在加速AI应用落地,未来企业更看重能用AI大模型技术重构业务流的技术人。

大模型研究中心 892

【VSCode】【Clangd】从零构建:基于LLVM/Clangd+MINGW+CMake的Windows高性能C/C++开发环境实战

本文详细介绍了如何在Windows平台搭建基于LLVM/Clangd+MINGW+CMake的高性能C/C++开发环境。通过VSCode配置Clangd语言服务器,结合MINGW提供的GCC工具链和CMake的跨平台构建能力,实现轻量级、高效率的开发体验。文章包含从环境准备到实战配置的完整指南,特别适合追求开发效率和跨平台兼容性的开发者。

weixin_28839629的博客 313

收藏备用|Java程序员中年危机破局:AI大模型时代,自我赋能指南(小白/程序员必看)

对于正在迷茫择业、想转行提升,或是刚入门的程序员、编程小白来说,有一个问题几乎人人都在问:未来10年,什么领域的职业发展潜力最大?答案只有一个:人工智能(尤其是大模型方向)当下,人工智能行业正处于爆发式增长期,其中大模型相关岗位更是供不应求,薪资待遇直接拉满——字节跳动作为AI领域的头部玩家,给硕士毕业的优质AI人才(含大模型相关方向)开出的月基础工资高达5万—6万元;即便是非“人才计划”的普通应聘者,月基础工资也能稳定在4万元左右。

大模型教程的博客 638

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 162

保姆级教程:用Qlib和LightGBM从零搭建你的第一个AI量化选股策略(附完整代码)

本文提供了一份详细的教程,教你如何使用Qlib和LightGBM从零搭建AI量化选股策略。教程涵盖了环境配置、数据获取、特征工程、模型训练和策略回测等关键步骤,并附有完整代码和常见问题解决方案,适合量化投资初学者快速上手。

weixin_29191081的博客 446

收藏!AI大模型时代,Java程序员的挑战与破局机遇

在AI大模型席卷全球技术圈的当下,Java程序员正站在职业发展的十字路口。本文深入剖析Java开发者面临的行业困境与潜在机遇,明确AI并非取代程序员的“威胁”,而是重构开发模式、提升核心竞争力的赋能利器。文中不仅梳理了“AI+Java”复合型人才的成长逻辑,更提供了可落地的学习路径与实践方案,助力小白程序员入门进阶、资深开发者突破瓶颈,在技术变革中实现从焦虑到破局的转型。

python12345_的博客 549

【BUG已解决】ImportError: cannot import name ‘OpenAI‘ from ‘openai‘ 解决方案

的核心是版本不匹配用确认当前版本如果是 0.x 版本 →升级到 1.x升级后代码语法要同步改为团队协作项目务必在中锁定版本号,避免"我这能跑,你那不能跑"的问题对接国产模型时,只需替换base_url参数,SDK 调用方式完全一致。

一键难忘的博客 1万+

2026年Java开发者破局指南:从“CRUD工程师”到“AI原生架构师”的进阶之路

2026年的Java开发者,不必因为AI的崛起而感到被替代。AI需要工程化,而工程化正是Java的主场。当你能够用Java稳健地撑起一个高并发、低成本、可观测的AI应用时,你就已经完成了从“码农”到“AI原生架构师”的蜕变。技术在变,但解决问题的本质未变。保持学习,拥抱变化,Java的未来依然滚烫。标签: #Java #AI原生 #SpringAI #大模型 #架构设计 #2026技术趋势版权声明:本文为原创技术分享,转载请注明出处。欢迎在评论区交流你的Java+AI实战经验!

our_times的博客 379

十九、帧间预测编码_2、解码、显示顺序与图像管理、参考帧管理

一、基本概念 1.1H.264的解码顺序和显示顺序: 解码过程中,每一帧的数据按照相应的NAL Unit在码流中的顺序传入解码器进行解码 由于B帧的存在,视频帧在输出时会进行顺序重排 1.2frame_num与POC frame_num:表示解码顺序 POC:表示显示顺序(picture_order_count) 在H.264的码流中,表示解码顺序和显示顺序分别有相应的语法元素表示。这两个值都会在码流中保存,并在读取slice信息时解析(SliceHeader中) 1.3参考帧列表 某一帧图像在解

叮咚的博客 1330

Google Earth Engine——使用STARFM 图像融合算法将Landsat 和 MODIS 融合得出2000-2023 NDVI长时序图(空间分辨率为 30 米、时间分辨率为 16 天)

非本地入侵物种是全球生态系统面临的主要威胁之一。野葛(Pueraria montana)是一种生长迅速的藤本植物,原产于亚洲,现已入侵美国一些地区,因此该物种的管理成为一个重要问题。利用 Landsat 和 MODIS 平台收集的数据,计算了 2000 年至 2015 年肯塔基州三个侵扰地点的归一化差异植被指数(NDVI)估算值。使用 STARFM 图像融合算法将大地遥感卫星和 MODIS 得出的 NDVI 结合成空间分辨率为 30 米、时间分辨率为 16 天的时间序列。

此星光明博客 2509

重构智能边界:基于 ModelEngine 的企业级 AI Agent 全链路开发与编排深度实践教学!

本文探讨了AI 2.0时代下企业级大模型落地的关键挑战与解决方案。基于ModelEngine平台,研究从Prompt Engineering向Flow Engineering的转变,提出通过智能体(Agent)与工作流编排(Workflow)解决复杂业务场景的"最后一公里"问题。文章详细介绍了知识库智能分段、提示词自动生成、MCP协议集成等核心功能,并通过"企业级智能研报分析系统"案例,展示了多智能体协作、可视化编排与调试等技术创新。相比Dify、Coze等平台,Mo

欢迎来到菜鸟不学编程的博客 1121

Synopsys逻辑工艺库(DC综合)

逻辑库包括仅与综合过程有关的信息且通过DC用于设计的综合和优化。这一信息包括引脚到引脚的时序、面积、引脚类型和功耗以及其他DC需要的必须数据。逻辑库是一个文本(通常扩展名".lib"),通过使用Library Compiler(LC)编译生成带有扩展名名".db"的二进制文件。以SMIC的逻辑综合库为例:库文件下载地址。

baidu_34971492的博客 2424

什么是Vector Database(向量数据库)?

嵌入模型将各种数据(例如文本、图像、图表和视频)转换为数字向量,从而在多维向量空间中捕捉其含义和细微差别。嵌入技术的选择取决于应用需求,平衡语义深度、计算效率、要编码的数据类型和维数等因素。将向量映射到多维空间可以对向量的语义相似性进行细致入微的分析,从而显著提高搜索和数据分类的准确性。嵌入模型在使用 AI 聊天机器人、大型语言模型 (LLM) 和带有向量数据库的检索增强生成 (RAG) 的 AI 应用中起着至关重要的作用,以及搜索引擎和许多其他用例。

专注于人工智能领域的小何尚 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

10个最流行的向量数据库【AI】

矢量数据库是一种将数据存储为高维向量的数据库,高维向量是特征或属性的数学表示。每个向量都有一定数量的维度,范围从几十到几千不等,具体取决于数据的复杂性和粒度。推荐:用快速搭建3D场景。矢量数据库(Vector Database)和矢量开发库(Vector Library)都是实现矢量相似性搜索的技术,但它们在功能和可用性上有所不同。矢量数据库可以存储和更新数据,处理各种类型的数据源,在数据导入期间执行查询,并提供用户友好和企业就绪的功能。

新缸中之脑 4万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一文全面了解向量数据库

首先,我们需要理解什么是向量?向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点,例如一个词或一张图片,由描述其许多特性的值的集合组成。这些变量有时被称为“特征”或“维度”。例如,一张图片可以表示为像素值的向量,整个句子也可以表示为单词嵌入的向量。图像向量,通过深度学习模型提取的图像特征向量,这些特征向量捕捉了图像的重要信息,如颜色、形状、纹理等,可以用于图像识别、检索等任务;

StackFlow的博客 5302

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

2024年精选推荐的16个向量数据库:提升你的AI应用性能

随着人工智能技术的不断进步,向量数据库在现代数据管理和机器学习应用中扮演着越来越重要的角色。它们提供了处理和检索高维向量数据的能力,这对于构建高效的AI模型和搜索引擎至关重要。上述探讨了16个2024年最值得关注的向量数据库,这些数据库在性能、可扩展性、易用性和特定应用场景的支持方面各有特色。无论是在寻找一个托管的解决方案还是一个可以自托管的开源项目,无论需求是处理图像、文本还是其他类型的数据,这些向量数据库都能提供支持。

BASK2312的博客 1万+

什么是向量数据库?

我们目前正处于人工智能革命的中期。这场革命正在全面改变各行各业,并带来了伟大的创新,但也带来了新的挑战。对于涉及大型语言模型、生成式人工智能和语义搜索的应用程序而言,高效地处理数据变得比以往任何时候都更加重要。所有这些新应用程序都依赖于向量嵌入,这是一种数据表示形式。向量嵌入携带着对人工智能理解和长期记忆非常重要的语义信息,这些记忆可以在执行复杂任务时提供参考。向量嵌入是由人工智能模型(如大型语言模型)生成的,具有许多属性或特征,使其表示变得难以管理。

FrenzyTechAI的博客 3110

什么是 向量数据库(Vector Database)

向量数据库(Vector Database)是一种专门设计用于存储、索引和管理高维向量数据的数据库系统。这些向量通常是机器学习模型(如深度学习模型)生成的嵌入(embeddings),用于表示文本、图像、音频等数据的语义特征。向量数据库的核心目标是高效地支持向量相似性搜索(Similarity Search),以便在海量数据中快速找到与查询向量最相似的向量。

彬彬侠的博客 4858

向量数据库详解

向量数据库是专为存储和检索高维向量(数值数组)而优化的数据库,广泛应用于AI语义检索、推荐系统等场景。与传统数据库不同,它通过相似度查找(如ANN算法)实现高效检索,支持混合查询(向量+结构化数据)。主流产品包括Milvus、Faiss等,具有分布式扩展、高性能索引等特点。典型操作包括向量插入、相似度搜索等,常与LLM结合实现RAG等智能应用。部署方式灵活,支持Docker、K8s等,提供多语言SDK便于集成开发。

onlymscn的博客 2510

【向量检索】之向量数据库Milvus,Faiss详解及应用案例

向量数据库、Milvus、FAISS、向量化、相似度计算、索引构建、ANN(Approximate Nearest Neighbor)。

larrino的博客 1万+
上一篇: RAG的基石:大语言模型文本向量化能力对比
下一篇: 如何使用Hugging Face微调大语言模型(LLMs)
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值