嵌入模型与向量数据库
学习目标
- 理解向量表征
- 向量与文本向量
- 向量间的相似度计算
- Embedding Models嵌入模型原理及选择
- 向量数据库概述及核心原理
- Chroma向量数据库核心操作
- Milvus向量数据库扩展学习
1. 向量表征(Vector Representation)
在人工智能领域,向量表征(Vector Representation)是核心概念之一。通过将文本、图像、声音、行为甚至复杂关系转化为高维向量(Embedding),AI系统能够以数学方式理解和处理现实世界中的复杂信息。这种表征方式为机器学习模型提供了统一的“语言”。
1.1. 向量表征的本质
向量表征的本质:万物皆可数学化
(1)核心思想
-
降维抽象:将复杂对象(如一段文字、一张图片)映射到低维稠密向量空间,保留关键语义或特征。
-
相似性度量:向量空间中的距离(如余弦相似度)反映对象之间的语义关联(如“猫”和“狗”的向量距离小于“猫”和“汽车”)。
(2)数学意义
-
特征工程自动化:传统机器学习依赖人工设计特征(如文本的TF-IDF),而向量表征通过深度学习自动提取高阶抽象特征。
-
跨模态统一:文本、图像、视频等不同模态数据可映射到同一向量空间,实现跨模态检索(如“用文字搜图片”)。
1.2. 向量表征的典型应用场景
(1)自然语言处理(NLP)
-
词向量(Word2Vec、GloVe):单词映射为向量,解决“一词多义”问题(如“苹果”在“水果”和“公司”上下文中的不同向量)。
-
句向量(BERT、Sentence-BERT):整句语义编码,用于文本相似度计算、聚类(如客服问答匹配)。
-
知识图谱嵌入(TransE、RotatE):将实体和关系表示为向量,支持推理(如预测“巴黎-首都-法国”的三元组可信度)。
(2)计算机视觉(CV)
-
图像特征向量(CNN特征):ResNet、ViT等模型提取图像语义,用于以图搜图、图像分类。
-
跨模态对齐(CLIP):将图像和文本映射到同一空间,实现“描述文字生成图片”或反向搜索。
(3)推荐系统
- 用户/物品向量:用户行为序列(点击、购买)编码为用户向量,商品属性编码为物品向量,通过向量内积预测兴趣匹配度(如YouTube推荐算法)。
(4)复杂系统建模
-
图神经网络(GNN):社交网络中的用户、商品、交互事件均表示为向量,捕捉网络结构信息(如社区发现、欺诈检测)。
-
时间序列向量化:将股票价格、传感器数据编码为向量,预测未来趋势(如LSTM、Transformer编码)。
1.3. 向量表征的技术实现
(1)经典方法
-
无监督学习:Word2Vec通过上下文预测(Skip-Gram)或矩阵分解(GloVe)生成词向量。
-
有监督学习:微调预训练模型(如BERT)适应具体任务,提取任务相关向量。
(2)前沿方向
-
对比学习(Contrastive Learning):通过构造正负样本对(如“同一图片的不同裁剪”为正样本),拉近正样本向量距离,推开负样本(SimCLR、MoCo)。
-
多模态融合:将文本、图像、语音等多模态信息融合为统一向量(如Google的MUM模型)。
-
动态向量:根据上下文动态调整向量(如Transformer的注意力机制),解决静态词向量无法适应多义性的问题
2. 什么是向量

2.1 文本向量(Text Embeddings)
- 将文本转成一组 N 维浮点数,即文本向量又叫 Embeddings
- 向量之间可以计算距离,距离远近对应语义相似度大小

2.2 文本向量是怎么得到的(选)¶
- 构建相关(正例)与不相关(负例)的句子对样本
- 训练双塔式模型,让正例间的距离小,负例间的距离大
例如:
2.3 向量间的相似度计算

# !pip install --upgrade numpy
# !pip install --upgrade openai

3. Embedding Models 嵌入模型
3.1. 什么是嵌入(Embedding)?
嵌入(Embedding)是指非结构化数据转换为向量的过程,通过神经网络模型或相关大模型,将真实世界的离散数据投影到高维数据空间上,根据数据在空间中的不同距离,反映数据在物理世界的相似度。
3.2. 嵌入模型概念及原理
1. 嵌入模型的本质
嵌入模型(Embedding Model)是一种将离散数据(如文本、图像)映射到连续向量空间的技术。通过高维向量表示(如 768 维或 3072 维),模型可捕捉数据的语义信息,使得语义相似的文本在向量空间 中距离更近。例如,“忘记密码”和“账号锁定”会被编码为相近的向量,从而支持语义检索而非仅关键词匹配。
2. 核心作用
-
语义编码:将文本、图像等转换为向量,保留上下文信息(如 BERT 的 CLS Token 或均值池化。相似度计算:通过余弦相似度、欧氏距离等度量向量关联性,支撑检索增强生成(RAG)、推荐系统等应用。
-
信息降维:压缩复杂数据为低维稠密向量,提升存储与计算效率。
3. 关键技术原理
-
上下文依赖:现代模型(如 BGE-M3)动态调整向量,捕捉多义词在不同语境中的含义。
-
训练方法:对比学习(如 Word2Vec 的 Skip-gram/CBOW)、预训练+微调(如 BERT)。
3.3. 主流嵌入模型分类与选型指南
Embedding 模型将文本转换为数值向量,捕捉语义信息,使计算机能够理解和比较内容的"意义"。选择 Embedding 模型的考虑因素:
最佳实践:为特定应用测试多个 Embedding 模型,评估在实际数据上的性能而非仅依赖通用基准。
1. 通用全能型
- BGE-M3:北京智源研究院开发,支持多语言、混合检索(稠密+稀疏向量),处理 8K 上下文,适合企业级知识库。
- NV-Embed-v2:基于 Mistral-7B,检索精度高(MTEB 得分 62.65),但需较高计算资源。
2. 垂直领域特化型
- 中文场景: BGE-large-zh-v1.5 (合同/政策文件)、 M3E-base (社交媒体分析)。
- 多模态场景: BGE-VL (图文跨模态检索),联合编码 OCR 文本与图像特征。
3. 轻量化部署型
- nomic-embed-text:768 维向量,推理速度比 OpenAI 快 3 倍,适合边缘设备。
- gte-qwen2-1.5b-instruct:1.5B 参数,16GB 显存即可运行,适合初创团队原型验。
选型决策树:
-
中文为主 → BGE 系列 > M3E;
-
多语言需求 → BGE-M3 > multilingual-e5;
-
预算有限 → 开源模型(如 Nomic Embed)
Embddding Leaderboard

3.4. OpenAI 新发布的两个 Embedding 模型
2024 年 1 月 25 日,OpenAI 新发布了两个 Embedding 模型
- text-embedding-3-large
- text-embedding-3-small
其最大特点是,支持自定义的缩短向量维度,从而在几乎不影响最终效果的情况下降低向量检索与相似度计算的复杂度。
通俗的说:越大越准、越小越快。 官方公布的评测结果:
注:MTEB 是一个大规模多任务的 Embedding 模型公开评测集
3.5. 嵌入模型使用
4. 向量数据库
4.1. 什么是向量数据库?
向量数据库,是专门为向量检索设计的中间件!
高效存储、快速检索和管理高纬度向量数据的系统称为向量数据库
一种专门用于存储和检索高维向量数据的数据库。它将数据(如文本、图像、音频等)通过嵌入模型转换为向量形式,并通过高效的索引和搜索算法实现快速检索。
向量数据库的核心作用是实现相似性搜索,即通过计算向量之间的距离(如欧几里得距离、余弦相似度等)来找到与目标向量最相似的其他向量。它特别适合处理非结构化数据,支持语义搜索、内容推荐等场景。
核心功能:
-
向量存储
-
相似性度量
-
相似性搜索

4.2. 如何存储和检索嵌入向量?
-
存储:向量数据库将嵌入向量存储为高维空间中的点,并为每个向量分配唯一标识符(ID),同时支持存储元数据。
-
检索:通过近似最近邻(ANN)算法(如PQ等)对向量进行索引和快速搜索。比如,FAISS和Milvus等数据库通过高效的索引结构加速检索。
4.3 向量数据库与传统数据库对比
- 数据类型
- 传统数据库:存储结构化数据(如表格、行、列)。
- 向量数据库:存储高维向量数据,适合非结构化数据。
- 查询方式
- 传统数据库:依赖精确匹配(如=、<、>)。
- 向量数据库:基于相似度或距离度量(如欧几里得距离、余弦相似度)。
- 应用场景
- 传统数据库:适合事务记录和结构化信息管理。
- 向量数据库:适合语义搜索、内容推荐等需要相似性计算的场景。
澄清几个关键概念:
- 向量数据库的意义是快速的检索;
- 向量数据库本身不生成向量,向量是由 Embedding 模型产生的;
- 向量数据库与传统的关系型数据库是互补的,不是替代关系,在实际应用中根据实际需求经常同时使用。
4.4. 主流向量数据库功能对比

- FAISS: Meta 开源的向量检索引擎 https://github.com/facebookresearch/faiss
- Pinecone: 商用向量数据库,只有云服务 https://www.pinecone.io/
- Milvus: 开源向量数据库,同时有云服务 https://milvus.io/
- Weaviate: 开源向量数据库,同时有云服务 https://weaviate.io/
- Qdrant: 开源向量数据库,同时有云服务 https://qdrant.tech/
- PGVector: Postgres 的开源向量检索引擎 https://github.com/pgvector/pgvector
- RediSearch: Redis 的开源向量检索引擎 https://github.com/RediSearch/RediSearch
- ElasticSearch 也支持向量检索 https://www.elastic.co/enterprise-search/vector-search
扩展阅读:https://guangzhengli.com/blog/zh/vector-database
4.5. Chroma 向量数据库
官方文档:https://docs.trychroma.com/docs/overview/introduction
1. 什么是 Chroma?
Chroma 是一款开源的向量数据库,专为高效存储和检索高维向量数据设计。其核心能力在于语义相似性搜索,支持文本、图像等嵌入向量的快速匹配,广泛应用于大模型上下文增强(RAG)、推荐系统、多模态检索等场景。与传统数据库不同,Chroma 基于向量距离(如余弦相似度、欧氏距离)衡量数据关联性,而非关键词匹配。
2. 核心优势
- 轻量易用:以 Python/JS 包形式嵌入代码,无需独立部署,适合快速原型开发。
- 灵活集成:支持自定义嵌入模型(如 OpenAI、HuggingFace),兼容 LangChain 等框架。
- 高性能检索:采用 HNSW 算法优化索引,支持百万级向量毫秒级响应。
- 多模式存储:内存模式用于开发调试,持久化模式支持生产环境数据落地。
4.6. Chroma 安装与基础配置
1. 安装
通过 Python 包管理器安装 ChromaDB:
# 安装 Chroma 向量数据库完成功能
# !pip install chromadb
2. 初始化客户端
- 内存模式(一般不建议使用):
import chromadb client = chromadb.Client() - 持久化模式:
# 数据保存至本地目录 client = chromadb.PersistentClient(path="./chroma")4.7. Chroma 核心操作流程
1. 集合(Collection)
集合是 Chroma 中管理数据的基本单元,类似关系数据库的表:
(1)创建集合
(2)查询集合
collection = client.get_collection(name="my_collection")
print(collection.peek())
print(collection.count())
# print(collection.modify(name="new_name"))
(3)删除集合
client.delete_collection(name="my_collection")
2. 添加数据
支持自动生成或手动指定嵌入向量
# 方式2:手动传入预计算向量(实际开发中推荐使用)
collection.add(
embeddings=get_embeddings("RAG是什么?"),
documents=["RAG是一种检索增强生成技术", "向量数据库存储文档的嵌入表示", "在机器学习领域,智能体(Agent)通常指能够感知环境、做出决策并采取行动以实现特定目标的实体"],
ids=["id1", "id2", "id3"]
)
3. 查询数据
- 文本查询(自动向量化):
results = collection.query( query_texts = ["RAG是什么?"], n_results = 3, where = {"source": "RAG"}, # 按元数据过滤 # where_document = {"$contains": "检索增强生成"} # 按文档内容过滤 ) print(results) - 向量查询(自定义输入):
results = collection.query( query_embeddings = get_embeddings("RAG是什么?"), n_results = 3 ) print(results)4. 数据管理
更新集合中的数据:
collection.update(ids=["id1"], documents=["RAG是一种检索增强生成技术,在智能客服系统中大量使用"])删除集合中的数据:
collection.delete(ids=["id3"])
4.8. Chroma Client-Server Mode
- Server 端
默认端口 8000
chroma run --path /db_path
修改端口:--port 端口号
chroma run --port 8001 --path /db_path
- Client 端
import chromadb
# 远程连接 Chroma Server
chroma_client = chromadb.HttpClient(host='localhost', port=8000)
5. Milvus 扩展学习
中文官网:https://milvus.io/zh
6. 学习打卡
- 掌握 Embedding 模型的原理及选型
- 安装 Chroma 向量数据库
- 使用 Chroma 本地持久化完成其核心操作
- 理解 Chroma Client-Server 模式
- 掌握 Mivus 向量数据库的使用(扩展学习)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)