你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

RAG 生成嵌入阶段

在检索扩充生成(RAG)解决方案的之前步骤中,将文档划分为区块并对区块进行了丰富化。 在此步骤中,将为这些区块和计划对其执行矢量搜索的任何元数据字段生成嵌入内容。

本文是系列文章的一部分。 阅读简介

嵌入是对象的数学表示形式,如文本。 训练神经网络时,该过程将创建对象的许多表示形式。 每个表示形式都与网络中的其他对象建立连接。 嵌入很重要,因为它捕获对象的语义含义。

一个对象的表示形式与其他对象的表示形式有连接,因此你可以以数学方式比较对象。 以下示例演示如何嵌入捕获语义含义和对象之间的关系:

embedding (king) - embedding (man) + embedding (woman) = embedding (queen)

嵌入会使用相似性和距离的概念来相互比较。 以下网格显示了嵌入的比较。

展示矢量比较的 图示。

在 RAG 解决方案中,使用与区块相同的嵌入模型嵌入用户查询。 然后,在数据库中搜索相关向量,以返回与语义上最相关的区块。 相关区块的原始文本作为基础数据传递到语言模型。

注意

矢量以允许数学比较的方式表示文本的语义含义。 必须清理区块,以便矢量之间的数学邻近度准确反映其语义相关性。

了解嵌入模型的重要性

所选的嵌入模型可能会显著影响矢量搜索结果的相关性。 必须仔细考虑嵌入模型的词汇。 每个嵌入模型都使用特定的词汇进行训练。 例如, 转换器(BERT)模型中双向编码器表示 形式的词汇大小约为 30,000 个单词。

嵌入模型的词汇非常重要,因为它以独特的方式处理不在词汇中的字词。 如果某个单词不在模型的词汇中,它仍会为其计算向量。 许多模型将单词分解为子词。 它们将子词视为不同的标记,或者聚合子词的向量以创建单个嵌入。

例如,他明 一词可能不在嵌入模型的词汇中。 非他明 一词具有语义意义,作为身体释放的化学物质,导致过敏症状。 嵌入模型不包含 histamine。 因此,它可以将单词分为词汇中的子词,例如 他的ta,以及 我的

此图显示了“希他明”一词分解为以下子词:他的、ta 和我的。

这些子词的语义意义远非 安非他明的含义。 子词的单个或组合向量值导致与模型词汇中的 非他明 单词相比,矢量匹配更差。

选择嵌入模型

确定用例的正确嵌入模型。 在选择嵌入模型时,请考虑嵌入模型的词汇和数据字词之间的重叠。

显示选择嵌入模型流程的图示。

首先,确定你是否具有专门领域的内容。 例如,文档是否特定于用例、组织或行业? 确定域特定性的一个好方法是检查是否可以在 Internet 上找到内容中的实体和关键字。 如果你能做到,那么一个普通的嵌入模型也可能可以做到。

常规内容或非特定领域的内容

选择通用嵌入模型时,请从 Hugging Face 模型排名开始。 评估模型处理数据的方式,并从排名靠前的模型开始。

特定于域的内容

对于特定于域的内容,请确定是否可以使用特定于域的模型。 例如,数据可能位于生物医学领域,因此可以使用 BioGPT 模型。 这种语言模型是在大量生物医学文献上进行预训练的。 你可以使用它进行生物医学文本挖掘和生成。 如果特定于域的模型可用,请评估这些模型如何处理数据。

如果您没有领域特定模型,或者领域模型性能不佳,您可以使用您的领域特定词汇微调通用嵌入模型。

重要

对于你选择的任何模型,需要验证许可证是否适合你的需求,并且该模型提供必要的语言支持。

生成多模态嵌入

嵌入内容不限于文本。 可以为文本和其他媒体类型(如图像、音频和视频)生成嵌入内容。 生成嵌入的过程在形式上相似。 加载内容,通过嵌入模型传递内容,并存储生成的向量。 但模型和预处理步骤的选择因媒体类型而异。

例如,可以使用 对比度语言-图像预训练(CLIP) 等模型来生成图像嵌入。 然后,可以使用矢量搜索中的嵌入来检索语义相似的图像。 对于视频,必须定义提取特定功能的架构,例如对象状态或叙述性摘要,并使用专用模型为这些功能生成嵌入内容。

小窍门

使用架构定义要从多模式内容中提取的功能。 此方法针对检索目标优化嵌入内容。

使用降维

嵌入向量可以是高维,这会增加存储和计算成本。 降维技术有助于使嵌入更具可管理性、成本效益和可解释性。

可以使用 t 分布式随机邻居嵌入(t-SNE)主体组件分析(PCA) 等算法来减少向量中的维度数。 这些工具在 PyTorch 和 scikit-learn 等库中可用。

维度减少可以提高语义清晰度和可视化效果。 它还有助于消除密集嵌入中无用或噪声的特征。

注意

维度减少是后处理步骤。 生成嵌入后应用它以优化存储和检索性能。

比较嵌入内容

评估嵌入时,可以使用数学公式比较向量。 这些公式可帮助你确定两个嵌入的相似或不同之处。

常见的比较方法包括:

  • 余弦相似性:测量两个向量之间的角度。 适用于高维数据。
  • 欧克里德距离:测量两个向量之间的直线距离。
  • 曼哈顿距离:测量矢量组件之间的绝对差异。
  • 点积:计算一个向量在另一个向量上的投影。

小窍门

根据用例选择比较方法。 例如,如果要测量语义接近度,请使用余弦相似性;如果要测量字面距离,请使用欧几里得距离。

评估嵌入模型

若要评估嵌入模型,请可视化嵌入内容并评估问题与区块向量之间的距离。

可视化嵌入内容

可以使用库(如 t-SNE)在 X-Y 图上绘制区块和问题的向量。 然后,就可以确定各区块之间以及与问题之间的距离。 下图显示了绘制的区块向量。 彼此附近的两个箭头表示两个区块向量。 另一个箭头表示问题向量。 可以使用此可视化效果来了解问题与区块的距离。

图表,显示嵌入的可视化效果。该图表显示了在 X-Y 坐标上绘制的多个蓝色点。

两个箭头指向彼此附近的绘图点,另一个箭头显示一个远离其他两个的绘图点。

计算嵌入距离

可以使用编程方法来评估嵌入模型处理问题和区块的方式。 计算问题向量与区块向量之间的距离。 可以使用尤克里德距离或曼哈顿距离。

使用检索性能评估嵌入模型

若要选择最佳嵌入模型,请评估它在检索方案中的表现。 嵌入您的内容,执行矢量搜索,并评估是否检索到正确的项目。

可以试验不同的模型、比较公式和维度设置。 使用评估指标来确定哪个模型为用例提供最佳结果。

重要

检索性能是评估嵌入质量的最实用方法。 使用实际查询和内容测试模型。

微调嵌入模型

如果常规模型或特定于域的模型不符合你的需求,则可以使用自己的数据对其进行微调。 微调调整模型的权重以更好地表示词汇和语义。

微调可以提高检索准确性,尤其是对于代码搜索或法律文档等专用域。 但它需要仔细评估,如果训练数据不佳,有时会降低性能。

一比特强化学习(RL)等现代技术使您的微调更具成本效益。

小窍门

在微调模型之前,请评估是否可以通过提示词工程或约束解码来解决您的问题。 使用评估指标和检索性能来指导微调。

使用 Hugging Face 排行榜

Hugging Face排行榜提供嵌入模型的最新排名。 使用它来识别用例性能最高的模型。

查看模型时,请考虑:

  • 令牌: 模型词汇量的大小。
  • 记忆: 模型的大小和推理成本。
  • 尺寸: 输出向量的大小。

注意

较大的模型并不总是更好。 它们可能会增加成本,但却不会提高性能。 使用维度减少和检索评估来查找正确的平衡。

了解嵌入经济学

选择嵌入模型时,必须在性能和成本之间找到权衡。 大型嵌入模型通常对基准数据集具有更好的性能。 但是,性能的提高增加了成本。 大型向量在向量数据库中需要更多的空间。 它们还需要更多计算资源和时间来比较嵌入内容。 小型嵌入模型通常在同一基准上具有较低的性能。 它们在矢量数据库中占用更少的空间,并且在比较嵌入时需要更少的计算量和时间。

设计系统时,请考虑在存储、计算和性能要求方面嵌入的成本。 必须通过试验来验证模型的性能。 公开提供的基准通常是学术数据集,可能不会直接应用于业务数据和用例。 根据要求,你可以注重性能而非成本,或者接受够用的性能以降低成本。

下一步