diff --git a/cookbook/evaluation/opencompass_evaluator.ipynb b/cookbook/evaluation/opencompass_evaluator.ipynb index 5fa99087..29e324e1 100644 --- a/cookbook/evaluation/opencompass_evaluator.ipynb +++ b/cookbook/evaluation/opencompass_evaluator.ipynb @@ -4,11 +4,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# 在千帆 Python SDK 使用 OpenCompass 提供的评估器\n", + "# 在千帆 Python SDK 使用 OpenCompass 提供的功能\n", "\n", "OpenCompass是由上海人工智能实验室开源的大模型评测平台。它涵盖了学科、语言、知识、理解、推理等五大评测维度,能够全面评估大模型的能力。OpenCompass作为一个评测工具,对于研究和开发大模型的人员来说,是非常有价值的资源。通过使用OpenCompass,用户可以更准确地了解他们的大模型在各项任务上的表现,从而进行针对性的优化和改进。\n", "\n", - "千帆 Python SDK 中内置的评估模块,支持用户使用 OpenCompass 提供的评估器,对模型的推理结果进行评估。\n", + "千帆 Python SDK 中内置的评估模块,支持用户使用 OpenCompass 提供的评估器和 `TEXT_POSTPROCESSORS` 对象,对模型的推理结果进行评估前的预处理,以及评估。\n", "\n", "# 前置准备\n", "\n", @@ -27,9 +27,7 @@ { "name": "stdout", "output_type": "stream", - "text": [ - - ] + "text": [] } ], "source": [ @@ -55,9 +53,7 @@ { "name": "stdout", "output_type": "stream", - "text": [ - - ] + "text": [] } ], "source": [ @@ -88,6 +84,34 @@ "\n", "在本教程编写时,用户应可以直接使用上面列表所列的评估器。\n", "\n", + "而为了使用来自 OpenCompass 的 `TEXT_POSTPROCESSORS` 模块,用户应该首先对其进行一层封装:大多数 `TEXT_POSTPROCESSORS` 函数都只支持传入一个 `str` 参数作为入参。我们需要对 `TEXT_POSTPROCESSORS` 模块进行包装,使其能够额外接收 `**kwargs` 作为入参。\n", + "\n", + "例如,手动编写一个 `wrapper` 函数" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "shellscript" + } + }, + "outputs": [], + "source": [ + "def open_compass_text_post_processor_wrapper(fn: Callable) -> Callable:\n", + " def wrapper(*args, **kwargs) -> str:\n", + " return fn(*args)\n", + "\n", + " return wrapper" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "用户可以根据自身的需求,调整实际传入给 `TEXT_POSTPROCESSORS` 参数的入参。例如,有些 `TEXT_POSTPROCESSORS` 参数需要传入 `option` 参数。\n", + "\n", "下面我们演示如何使用其中的 `PassRateEvaluator` 评估器,`BleuEvaluator` 评估器和 `JiebaRougeEvaluator` 评估器来进行一次评估。\n", "\n", "## 导入数据集\n", @@ -144,9 +168,7 @@ { "name": "stderr", "output_type": "stream", - "text": [ - - ] + "text": [] } ], "source": [ diff --git a/docs/evaluation.md b/docs/evaluation.md index 29dfaf24..c726d3f9 100644 --- a/docs/evaluation.md +++ b/docs/evaluation.md @@ -123,6 +123,18 @@ em = EvaluationManager(local_evaluators=local_evaluators) result = em.eval([Model(version_id="amv-qb8ijukaish3")], ds) ``` +### 评估前预处理 Hook + +`EvaluationManager` 对象提供了 `pre_processors` 成员,用户可以设置包含 `Callable` 对象或者 `BaseLocalMapOperator` 对象的数组,以在拿到模型输出之后、评估开始之前,进行一些简单的预处理操作。例如:在大模型输出中提取选择题的答案,方便后续判断是否与选择题的答案一致。 + +`pre_processors` 数组的对象必须能够接收一个 `str` 对象作为入参,这个对象表示大模型的输出。同时,我们还以命名参数的形式提供了 `input` 与 `reference` 两个入参,代表大模型的输入,以及预期的输出。 + +调用如下所示: + +`pre_processor(single_output, input=single_input, reference=reference)` + +预处理器应该返回被处理后的模型输出。 + ### 获取评估结果 和在线评估一样,完成离线评估后,评估得到的数据集会被保存在返回的 `EvaluationResult` 对象的 `result_dataset` 成员中。