Embedding与向量数据库

12 阅读13分钟

1. 一句话理解

Embedding 是把文本、图片、音频、商品、用户行为等数据转换成固定维度的数字向量。
向量数据库 是专门存储这些向量,并支持按“语义相似度”快速检索的数据库或检索系统。

传统检索更像:

关键词匹配:有没有出现“退款”“退票”“订单”这些词?

Embedding 检索更像:

语义匹配:这句话表达的意思,和哪些文档最接近?

例如:

用户问:我想知道迪士尼门票怎么退?
系统检索:退票政策、退款流程、改期规则、特殊天气退款说明

2. PDF 核心内容总结

PDF 的主线非常清晰:

  1. N-Gram + TF-IDF + 余弦相似度 讲起。
  2. 再讲 Word Embedding / Word2Vec 如何把词语映射到向量空间。
  3. 然后讲 Embedding 模型如何选择,包括 MTEB 榜单、向量维度、Jina Embedding 的“俄罗斯套娃”能力。
  4. 最后讲 向量数据库,包括 FAISS、Elasticsearch、Milvus、Pinecone 的特点,以及如何把 Embedding 和原始数据/元数据一起导入 FAISS。

3. 从传统文本特征到 Embedding

3.1 N-Gram

N-Gram 是最基础的文本特征表达方法。

类型含义示例文本 A B C D
Unigram单个词作为特征A、B、C、D
Bigram连续两个词作为特征A B、B C、C D
Trigram连续三个词作为特征A B C、B C D

它的优点是简单、可解释;缺点是容易造成特征维度膨胀,并且语义理解能力有限。


3.2 TF-IDF

TF-IDF 用于衡量一个词对某篇文档的重要程度。

  • TF:词频,某个词在当前文档中出现越多,通常越重要。
  • IDF:逆文档频率,某个词在越少文档中出现,区分度越高。

在 PDF 的酒店推荐案例中,做法是:

  1. 对酒店描述字段 desc 做清洗。
  2. TfidfVectorizer 提取 1-Gram、2-Gram、3-Gram 特征。
  3. 得到酒店描述的 TF-IDF 矩阵。
  4. 计算酒店之间的余弦相似度。
  5. 根据指定酒店,输出相似度最高的 TopK 酒店。

3.3 余弦相似度

余弦相似度通过两个向量夹角的余弦值来衡量相似度。

值越接近 1:方向越一致,越相似
值接近 0:相关性弱
值越接近 -1:方向相反

常用于:

  • 文本相似度
  • 商品相似度
  • 用户兴趣相似度
  • RAG 文档召回
  • 推荐系统召回

4. Word Embedding 与 Word2Vec

4.1 什么是 Word Embedding

Word Embedding 可以理解为:

把词语从离散的 one-hot 编码,映射成低维、稠密、可计算相似度的向量。

例如:

king -> [0.50, -0.61, 0.23, ...]
queen -> [0.48, -0.58, 0.26, ...]

语义接近的词,在向量空间中的距离也更近。

经典例子:

king - man + woman ≈ queen

4.2 Word2Vec 的核心思想

Word2Vec 的本质是通过神经网络学习词向量。

常见模式:

模式输入输出说明
CBOW上下文中心词根据周围词预测当前词
Skip-Gram中心词上下文根据当前词预测周围词

PDF 里提到,Word2Vec 的隐藏层权重矩阵可以看成一个查找表:输入 one-hot 后,矩阵乘法实际上就是取出某个词对应的 embedding 向量。


5. 现代 Embedding 模型的选择

5.1 Embedding 模型的核心能力

现代 Embedding 模型不只是把词变成向量,而是把完整文本、代码、图片、表格、文档页面等变成语义向量。

优秀的 Embedding 模型需要具备:

  • 语义理解能力强
  • 查询与文档匹配能力强
  • 支持长文本
  • 支持中文/英文/多语言
  • 推理速度可接受
  • 向量维度和成本可控
  • 与业务数据匹配度高

5.2 MTEB 榜单怎么用

MTEB,全称 Massive Text Embedding Benchmark,是常用的 Embedding 评测基准。原始论文介绍的 MTEB 覆盖 8 类任务、58 个数据集、112 种语言;当前 Hugging Face MTEB Leaderboard 已扩展到更多文本和图像 embedding 模型及多语言评测。

MTEB 常见任务包括:

任务说明业务对应场景
Retrieval从文档库中找相关文档RAG、知识库问答、搜索
STS判断两个句子语义相似度去重、相似问匹配
Reranking对候选文档二次排序搜索排序优化
Classification文本分类工单分类、评论分类
Clustering聚类评论主题聚类、用户意图聚类
Pair Classification判断文本对关系重复问题识别
Bitext Mining跨语言句对挖掘翻译语料、跨语言搜索
Summarization语义级摘要相似度评估摘要质量评估

注意:不能只看榜单第一名。 选型时要结合:

  1. 业务语言:中文、英文、多语言?
  2. 任务类型:检索、分类、聚类、代码搜索?
  3. 数据类型:短文本、长文档、PDF、图片、表格?
  4. 部署方式:API 调用、私有化、本地模型?
  5. 成本:token 成本、GPU 成本、存储成本。
  6. 延迟:同步搜索还是离线批处理?
  7. 自己的黄金测试集效果。

5.3 向量维度怎么选

向量维度越高,通常表达能力更强,但存储和计算成本也更高。

维度优点缺点适合场景
64 / 128成本低、速度快表达能力弱标签、短文本、实时低成本场景
256 / 512成本适中复杂语义可能不足一般 FAQ、轻量搜索
768 / 1024效果与成本平衡存储成本上升大多数 RAG / 语义搜索
1536 / 2048+语义表达更丰富存储、内存、索引成本高金融报告、法律合同、复杂文档检索

工程建议:

不要盲目升维。
如果 1024 维比 768 维只提升不到 1%,但成本增加明显,就不值得。
如果降维后 Recall@K / NDCG 明显下降,例如超过 5%,说明信息损失较大,需要更高维度。

5.4 text-embedding-v4 的当前信息

联网核对阿里云 Model Studio 文档后,text-embedding-v4 适合文本、代码等场景,支持任务指令、稀疏向量等高级能力。

关键点:

  • 支持维度:2048、1536、1024、768、512、256、128、64
  • 默认维度:1024
  • 单次 batch size:10
  • 最大 batch tokens:8192
  • 支持 100+ 主要语言
  • 支持 query / document 不同文本角色
  • 支持 densesparsedense&sparse 三种输出类型

推荐用法:

文档入库:text_type = document
用户查询:text_type = query
通用 RAG:优先 1024 维
低成本短文本:256 / 512 维
复杂金融/法律/技术文档:1024 / 2048 维
需要关键词 + 语义:dense&sparse

5.5 Jina Embeddings v4 的当前信息

Jina Embeddings v4 是一个多模态、多语言 embedding 模型,适合复杂文档检索,尤其是包含图表、表格、插图的视觉丰富文档。

关键规格:

项目信息
基础模型Qwen2.5-VL-3B-Instruct
支持任务retrieval、text-matching、code
最大序列长度32768
单向量维度2048
多向量维度128
Matryoshka 维度128、256、512、1024、2048
池化策略Mean Pooling
注意力机制FlashAttention2

所谓“俄罗斯套娃”能力,就是模型可以先生成完整的高维向量,然后按需截断成较低维度,并尽量保持较好的检索效果。

场景建议:

场景建议维度
社交媒体短文本、评论情感分析128 / 256
普通 FAQ / 商品搜索512 / 1024
投研报告、财报、法律文档1024 / 2048
图文混合 PDF / 表格 / 截图检索优先考虑 Jina v4 多模态能力

6. 向量数据库是什么

向量数据库用于存储和检索 embedding 向量。它的核心能力是:

给定一个查询向量,在海量向量中找出最相似的 TopK。

在 RAG 系统中,向量数据库相当于大模型的“长期记忆”。

典型流程:

原始文档
  -> 清洗
  -> 切分 Chunk
  -> 生成 Embedding
  -> 存入向量数据库
  -> 用户提问
  -> 问题向量化
  -> TopK 检索
  -> 重排序
  -> 拼接上下文
  -> LLM 生成答案

7. 向量数据库与传统数据库对比

对比项传统数据库向量数据库
数据类型行、列、结构化数据高维向量 + 元数据
查询方式精确匹配、范围查询、SQL相似度检索、ANN、TopK
典型索引B+Tree、HashHNSW、IVF、PQ、Flat 等
适合场景订单、用户、支付、库存RAG、语义搜索、推荐、以图搜图
匹配逻辑id = 1status = PAID语义接近、向量距离近
是否替代关系库不能替代通常和 MySQL/PostgreSQL 配合使用

工程上通常是:

MySQL / PostgreSQL:存业务主数据、状态、权限、元数据
向量数据库:存向量并做相似度检索
对象存储:存 PDF、图片、Excel、原始文件
Redis:做缓存、任务状态、热点数据

8. 常见向量数据库对比

产品类型优点局限推荐场景
FAISS向量检索库,不是完整数据库性能强、索引算法丰富、支持 GPU元数据、权限、更新删除、服务化能力需要自己做算法验证、离线检索、单机高性能召回
Elasticsearch搜索引擎 + 向量检索关键词搜索强,适合混合搜索纯向量性能通常不如专用向量库已有 ES,文本搜索为主,向量为辅
Milvus开源向量数据库分布式、扩展性强、索引丰富、适合海量数据运维复杂度较高企业私有化、大规模 RAG / 推荐
Pinecone托管向量数据库云原生、低运维、API 简洁商业托管,私有化受限快速上线、海外云上生产环境
QdrantRust 向量数据库过滤能力强、性能好、payload 机制好用生态规模相对 ES/Milvus 小需要复杂元数据过滤的 RAG / 电商 / 金融检索
Weaviate开源向量数据库自动向量化、开发体验好复杂生产调优仍需经验快速构建端到端语义搜索应用

9. FAISS 与元数据管理

PDF 里给出的 FAISS 方案很适合教学和原型验证。

FAISS 本身主要负责:

向量索引 + 相似度搜索

但它不负责完整的业务元数据管理。所以需要额外维护:

vector_id -> 原始文本 / 文件名 / 页码 / 章节 / URL / 业务ID

示例结构:

metadata_store = {
    10001: {
        "doc_id": "doc_001",
        "text": "迪士尼门票退票政策...",
        "source": "official_faq_v1.pdf",
        "page": 3,
        "category": "退票政策"
    }
}

FAISS 检索返回的是向量 ID:

query -> query_embedding -> faiss.search -> vector_ids -> metadata_store -> 原始文本 + 元数据

生产环境建议:

数据推荐存储
向量索引FAISS / Milvus / Qdrant / Elasticsearch
元数据MySQL / PostgreSQL / MongoDB
原始文件MinIO / S3 / OSS
热点召回结果Redis
导入任务状态MySQL

10. RAG 知识库落地架构

┌────────────────────────┐
│      原始数据源         │
│ PDF / Word / HTML / DB │
└───────────┬────────────┘
            │
            ▼
┌────────────────────────┐
│      文档解析层         │
│  OCR / PDF解析 / 清洗   │
└───────────┬────────────┘
            │
            ▼
┌────────────────────────┐
│      Chunk 切分层       │
│ 按标题/段落/Token切分   │
└───────────┬────────────┘
            │
            ▼
┌────────────────────────┐
│    Embedding 生成层     │
│ text-embedding-v4/Jina │
└───────────┬────────────┘
            │
            ▼
┌────────────────────────┐
│      向量数据库         │
│ Milvus/Qdrant/ES/FAISS │
└───────────┬────────────┘
            │
            ▼
┌────────────────────────┐
│       检索增强层        │
│ TopK召回 + 元数据过滤   │
│ + Rerank + 去重         │
└───────────┬────────────┘
            │
            ▼
┌────────────────────────┐
│          LLM            │
│  基于上下文生成答案      │
└────────────────────────┘

11. Java 后端落地建议

如果你用 Spring Boot 做企业级 RAG,建议分层如下:

controller
  -> service
    -> document parser
    -> chunk splitter
    -> embedding client
    -> vector repository
    -> metadata repository
    -> rerank service
    -> llm service

11.1 表设计建议

document_file:文件表

CREATE TABLE document_file (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    file_name VARCHAR(255) NOT NULL,
    file_url VARCHAR(512) NOT NULL,
    file_type VARCHAR(50),
    status VARCHAR(32) NOT NULL,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL
);

document_chunk:切片表

CREATE TABLE document_chunk (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    file_id BIGINT NOT NULL,
    chunk_no INT NOT NULL,
    content TEXT NOT NULL,
    token_count INT,
    page_no INT,
    section_title VARCHAR(255),
    vector_id VARCHAR(128),
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,
    INDEX idx_file_id (file_id),
    INDEX idx_vector_id (vector_id)
);

embedding_task:向量化任务表

CREATE TABLE embedding_task (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    file_id BIGINT NOT NULL,
    status VARCHAR(32) NOT NULL,
    total_chunks INT DEFAULT 0,
    success_chunks INT DEFAULT 0,
    failed_chunks INT DEFAULT 0,
    error_message TEXT,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,
    INDEX idx_file_id (file_id),
    INDEX idx_status (status)
);

12. 检索质量优化策略

12.1 Chunk 切分优化

常见问题:

切太大:召回不精准,LLM 上下文浪费
切太小:语义不完整,答案缺上下文

建议:

文档类型Chunk 策略
FAQ一问一答为一个 Chunk
技术文档按标题层级 + 段落切分
合同/法律文档按条款切分,保留章节编号
PDF 报告按页 + 标题 + 段落混合切分
表格保留表头,行记录转结构化文本

12.2 Hybrid Search

纯向量检索容易漏掉精确关键词,例如订单号、SKU、错误码、法规条款编号。

所以生产中推荐:

向量语义检索 + 关键词检索 + 元数据过滤 + Rerank

常见组合:

检索方式解决问题
Dense Vector语义相似,理解同义表达
Sparse Vector / BM25精确关键词、编号、错误码
Metadata Filter权限、分类、时间、租户隔离
Reranker对 TopK 候选结果重新排序

12.3 评估指标

不要只靠人工感觉判断效果。建议建立黄金测试集。

指标含义
Recall@K正确答案是否出现在前 K 个召回结果中
Precision@K前 K 个结果中有多少是相关的
MRR第一个正确结果排名越靠前越好
NDCG综合考虑相关性和排序位置
Latency检索耗时
Costembedding 调用成本、存储成本、计算成本

13. 选型建议

13.1 快速实验

Embedding:text-embedding-v4 1024维
向量库:FAISS / Qdrant
元数据:MySQL
文件:本地 / MinIO

13.2 企业私有化 RAG

Embedding:bge-m3 / Jina Embeddings v4 / Qwen3-Embedding 系列
向量库:Milvus / Qdrant / Elasticsearch
元数据:MySQL / PostgreSQL
文件:MinIO
任务队列:RabbitMQ / Kafka

13.3 已有 Elasticsearch 的团队

如果已有 ES,并且搜索业务以关键词检索为主,可以直接使用 Elasticsearch 的 dense_vector + kNN 能力做混合搜索。

13.4 大规模高性能向量检索

如果数据量很大、需要分布式扩展、批量导入和生产级管理,优先 Milvus / Qdrant。

13.5 海外云上快速上线

如果不想自建和运维,优先 Pinecone 这类托管向量数据库。

14. 最终结论

Embedding 与向量数据库的本质是:

把不可直接计算语义的数据,转换成可计算距离的向量;
再用向量数据库高效找到语义最接近的数据。

PDF 里的知识路线非常适合入门:

N-Gram / TF-IDF
  -> 余弦相似度
  -> Word2Vec
  -> 现代 Embedding 模型
  -> 向量数据库
  -> FAISS + 元数据管理
  -> RAG / 推荐系统落地

工程落地时,真正关键的是:

  1. 模型不要只看榜单,要用自己的业务数据评测。
  2. 向量维度不要盲目追高,要看效果提升和成本是否匹配。
  3. 向量库不能替代业务数据库,元数据、权限、状态仍然要进 MySQL/PostgreSQL。
  4. 生产级 RAG 推荐使用 Hybrid Search:Dense + Sparse + Metadata Filter + Rerank。
  5. FAISS 适合原型和算法验证;Milvus/Qdrant/Elasticsearch 更适合服务化生产场景。

15. 参考资料