人人都会AI编程

3.2 文本嵌入(Embedding)原理

更新时间:2026-07-12

在 RAG 系统中,文本嵌入(Embedding)是实现“语义检索”的核心技术环节。它的基本任务是将一段自然语言文本转换为一组固定长度的数字向量,使得语义相近的文本在向量空间中的距离也比较近,语义无关的文本则距离较远。正是基于这种“距离即相似度”的性质,系统才能在接收到用户问题后,迅速从海量文档中找到真正相关的内容片段。

1. 什么是文本嵌入

简单来说,文本嵌入就是用一个实数数组(例如 768 个浮点数)来表示一句话、一个段落或一个文档。这个数组可以看作该文本在高维空间中的坐标。嵌入模型的目标不是简单地编码词语,而是编码语义:两段文本如果含义接近,它们的向量坐标就应彼此靠近。

例如,以下三句话经过嵌入后:

  • “如何修改登录密码?”
  • “忘记密码了怎么办?”
  • “今天天气很好。”

前两句虽然措辞不同,但都围绕“密码问题”展开,它们对应的向量距离会很近;第三句的向量则与它们距离较远。

2. 嵌入模型是如何工作的

现代的文本嵌入模型通常基于深度学习模型(例如 BERT 架构或专门的嵌入模型),通过大规模语料训练获得将文本映射到向量的能力。其训练过程常采用对比学习等方法,使语义相近的句子对在向量空间中互相吸引,不相关的句子对互相推开。

在实际使用中,开发者不需要从头训练嵌入模型,而是直接调用已经预训练好的模型(例如 OpenAI 的 text-embedding-3-small、智源的 BGE 系列等)。只需将文本输入,模型会输出一个高维向量。整个过程对调用方而言类似于一个“文本→向量”的转换函数。

3. 为什么向量能够衡量语义相似度

向量数据库中的相似度检索主要依赖两种数学度量:

  • 余弦相似度(Cosine Similarity):计算两个向量之间夹角的余弦值,范围在 -1 到 1 之间。越接近 1 表示方向越一致,语义越接近。
  • 欧几里得距离(Euclidean Distance):计算向量在多维空间中的直线距离。距离越小代表越相似。

大多数应用场景采用余弦相似度,因为它只关注方向,不受向量长度影响,能更好地体现语义接近程度。

4. 嵌入在 RAG 中的作用

嵌入环节决定了检索质量的上限。在离线索引阶段,系统会调用嵌入模型将所有文档片段逐一转为向量,存入向量数据库。在线问答时,用户的提问同样转为向量,随后在数据库中通过相似度计算快速召回最匹配的 top‑k 个片段。如果嵌入模型对特定领域的语义理解不够精准,后续无论生成模型多强,也无法弥补检索错误带来的信息偏差。

5. 选型与实用建议

选择嵌入模型时,需要平衡性能、成本和领域适配度:

  • 通用模型:如 OpenAI text-embedding-3-small、text-embedding-3-large,效果好,调用方便,但数据需经外部 API,可能不适用于严格数据合规场景。
  • 开源模型:如 BGE(智源)、E5、GTE 系列,可在本地部署,确保数据不出域,适合对隐私要求高的企业。部分模型支持微调,可以用自有领域数据进一步优化。
  • 多语言与长文本:注意模型的最大输入长度和语言支持。例如,处理中文技术文档应优先选择中文语料训练充分的模型,处理长段落需确认模型支持足够长的上下文(如 8192 tokens)。

在工程实践中,还需注意以下几点:

  • 输入预处理的重要性:去除无用符号、统一格式可以对向量质量产生正面影响。
  • 嵌入维度与成本:高维度向量通常语义表达更精细,但也占用更多存储和更慢的检索速度。可按实测效果选择合适的维度。
  • 版本一致性:索引向量和查询向量必须由同一模型生成,切换嵌入模型时必须全量重建索引,否则相似度比较将完全失效。

通过合理选择和部署嵌入模型,RAG 系统才能在底层检索环节准确捕捉用户意图与文档语义的关联,为后续生成环节提供扎实的信息基础。