C-Eval是什么

C-Eval是适用于大语言模型的多层次多学科中文评估套件,由上海交通大学、清华大学和爱丁堡大学研究人员在2023年5月份联合推出,包含13948个多项选择题,涵盖52个不同的学科和四个难度级别,用在评测大模型中文理解能力。通过零样本(zero-shot)和少样本(few-shot)测试,C-Eval 能评估模型在未见过的任务上的适应性和泛化能力。

C-Eval

C-Eval的主要功能

  • 多学科覆盖:C-Eval 包含 52 个不同学科的题目,涵盖 STEM、社会科学、人文科学等多个领域,全面评估语言模型的知识储备。
  • 多层次难度分级:设有四个难度级别,从基础到高级,细致评估模型在不同难度下的推理和泛化能力。
  • 量化评估与标准化测试:包含 13948 个多项选择题,通过标准化评分系统提供量化性能指标,支持不同模型的横向对比。

如何使用C-Eval

  • 数据下载
    •  Hugging Face 下载:
<span class="token keyword">from</span> datasets <span class="token keyword">import</span> load_dataset
dataset <span class="token operator">=</span> load_dataset<span class="token punctuation">(</span><span class="token string">"ceval/ceval-exam"</span><span class="token punctuation">,</span> name<span class="token operator">=</span><span class="token string">"computer_network"</span><span class="token punctuation">)</span>
from datasets import load_dataset dataset = load_dataset("ceval/ceval-exam", name="computer_network")
    • 或者直接下载 ZIP 文件并解压:
<span class="token function">wget</span> https://huggingface.co/datasets/ceval/ceval-exam/resolve/main/ceval-exam.zip
<span class="token function">unzip</span> ceval-exam.zip
wget https://huggingface.co/datasets/ceval/ceval-exam/resolve/main/ceval-exam.zip unzip ceval-exam.zip
  • 选择评估模式
    • 零样本(Zero-shot):模型在没有任何示例的情况下直接回答问题。
    • 少样本(Few-shot):模型在少量示例(如 5 个)的提示下回答问题。
  • 准备模型:确保模型已经加载并准备好进行推理。如果是基于 Hugging Face 的模型,用以下代码加载:
<span class="token keyword">from</span> transformers <span class="token keyword">import</span> AutoModelForCausalLM<span class="token punctuation">,</span> AutoTokenizer
model_name <span class="token operator">=</span> <span class="token string">"your-model-name"</span>
tokenizer <span class="token operator">=</span> AutoTokenizer<span class="token punctuation">.</span>from_pretrained<span class="token punctuation">(</span>model_name<span class="token punctuation">)</span>
model <span class="token operator">=</span> AutoModelForCausalLM<span class="token punctuation">.</span>from_pretrained<span class="token punctuation">(</span>model_name<span class="token punctuation">)</span>
from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "your-model-name" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name)
  • 构建提示(Prompt)
    • 零样本提示
以下是中国关于{科目}考试的单项选择题,请选出其中的正确答案。
{测试题目}
A. {选项A}
B. {选项B}
C. {选项C}
D. {选项D}
答案:
以下是中国关于{科目}考试的单项选择题,请选出其中的正确答案。 {测试题目} A. {选项A} B. {选项B} C. {选项C} D. {选项D} 答案:
    • 少样本提示
以下是中国关于{科目}考试的单项选择题,请选出其中的正确答案。
{题目1}
A. {选项A}
B. {选项B}
C. {选项C}
D. {选项D}
答案:A
[k-shot 示例]
{测试题目}
A. {选项A}
B. {选项B}
C. {选项C}
D. {选项D}
答案:
以下是中国关于{科目}考试的单项选择题,请选出其中的正确答案。 {题目1} A. {选项A} B. {选项B} C. {选项C} D. {选项D} 答案:A [k-shot 示例] {测试题目} A. {选项A} B. {选项B} C. {选项C} D. {选项D} 答案:
  • 生成回答:使用模型生成回答。提取生成文本中的答案选项(A、B、C、D),或者计算每个选项的概率并选择最高概率的答案。
inputs <span class="token operator">=</span> tokenizer<span class="token punctuation">(</span>prompt<span class="token punctuation">,</span> return_tensors<span class="token operator">=</span><span class="token string">"pt"</span><span class="token punctuation">)</span>
outputs <span class="token operator">=</span> model<span class="token punctuation">.</span>generate<span class="token punctuation">(</span><span class="token operator">**</span>inputs<span class="token punctuation">)</span>
response <span class="token operator">=</span> tokenizer<span class="token punctuation">.</span>decode<span class="token punctuation">(</span>outputs<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> skip_special_tokens<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>
answer <span class="token operator">=</span> extract_answer<span class="token punctuation">(</span>response<span class="token punctuation">)</span> <span class="token comment"># 自定义函数,提取答案选项</span>
inputs = tokenizer(prompt, return_tensors="pt") outputs = model.generate(**inputs) response = tokenizer.decode(outputs[0], skip_special_tokens=True) answer = extract_answer(response) # 自定义函数,提取答案选项
  •  评估模型
    • 对于验证集(val),直接计算准确率。
    • 对于测试集(test),需要将结果提交到 C-Eval 官方平台获取评分。
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>metrics <span class="token keyword">import</span> accuracy_score
<span class="token comment"># 假设 `predictions` 是模型的预测结果,`labels` 是真实答案</span>
accuracy <span class="token operator">=</span> accuracy_score<span class="token punctuation">(</span>labels<span class="token punctuation">,</span> predictions<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Validation Accuracy: </span><span class="token interpolation"><span class="token punctuation">{</span>accuracy<span class="token punctuation">:</span><span class="token format-spec">.2f</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
from sklearn.metrics import accuracy_score # 假设 `predictions` 是模型的预测结果,`labels` 是真实答案 accuracy = accuracy_score(labels, predictions) print(f"Validation Accuracy: {accuracy:.2f}")
  • 提交结果:准备 JSON 文件,包含所有测试题目的预测结果:
<span class="token punctuation">{</span>
<span class="token property">"chinese_language_and_literature"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token property">"0"</span><span class="token operator">:</span> <span class="token string">"A"</span><span class="token punctuation">,</span>
<span class="token property">"1"</span><span class="token operator">:</span> <span class="token string">"B"</span><span class="token punctuation">,</span>
...
<<sp
©️版权声明:若无特殊声明,本站所有文章版权均归AI智库原创和所有,未经许可,任何个人、媒体、网站、团体不得转载、抄袭或以其他方式复制发表本站内容,或在非我站所属的服务器上建立镜像。否则,我站将依法保留追究相关法律责任的权利。

类似网站

发表评论