链载Ai

标题: Embedding向量模型在RAG本地知识库中如何使用 [打印本页]

作者: 链载Ai    时间: 昨天 17:31
标题: Embedding向量模型在RAG本地知识库中如何使用

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; ">一、背景

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif;font-size: 18px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"> 当我们使用检索增强生成(RAG)技术来搭建本地知识库时,Embedding模型就如同这个图书馆的智能索引系统,能让我们快速准确地找到所需的知识。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif;font-size: 18px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"> 对于刚接触这一领域的小白来说,Embedding 模型到底是什么,它在本地知识库中扮演着怎样的角色,可能还比较模糊

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif;font-size: 18px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"> 接下来,我们就用通俗易懂的语言,结合实际例子,详细探讨这些问题,同时分享如何准备本地知识,让本地 RAG 回答问题更加准确和全面

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; ">二、Embedding 模型是什么

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif;font-size: 18px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"> 简单来讲,Embedding 就像是给数据穿上了一件“数字外衣”,把原本各种各样的数据(比如文本、图像、语音等)转化成一组数字,也就是向量来表示。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif;font-size: 18px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"> Embedding向量本质上是将语义信息映射到高维空间的数学坐标。以3D空间为例:

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; ">2.1 维度解释

# 实际模型维度示例
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. 词向量化

独热编码是一种简单直接的词向量化方法。想象我们有一个水果词汇表,里面只有“苹果”“香蕉”“橘子”三个词。我们可以给每个词分配一个二进制向量,这个向量只有一个位置是 1,其余位置都是 0。例如:

这种表示有明显的缺点,如果词汇表变得非常大,这样的向量会非常长,而且无法体现词与词之间的语义关系,比如“苹果”和“香蕉”都属于水果,在这种表示方法下它们看起来毫无关联。

词嵌入是一种更高级的词向量化方法,像 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 会先处理“我”,然后结合“我”的信息处理“今天”,以此类推,最终生成整个句子的向量表示。能够更好地处理长句子,因为它们有特殊的机制来避免在处理长序列时丢失重要信息。

比如在句子“这家餐厅的披萨非常好吃”中,CNN 可能会通过卷积核发现“披萨好吃”这样的局部特征,然后根据这些特征生成句子向量。

3.3. 文档向量化

比如一篇关于旅游的文档,有多个句子描述不同的景点,将这些句子向量平均后就得到了文档向量。

例如,一篇文档中多次出现“足球”“比赛”“球员”等词,可能会判断这篇文档的主题是足球。然后根据主题分布生成文档的向量表示。

比如有一系列关于不同电影的评论文档,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 (https://www.lianzai.com/) Powered by Discuz! X3.5