knowledge-vault/sources/references/开发笔记/RAG/什么是Embedding向量模型.md

200 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

我们之前讲的搭建本地知识库基本都是使用检索增强生成RAG技术来搭建Embedding模型则是RAG的核心同时也是大模型落地必不可少的技术。那么今天我们就来聊聊Embedding向量模型
一、Embedding模型是什么
Embedding模型是一种将离散数据如文本、图像、用户行为等映射到连续向量空间的技术。其核心思想是通过低维稠密向量Embedding捕捉数据的内在特征和语义关系。
![](https://api.ibos.cn/v4/weapparticle/accesswximg?aid=104386\&url=aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9QNmZqRTNQOHJwNzRCNXNJS2IxcnAzWjdDQUp1UWo0ajlZRVZTRHY5bkZEWHhnZlptSnNFUFBadXRSbHB6RjlUZTNwZDNreTN2YWd5eGJjSWNwNjRDQS82NDA/d3hfZm10PXBuZyZhbXA=;from=appmsg)
用通俗易懂一些的说法就是Embedding给数据穿上了一件“数字外衣”把离散数据如文本、图像、用户行为等转化成一组数字即向量来表示目的是让机器更好的理解和处理。
或者说Embedding模型就是一个“翻译官”能把文字、图片、用户行为这些东西变成一串计算机能看懂的数字。
比如:它能知道“猫”和“狗”都是宠物,所以它们的数字串很像;但“猫”和“西瓜”差别大,数字串就离得远。
干啥用?比如让手机听懂你说的话,或者让淘宝猜你喜欢什么商品。
在本地知识库搭建中我们关注的重点是文本Embedding它能把文本信息变成计算机更容易理解和处理的向量模型。
二、Embedding模型原理
Embedding模型的原理就像“猜词游戏”
比如你和朋友聊天,朋友说:“我今天买了一只\_\_它会喵喵叫”你肯定猜是“猫”。Embedding模型就是通过大量这样的句子学会哪些词经常一起出现然后把它们变成相似的数字串。
方法举例:
Word2Vec像小学生背单词记“苹果”和“水果”是相关的。
BERT比如ChatGPT的基础像学霸联系上下文猜词比如“银行”在“存钱”和“河边”两种句子中意思不同。
三、Embedding模型向量化方法
常见的向量化方法包括:
| | |
| ------- | ------------------------------------------------------------------------------------------------ |
| 基于词频/共现 | 1、TF-IDF基于词频统计。2、LSA对词-文档矩阵进行奇异值分解SVD。 |
| 基于神经网络 | 1、Word2VecSkip-Gram/CBOW适合通用语义。2、FastText引入子词subword信息解决未登录词问题。3、GloVe结合全局词共现统计与局部上下文窗口。 |
| 上下文相关模型 | BERT动态生成基于上下文的向量如“bank”在“河岸”和“银行”中不同。 |
| 图嵌入 | Node2Vec将图节点映射为向量保留网络结构特征。2、 |
非文本领域如推荐系统中使用矩阵分解MF生成用户/物品向量。
四、Embedding模型作用
Embedding 模型在本地知识库中的作用,可以理解为用“数字密码”将本地文件(如文档、笔记、数据库)转化为计算机能理解的形式,从而快速实现搜索、问答、分类等功能。
1、本地数据向量化
把本地知识库中的文档如PDF、Word、Excel、笔记转化为向量方便后续搜索。
数据预处理
| | |
| -- | -------------------------------------------------------------- |
| 分块 | 将长文档拆分成小段落如每段200-500字避免信息过载。_示例_一篇10页的“咖啡研究报告” → 拆成30个小段落。 |
| 清洗 | 去除乱码、特殊符号、广告等无关内容。 |
选择Embedding模型
| | |
| ---- | --------------------------------------- |
| 通用场景 | 用轻量级模型(如 `text2vec`、`m3e-base`),适合本地运行。 |
| 专业场景 | 用领域微调模型如法律用Law-Embedding医学用 BioBERT |
批量生成向量
对每个文本段落调用Embedding模型生成对应的向量一串数字
工具示例:
```
# 伪代码 text2vec 生成向量
from text2vec import SentenceModelmodel = SentenceModel("shibing624/text2vec-base-chinese")text = "咖啡因可以提神,但过量会导致心悸。"vector = model.encode(text)  # 输出示例:[0.3, -0.2, 0.8, ...]
```
存储向量+原文
| | |
| ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 向量数据库 | 将向量和对应的原文关联存储。 |
| 工具推荐 | 轻量级FAISS适合小数据快速检索。大规模Milvus、Qdrant支持百万级数据。 |
| 存储示例 | ![](https://api.ibos.cn/v4/weapparticle/accesswximg?aid=104386\&url=aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9QNmZqRTNQOHJwNXlzdzlOOFN3bWYzdllOWFdWek5RWTF6Y0dIRnRBYlg4cDVPbVZ2SlV3ZWdVVVlrR1Fjd0JDOFl4NllQRkZSaWJ3RjdpYW9GZTljajVBLzY0MD93eF9mbXQ9cG5nJmFtcA==;from=appmsg) |
2、用户输入向量化
接受用户输入
用户输入可以是文字、语音转文字,甚至图片(需先用多模态模型转为文本)。
示例输入:
    文字:“提神饮料有哪些?”
    语音:“帮我找关于咖啡的文章。”
输入与处理
    纠错:修正错别字(如“提神钦料” → “提神饮料”)
    精简:提取关键信息(如“请告诉我如何快速提神?” → “快速提神方法”)。
生成用户输入向量
使用相同的Embedding模型将用户输入转为向量。
代码示例:
*
*
```
user_query = "提神饮料有哪些?"query_vector = model.encode(user_query)  # 生成向量,如 [0.25, -0.3, 0.75, ...]
```
相似度计算与匹配
在向量数据库中,快速找到与用户向量最接近的本地数据向量。
算法:
    余弦相似度(最常用,计算方向相似性)。
    欧氏距离(计算向量绝对距离)。
工具示例使用FAISS
*
*
*
*
```
# 伪代码FAISS 搜索相似向量distances, indices = index.search(query_vector, k=5)  # 找最接近的5个结果for idx in indices:    print("匹配内容:", 原文库[idx])
```
返回结果
根据匹配的向量,返回对应的原始文本或摘要。
优化技巧:
    多路召回:同时匹配多个相似段落,提升覆盖率。
    重排序:用更精细的模型(如交叉编码器)对结果二次排序。
3、完整流程示意图
*
*
*
```
用户输入 → 向量化 → 搜索向量库 → 匹配最相似的本地数据 → 返回结果             ↑              ↑         同一模型       同一向量空间
```
一句话总结
Embedding模型在本地知识库的用法就是“两步走”
    a.把本地文件变成数字向量(建库)。
    b.把用户问题也变成数字向量(搜索)。
两者在“数字世界”中比对,就能像人一样理解语义,实现精准问答和搜索!
五、Embedding模型如何选择
在RAGRetrieval-Augmented Generation应用中选择合适的Embedding模型至关重要。选择时需要考虑一下因素
1、应用场景
首先需要明确RAG系统将处理哪种类型的数据是文本、图像还是多模态数据。不同的数据类型可能需要不同的Embedding模型。
例如对于文本数据你可以参考HuggingFace的MTEBMassive Text Embedding Benchmark排行榜来选择适合的模型对于多模态需求的如图文检索等可以选择CLIP、ViLBERT。
2、通用与特定领域需求 
其次可以根据任务是通用还是特定领域选择合适的模型。如果任务涉及通用知识可以选择通用的Embedding模型如果任务涉及特定领域如法律、医疗、教育、金融等则需要选择更适合该领域的模型。
3、多语言需求
如果系统需要支持多种语言可以选择支持多语言的Embedding模型如BAAI/bge-M3、bce\_embedding中英等。如果知识库中主要包含的是中文数据可以选择如iic/nlp\_gte\_sentence-embedding\_chinese-base等模型。
4、性能评估
查看MTEB排行榜等基准测试框架来评估不同模型的性能。这些排行榜覆盖了多种语言和任务类型可以帮助你找到在特定任务上表现最佳的模型。同时考虑模型的规模和资源限制较大的模型可能提供更高的性能但也会增加计算成本和内存需求。
5、Embedding模型推荐
推荐一些表现优秀的Embedding模型
文本数据参考HuggingFace的MTEB排行榜或国内的魔搭社区排行榜。
多语言支持选择如BAAI/bge-M3、bce\_embedding中英等模型。
中文数据选择如iic/nlp\_gte\_sentence-embedding\_chinese-base等模型。
Embedding模型是连接符号数据与数值计算的桥梁其选择需结合实际任务需求和数据特点。随着预训练模型的发展动态、多模态的Embedding正成为趋势。