如何评估 LLM 应用 (二)

针对用户输入的一个 query,系统会将其转化为向量并在向量数据库中匹配最相关的文本段,然后根据我们的设定选择 3~5 个文本段落和用户的 query 一起交给大模型,再由大模型根据检索到的文本段落回答用户 query 中提出的问题。在这一整个系统中,我们将向量数据库检索相关文本段落的部分称为检索部分,将大模型根据检索到的文本段落进行答案生成的部分称为生成部分。因此要评估和优化一个大模型应用,特别是检索增强生成(RAG)模型的性能,我们需要从检索部分生成部分两个核心部分同时入手。

1. 检索部分的评估与优化

检索部分的核心功能是找到存在于知识库中、能够正确回答用户 query 中的提问的文本段落。因此,我们可以定义一个最直观的准确率在评估检索效果:对于 N 个给定 query,我们保证每一个 query 对应的正确答案都存在于知识库中。假设对于每一个 query,系统找到了 K 个文本片段,如果正确答案在 K 个文本片段之一,那么我们认为检索成功;如果正确答案不在 K 个文本片段之一,我们任务检索失败。

优化 RAG 模型的检索部分需要系统化地评估检索精确率和召回率,并结合特定应用场景的需求,灵活运用分词优化、索引结构优化、检索算法调整、多阶段检索策略等多种技术手段。通过不断迭代和调整,可以显著提升检索部分的性能,从而为生成部分提供更高质量的输入,最终提升大模型的整体应用效果。

目标:保证系统能够根据用户的查询准确地找到相关的答案片段。

大模型从入门到精通—— LLM 应用评估(二)_langchain

1. 检索部分的评估指标

在开始优化之前,我们首先需要建立评估标准,以便识别系统的强项和弱点。以下是常用的评估指标:

1.1. 召回率 (Recall)
  • 召回率指的是系统成功检索到的相关文档数量占所有相关文档的比例。高召回率意味着系统漏掉的相关信息较少。
  • 公式:大模型从入门到精通—— LLM 应用评估(二)_prompt_02
1.2. 精确率 (Precision)
  • 精确率衡量的是系统检索出的文档中有多少是相关的。高精确率意味着系统返回的噪音较少。
  • 公式:大模型从入门到精通—— LLM 应用评估(二)_人工智能_03
1.3. F1-Score
  • F1-Score 是精确率和召回率的调和平均,用于评估系统在精确性和全面性上的综合表现。
  • 公式:大模型从入门到精通—— LLM 应用评估(二)_人工智能_04
1.4. 平均精确度 (Mean Average Precision, MAP)
  • MAP 是多个查询的平均精确度,考虑了查询的排序信息,用于衡量检索系统的整体表现。
1.5. 检索速度
  • 在实际应用中,检索速度也是一个关键指标,尤其是在大规模数据环境中。响应时间越短,用户体验越好。

2. 检索部分的优化策略

针对检索部分的优化,我们可以从以下几个方面着手:

2.1. 改进 Query 处理
  • 分词优化:针对特定领域的术语,使用定制的分词器或词汇表以提高分词准确度。
  • 同义词扩展:引入同义词词典,扩展查询词,以覆盖更多相关文档。
  • 拼写纠正:对用户输入的拼写错误进行自动纠正,避免因拼写问题导致检索失败。
2.2. 优化索引结构
  • 倒排索引:确保建立有效的倒排索引,以快速定位相关文档。
  • 索引更新:定期更新索引以确保信息的实时性和准确性。
  • 字段权重:在索引时为不同字段(如标题、摘要、正文)赋予不同权重,根据重要性进行排序。
2.3. 检索算法调整
  • BM25 算法:BM25 是一种广泛应用的概率检索模型,可以用于改进文档的相关性排序。
  • TF-IDF:传统的 TF-IDF 算法也可以作为基础方案,用于初步的相关性排序。
  • 向量检索:对于更加复杂的检索需求,可以使用基于向量的检索方法(如向量化的文本嵌入),提高语义匹配的能力。
2.4. 引入多阶段检索
  • 初步过滤:使用简单的检索算法快速过滤掉大部分不相关文档。
  • 精细排序:对初步过滤的结果进行更复杂的排序,如使用深度学习模型进行精确匹配。
  • 反馈学习:利用用户反馈对检索算法进行动态调整和优化。
2.5. 利用外部知识库和文档嵌入
  • 知识图谱:集成知识图谱以提高查询理解的上下文能力和精度。
  • 文档嵌入:将文档和查询转化为向量表示,使用向量空间模型来评估文档与查询之间的语义相似度。

3. 工具和框架

以下是一些用于检索优化的工具和框架:

  • Elasticsearch:一种分布式的搜索引擎,支持倒排索引、BM25 算法、同义词扩展等。
  • FAISS:Facebook AI 提供的一个快速相似度搜索工具,支持大规模向量检索。
  • Lucene:一个高性能的全功能文本搜索引擎库,许多搜索引擎(如 Elasticsearch)都基于 Lucene。
  • Pinecone:一种托管的向量数据库服务,适合构建实时推荐和搜索系统。

4. 综合优化和迭代

  • 定期评估:持续监控和评估检索部分的性能,以便及时发现问题并进行优化。
  • 实验与测试:通过 A/B 测试或其他实验方法来评估不同优化策略的效果。
  • 反馈机制:构建用户反馈机制,通过用户的实际使用反馈不断改进检索系统。
  • 优化 RAG 模型中的检索部分需要超越传统的评估方法,结合多片段联合查询、片段顺序影响以及错误片段的避避免等因素,进行更深入的评估和优化。此外,将检索部分建模为搜索任务,引入经典的搜索算法评估与优化思路,可以更全面地提升系统的整体性能。最终,评估和优化策略的选择应根据具体业务需求进行权衡,确保系统在实际应用中表现出色。
  • 在检索增强生成(RAG)模型的评估与优化过程中,检索部分的效果直接影响生成部分的质量。虽然通过准确率、召回率等传统评估方法可以初步评估检索效果,但这些方法有其局限性。尤其在面对需要多个知识片段联合回答的复杂查询时,传统评估方法可能无法全面反映系统的性能。以下是对这些不足和改进思路的总结:
1. 复杂 Query 的评估挑战
  • 联合知识片段:对于需要多个知识片段联合回答的查询,传统的准确率和召回率可能无法有效衡量系统的表现。评估时需要考虑系统能否正确识别并组合多个片段以提供完整答案。
2. 检索片段的排序问题
  • 顺序影响:检索到的片段之间的顺序可能会影响生成模型的回答质量。因此,除了评估片段的召回,还应考虑片段的排序是否合理,是否有助于生成模型构建出正确、连贯的答案。
3. 错误片段的影响
  • 误导性片段:系统检索到的错误片段可能会误导生成模型,导致生成的答案不准确。因此,评估检索部分时,不仅要关注正确片段的召回,还应考虑系统是否避免了检索到误导性片段。这可以通过引入负面示例的识别率来评估。
4. 基于搜索任务的检索建模
  • 搜索场景类比:将检索任务建模为一个经典的搜索任务,可以借鉴搜索算法中的评估和优化方法。虽然 RAG 模型更强调召回,但搜索场景中关于内容排序、构建索引等思路同样适用于 RAG 的优化。通过结合这些方法,可以更全面地评估和优化检索部分的效果。
5. 评估与优化的综合考虑
  • 业务需求与成本:评估和优化的具体方法需要根据实际项目的业务需求和成本进行调整。不同的应用场景可能对检索的准确性、速度、片段排序等有不同的要求,因此应根据实际情况选择合适的评估指标和优化策略。

6. 优化 RAG 模型中的检索部分:常见问题及解决方案

在优化检索增强生成(RAG)模型的过程中,检索部分的性能直接影响到生成部分的质量。针对不同的检索问题,我们需要进行系统化的评估和优化,以确保模型能够准确、有效地提供正确的答案。以下内容融合了常见问题及其优化思路。在评估和优化检索部分时,我们不仅要关注传统的准确率和召回率,还需综合考虑诸如知识片段被割裂、长上下文回答、关键词误导、匹配关系不合理等问题。通过调整文本切割方式、优化知识库构建、改写查询、优化向量模型或构建倒排索引,可以显著提升系统的整体性能。结合经典搜索任务的评估和优化思路,可以更全面地提升 RAG 模型的检索效果,从而为生成部分提供更高质量的输入,最终提升大模型的应用效果。

1. 知识片段被割裂导致答案丢失

这种情况通常发生在需要较长回答的查询中。尽管正确的答案存在于知识库中,但由于检索到的知识片段被分割,导致无法形成完整的回答。

优化思路

  • 优化文本切割方式:在知识库构建过程中,避免使用仅基于字符或固定大小的切割方式。这种方式可能会打断语义相关的上下文,从而将同一主题的内容分割到不同的片段中。针对格式统一、组织清晰的文档,可以构建更加合适的分割规则。对于格式复杂的文档,可以考虑人工干预或训练一个专门用于语义分割的模型,以确保语义相关的内容能够保留在同一片段中。
2. Query 提问需要长上下文概括回答

这种情况发生在需要跨越多个知识片段来形成完整回答的查询中。然而,由于模型上下文的限制,很难同时提供足够的知识片段来综合回答问题。

优化思路

  • 优化知识库构建方式:在构建知识库时,增加一个概括和总结的步骤。使用大模型对长文档进行总结,或者通过预设问题让大模型生成可能的答案,然后将这些总结或生成的内容作为独立的知识片段添加到知识库中。这样可以预先填充可能的答案,解决长上下文查询的问题。
3. 关键词误导

在某些情况下,系统可能会检索到包含与查询强相关关键词的片段,但这些片段并不真正回答用户的问题。这通常是因为次要关键词的匹配影响了主要关键词。

优化思路

  • 改写用户 Query:使用大模型对用户的查询进行改写,去除次要关键词,修正可能的错字或漏字。这一过程可以通过 LLM 对 Query 进行提炼、形成 JSON 对象或扩写来实现,确保系统关注到真正重要的关键词,从而提高检索的精确性。
4. 匹配关系不合理

这个问题发生在系统检索到的文本段与查询相关,但并未包含实际答案。这通常是因为所使用的向量模型并没有真正反映“因果”的语义相似度,而是关注了“配对”的语义相似度。

优化思路

  • 优化向量模型或构建倒排索引:可以选择更合适的向量模型,或者对已有模型进行微调,使其更符合业务需求。此外,可以考虑构建倒排索引,即为每个知识片段构建一个代表其内容的索引。在检索时,匹配索引与查询的相关性,而不是全文匹配,以提高检索结果的准确性。

2. 生成部分的评估与优化

目标:确保在获得正确的答案片段后,系统能够生成符合用户要求的正确回答。

1. 评估生成效果

  • 生成准确性:评估生成的回答是否准确回答了用户的 query。
  • 生成流畅性:评估生成的语言是否流畅、自然。
  • 信息完整性:评估生成的回答是否包含了用户 query 所需要的所有信息。
  • 用户满意度:通过用户反馈,评估生成的回答是否符合用户的预期。

2. 找出 Bad Case

  • 收集生成的错误案例,分析模型在生成过程中出现的问题。
  • 可能的 Bad Case 包括:
  • 生成内容不准确:生成的回答不符合用户 query 的意图。
  • 信息丢失:生成的回答遗漏了重要的细节。
  • 语言不流畅:生成的语句不通顺,影响用户体验。

3. 优化生成部分

  • Prompt Engineering:优化提示词设计,引导模型生成更准确的回答。例如:
  • 明确上下文:在提示词中明确说明上下文,以减少生成中的模糊性。
  • 引导结构化回答:在提示词中加入结构化的指示,如“首先…其次…最后…”等,以引导模型生成更清晰的回答。
  • 添加约束:在提示词中明确回答的限制条件,如字数、语气等。
  • 多样化提示词:设计多种提示词模板,根据不同的 query 选择最适合的提示词。
  • 反馈学习:利用用户的反馈不断调整和优化 Prompt,以改善生成效果。

4.提升生成部分质量的优化策略总结

在优化生成部分时,我们可以通过以下几个关键策略来提升大模型的回答质量,并尽可能减少模型的限制和错误。

1. 提升直观回答质量
  • 思路:寻找生成过程中出现的 Bad Case 是最直接的优化方法之一。通过评估模型生成的直观回答质量,并将其与原有的知识库内容进行对比,可以明确识别出生成结果中的不足之处。此方法简单直观,是优化生成质量的首要步骤。
2. 标明知识来源,提高可信度
  • 思路:由于大模型可能会生成幻觉(即虚构的信息),标明回答中的知识来源变得尤为重要,特别是在需要确保答案真实性的场景中。通过明确标识生成内容的来源,可以提高回答的可信度,并增强用户对系统的信任。
3. 构造思维链
  • 思路:构造思维链是一种有效的方式,帮助模型更好地处理复杂问题并减少其能力限制。通过将 Prompt 设计成多步骤的思维链,例如要求模型在回答后进行反思,可以尽量减少幻觉问题并提高回答的准确性和合理性。这种方法能够帮助模型更系统化地思考和回答复杂问题。
4. 增加指令解析
  • 思路:在生成优化过程中,如果需要模型按照指定格式输出,往往可以通过增加一个专门的指令解析步骤来实现。由于 Prompt Template 可能会忽略用户问题中的格式要求,明确地将这些格式要求作为独立的步骤或指令进行解析,可以确保模型按照预期的格式生成答案。

3. 综合评估与迭代优化

目标:通过不断的评估和优化,逐步提升系统的整体性能。

1. 综合评估

  • 定期回顾:定期对系统的检索和生成部分进行全面评估,确保优化措施取得预期效果。
  • A/B 测试:使用 A/B 测试方法,评估不同优化策略的实际效果。
  • 用户反馈循环:持续收集用户反馈,快速响应并改进系统。

2. 迭代优化

  • 根据评估结果,持续优化检索和生成部分。
  • 结合新技术或方法,不断改进系统的整体性能。

评估和优化 RAG 模型的核心在于双管齐下,同时优化检索部分和生成部分。通过系统化的评估方法,找出系统中的 Bad Case,并通过 Prompt Engineering 和其他优化技术进行针对性的改进,逐步提升模型的准确性和用户满意度。

参考

https://datawhalechina.github.io/llm-universe/#/C5/2.评估并优化生成部分?id=_1-提升直观回答质量