一、背景
当我们使用检索增强生成(RAG)技术来搭建本地知识库时,Embedding 模型就如同这个图书馆的智能索引系统,能让我们快速准确地找到所需的知识。
对于刚接触这一领域的小白来说,Embedding 模型到底是什么,它在本地知识库中扮演着怎样的角色,可能还比较模糊。
接下来,我们就用通俗易懂的语言,结合实际例子,详细探讨这些问题,同时分享如何准备本地知识,让本地 RAG 回答问题更加准确和全面。
二、Embedding 模型是什么
简单来讲,Embedding 就像是给数据穿上了一件“数字外衣”,把原本各种各样的数据(比如文本、图像、语音等)转化成一组数字,也就是向量来表示。
Embedding向量本质上是将语义信息映射到高维空间的数学坐标。以3D空间为例:
-
“猫”
→ [0.7, -0.3, 0.1]
-
“犬”
→ [0.68, -0.25, 0.15]
-
“发动机”
→ [-0.4, 0.8, 0.5]
2.1 维度解释
- 低维(<100):语义区分能力弱,可能出现"苹果"(水果)与"苹果"(手机)混淆
- 高维(>1000):需要更多计算资源,但能捕捉"跑步"与"慢跑"的细微差别
# 实际模型维度示例
print("BGE维度:", len(model.encode("文本示例")[0])) # 输出: 1024
print("Jina维度:", len(jina_model.encode("示例")[0])) # 输出: 768
2.2 常用模型深度对比
特性 | BGE-large-zh-v1.5 | Jina-embeddings-v2 | Nomic-embed-text-v1.5 |
---|---|---|---|
向量维度 | 1024 | 768 | 768 |
最大文本长度 | 512 tokens | 8192 tokens | 2048 tokens |
推荐距离方法 | 余弦相似度 | 点积(需归一化) | 余弦相似度 |
训练数据量 | 50亿中文token | 1.2万亿多语言token | 2亿英文文档 |
多语言支持 | 中文优先 | 支持100+语言 | 英语专用 |
模型体积 | 1.2GB | 890MB | 420MB |
推理内存需求 | 3GB | 2.5GB | 1.8GB |
温度参数 | 不支持 | 支持动态温度调节 | 固定温度0.8 |
领域适配能力 | 法律/金融专用版 | 通用领域 | 科技论文优化 |
在本地知识库搭建中,我们重点关注的是文本 Embedding,它能把文本信息变成计算机更容易理解和处理的向量形式。
三、 Embedding 模型的原理
3.1. 词向量化
- 独热编码(one - hot encoding)
独热编码是一种简单直接的词向量化方法。想象我们有一个水果词汇表,里面只有“苹果”“香蕉”“橘子”三个词。我们可以给每个词分配一个二进制向量,这个向量只有一个位置是 1,其余位置都是 0。例如:
-
- “苹果”表示为 [1, 0, 0]
- “香蕉”表示为 [0, 1, 0]
- “橘子”表示为 [0, 0, 1]
这种表示有明显的缺点,如果词汇表变得非常大,这样的向量会非常长,而且无法体现词与词之间的语义关系,比如“苹果”和“香蕉”都属于水果,在这种表示方法下它们看起来毫无关联。
- 词嵌入(word embeddings)
词嵌入是一种更高级的词向量化方法,像 word2vec、glove 等模型都属于词嵌入模型。
以 word2vec 为例,它通过预测词的上下文来学习词向量。假设我们有这样一个句子“我喜欢吃苹果”,word2vec 会根据“苹果”周围的词(“喜欢”“吃”)来学习“苹果”的向量表示。
最终,语义相似的词在向量空间中会靠得很近。比如“苹果”和“香蕉”,它们的向量在空间中的位置会比较接近,因为它们都是水果。
3.2. 句子向量化
-
简单平均/加权平均
简单平均就是把句子中每个词的向量加起来,然后除以词的数量,得到句子的向量。
例如,句子“我爱祖国”,假设“我”的向量是 [0.1, 0.2, 0.3],“爱”的向量是 [0.4, 0.5, 0.6],“祖国”的向量是 [0.7, 0.8, 0.9],那么句子向量就是这三个向量相加后除以 3。加权平均则是根据词的重要性给每个词的向量赋予不同的权重,再进行计算。比如在一个句子中,关键词的权重可以设得高一些。
-
递归神经网络(RNN)
RNN 就像一个有记忆力的小机器人,它会按照句子中词的顺序依次处理每个词,并且会记住之前处理过的信息。
例如,对于句子“我今天去超市买了苹果”,RNN 会先处理“我”,然后结合“我”的信息处理“今天”,以此类推,最终生成整个句子的向量表示。能够更好地处理长句子,因为它们有特殊的机制来避免在处理长序列时丢失重要信息。
-
卷积神经网络(CNN)
CNN 就像一个拿着放大镜的检查员,它会在句子中滑动一个小窗口(卷积核),捕捉句子中的局部特征。
比如在句子“这家餐厅的披萨非常好吃”中,CNN 可能会通过卷积核发现“披萨好吃”这样的局部特征,然后根据这些特征生成句子向量。
-
自注意力机制(如 Transformer)
自注意力机制就像是一个聪明的秘书,它会关注句子中每个词与其他词的关系。对于句子“小明和小红一起去公园玩”,会分析“小明”和“小红”之间的关系,以及它们和“公园”“玩”的关系,然后综合这些信息生成句子向量。这样就能更好地捕捉句子中词与词之间复杂的语义关系。
3.3. 文档向量化
-
简单平均/加权平均
和句子向量化类似,对文档中的每个句子向量进行平均或加权平均,得到文档的向量表示。
比如一篇关于旅游的文档,有多个句子描述不同的景点,将这些句子向量平均后就得到了文档向量。
-
文档主题模型
就像一个分类大师,它会分析文档中词的分布,找出文档的主题。
例如,一篇文档中多次出现“足球”“比赛”“球员”等词,可能会判断这篇文档的主题是足球。然后根据主题分布生成文档的向量表示。
-
层次化模型(如 doc2vec)
doc2vec 是 word2vec 的扩展,它不仅考虑了文档中的词,还考虑了文档的整体信息。
比如有一系列关于不同电影的评论文档,doc2vec 可以学习到每个文档的独特向量表示,同时也能体现出文档之间的相似性。
3.4 距离公式的本质
假设向量A=[a₁,a₂,a₃], B=[b₁,b₂,b₃]
方法 | 公式 | 适用场景 |
---|---|---|
余弦相似度 | Σ(aᵢ*bᵢ)/√(Σaᵢ²)*√(Σbᵢ²) | 文本检索(消除长度影响) |
欧氏距离 | √(Σ(aᵢ - bᵢ)²) | 图像匹配/结构数据 |
曼哈顿距离 | Σ|aᵢ - bᵢ| | 稀疏特征分析 |
点积相似度 | Σ(aᵢ*bᵢ) | 已归一化向量的快速计算 |
马氏距离 | √((A-B)ᵀ * Σ⁻¹ * (A-B)) | 考虑特征相关性的场景 |
3.5 混合检索策略
A[用户提问] --> B{问题类型识别}
B -->|专业术语| C[语义检索]
B -->|日期/编号| D[关键词检索]
C --> E[重排序]
D --> E
E --> F[最终结果]
准确率和召回率对比:
方法 | 召回率(大概统计) | 精确率(大概统计) |
---|---|---|
纯语义检索 | 78% | 82% |
纯关键词检索 | 65% | 95% |
混合检索 | 92% | 89% |
召回率是我们需要关注的一个指标,假设我们有一个包含 100 篇文档的集合,其中有 30 篇是关于 “人工智能” 的文档,我们使用一个信息检索系统来查找关于 “人工智能” 的文档。如果系统返回了 20 篇文档,其中有 15 篇确实是关于 “人工智能” 的,而另外有 15 篇关于 “人工智能” 的文档没有被系统返回,那么根据召回率的计算公式可得:召回率 = 50%。这意味着该系统只找回了一半的与 “人工智能” 相关的文档。
四、Embedding 模型在本地知识库中的用法
在本地知识库 RAG 系统里,Embedding 模型主要负责两件重要的事情:
4.1. 本地数据向量化
把本地知识库中的文本数据,如文档、资料等,通过 Embedding 模型转化成向量,然后存储到向量数据库中。
例如,一家电商公司有产品手册、用户评价、常见问题解答等文档。我们可以使用 Embedding 模型将这些文档逐句或逐段转化为向量。
假设产品手册中有这样一段话“这款手机采用了最新的处理器,性能非常强劲”,Embedding 模型会将其转化为一个向量,然后存储到向量数据库中,就像把这本书中的这一页放到图书馆的特定位置。
2. 用户输入向量化
当用户提出问题时,同样使用 Embedding 模型把问题转化为向量,然后在向量数据库中查找与这个问题向量最相似的本地数据向量。
比如用户问“这款手机的性能怎么样”,Embedding 模型会把这个问题转化为一个向量,然后在向量数据库中搜索与之最接近的向量。可能就会找到之前存储的关于手机性能描述的向量,从而定位到对应的文本内容,就像在图书馆中根据索引快速找到相关的书籍页面。
五、如何准备本地知识提升本地 RAG 回答准确性和全面性
5.1 数据收集
数据收集就像是为我们的知识库这座大厦收集建筑材料。要尽量全面地收集与主题相关的各种数据。
以搭建一个关于美食的本地知识库为例,我们可以从以下几个方面收集数据:
- 专业书籍:如美食烹饪教材、地方美食文化书籍等。这些书籍通常包含了丰富的理论知识和经典的食谱。
- 权威网站:美食网站、餐饮行业的官方网站等。这些网站会有最新的美食资讯、餐厅推荐、特色菜品介绍等。
- 学术论文:关于食品科学、饮食文化等方面的学术论文,可以为知识库提供更深入的理论支持。
- 社交媒体:美食博主的分享、用户的美食体验评价等。这些内容能反映大众的口味偏好和实际的美食体验。
5.2 数据清洗
收集来的数据可能就像一堆杂乱的石头,里面有很多杂质,需要进行清洗。
例如,我们从网络上收集到的美食数据中,可能会有重复的内容,也可能有错误的信息,还可能夹杂着无关的广告,我们需要把这些杂质清理掉,只保留与美食知识相关的准确内容。
5.3 数据结构化
数据结构化就像是给我们的建筑材料分类整理,方便后续的查找和使用。对于美食知识库,我们可以按照以下结构进行分类:
- 菜系分类:如川菜、粤菜、鲁菜等。每个菜系下再细分具体的菜品。
- 菜品类型:分为炒菜、炖菜、汤品、甜品等。
- 食材分类:以主要食材为分类依据,如肉类、蔬菜类、海鲜类等。
通过这样的结构化分类,我们可以更方便地管理和检索数据。例如,当用户想查找川菜中的炒菜时,就可以快速定位到相关的菜品信息。
5.4 数据标注
对数据进行标注可以让知识库更加智能。
在美食知识库中,我们可以标注出菜品的难度等级(简单、中等、困难)、适合的人群(儿童、老人、健身人群等)、烹饪时间等信息。
这样在检索时,就可以根据用户的特定需求进行更精准的匹配。
比如用户是健身人群,希望找一道低热量、高蛋白的菜品,通过标注信息就可以快速筛选出符合要求的美食。
六、结语
通过理解这些技术细节,即使是刚入门的小白也能做出专业选择。当处理中文合同文档时,选择BGE模型配合余弦相似度;处理跨国客服对话记录时,Jina的多语言支持是更好的选择;
记住,选择模型的依据终止依据——合适的才是最好的!
如何学习大模型 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 的正确特征了。