7-OpenCompass 大模型评测实战

知识篇

OpenCompass简介

工具主页:https://hub.opencompass.org.cn/home

上海人工智能实验室科学家团队正式发布了大模型开源开放评测体系 “司南” (OpenCompass2.0),用于为大语言模型、多模态模型等提供一站式评测服务。其主要特点如下:

  • 开源可复现:提供公平、公开、可复现的大模型评测方案
  • 全面的能力维度:五大维度设计,提供 70+ 个数据集约 40 万题的的模型评测方案,全面评估模型能力
  • 丰富的模型支持:已支持 20+ HuggingFace 及 API 模型
  • 分布式高效评测:一行命令实现任务分割和分布式评测,数小时即可完成千亿模型全量评测
  • 多样化评测范式:支持零样本、小样本及思维链评测,结合标准型或对话型提示词模板,轻松激发各种模型最大性能
  • 灵活化拓展:想增加新模型或数据集?想要自定义更高级的任务分割策略,甚至接入新的集群管理系统?OpenCompass 的一切均可轻松扩展!

OpenCompass历程目前opencompass已经应用头部大模型企业和科研机构
在这里插入图片描述在这里插入图片描述支持任务切分和并行,最大化利用计算资源

在这里插入图片描述
能力维度
opencompass同时也自建数据集,覆盖更多的场景。
在这里插入图片描述
共建行业生态
在这里插入图片描述

为何要做大模型评测

在这里插入图片描述

大模型评测的挑战

在这里插入图片描述

如何评测

需要评测的内容包括了基座模型和对话模型
在这里插入图片描述
包括了客观评测(包括如客观回答题、选择题)和主观评测(偏开放式的问答)

在这里插入图片描述还有对问题的提示词优化,以便能够让评测问题更明确,更能区分出不同模型的优势。
在这里插入图片描述
对长文本的评测
在这里插入图片描述

实战

本次实战依然在internStudio完成,选择50%的A100.

创建虚拟环境

studio-conda -o internlm-base -t opencompass

在这里插入图片描述在这里插入图片描述

拉取仓库项目

conda activate opencompass

git clone -b 0.2.4 https://github.com/open-compass/opencompass

在这里插入图片描述

安装组件

cd opencompass
pip install -e .

# 需要再执行如下,不然其他的组件没安装,后续执行要安装一堆东西
pip install -r requirements.txt

在这里插入图片描述

准备评测数据

cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
unzip OpenCompassData-core-20231110.zip

在这里插入图片描述

查看支持的模型和数据集

列出所有跟 InternLM 及 C-Eval 相关的配置

python tools/list_configs.py internlm ceval

# 不带参数是列出可以支持的模型和数据的清单及其配置
python tools/list_configs.py

在这里插入图片描述

安装protobuf

# 如果环境中没有该组件,那么请安装,否则运行评测脚本会报错
pip install protobuf

没有安装protobuf会报类似如下错误:
在这里插入图片描述

执行评测

export MKL_SERVICE_FORCE_INTEL=1

cd /root/opencompass

python run.py --datasets ceval_gen --hf-path /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --tokenizer-path /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs trust_remote_code=True device_map='auto' --max-seq-len 1024 --max-out-len 16 --batch-size 2 --num-gpus 1 --debug

评测推理过程
在这里插入图片描述

推理结果

评测推理结果:
在这里插入图片描述
评测结果也写入到txt和CSV两个文件中
在这里插入图片描述
可以直接查看评测结果的写入文件:
在这里插入图片描述

自定义数据集

注:以下的根目录是/root/opencompass。

准备配置

在configs/datasets下创建bankrisk目录,生成banklist_gen_2024.py bankrisk_gen.py两个文件
在这里插入图片描述

bankrisk_gen.py

from mmengine.config import read_base
 
with read_base():
    #从当前目录下的bankrisk_gen_2024文件导入bankrisk_datasets变量
    from .bankrisk_gen_2024 import bankrisk_datasets

bankrisk_gen_2024.py

from opencompass.openicl.icl_prompt_template import PromptTemplate
from opencompass.openicl.icl_retriever import FixKRetriever
from opencompass.openicl.icl_inferencer import GenInferencer
from opencompass.openicl.icl_evaluator import AccEvaluator
from opencompass.datasets import BankRiskDataset
from opencompass.utils.text_postprocessors import first_capital_postprocess

bankrisk_subject_mapping = {
    'bank_risk': ['risk', '银行风险', 'STEM'],




}
bankrisk_all_sets = list(bankrisk_subject_mapping.keys())

bankrisk_datasets = []
for _split in ["val", "test"]:
    for _name in bankrisk_all_sets:
        _ch_name = bankrisk_subject_mapping[_name][1]
        bankrisk_infer_cfg = dict(
            ice_template=dict(
                type=PromptTemplate,
                template=dict(
                    begin="</E>",
                    round=[
                        dict(
                            role="HUMAN",
                            prompt=
                            f"以下是关于{_ch_name}考试的单项选择题,请选出其中的正确答案。\n{{question}}\nA. {{A}}\nB. {{B}}\nC. {{C}}\nD. {{D}}\n答案: "
                        ),
                        dict(role="BOT", prompt="{answer}"),
                    ]),
                ice_token="</E>",
            ),
            retriever=dict(type=FixKRetriever, fix_id_list=[0, 1, 2, 3, 4]),
            inferencer=dict(type=GenInferencer),
        )

        bankrisk_eval_cfg = dict(
            evaluator=dict(type=AccEvaluator),
            pred_postprocessor=dict(type=first_capital_postprocess))

        bankrisk_datasets.append(
            dict(
                type=BankRiskDataset,
                path="./data/bankrisk",
                name=_name,
                # abbr="bankrisk-" + _name if _split == "val" else "bankrisk-test-" +
                # _name,
                reader_cfg=dict(
                    input_columns=["question", "A", "B", "C", "D"],
                    output_column="answer",
                    train_split="dev",
                    test_split=_split),
                infer_cfg=bankrisk_infer_cfg,
                eval_cfg=bankrisk_eval_cfg,
            ))

del _split, _name, _ch_name

在opencompass中创建bankrisk.py文件,内容为:

import csv
import os.path as osp
 
from datasets import Dataset, DatasetDict
 
from opencompass.registry import LOAD_DATASET
 
from .base import BaseDataset
 
@LOAD_DATASET.register_module()
class BankRiskDataset(BaseDataset):
    """
    class BankRiskDataset
    """
    @staticmethod
    def load(path: str, name: str):
        dataset = {}
        for split in ['dev', 'val']:
            filename = osp.join(path, split, f'{name}_{split}.csv')
            with open(filename, encoding='utf-8') as f:
                reader = csv.reader(f)
                header = next(reader)
                for row in reader:
                    item = dict(zip(header, row))
                    item.setdefault('explanation', '')
                    item.setdefault('answer', '')
                    dataset.setdefault(split, []).append(item)
        dataset = {i: Dataset.from_list(dataset[i]) for i in dataset}
        return DatasetDict(dataset)

修改./opencompass下的__ini__.py,加入如下内容:

from .bankrisk import *

准备数据

创建 data/bankrisk/val,data/bankrisk/dev

data/bankrisk/val/bank_risk_val.csv
多复制了几条数据,:)

id,question,A,B,C,D,answer
0,近20日内亿元以上授信业务到期共涉及19户,信贷余额34.56亿元,经逐户调度,到期均能够正常还款,不会形成逾期。,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,A
1,异常交易监测中发现,个人客户吕*、姬*账户交易异常,疑似利用账户归集过渡诈骗资金,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C
2,异常交易监测中发现,个人客户吕*、姬*账户交易异常,疑似利用账户归集过渡诈骗资金,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C
3,异常交易监测中发现,个人客户吕*、姬*账户交易异常,疑似利用账户归集过渡诈骗资金,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C
4,异常交易监测中发现,个人客户吕*、姬*账户交易异常,疑似利用账户归集过渡诈骗资金,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C
5,异常交易监测中发现,个人客户吕*、姬*账户交易异常,疑似利用账户归集过渡诈骗资金,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C
6,异常交易监测中发现,个人客户吕*、姬*账户交易异常,疑似利用账户归集过渡诈骗资金,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C
7,异常交易监测中发现,个人客户吕*、姬*账户交易异常,疑似利用账户归集过渡诈骗资金,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C
8,异常交易监测中发现,个人客户吕*、姬*账户交易异常,疑似利用账户归集过渡诈骗资金,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C

bank_risk_dev.csv
多复制了几条数据,:)

id,question,A,B,C,D,answer,explanation
0,异常交易监测中发现,客户王*账户交易异常,疑似为购物平台虚假刷单,扰乱市场正常经营秩序。具体交易特征:交易模式主要为集入散出,资金由支付宝提现、个人银行卡集中转入,单笔金额主要为千元级别,分散为百元级别转出至拼多多支付-拼多多平台商户。相同或相近金额重复出现,有悖于正常消费习惯。次日大量退款,客户疑似职业“刷手”,以买家身份虚假购买与评价平台商户商品,以吸引客流。,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C,
1,异常交易监测中发现,客户辛**账户交易异常,疑似利用理财产品户过渡资金。具体交易特征:尽职调查多次电话联系客户均无人接听,账户活跃,预留手机却无人接听,疑似使用临时号码开户,开户后手机号码弃用。,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,C,
2,2023年4月22日,云南万达地产开发有限公司在我行固定资产贷款分期还款计划逾期,涉及分期还款资金650万元,目前在我行贷款余额3950万元。,A.信用风险,B.声誉风险,C.反洗钱风险,D.操作风险,A,
3,检查发现,在为胜达机械有限公司办理资本金和结汇业务时存在以下问题:一是业务受理环节,未凭《资本项目账户资金支付函》办理资本金结汇支付业务。,A.合规风险,B.声誉风险,C.反洗钱风险,D.操作风险,A,
4,检查发现,在为胜达机械有限公司办理资本金和结汇业务时存在以下问题:一是业务受理环节,未凭《资本项目账户资金命令函》办理资本金结汇支付业务。,A.合规风险,B.声誉风险,C.反洗钱风险,D.操作风险,A,
5,检查发现,在为胜达机械有限公司办理资本金和结汇业务时存在以下问题:一是业务受理环节,未凭《资本项目账户资金命令函》办理资本金结汇支付业务。,A.合规风险,B.声誉风险,C.反洗钱风险,D.操作风险,A,
6,检查发现,在为胜达机械有限公司办理资本金和结汇业务时存在以下问题:一是业务受理环节,未凭《资本项目账户资金命令函》办理资本金结汇支付业务。,A.合规风险,B.声誉风险,C.反洗钱风险,D.操作风险,A,
7,检查发现,在为胜达机械有限公司办理资本金和结汇业务时存在以下问题:一是业务受理环节,未凭《资本项目账户资金命令函》办理资本金结汇支付业务。,A.合规风险,B.声誉风险,C.反洗钱风险,D.操作风险,A,

查看数据集

在这里插入图片描述

运行评测与结果

python run.py --datasets bankrisk_gen --hf-path /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --tokenizer-path /share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs trust_remote_code=True device_map='auto' --max-seq-len 1024 --max-out-len 16 --batch-size 2 --num-gpus 1 --debug

在这里插入图片描述

有点牛,100分 :)
在这里插入图片描述

提交数据集

参考
提交地址:https://hub.opencompass.org.cn/dataset-submit?lang=[object%20Object]
提交指南:https://mp.weixin.qq.com/s/_s0a9nYRye0bmqVdwXRVCg

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wengad

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值