Press "Enter" to skip to content

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估

在过去几年中,大型语言模型(LLMs)作为优秀的工具崭露头角,能够以前所未有的熟练程度理解、生成和处理文本。它们的潜在应用涵盖了从对话代理到内容生成和信息检索,承诺改变所有行业的方式。然而,发挥这种潜力并确保这些模型的负责和有效使用,取决于LLM评估的关键过程。评估是用于衡量LLM或生成型AI服务输出质量和负责任程度的任务。评估LLMs不仅出于理解模型性能的愿望,还有实施负责任的AI的需求,以及减少提供错误信息或有偏见内容的风险,以及减少生成有害、不安全、恶意和不道德内容的程度。此外,评估LLM还可以帮助减轻安全风险,特别是在提示数据篡改的情况下。对于基于LLM的应用程序,识别漏洞并实施保护措施以防止潜在的数据违规和未经授权的数据操作至关重要。

通过提供用于评估LLMs的基本工具,配置简单、一键操作的方法,Amazon SageMaker Clarify LLM评估能力使客户能够享受到上述大部分好处。掌握了这些工具之后,下一步的挑战是将LLM评估整合到机器学习和运营(MLOps)生命周期中,实现自动化和可扩展性。在本文中,我们将向您展示如何将Amazon SageMaker Clarify LLM评估与Amazon SageMaker Pipelines集成,以实现规模化的LLM评估。此外,我们在此GitHub存储库中提供了代码示例,使用户能够使用Llama2-7b-f、Falcon-7b和经过微调的Llama2-7b模型等示例,进行并行多模型评估。

谁需要进行LLM评估?

任何进行模型训练、微调或仅使用预先训练的LLM的人都需要准确评估该模型,以评估由该LLM驱动的应用程序的行为。基于这一原则,我们可以将需要LLM评估能力的生成型AI用户分为3组,如下所示:模型提供者、微调者和消费者。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第1张

  • 基础模型(FM)提供者训练通用模型,可用于许多下游任务,例如特征提取或生成内容。每个训练模型都需要与许多任务进行基准测试,不仅以评估其性能,还要与其他现有模型进行比较,以确定需要改进的领域,并最终跟踪领域的进展。模型提供者还需要检查是否存在任何偏见,以确保起始数据集的质量和模型的正确行为。收集评估数据对于模型提供者至关重要。此外,必须收集这些数据和指标以符合即将出台的法规。例如,ISO 42001拜登政府行政命令欧盟AI法案制定了标准、工具和测试,以确保AI系统的安全、可靠和值得信赖。例如,欧盟AI法案负责提供有关用于训练的数据集、运行模型所需的计算能力、根据公共/行业标准基准报告模型结果以及共享内部和外部测试结果的信息。
  • 模型微调者希望解决特定任务(例如情感分类、摘要、问题回答),并采用特定领域任务的预先训练模型。他们需要模型提供者生成的评估指标来选择合适的预先训练模型作为起点。他们需要使用特定任务或领域数据集来评估其微调的模型是否符合预期的使用情况。通常情况下,他们必须策划和创建自己的私人数据集,因为即使是为特定任务设计的公开可用数据集,也可能无法充分捕捉到他们特定用例所需的细微差别。与完整训练相比,微调更快、更便宜,并且需要更快的操作迭代进行部署和测试,因为通常会生成许多候选模型。评估这些模型可以持续改进、校准和调试模型。请注意,当微调者开发实际应用程序时,他们可能成为自己模型的消费者。
  • 模型消费者或模型部署者在生产中提供和监控通用模型或微调模型,旨在通过采用LLM来增强其应用或服务。他们面临的首要挑战是确保所选择的LLM与其特定需求、成本和性能预期相符。解释和理解模型的输出是一个持久的关注点,特别是涉及到隐私和数据安全的情况下(例如审计受监管行业(如金融部门)中的风险和合规性)。持续的模型评估对于防止偏见或有害内容的传播至关重要。通过实施强大的监控和评估框架,模型消费者可以主动地识别和解决LLMs中的回归问题,确保这些模型随时间保持其有效性和可靠性。

如何进行LLM评估

有效的模型评估包括三个基本组成部分:一个或多个用于评估输入数据集(提示、对话或常规输入)和评估逻辑的FM或微调模型。

在选择评估模型时,必须考虑不同的因素,包括数据特征、问题复杂性、可用的计算资源和期望的结果。输入数据存储库提供了训练、微调和测试所选模型所需的数据。这个数据存储库必须具有良好的结构、代表性和高质量,因为模型的性能在很大程度上取决于它所学习的数据。最后,评估逻辑定义了用于评估模型性能的标准和指标。

这三个组成部分共同构成了一个有机的框架,确保了对机器学习模型进行严格和系统的评估,最终导致明智的决策和模型效果的改善。

模型评估技术仍然是一个活跃的研究领域。在过去几年中,研究人员社区创建了许多公共基准和框架,以涵盖各种任务和场景,例如GLUE、SuperGLUE、HELM、MMLU和BIG-bench。这些基准测试中心有可供比较和对比评估模型的排行榜。像HELM这样的基准测试还旨在评估除准确性之外的指标,如精确度或F1分数。HELM基准测试包括公平性、偏见和有毒性的度量,这些在整体模型评估分数中同样重要。

所有这些基准测试包括一组用于衡量模型在特定任务上表现的指标。最著名和最常见的指标是ROUGE(召回导向的摘要评估)、BLEU(双语评估助手)或METEOR(带有显式排序的翻译评估度量)。这些指标作为自动化评估的有用工具,提供生成文本与参考文本之间词汇相似性的定量度量。然而,它们无法捕捉到与人类类似的语言生成的全部范围,这包括语义理解、上下文或风格细微差别。例如,HELM不提供与特定用例相关的评估细节,不提供用于测试自定义提示和易于解释的非专家结果,因为这个过程可能成本高昂,不易扩展,并且仅适用于特定任务。

此外,要实现类似于人类的语言生成,通常需要将人类纳入循环,以提供定性评估和人类判断,以补充自动准确性指标。人工评估是评估LLM输出的一种有价值的方法,但也可能具有主观性和偏见,因为不同的人类评估者可能对文本质量有不同的意见和解释。此外,人工评估可能需要大量资源和成本,同时可能需要较长的时间和努力。

让我们深入探讨Amazon SageMaker Clarify如何无缝连接各个环节,帮助客户进行全面的模型评估和选择。

使用Amazon SageMaker Clarify进行LLM评估

Amazon SageMaker Clarify可以帮助客户自动化评估指标,包括但不限于准确性、鲁棒性、有毒性、刻板印象和事实知识,以进行自动化评估;并通过提供一个框架来评估LLMs和基于LLM的服务,如Amazon Bedrock,人为评估则需要评估模型的风格、连贯性、相关性、以及评估方法。作为一个完全托管的服务,SageMaker Clarify简化了在Amazon SageMaker中使用开源评估框架的过程。客户可以选择与其场景相关的评估数据集和指标,并使用自己的提示数据集和评估算法进行扩展。SageMaker Clarify以多种格式提供评估结果,以支持LLM工作流中的不同角色。数据科学家可以使用SageMaker Clarify中的可视化工具,如Notebooks、SageMaker Model Cards和PDF报告,分析详细的结果。同时,运营团队可以使用Amazon SageMaker GroundTruth审查和注释SageMaker Clarify识别出的高风险项。例如,刻板印象、有毒性、泄露的PII或低准确性。

随后采用注释和强化学习来减轻潜在风险。对确定的风险的人性化解释加速了手动审核过程,从而降低成本。摘要报告提供了不同模型和版本之间的商业利益相关者的比较基准,促进了明智的决策。

下图显示了评估LLMs和基于LLM的服务的框架:

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第2张

Amazon SageMaker Clarify LLM评估是由AWS开发的开源Foundation Model Evaluation(FMEval)库,旨在帮助客户轻松评估LLMs。所有功能也已集成到Amazon SageMaker Studio中,以便为其用户实现LLM评估。在接下来的几个部分中,我们将介绍如何将Amazon SageMaker Clarify LLM评估功能与SageMaker Pipelines集成,以便通过使用MLOps原则实现大规模的LLM评估。

Amazon SageMaker MLOps生命周期

正如“使用Amazon SageMaker为企业建立MLOps基础的路线图”一文所述,MLOps是将流程、人员和技术相结合以有效地生产化ML用例的组合。

下图显示了端到端的MLOps生命周期:

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第3张

典型的流程以数据科学家创建概念验证(PoC)笔记本开始,以证明ML能够解决业务问题。在概念验证(PoC)开发过程中,数据科学家负责将业务关键绩效指标(KPI)转化为机器学习模型指标,如准确率或误报率,并利用有限的测试数据集评估这些指标。数据科学家与ML工程师合作,将代码从笔记本转移到存储库中,使用Amazon SageMaker Pipelines创建ML流水线,连接各种处理步骤和任务,包括预处理、训练、评估和后处理,同时不断纳入新的生产数据。部署Amazon SageMaker Pipelines依赖存储库交互和CI/CD流水线激活。ML流水线在模型注册表中维护最佳性能模型、容器映像、评估结果和状态信息,模型相关方根据性能结果和基准评估性能,并决定是否将模型进入生产,随后激活另一个用于暂存和生产部署的CI/CD流水线。一旦投入生产,ML消费者通过应用触发的推理进行模型使用,通过直接调用或API调用,并向模型所有者进行持续的性能评估反馈。

Amazon SageMaker Clarify和MLOps集成

遵循MLOps生命周期,微调者或开源模型用户使用Amazon SageMaker Jumpstart和MLOps服务将微调模型或FM推向生产,如使用Amazon SageMaker JumpStart预训练模型实施MLOps实践的顶级技巧所述。这引发了基础模型操作(FMOps)和LLM操作(LLMOps)的新领域FMOps/LLMOps:使生成式AI运营并与MLOps的区别

下图显示了端到端的LLMOps生命周期:

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第4张

在LLMOps中,与MLOps相比,主要的区别在于模型选择和模型评估涉及不同的过程和指标。在初步实验阶段,数据科学家(或微调者)选择将用于特定生成式AI用例的FM。这往往会导致对多个FMs进行测试和微调,其中一些可能会得到可比较的结果。在选择了模型后,提示工程师负责准备评估所需的输入数据和期望输出(例如输入提示包括输入数据和查询),并定义类似性和毒性等指标。除了这些指标之外,数据科学家或微调者必须验证结果,并选择合适的FM,不仅基于准确率指标,还基于延迟和成本等其他能力。然后,他们可以将模型部署到SageMaker终端节点并在小规模上测试其性能。虽然实验阶段可能涉及一系列简单的过程,但向生产过渡要求客户自动化流程并增强解决方案的鲁棒性。因此,我们需要深入探讨如何自动化评估,使测试人员能够在大规模上进行高效评估,并实施对模型输入和输出的实时监控。

自动化FM评估

Amazon SageMaker管道可以自动化预处理、FM微调(可选)和大规模评估的所有阶段。在实验过程中,根据所选模型,提示工程师需要通过准备许多提示并将它们存储到称为提示目录的指定存储库中,以涵盖更多的案例。有关详细信息,请参阅FMOps/LLMOps:操作化生成AI及与MLOps的区别。然后,Amazon SageMaker管道可以结构化如下:

场景1 – 评估多个FM:在此场景中,FM可以涵盖业务用例,无需进行微调。Amazon SageMaker管道包含以下步骤:数据预处理、并行评估多个FM、模型比较、基于准确性和其他属性(如成本或延迟)进行选择、注册所选模型工件和元数据。

以下图表说明了此架构。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第5张

场景2 – 微调和评估多个FM:在此场景中,Amazon SageMaker管道的结构与场景1非常相似,但对于每个FM都同时运行微调和评估步骤。最佳微调模型将注册到模型注册表中。

以下图表说明了此架构。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第6张

场景3 – 评估多个FM和微调FM:此场景是评估通用FM和微调FM的组合。在此情况下,客户希望检查微调模型是否比通用FM更好。

以下图表显示了SageMaker管道步骤的结果。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第7张

请注意,模型注册遵循两种模式:(a)存储开源模型和工件,或者(b)存储对专有FM的引用。有关详细信息,请参阅FMOps/LLMOps:操作化生成AI及与MLOps的区别

解决方案概述

为了加快您在大规模LLM评估中的进程,我们创建了一个解决方案,使用Amazon SageMaker Clarify和新的Amazon SageMaker管道SDK实现了这些场景。代码示例(包括数据集、源笔记本和SageMaker管道(步骤和ML管道))在GitHub上可用。为了开发这个示例解决方案,我们使用了两个FM:Llama2和Falcon-7B。在本文中,我们的主要关注点是与评估过程相关的SageMaker管道解决方案的关键元素。

评估配置:为了标准化评估过程,我们创建了一个YAML配置文件(evaluation_config.yaml),其中包含评估过程的必要细节,包括数据集、模型和评估步骤中要运行的算法。以下示例演示了配置文件:

pipeline:
  name: "llm-evaluation-multi-models-hybrid"
dataset:
  dataset_name: "trivia_qa_sampled"
  input_data_location: "evaluation_dataset_trivia.jsonl"
  dataset_mime_type: "jsonlines"
  model_input_key: "question"
  target_output_key: "answer"
models:
  - name: "llama2-7b-f"
    model_id: "meta-textgeneration-llama-2-7b-f"
    model_version: "*"
    endpoint_name: "llm-eval-meta-textgeneration-llama-2-7b-f"
    deployment_config:
      instance_type: "ml.g5.2xlarge"
      num_instances: 1
    evaluation_config:
      output: '[0].generation.content'
      content_template: [[{"role":"user", "content": "PROMPT_PLACEHOLDER"}]]
      inference_parameters:
         max_new_tokens: 100
        top_p: 0.9
        temperature: 0.6
      custom_attributes:
        accept_eula: True
      prompt_template: "$feature"
    cleanup_endpoint: True
  - name: "falcon-7b"
    ...
  - name: "llama2-7b-finetuned"
    ...
    finetuning:
      train_data_path: "train_dataset"
      validation_data_path: "val_dataset"
      parameters:
        instance_type: "ml.g5.12xlarge"
        num_instances: 1
        epoch: 1
        max_input_length: 100
        instruction_tuned: True
        chat_dataset: False
    ...
algorithms:
  - algorithm: "FactualKnowledge"
    module: "fmeval.eval_algorithms.factual_knowledge"
    config: "FactualKnowledgeConfig"
    target_output_delimiter: "<OR>"

评估步骤:新的SageMaker管道SDK提供了使用’@step’ Python装饰器在ML工作流中定义自定义步骤的灵活性。因此,用户需要创建一个基本的Python脚本来进行评估,如下所示:

def evaluation(data_s3_path, endpoint_name, data_config, model_config, algorithm_config, output_data_path,):
    from fmeval.data_loaders.data_config import DataConfig
    from fmeval.model_runners.sm_jumpstart_model_runner import JumpStartModelRunner
    from fmeval.reporting.eval_output_cells import EvalOutputCell
    from fmeval.constants import MIME_TYPE_JSONLINES
    s3 = boto3.client("s3")
    bucket, object_key = parse_s3_url(data_s3_path)
    s3.download_file(bucket, object_key, "dataset.jsonl")
    config = DataConfig(
        dataset_name=data_config["dataset_name"],
        dataset_uri="dataset.jsonl",
        dataset_mime_type=MIME_TYPE_JSONLINES,
        model_input_location=data_config["model_input_key"],
        target_output_location=data_config["target_output_key"],
    )
    evaluation_config = model_config["evaluation_config"]
    content_dict = {
        "inputs": evaluation_config["content_template"],
        "parameters": evaluation_config["inference_parameters"],
    }
    serializer = JSONSerializer()
    serialized_data = serializer.serialize(content_dict)
    content_template = serialized_data.replace('"PROMPT_PLACEHOLDER"', "$prompt")
    print(content_template)
    js_model_runner = JumpStartModelRunner(
        endpoint_name=endpoint_name,
        model_id=model_config["model_id"],
        model_version=model_config["model_version"],
        output=evaluation_config["output"],
        content_template=content_template,
        custom_attributes="accept_eula=true",
    )
    eval_output_all = []
    s3 = boto3.resource("s3")
    output_bucket, output_index = parse_s3_url(output_data_path)
    for algorithm in algorithm_config:
        algorithm_name = algorithm["algorithm"]
        module = importlib.import_module(algorithm["module"])
        algorithm_class = getattr(module, algorithm_name)
        algorithm_config_class = getattr(module, algorithm["config"])
        eval_algo = algorithm_class(algorithm_config_class(target_output_delimiter=algorithm["target_output_delimiter"]))
        eval_output = eval_algo.evaluate(model=js_model_runner, dataset_config=config, prompt_template=evaluation_config["prompt_template"], save=True,)
        print(f"eval_output: {eval_output}")
        eval_output_all.append(eval_output)
        html = markdown.markdown(str(EvalOutputCell(eval_output[0])))
        file_index = (output_index + "/" + model_config["name"] + "_" + eval_algo.eval_name + ".html")
        s3_object = s3.Object(bucket_name=output_bucket, key=file_index)
        s3_object.put(Body=html)
    eval_result = {"model_config": model_config, "eval_output": eval_output_all}
    print(f"eval_result: {eval_result}")
    return eval_result

SageMaker管道:在创建必要的步骤,例如数据预处理、模型部署和模型评估之后,用户需要使用SageMaker管道SDK将这些步骤连接起来。新的SDK在调用SageMaker Pipeline创建API时通过解释不同步骤之间的依赖关系自动生成工作流程,如下例所示:

import os
import argparse
from datetime import datetime
import sagemaker
from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.function_step import step
from sagemaker.workflow.step_outputs import get_step

# Import the necessary steps
from steps.preprocess import preprocess
from steps.evaluation import evaluation
from steps.cleanup import cleanup
from steps.deploy import deploy
from lib.utils import ConfigParser
from lib.utils import find_model_by_name

if __name__ == "__main__":
    os.environ["SAGEMAKER_USER_CONFIG_OVERRIDE"] = os.getcwd()
    sagemaker_session = sagemaker.session.Session()
    
    # Define data location either by providing it as an argument or by using the default bucket
    default_bucket = sagemaker.Session().default_bucket()
    parser = argparse.ArgumentParser()
    parser.add_argument("-input-data-path", "--input-data-path", dest="input_data_path", default=f"s3://{default_bucket}/llm-evaluation-at-scale-example", help="The S3 path of the input data",)
    parser.add_argument("-config", "--config", dest="config", default="", help="The path to .yaml config file",)
    args = parser.parse_args()
    
    # Initialize configuration for data, model, and algorithm
    if args.config:
        config = ConfigParser(args.config).get_config()
    else:
        config = ConfigParser("pipeline_config.yaml").get_config()
        
    evalaution_exec_id = datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
    pipeline_name = config["pipeline"]["name"]
    dataset_config = config["dataset"]  # Get dataset configuration
    input_data_path = args.input_data_path + "/" + dataset_config["input_data_location"]
    output_data_path = (args.input_data_path + "/output_" + pipeline_name + "_" + evalaution_exec_id)
    print("Data input location:", input_data_path)
    print("Data output location:", output_data_path)
    algorithms_config = config["algorithms"]  # Get algorithms configuration
    model_config = find_model_by_name(config["models"], "llama2-7b")
    model_id = model_config["model_id"]
    model_version = model_config["model_version"]
    evaluation_config = model_config["evaluation_config"]
    endpoint_name = model_config["endpoint_name"]
    model_deploy_config = model_config["deployment_config"]
    deploy_instance_type = model_deploy_config["instance_type"]
    deploy_num_instances = model_deploy_config["num_instances"]
    
    # Construct the steps
    processed_data_path = step(preprocess, name="preprocess")(input_data_path, output_data_path)
    endpoint_name = step(deploy, name=f"deploy_{model_id}")(model_id, model_version, endpoint_name, deploy_instance_type, deploy_num_instances,)
    evaluation_results = step(evaluation, name=f"evaluation_{model_id}", keep_alive_period_in_seconds=1200)(processed_data_path, endpoint_name, dataset_config, model_config, algorithms_config, output_data_path,)
    last_pipeline_step = evaluation_results
    
    if model_config["cleanup_endpoint"]:
        cleanup = step(cleanup, name=f"cleanup_{model_id}")(model_id, endpoint_name)
        get_step(cleanup).add_depends_on([evaluation_results])
        last_pipeline_step = cleanup
    
    # Define the SageMaker Pipeline
    pipeline = Pipeline(
        name=pipeline_name,
        steps=[last_pipeline_step],
    )
    
    # Build and run the Sagemaker Pipeline
    pipeline.upsert(role_arn=sagemaker.get_execution_role())
    # pipeline.upsert(role_arn="arn:aws:iam::<...>:role/service-role/AmazonSageMaker-ExecutionRole-<...>")
    pipeline.start()

该示例通过预处理初始数据集、部署模型和运行评估来实现对单个FM的评估。生成的管道有向无环图(DAG)如下图所示。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第8张

采用类似的方法,并使用Fine-tune LLaMA 2 models on SageMaker JumpStart中的示例,我们创建了用于评估细调模型的管道,如下图所示。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第9张

通过将之前的SageMaker管道步骤作为“积木”块使用,我们开发了用于场景1和场景3的解决方案,如下图所示。具体来说,GitHub存储库使用户能够并行评估多个FM,或者执行更复杂的评估,结合对基础模型和细调模型的评估。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第10张

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第11张

存储库中提供的其他功能包括以下:

  • 动态评估步骤生成:我们的解决方案根据配置文件动态生成所有必要的评估步骤,以使用户能够评估任意数量的模型。我们已扩展解决方案,支持轻松集成新类型的模型,如Hugging Face或Amazon Bedrock。
  • 防止端点重新部署:如果端点已经存在,我们将跳过部署过程。这使用户能够重用用于评估的带有FM的端点,从而节省成本和减少部署时间。
  • 端点清理:在评估完成后,SageMaker Pipeline将对部署的端点进行解除。这个功能可以扩展为保持最佳模型端点保持活动状态。
  • 模型选择步骤:我们添加了一个模型选择步骤占位符,需要包含最终模型选择的业务逻辑,包括成本或延迟等标准。
  • 模型注册步骤:最佳模型可以注册到Amazon SageMaker模型注册表中作为特定模型组的新版本。
  • 预热池:SageMaker管理的预热池可让您在作业完成后保留和重复使用预留的基础设施,以减少重复工作负载的延迟。

下图展示了这些功能以及用户可以使用我们在此GitHub存储库中轻松动态创建的多模型评估示例。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第12张

我们故意将数据准备排除在范围之外,因为它将在另一篇文章中详细描述,包括提示目录设计、提示模板和提示优化。有关更多信息和相关组件定义,请参阅FMOps/LLMOps: Operationalize generative AI and differences with MLOps

结论

在本文中,我们重点介绍了如何使用Amazon SageMaker Clarify的LLM评估能力和Amazon SageMaker Pipelines在规模上自动化和操作化LLMs评估。除了理论架构设计外,我们还在GitHub代码库中提供了示例代码(包括Llama2和Falcon-7B FMs),以便客户开发自己的可扩展评估机制。

以下插图显示了模型评估架构。

使用Amazon SageMaker Clarify和MLOps服務,以大規模操作化LLM評估 四海 第13张

在本文中,我们重点关注在插图左侧显示的规模化LLM评估运营化。将来,我们将着重开发符合FMs端到端生命周期的示例,根据FMOps/LLMOps: Operationalize generative AI and differences with MLOps中所描述的指导方针。这包括LLM服务、监控、存储输出评级,最终触发自动重新评估和微调,并最后使用人类在标记数据或提示目录上进行工作。

Leave a Reply

Your email address will not be published. Required fields are marked *