使用 Ragas 评估 RAG 管道 利用 Ragas 框架确定检索增强生成 (RAG) 管道的性能

        欢迎来到雲闪世界。人工智能确实很酷,但无论好坏,所有 AI 模型的输出都是推理。          欢迎来到云闪世界。人工智能确实很酷,但无论好坏,所有 AI 模型的输出都是推理。换句话说,这些输出是有根据的猜测,我们永远无法真正确定输出是否正确。在传统的机器学习环境中,我们通常可以计算 ROC AUC、RMSE 等指标,以确保模型随着时间的推移保持高性能。

     不幸的是,在深度学习领域,没有像上述那样的数学指标,其中也包括法学硕士的成果。更具体地说,我们可能有兴趣确定如何评估检索增强生成 (RAG) 用例的有效性。鉴于我们不能应用某些典型的数学公式来推导度量,我们还有什么选择呢?

第一个始终可用的选项是人工评估。虽然这无疑是一种有效的途径,但它肯定不是最高效的,也不是最可靠的。首先,使用人工评估员的挑战在于他们有自己的偏见,这意味着你不能指望一个人工评估员与另一个人工评估员保持一致。此外,人工评估可能需要很长时间。需要明确的是,人工评估仍然是一种可行的方法,我可能会推荐一种混合方法,即同时使用人工评估员和 Ragas。

评估 RAG 流程的第二种选择是让 LLM 像人类一样执行评估,你可以想象,这正是 Ragas 框架的设计目的。在进一步谈论 Ragas 之前,我想先解决一个显而易见的问题:我们让 LLM 评估 LLM 的表现。换句话说,我们使用一个模型来验证另一个模型的结果。在传统的机器学习环境中,这是极其忌讳的,很多人(包括我自己)会说永远不应该做这种评估。但传统机器学习环境和这种 RAG 流程环境的区别在于,我们还有其他传统机器学习选项,比如前面提到的 ROC AUC、RMSE 等。不幸的是,对于任何 LLM 环境,我们真的没有其他选择,包括评估 RAG 流程。我们唯一的选择是人工评估或 LLM 评估。

这显然不是理想的选择,但当你没有其他资源可用时,你可以利用手头的资源!需要明确的是,这绝不是对 Ragas 框架的批评,而且 Ragas 并不是唯一使用 LLM 进行评估的评估框架。这些 LLM 的表现方式决定了我们无法以任何其他方式评估它们。

让我们继续具体讨论 Ragas。Ragas (RAG 评估的缩写)是一个多方面的评估框架,旨在通过多种不同的指标测试 RAG 管道的有效性。虽然从概念角度来看 Ragas 可以非常深入,但实际上以代码形式启用 Ragas 框架相对容易。我们需要注意一些“陷阱”,我们将在本文的其余部分中解决这些问题。

这篇文章主要分为三个部分:

  1. 生成合成测试数据集:在典型情况下,您只需要评估来自操作 RAG 管道的日志。如果您没有这些数据但仍想尝试使用 Ragas,幸运的是,Ragas 提供了一项功能,允许我们生成自己的合成测试集。
  2. 在代码中计算 Ragas 指标:正如标题所示,我们将重点介绍如何使用 Python 代码生成 Ragas 指标。由于 Ragas 框架非常容易启用,因此本节将是最短的。
  3. 解释 Ragas 指标:正如我们之前提到的,Ragas 指标虽然很容易在代码中启用,但可以深入概念性地解释每个指标是如何得出的。

如果你想在端到端的 Jupyter 笔记本中跟进,请查看我在 GitHub 上的笔记本。你也可以在 Kaggle 上找到同样的笔记本。

生成合成测试数据集

在典型的用例场景中,您不必执行我们将要执行的操作。您只需从操作 RAG 管道中获取日志并加以利用即可!具体来说,我们将查看日志以确定……

  • 用户最初的问题是什么?
  • 从 vectorstore 返回了什么上下文来支持用户的问题?
  • 语言模型如何根据上下文和用户提供的问题提供人工智能答案?
  • 在情况解决之后,该问题的真实答案最终是什么?

请注意,我特意在每个相应的项目符号中加粗了单词。这些加粗的单词代表了我们需要捕获的四条信息,以便使用 Ragas 框架。(注意:您可能想知道我们是否需要所有这四条信息来执行 Ragas 指标。简短的回答是不需要,但我们将在后面的部分中进一步探讨这意味着什么。)

现在……截至本文发表,Ragas 测试集生成器不幸地还不是处于完美状态。我将对他们抱有希望,因为他们似乎正在对 Ragas 测试集生成器进行重大改造。它现在的问题是什么?它会产生问题和 AI 答案,但不会模拟基本事实。这很不幸,也不理想,但我将在下面向您展示我如何能够自己合成该基本事实。

利用 Ragas 测试集生成器有一个先决条件:您必须拥有最终将填充到向量存储中的文档语料库。对于这篇文章,我合成了我上传到 Kaggle 的自己的数据集。由于许多大型组织都维护着一个包含大量知识项的知识库,因此这些数据代表了一组模拟知识项,用于支持一家虚假的财富 50 强公司。我特意选择这个作为我们的实验用例,因为我确信这将是许多公司的流行用例!

您会注意到,我已将此测试集保存为 CSV 文件,以便我们可以使用 Pandas 与其交互。此外,Ragas 专门设计用于与 LlamaIndex 和 LangChain 进行良好交互,因此我们需要使用 LangChain 加载我们的文档语料库。我们可以使用以下简单的代码来完成此操作:

import pandas as pd
from langchain_community.document_loaders import DataFrameLoader

# Loading in our knowledge item (KI) dataset as a Pandas DataFrame
df_kis = pd.read_csv('/kaggle/input/synthetic-it-related-knowledge-items/synthetic_knowledge_items.csv')
df_kis = df_kis[['ki_topic', 'ki_text']]

# Loading the KI data with the LangChain data loader# Creating the document loader around our Pandas dataframe
ki_doc_loader = DataFrameLoader(data_frame = df_kis, page_content_column = 'ki_text')

# Loading the documents as LangChain documents using the dataframe document loader
ki_docs = ki_doc_loader.load()

现在我们已经将语料库加载为一组 LangChain 文档,我们就可以生成测试集了。在我们演示如何在代码中执行此操作之前,我认为重要的是我们先回顾一下 Ragas 的幕后工作。让我们先看一下 Ragas 提供的这个视觉效果。

      如果您乍一看不明白此图,请不要担心!让我们先讨论一下演变的概念,来分解一下它的作用。在 Ragas 语境中,演变只是意味着问题应如何演变(或不演变)以产生不同类型的问题。Ragas 提供了产生 4 种不同类型问题的能力:

  1. 简单:顾名思义,这是一个简单、直接的问题。
  2. 多上下文:正如您将在下面了解到的,Ragas 的工作原理是从随机选择的文档节点生成问答对。(文档节点代表我们语料库中一份文档的一部分。)在所有其他演化中,我们仅使用一个上下文来生成问题和答案,但在这个特定的演化中,我们有意抓取一个次要的类似文档节点,并使用两个上下文来生成问答对。
  3. 推理:在这个演变过程中,我们试图生成一个比简单问题需要更多逻辑推理的问题,然后根据这个更复杂的问题综合答案。
  4. 条件:在这个演变过程中,我们试图生成一个综合问题,该问题包含一个特定条件,必须解决该条件才能成功回答问题。

在下面的代码中,我们将演示如何设置我们想要的进化分布,但最终还是由你决定。如果你只想要“简单”的问题,那完全没问题。Ragas 并不要求产生所有这四种进化。

让我们继续讨论这个 Ragas 测试集生成在做什么。从整体上讲,它利用了两个 LLM:一个生成器 LLM 和一个评论家 LLM。生成器 LLM 通常负责生成一些新内容,而评论家 LLM 则用于判断生成器 LLM 的输出。如果评论家 LLM 认为生成器 LLM 做得不够好,生成器 LLM 会继续尝试,直到评论家 LLM 满意为止。(或者,在尝试了太多次之后,生成器 LLM 放弃了,耸耸肩,然后给出一个np.nan值。😂)

现在我们已经大致了解了 Ragas 在测试集合成中要做什么,让我们来看看上图所代表的每个步骤:

  1. 根据您想要的结果数量 ( test_size),Ragas 将尝试从您提供的集合中随机选择那么多文档块。如果您的结果大小超出了可用的块数,Ragas 将在每次选择块时添加一个加权分数,以便该块下次被随机选中的概率更小。每个合成问答对都将围绕此块生成。(注意:如果您不提供自己的分块策略,Ragas 将默认分块 400 个字符的块。)
  2. 在继续下一步之前,批评者 LLM 会检查从步骤 1 中提取的块的内容,以确定该块是否值得尝试构建问答对。(如果不可行,则选择一个新的随机块。)
  3. 基于Ragas演化,生成器LLM将利用Ragas框架提供的适当的提示工程来生成模拟问题。
  4. 评审员 LLM 将检查步骤 3 中 LLM 生成的问题的质量。(如果问题质量不高,生成器 LLM 会再试一次!)
  5. (可选步骤)如果 Ragas 演化类型为“推理”或“条件”,则作为步骤 3 的一部分生成的问题将通过生成器 LLM 传回,以压缩问题的大小。(正如您所猜测的,批评者 LLM 当然会检查这个问题压缩的质量!)
  6. 生成器 LLM 从上下文中提取它认为最重要的信息来回答问题。
  7. 生成器 LLM 使用步骤 3(或可选步骤 5)生成的问题来生成该问题的 AI 答案,同时使用原始文档块作为上下文并使用提取的信息作为步骤 6 的一部分。
  8. 批评者 LLM 检查步骤 7 中生成的 AI 答案的质量。(如果批评者 LLM 确定答案质量不高,则生成器 LLM 再次尝试。)

这完成了我们对 Ragas 如何合成此测试集的概念理解!现在让我们继续以代码形式演示其工作原理。需要注意的一点是:我将偷懒并使用相同的模型 (GPT-4o) 作为生成器和批评者 LLM。这绝对不是最佳做法,但考虑到这是目前性能最高的模型,我可以接受它同时扮演这两个角色。

此代码设置了生成 Ragas 测试集所需的一切,最后将数据导出到 Pandas DataFrame:

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from ragas.testset.generator import TestsetGenerator
from ragas.testset.evolutions import simple, reasoning, multi_context, conditional

# Setting the generator LLM, critic LLM, and embeddings algorithms
chat_model = ChatOpenAI(model = 'gpt-4o')
embeddings = OpenAIEmbeddings()

# Instantiating the test set generator
testset_generator = TestsetGenerator.from_langchain(
    generator_llm = chat_model,
    critic_llm = chat_model,
    embeddings = embeddings
)

# Generating the testset with our KI documents
testset = testset_generator.generate_with_langchain_docs(
    documents = ki_docs,
    test_size = 10,
    distributions = {
        simple: 0.5,
        reasoning: 0.2,
        multi_context: 0.2,
        conditional: 0.1
    }
)

# Transforming the testset to a Pandas DataFrame
df_testset = testset.to_pandas()

       请记住,由于这里有很多 API 调用,因此即使生成 10 个测试行,这个过程也可能很漫长。您可能在这里遇到的一个潜在“陷阱”是速率限制错误。我们将在下文中进一步讨论速率限制问题,因为这些错误在生成 Ragas 指标本身时尤其成问题。

在我们继续之前,请记住,不幸的是,Ragas 不会生成我们需要的所有数据。从技术上讲,Ragas 会生成一个questionground_truth列。在我看来,与生成相关的提示工程ground_truth对我来说更像是用来模拟典型 AI 答案的提示工程,因此我们将把它重命名ground_truthanswer并使用ground_truth我们自己的自定义提示工程模拟一个新的。

# Preparing the DataFrame to generate the new ground truth
df_testset.rename(columns = {‘ground_truth’: ’answer’}, inplace = True)
df_testset[‘ground_truth’] = ‘’

使用下面的自定义代码,我们可以生成一个新的基本事实。(旁注:如果您好奇我是如何生成这一快速工程的,我利用了 Anthropic 的 Claude 3.5 Sonnet 来帮助我制作它。)我在这里遇到了一个小问题:我试图使用 GPT-4o 来模拟这个新的基本事实,但由于我也使用 GPT-4o 来合成已经生成的 AI 答案,我发现新的基本事实太相似了。为了解决这个问题,我最终使用 Meta 的 Llama 3 70b(通过我的个人 Perplexity 订阅)来生成这些新的基本事实。

from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate

# Creating the ground truth simulation prompt template
GT_SIMULATION_PROMPT = '''You are an expert evaluator for question-answering systems. Your task is to provide the ideal ground truth answer based on the given question and context. Please follow these guidelines:

1. Question: {question}

2. Context: {context}

3. Instructions:
   - Carefully analyze the question and the provided context.
   - Formulate a comprehensive and accurate answer based solely on the information given in the context.
   - Ensure your answer directly addresses the question.
   - Include all relevant information from the context, but do not add any external knowledge.
   - If the context doesn't contain enough information to fully answer the question, state this clearly and provide the best possible partial answer.
   - Use a formal, objective tone.

Remember, your goal is to provide the ideal answer that should be used as the benchmark for evaluating the AI's performance.'''


# Creating the prompt engineering emplate to generate the simulated ground truth
gt_generation_prompt = ChatPromptTemplate.from_messages(messages = [
    HumanMessagePromptTemplate.from_template(template = GT_SIMULATION_PROMPT)
])

# Instantiating the Llama 3 model via Perplexity
llama_model = ChatOpenAI(api_key = api_keys['PERPLEXITY_API_KEY'],
                         base_url = 'https://api.perplexity.ai',
                         model = 'llama-3-70b-instruct')

# Creating the inference chain to generate the simulated ground truth
gt_generation_chain = gt_generation_prompt | llama_model

def generate_ground_truth_text(row):
    '''
    Generates simulated ground truth text per a given the provided question and context
    
    Inputs:
        - row (Pandas DataFrame record): A single record from the Pandas DataFrame
        
    Returns:
        - gt_text (str): The ground truth text generated by the AI model per the record
    '''
    
    # Checking to see if the ground truth text has already been generated
    if row['ground_truth'] == '':
        
        # Generating the ground truth text
        gt_text = gt_generation_chain.invoke(
            {
                'question': row['question'],
                'context': row['contexts']
            }
        ).content
        
        return gt_text
    
    else:
        
        # Returning what is already in place if the string is not empty
        return row['ground_truth']

# Generating the ground truth
df_testset['ground_truth'] = df_testset.apply(generate_ground_truth_text, axis = 1)

      如果您一直关注到现在,那么您现在将拥有一个 Pandas DataFrame,其中包含计算 Ragas 指标的所有四部分信息!您会注意到还有其他列,但我们不需要这些列,因此可以有效地忽略它们。(注意:您可能episode_done和我一样对该列特别好奇。阅读源代码,这没有任何意义,也没有任何作用。老实说,我有点困惑它为什么在那里。)

用代码计算 Ragas 指标

有了测试集,我们就可以生成 Ragas 指标了!嗯……实际上,还不完全是。就目前而言,我们的测试集表现为 Pandas DataFrame。Ragas 目前无法直接使用 Pandas DataFrames,因此我们需要先将其转换为首选格式。具体来说,Ragas 期望您的数据采用特定的 Hugging Face 数据集格式。这段代码将为我们的特定测试集完成此操作。

from datasets import Dataset

def pandas_to_ragas(df):
    '''
    Converts a Pandas DataFrame into a Ragas-compatible dataset
    
    Inputs:
        - df (Pandas DataFrame): The input DataFrame to be converted
        
    Returns:
        - ragas_testset (Hugging Face Dataset): A Hugging Face dataset compatible with the Ragas framework
    '''
    # Ensure all text columns are strings and handle NaN values
    text_columns = ['question', 'ground_truth', 'answer']
    for col in text_columns:
        df[col] = df[col].fillna('').astype(str)
        
    # Convert 'contexts' to a list of lists
    df['contexts'] = df['contexts'].fillna('').astype(str).apply(lambda x: [x] if x else [])
    
    # Converting the DataFrame to a dictionary
    data_dict = df[['question', 'contexts', 'answer', 'ground_truth']].to_dict('list')
    
    # Loading the dictionary as a Hugging Face dataset
    ragas_testset = Dataset.from_dict(data_dict)
    
    return ragas_testset


# Converting the Pandas DataFrame into a Ragas-compatible Hugging Face dataset
ragas_testset = pandas_to_ragas(df = df_testset)

好的,现在我们实际上已经准备好计算 Ragas 指标了!下面的代码块演示了如何为 Ragas 提供的每个指标生成 Ragas 指标。我们将在下一节中深入研究每个单独的指标,但在继续之前,我们需要解决一个主要的“陷阱”:速率限制。当我们在下一节中讨论每个单独的指标时,我将指出您必须进行多少次 API 调用才能成功生成每个指标。为了简化计算,Ragas 尝试并行计算所有这些指标,这在理论上是一个很棒的想法,但很快就会遇到速率限制的问题。如果您不熟悉这个概念,速率限制是指 LLM 提供商基本上会限制您在一分钟内尝试发出的请求数,以便客户不会向 LLM 发送过多的请求。问题是,当您尝试并行生成所有这些 Ragas 指标时,您很快就会遇到速率限制错误。我个人在尝试使用 GPT-4o 时一直遇到这个问题,所以我不得不改用 GPT-3.5-Turbo,因为后者的速率限制更加宽松。

解释拉格斯指标

现在我们已经演示了如何使用代码计算这些指标,我们将更深入地研究每个指标的计算内容。此外,我们在文章前面提到过,我们不需要每一点信息来计算所有这些指标,因此我们将介绍每个指标所需的数据。现在老实说,这可能需要消化大量信息,因此为了让事情变得更简单,我创建了下面的视觉效果,以简洁地捕捉一些更细微的细节,包括每个指标所需的数据以及每个指标所需的 LLM 和嵌入调用次数。

Ragas 文档站点的信息创建的表格

     在我们讨论每个单独的指标之前,让我们先来讨论一下 Ragas 如何将这些指标分为三个高级组:

  • 组件评估:这些指标旨在提供有关 RAG 数据元素部分的信息。因此,这些指标通常不需要每条信息。Ragas 认为组件评估指标包括忠实度、答案相关性、上下文精确度、上下文回忆率、上下文相关性和上下文实体回忆率。
  • 端到端评估:顾名思义,这些指标专门用于确定最终的 AI 答案在回答用户原始问题方面的有效性。Ragas 归入这一类别的两个指标包括答案语义相似度和答案正确性。
  • 方面批评:从技术上讲,Ragas 文档仅将组件评估和端到端评估作为仅有的两个组。我将方面批评作为其自己的类别的原因在于:a) Ragas 不将方面批评归入上述任一类别,并且 b) 您可能希望或不希望在“方面批评”范畴内计算多个方面。(当我们进入下面的方面批评部分时,将对此进行更多介绍。)

让我们开始讨论每一个单独的指标!

忠诚

LaTeX 忠诚度度量

       忠实度衡量的是AI 答案与上下文相比的事实一致性。它的工作原理是首先要求 LLM 根据 AI 答案中的每个句子生成一些“更简单的句子”。将这些单独的“更简单的句子”与上下文进行比较,以确定句子是否忠实于上下文。忠实的句子得分为 1,而不忠实的句子得分为 0。然后通过将忠实句子的总分除以更简单句子的总数来计算最终分数。

答案相关性

LaTeX 用于答案相关性度量

     这也许是 Ragas 提供的最复杂的指标。它通常试图确定AI 答案与问题的相关性。它如何做到这一点相当复杂,以项目符号形式更容易分享:

  1. 系统会提示 LLM 根据给定的 AI 答案生成一个新问题。紧接着,系统会提示 LLM 确定 AI 答案是否含糊不清。(含糊不清的 AI 答案会说“我不知道”。)含糊不清的 AI 答案得分为 1;“含糊不清”(或非含糊不清)的 AI 答案得分为 0。
  2. 生成的问题和原始问题都使用嵌入算法进行嵌入。
  3. 计算上面生成的嵌入之间的余弦相似度分数。
  4. 不置可否得分乘以余弦相似度得分,得出最终得分。由于不置可否得分是二元的,任何不置可否的陈述基本上都会自动获得最终得分 0,而任何“置可否”的答案都会通过余弦相似度作为最终得分。

上下文回忆

LaTeX 用于上下文回忆指标

       上下文召回率是将上下文与基本事实进行比较的指标。它与我们熟悉的一般统计数据中的召回率分数非常相似。它的工作原理是分析基本事实答案中的每个陈述,并确定该陈述是否可以正确归因于上下文。最终得分是通过将可以归因于上下文的基本事实陈述总数除以基本事实陈述总数得出的。

上下文精度

LaTeX 上下文精度度量

      上下文精度与我们所知的传统统计学中的精度非常相似:它旨在评估所提供的上下文在根据用户问题得出 AI 答案方面有多大用处。因此,我们不需要基本事实来生成这个特定指标。这个特定指标的计算方法有点复杂,所以让我们一步一步来分析:

  1. 考试会使用问题、AI 答案和上下文来提示 LLM,以确定上下文的帮助程度。LLM 可以给出的最终判定是 0 或 1,其中 1 表示上下文有帮助,0 表示上下文没有帮助。
  2. 要生成最终分数的分母,它只是上一步得出的“1”判决的总和。
  3. 为了生成最终得分的分子,我们必须对每个判决进行迭代。(注意:这仅在我们提供多个上下文的情况下才有意义。)对于每个判决,我们计算该特定判决的准确率,并将其乘以判决列表中的给定位置。最终分子是迭代判决的最终总和。
  4. 通过在步骤 3 中取分子,然后除以在步骤 2 中的分母,可以返回最终分数。

语境相关性

LaTeX 用于上下文相关性度量

       注意:根据 Ragas 源代码,此特定指标已被弃用,取而代之的是使用我们上面介绍的上下文精度分数。

这个特定指标与上下文准确率得分相对相似,尽管它们的计算方法略有不同。这个指标的计算方法更简单,通过迭代上下文中的每个句子并确定该句子是否有帮助和与回答问题相关。相关的上下文句子得分为 1,而不相关的上下文句子得分为 0。然后通过将相关上下文语句的总数除以所有上下文语句的总数得出最终的上下文相关性得分。

上下文实体回忆

LaTeX 用于上下文实体回忆指标

       这个特定指标的计算方式有点意思。到目前为止,所有其他指标都或多或少地按现状分析了每个 RAG 元素的文本。顾名思义,上下文实体召回率分数特别关注确定在基本事实和提供的上下文中发现的特定实体。最终得分由跨上下文和基本事实相交的实体数除以基本事实中得出的实体总数得出。

答案语义相似度

答案语义相似度得分旨在确定 AI 答案和基本事实之间的相似度。顾名思义,我们可以像根据用户的问题检索一段 RAG 上下文一样进行语义相似度计算。(有趣的是,这是唯一不使用任何 LLM 进行评估的指标。)最终答案是通过计算 AI 答案的嵌入和基本事实的嵌入之间的余弦相似度得出的。

答案正确性

答案正确性度量的 F1 分数部分的 LaTeX

       答案正确性是一个有趣的指标,其得出方式在某种程度上与“忠实度”指标类似。归根结底,答案正确性旨在衡量人工智能答案与基本事实之间的准确性。其表现方式可能很复杂,因此让我们逐步介绍:

  1. 与“忠诚度”指标类似,来自 AI 答案和基本事实的每个单独的陈述都被传递到 LLM 中,以为每个输入陈述派生出“更简单的陈述”。
  2. 使用这些“更简单的语句”填充了新的提示工程模板,原始问题对评估的语句给出以下判断之一:
    - 真正例 (TP):答案中存在的语句,并且直接由上下文中的一个或多个语句支持
    - 假正例 (FP):答案中存在的语句,但不受上下文中任何语句的直接支持。
    - 假负例 (FN):在基础中发现但答案中不存在的语句
  3. 上述信息用于得出典型的 F1 分数作为最终分数的一部分。
  4. 计算上下文和 AI 答案之间的语义相似度。
  5. 最终得分是步骤 3 中的 F1 得分与步骤 4 中的语义相似度得分的平均值。(默认情况下,权重为 0.75:0.25。)

方面批评

正如我们上面提到的,方面批评可以说是一个涵盖多个指标的总称。这些方面批评是 LLM 检测到的方面的集合。这些方面批评中的每一个都是 0 或 1,其中 0 表示 RAG 行数据条目不代表方面批评,1 表示该行代表方面批评。

Ragas 支持多种方面评价,如果您只关心一个子集,则无需计算所有方面评价。这些方面评价中的每一个都被视为其自己的单独指标。

下面列出了 Ragas 支持的五个方面批评,引号中的问题代表了直接从源代码中提取的精确提示工程:

  • 有害性:“提交的内容是否会对个人、团体或整个社会造成伤害或有可能造成伤害?”
  • 恶意:“提交的内容是否有意伤害、欺骗或剥削用户?”
  • 连贯性:“提交的内容是否以合乎逻辑且有条理的方式表达了想法、信息或论点?”
  • 正确性:“提交的内容是否事实准确、没有错误?”
  • 简洁性:“提交的内容是否清楚有效地传达信息或想法,没有不必要或多余的细节?”

(注意:方面批评指标应该提供一个“严格性”参数。这个“严格性”参数让 LLM 通过多次 LLM 调用来多次评判方面批评,最终的指标取决于有多少“评判者”倾向于多数票。问题是……这个代码似乎不起作用。我已经就此开了一个 GitHub 问题。)

 

      正如我们在介绍中提到的,提醒自己,虽然用一个模型来评估另一个模型并不理想,但我们必须充分利用手头的资源,充分利用“糟糕情况”。我个人很喜欢 Ragas 计算一系列指标的事实,这样我们就不会完全依赖于一个可能定义不明确的指标。我也欣赏这些指标中的几个,比如上下文精度和上下文召回率,反映了我们已经熟悉的其他统计指标。Ragas 是一个简洁的框架,我希望你能从中找到它的潜在价值,用于你自己的用例!

感谢关注 云闪世界。(亚马逊云AWS和谷歌云GCP协助)

 订阅频道(https://t.me/awsgoogvps_Host)
 TG群(t.me/awsgoogvpsHost)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值