7.8 KiB
🛠️Tool Eval🤖
通过在ToolBench上对LLaMA进行微调,我们得到了ToolLLaMA。考虑到人工评估非常耗时,我们借鉴AlpacaEval开发了一个高效的机器自动评估ToolEval,其中包含两个评估指标:
-
通过率:计算在有限的OpenAI API调用次数内成功完成指令的比例。
-
偏好:通过比较给定指令的两个答案(动作序列)来衡量。我们预先定义了一组更好答案的标准,这些标准被组织成ChatGPT的提示。我们向评估器提供测试指令和两个候选答案,并获得其偏好。我们对每个答案对进行多次评估以提高系统的可靠性。然后,我们计算优胜率(被评估器选择为更优的百分比。有关详细信息,请参阅我们的论文。
为了验证ChatGPT评估器在通过率和胜率方面的可靠性,我们从四种不同的方法(ChatGPT+ReACT,ChatGPT+DFSDT,ToolLLaMA+DFSDT和GPT4+DFSDT)中进行采样,为每种方法的300个测试指令获取解决方案对。然后,我们请人类标注ChatGPT+DFSDT,ToolLLaMA+DFSDT和GPT4+DFSDT的通过率,以及ChatGPT+ReACT和ChatGPT+DFSDT之间的胜率。
我们的ChatGPT评估器在通过率方面与人类标注者具有高达**87.1%的一致性,在胜率方面具有80.3%**的一致性。这个结果表明,我们的评估器生成的评估结果与人类非常相似,并且可以视为在通过率和胜率上模拟人类评估的可靠评估器。 有关ToolEval的更多细节,请参阅我们的论文。
🚀用法
Install
Install Package (python>=3.9)
pip install -r requirements.txt
Evaluation
若要复现结果,直接通过Google Drive下载我们的reproduction_data.zip,解压后置reproduction_data于ToolBench/data/下即可,可以跳过数据准备流程。
- 数据准备。若要使用 ToolEval 评估您自己的模型和方法,首先需要为六个测试子集准备所有的模型预测。创建一个以您的模型和方法命名的目录,例如
chatgpt_cot,然后将每个测试集的预测放在该目录下。目录的文件结构应如下:
├── /chatgpt_cot/
│ ├── /G1_instruction/
│ │ ├── /10160_CoT@1.json
│ │ └── ...
│ ├── /G1_tool/
│ │ ├── /10221_CoT@1.json
│ │ └── ...
│ ├── ...
│ ├── /G3_instruction/
│ │ ├── /10221_CoT@1.json
│ │ └── ...
然后对模型预测进行预处理:
export RAW_ANSWER_PATH=../../data/reproduction_data/model_predictions/
export CONVERTED_ANSWER_PATH=../../data/reproduction_data/model_predictions_converted/
export MODEL_NAME=chatgpt_cot
export METHOD=CoT
mkdir ${CONVERTED_ANSWER_PATH}/${MODEL_NAME}
for test_set in G1_instruction G1_category G1_tool G2_category G2_instruction G3_instruction
do
answer_dir=${RAW_ANSWER_PATH}/${MODEL_NAME}/${test_set}
output_file=${CONVERTED_ANSWER_PATH}/${MODEL_NAME}/${test_set}.json
python convert_to_answer_format.py\
--answer_dir ${answer_dir} \
--method ${METHOD} \
--output ${output_file}
done
之后,检查${CONVERTED_ANSWER_PATH}/${MODEL_NAME}下是否有测试集的预处理JSON文件。如果有,你就可以准备运行以下评估过程了。如果没有,请检查模型的预测是否有问题。
- OpenAI Key
准备您的OpenAI Key来搭建我们的evaluator。Key需要被存储到一个json file中,如
path/to/your/openai_key_json_file.json:
[
{
"username": "your_user_name",
"passwd": "your_password",
"api_key": "your_openai_key",
"organization": "your_organization"
},
...
]
- Pass rate.
export CONVERTED_ANSWER_PATH=../../data/reproduction_data/model_predictions_converted/
export SAVE_PATH=pass_rate_results
export CANDIDATE_MODEL=chatgpt_cot
export API_POOL_FILE=path/to/your/openai_key_json_file.json
python eval_pass_rate.py \
--converted_answer_path ${CONVERTED_ANSWER_PATH} \
--save_path ${SAVE_PATH} \
--reference_model ${CANDIDATE_MODEL} \
--test_ids ../../data/test_query_ids/ \
--max_eval_threads 20 \
--evaluate_times 4
结果文件会被存储至${SAVE_PATH}中。
- Win rate. 以下示例以ChatGPT-ReACT作为参考模型,GPT4-ReACT作为候选模型。请注意,您首先需要获取两个模型的pass rate结果,然后运行以下命令来评估GPT4-ReACT的win rate结果:
export CONVERTED_ANSWER_PATH=../../data/reproduction_data/model_predictions_converted/
export SAVE_PATH=preference_results
export PASS_TARE_PATH=pass_rate_results
export REFERENCE_MODEL=chatgpt_cot
export CANDIDATE_MODEL=gpt-4-0613_cot
export API_POOL_FILE=path/to/your/openai_key_json_file.json
python eval_preference.py \
--converted_answer_path ${CONVERTED_ANSWER_PATH} \
--reference_model ${REFERENCE_MODEL} \
--output_model ${CANDIDATE_MODEL} \
--test_ids ../../data/test_query_ids/ \
--save_path ${SAVE_PATH} \
--pass_rate_result_path ${PASS_TARE_PATH} \
--max_eval_threads 20 \
--use_pass_rate true \
--evaluate_times 4
结果文件会被存储至${SAVE_PATH}中。
评估新方法
要评估除了ReACT和DFSDT之外的方法,您需要遵循以上Data preparation的步骤准备您的预处理好的answer数据。预处理好的answer数据需遵循以下json格式:
[
{
"method":"method name",
"total_steps": int, // a integer count total steps in answer details
"final_answer": "final answer from the method",
"answer_details":[{
"role":"node role, can be system, user, assistant and tool",
"message":"message for the node",
"next":[//next steps, can have multiple elements if the node have multiple candidates.
{
"role":"",
"message":"",
"next":[...]
},
...//more candidates
]
}]
}
... // more answers for the give query in the testdata
]
更新排行榜
如果您想将您的模型的结果上传到ToolEval Leaderboard,请您将您的结果文件整理成上述格式发送给我们(urtoolbench@gmail.com)或者开一个pull request。 我们将运行评测脚本更新结果并将您的模型添加到排行榜中。
创建新的自动评估器
如果您想创建新的自动评估器,您需要按下列步骤进行:
- 在路径
toolbench/tooleval/evaluators下创建一个评测器配置文件目录,命名与你的评测器名一致。在其中添加config.yaml文件与template.txt文件。具体配置方式可参考toolbench/tooleval/evaluators/tooleval_gpt-3.5-turbo_normalized中的实现。 - 创建你的evaluator类并实现
fn_completions函数在文件夹toolbench/tooleval/evaluators/registered_cls中,或者你可以使用我们预先定义好的类例如OpenAINormalizedEvaluator。 完成后将配置文件中registered_cls_name字段填写为该类的名称。 这里给出一个例子:
from evaluators import register_evaluator,BaseEvaluator
from typing import Dict,List
@register_evaluator
class MyEvaluator(BaseEvaluator):
def __init__(self,config):
super().__init__(
fn_completions=self.fn_completions,
)
# set your configures here
def fn_completions(self,query:Dict,answers:List[Dict])->int:
# implement your evaluator here
# return the index of the preferred answer
return 0
其中register_evaluator是一个装饰器,用于注册评估器,BaseEvaluator是一个基类,用于实现评估器的基本功能。
3. 测试评估器的性能,运行脚本evaluators_comparison.py。