Embedding是将非结构化数据转化为数值向量的技术,是LLM的核心基础。它通过语义相似的数据在向量空间中位置相近的原理,使计算机能够理解复杂概念关系。在RAG中,Embedding连接外部知识库与LLM,实现从关键词匹配到语义匹配的跨越;在LLM内部,它将文本转换为向量,是理解用户输入的第一道关口。开源社区提供了多种本地部署方式,如SentenceTransformers和Ollama,使开发者在保护数据隐私的同时降低成本。向量数据库如Elasticsearch则为Embedding的高效存储和检索提供了支持。

近几年,“大语言模型”(LLM)凭借其强大的文本理解和生成能力,正在改变我们与数字世界的交互方式。

而在这背后,一个名为 Embedding 的关键技术,默默地扮演着连接语言与数学的“翻译官”角色。

1. 什么是 Embedding?

简单来说,Embedding 是一种将非结构化数据(如文本、图像、音频)转化为计算机可理解和处理的数值向量(一组数字)的技术。

这种转换的核心思想是:语义上相似的数据,在向量空间中的位置也相近。例如,通过 Embedding,计算机能理解“北京”和“上海”是相似的,因为它们都是城市;而“北京”和“苹果”则相差甚远。这种距离的远近,让计算机能够像我们人类一样,感知和处理复杂的概念关系。

向量化的过程不是手动进行的,而是由模型自动学习和实现的。你可以通过调用本地模型远程服务来完成这一转换。

例如,在使用 OpenAI 的 SDK 时,你可以根据需求调用不同的 Embedding 模型文档,向远程 API 发送请求,从而获得文本对应的向量。

from openai import OpenAI
client = OpenAI()

response = client.Embeddings.create(
    input="Your text string goes here",
    model="text-Embedding-3-small"
)

print(response.data[0].Embedding)
# 将会打印具体的向量内容
向量的“远近”如何计算?

在 Embedding 中,我们用余弦相似度(Cosine Similarity)来衡量向量之间的“远近”。它计算的是两个向量在多维空间中的夹角。

在这里插入图片描述

  • 夹角越小,余弦相似度越接近 1,向量方向越接近,代表它们所代表的原始数据语义越相似。
  • 夹角越大,余弦相似度越接近 0,向量方向越不相关,代表它们语义不相关。

相比于简单的欧式距离,余弦相似度更侧重于向量的方向,使其在衡量语义相似度时更加精确。

向量和张量的关系

机器学习中有一个概念是张量(Tensor),它与我们讨论的 Embedding 向量有着紧密的联系。

  • 张量 (Tensor) 是一个更广义、更通用的概念,它是机器学习中所有数据表示的基石。可以将它理解为 N 维数组。例如,一个视频数据就可以表示为一个 4 维张量 (帧数, 宽度, 高度, 颜色通道)
  • 向量 (Vector) 是一种特殊的张量,它是一个一维数组,也就是 1 维张量。因此,向量是张量的一个子集

在这里插入图片描述

在大语言模型内部,虽然每个词或句子的 Embedding 结果是一个向量,但为了批量处理,这些向量会被组织成矩阵或更高维度的张量进行高效计算

从词到句子的 Embedding 演变

早期的 Embedding 技术,如 Word2Vec,主要关注单个词汇。它通过上下文来学习

例如,一个模型会学习到“”和“老虎”经常出现在“动物园”等相似的语境中,从而将它们的向量位置调整得更近

然而,为了处理更复杂的句子和段落,现代模型引入了更强大的机制:

  • 自注意力机制:该机制由 Transformer 架构引入。它让模型在生成一个词的向量时,能同时考虑到句子中所有其他词的重要性,从而理解长距离的依赖关系,生成能够代表整个句子语义的向量。

在这里插入图片描述

来源:https://www.researchgate.net/figure/llustration-of-the-self-attention-module-e-input-is-the-Embedding-matrix-of-the-latest_fig1_327134627

  • 双向上下文理解:这一能力由 BERT 模型在 Transformer 架构的基础上实现。BERT 的名称(Bidirectional Encoder Representations from Transformers)就明确了它的核心特点:它通过在预训练阶段同时考虑一个词的左右两侧所有词,从而实现了真正的双向上下文理解。这使得模型能为同一个词(如“很长”),根据它在不同句子中的含义(“这条河很长”与“他当了很长时间的厂长”),生成不同的向量,从而更精准地捕捉语境。

在这里插入图片描述

来源:https://pub.towardsai.net/understanding-bert-b69ce7ad03c1

向量数据库

为了高效地存储和检索这些高维向量,向量数据库应运而生。它是一种专门设计用来管理和搜索高维向量数据的数据库,其核心能力是执行相似性搜索,即根据向量的“距离”来查找与查询最相似的向量。

根据设计目的,向量数据库可以分为两类:

  • 专用向量数据库:这些数据库完全为向量检索而构建,通常采用各种高级索引算法(如 HNSW、IVF)来确保在海量数据中的毫秒级查询。例如:Pinecone、Milvus 和 Weaviate。

在这里插入图片描述

  • 集成向量检索功能的通用数据库:这类是传统的数据库,通过插件或内置功能来支持向量检索。它们最大的优势是能同时处理结构化数据和向量数据,非常适合需要同时进行关键词搜索和语义搜索的混合检索场景。例如:Elasticsearch、PostgreSQL (通过 pgvector 插件) 和 Redis。

2. Embedding 在 RAG 中的作用

RAGRetrieval-Augmented Generation,检索增强生成)是一种将大语言模型(LLM)与可搜索的外部知识库相结合的技术。它让模型能够访问并利用它在训练时未见过的新信息,从而大幅提升其回答的准确性和时效性。

而 Embedding 在 RAG 框架中扮演着不可或缺的角色,它充当了连接外部知识库大语言模型的桥梁,实现了从“关键词匹配”到“语义匹配”的跨越。在 RAG 框架中,导入数据(Indexing)和查询(Retrieval)时,必须使用同一个 Embedding 模型。这被称为模型一致性原则,它是 RAG 框架能够有效运行的基石。

RAG 的工作流程如下:

  1. 知识库准备:首先,将海量的外部文档(如 PDF、网页等)分割成小块,并使用 Embedding 模型将每个文本块转换为向量,存储在向量数据库中。
  2. 查询与检索:当用户提出问题时,系统会将查询语句转换为一个查询向量。然后,在向量数据库中,通过余弦相似度计算,快速找出与查询向量最相似的 top-k 个文本块
  3. 生成:这些被检索出的原始文本块,连同用户的查询,被一起作为上下文传递给大语言模型。大语言模型基于这些准确、相关的上下文,生成一个全面且精确的回答。

Embedding 模型的任务是确保最相关、最有价值的信息能够被准确地检索出来,并传递给大语言模型。如果 模型性能不佳,它可能会出现检索不准确遗漏关键信息引入噪音等问题,直接地影响着大语言模型在 RAG 框架下的表现。因此,一个高质量的 Embedding 模型是 RAG 成功的关键

3. Embedding 在 LLM 中的作用

事实上,除了 RAG 会直接用到 Embedding 之外,大语言模型本身也离不开 Embedding。Embedding 是大语言模型(LLM)内部运行的基石,贯穿了整个处理流程。它不会在用户交互中直接作为结果呈现出来,但用户输入的每一个字,最终都变成了模型可以理解的 Embedding 向量。

LLM 内部工作流中,Embedding 是其第一道关口。当用户输入一个提示词(例如:“请写一首关于秋天的诗”),LLM 会在内部进行以下步骤:

  1. Tokenization(分词):首先,LLM 的分词器将你的文本输入拆解成一个个 token。这里的 token 可能是一个词、一个字或是一个词组。
  2. Embedding Lookup(向量查询):每个 token 都有一个唯一的 ID。LLM 内部有一个巨大的 Embedding 矩阵,就像一个字典。当它看到一个 token ID 时,就会在这个矩阵中查找对应的 Embedding 向量
  3. Position Encoding(位置编码):除了每个 token 的语义向量,LLM 还会为每个 token 加上一个位置编码,以保留它在句子中的顺序信息。这对于理解语法和句子的完整含义至关重要。
  4. 向量处理:这两个向量(语义向量 + 位置编码)结合起来,形成了 LLM 可以处理的最终输入。这些向量会经过 LLM 内部的 Transformer 层进行一系列复杂的计算,以理解你的意图并生成回应。

在这里插入图片描述

来源:https://www.researchgate.net/figure/The-Transformer-model-architecture_fig1_323904682

Embedding 是语言和数学之间搭建起的一座桥梁。它把人类可读的语言,转换为机器可计算的数字,从而让 LLM 能够进行推理、理解和生成。所有基于 Transformer 架构的大语言模型,其核心运行机制都离不开 Embedding。

RAG 则是在 LLM 的基础上,额外利用 Embedding 这一技术,来从外部知识库中检索信息,以增强模型的回答能力。

4. 部署开源 Embedding 模型

尽管像 OpenAI 这样的在线服务方便易用,但它们会产生费用。比如下图是 OpenAI 提供的Embedding 模型的调用价格:

在这里插入图片描述

除了成本高之外,将本地文本传到远端的进行Embedding 还有数据隐私泄漏的风险。还好,开源社区提供了许多可以在本地使用的高质量 Embedding 模型。

本地使用 Embedding 模型又分为两种方式:进程内加载本地服务部署

Hugging Face 的 SentenceTransformers 库

SentenceTransformers 库是一个为句子、文本和图像做 Embedding 的 Python 框架。使用前需要安装:

pip install -U sentence-transformers

可以使用的模型以及其大小、速度如下:

在这里插入图片描述

这里有个官方的使用示例:

from sentence_transformers import SentenceTransformer

# 1. Load a pretrained Sentence Transformer model
model = SentenceTransformer("all-MiniLM-L6-v2")

# The sentences to encode
sentences = [
"The weather is lovely today.",
"It's so sunny outside!",
"He drove to the stadium.",
]

# 2. Calculate Embeddings by calling model.encode()
Embeddings = model.encode(sentences)
print(Embeddings.shape)
# [3, 384]

# 3. Calculate the Embedding similarities
similarities = model.similarity(Embeddings, Embeddings)
print(similarities)
# tensor([[1.0000, 0.6660, 0.1046],
#         [0.6660, 1.0000, 0.1411],
#         [0.1046, 0.1411, 1.0000]])

SentenceTransformers 库还支持用户自己加载和训练 Embedding 模型,然后推送到 Hugging Face。

Ollama 及其 SDK

著名的开源项目 Ollama 可以让你在本地运行 LLM 模型,它还可以支持运行 Embedding 模型。具体地,你可以在Ollama网站上直接通过标签来查看支持哪些 Embedding 模型。
在这里插入图片描述

使用 Ollama 提供模型的前提是你得安装和启动 Ollama,然后使用命令行工具拉取对应的模型即可:

ollama pull mxbai-embed-large

成功之后可以直接使用 curl 指令测试,可以直接得到响应:

curl http://localhost:11434/api/embed -d '{
  "model": "mxbai-embed-large",
  "input": "Welcome to access wlbcoder.com"
}'

Ollama 还提供了不同语言的库封装了 Restful 访问。

ollama.embed(
  model='mxbai-embed-large',
  input='Llamas are members of the camelid family',
)
两种方式的比较

直接使用 SentenceTransformers 库的方式,会直接将模型的参数加载到你 Python 脚本所在的进程中(占用内存或显存),整个 Embedding 转换计算都在这个进程内部完成。

其优点是使用简单,没有外部依赖,但缺点也比较明显:每次运行脚本都需要重新加载模型、不适合多个应用共享同一个模型的场景、不适合其他开发语言。

使用 Ollama 本地服务的方式,依赖长期后台有一个后台服务,专门负责加载和运行模型。客户端通过本地网络向这个服务发送 API 请求。

后者的优缺点恰好反过来,使用标准的 HTTP API 支持不同的语言访问模型只需加载一次,多应用共享。缺点就是依赖额外启动和管理一个服务进程。

在这里插入图片描述

前面我们也提到,无论使用哪种方式,都有开源社区提供的丰富模型库。

5. Elasticsearch 的语义检索

在前面提到的 RAG 流程中,向量数据库扮演了关键的存储角色。而 Elasticsearch 则是一个出色的集成式解决方案。它通过内置的 dense_vector 字段和 kNN(最近邻)搜索功能,将 Embedding 的转换、存储和检索封装在了一起。
在这里插入图片描述

这意味着,你可以直接将 Elasticsearch 作为 RAG 框架的向量存储来使用。当你导入文档时,可以配置一个处理管道,让 Elasticsearch 自动调用模型将文本转换为向量并存储。当进行查询时,它会同样自动将查询转换为向量,并在内部执行高效的相似性搜索。

以著名的RAGFlow开源项目为例,其默认使用的就是 Elasticsearch,你也可以通过配置切换成向量存储 Infinity。
在这里插入图片描述

6. 小结

Embedding 技术是大语言模型以及诸多 AI 应用的核心基石。它不仅把复杂难解的自然语言等非结构化数据,转化为可计算的数字空间,让机器获得“理解”和“推理”能力,还在语义检索(如 RAG)等实际应用中实现了从关键词到语义级、内容级的智能跨越。

本文介绍了 Embedding 的基本原理、在 LLM 和 RAG 中的核心作用、主流的本地和开源 Embedding模型、以及 Embedding 在向量数据库和语义检索系统中的应用,希望能帮助读者理解 Embedding,为后续在相关领域的学习和实践提供参考。


如何系统学习掌握AI大模型?

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 大模型行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

Logo

更多推荐