Ziyu Li's Homepage

Back

CS189 Assignment 5#

项目简介#

这一次我们把微调的训练集从mmlu换成Ceval数据集, 其他的和Part1保持一致, 所以我们要改写Prompt工程的代码以适配Ceval数据集

Ceval数据集 ↗

制作微调数据集的Prompt工程#

加载#

大体上和之前差不多, 只不过现在是4选1而不是5选1

查看Prompt基本信息#

# 基本信息
print("size:", len(CEVAL_ds))
print("columns:", CEVAL_ds.column_names)
print("features:", CEVAL_ds.features)

# 看前 5 条(注意:若很大不要全部 to_pandas)
for i in range(5):
    print(i, CEVAL_ds[i])   # 打印字典形式的单条样本
python
size: 5195
columns: ['id', 'question', 'A', 'B', 'C', 'D', 'answer', 'explanation']
features: {'id': Value('int32'), 'question': Value('string'), 'A': Value('string'), 'B': Value('string'), 'C': Value('string'), 'D': Value('string'), 'answer': Value('string'), 'explanation': Value('string')}
0 {'id': 0, 'question': '关于信息的传递,下列说法正确的是____', 'A': '北斗卫星定位系统可提供全天候即时定位服务', 'B': '5G网络通信主要是利用光导纤维传递信息的', 'C': '手机话筒的主要作用是把声音信号变成恒定电流', 'D': '电磁波只能传递声音信号,不能传递图像信号', 'answer': 'A', 'explanation': ''}
1 {'id': 1, 'question': '下列说法符合实际情况的是____', 'A': '人的正常体温约为39℃', 'B': '成年人步行的速度约为1.1m/s', 'C': '中学生的体重约为50N', 'D': '一个篮球的体积约为1m3', 'answer': 'B', 'explanation': ''}
2 {'id': 2, 'question': '下列关于测量仪器的分析正确的是____', 'A': '水银温度计利用了液体热胀冷缩的原理', 'B': '托盘天平利用了省力杠杆的原理', 'C': '电能表利用电流的热效应工作', 'D': '液体压强计利用了连通器的原理', 'answer': 'A', 'explanation': ''}
3 {'id': 3, 'question': '关于分子动理论,下列说法中不正确的是____', 'A': '物质是由大量分子组成的', 'B': '温度越高,分子的运动越剧烈', 'C': '分子是组成物质的最小微粒', 'D': '固体很难被压缩,说明分子间存在斥力', 'answer': 'C', 'explanation': ''}
4 {'id': 4, 'question': '有关安全用电,下列做法错误的是____', 'A': '使用验电笔时手要接触验电笔后端金属部分', 'B': '为了使用方便,可以剪掉三脚插头中保护接地线的插脚', 'C': '接入漏电保护器,可以在导线漏电、电器短路等故障时断开电路起保护作用', 'D': '高压线发生断线落地时,人不能靠近落地处', 'answer': 'B', 'explanation': ''}
plaintext

调整成最终的格式#

可以看到这已经和之前的格式一样了

计算训练baseline#

和之前一样, 直接用他给的eval_mcq_accuracy就行了, 不再赘述

调整训练参数#

调整参数是一个经验性的问题, 这里我调整的并不多, 因为主要还是把这个实验跑通而不是在测试集上做的特别完美

启动训练#

# === Fine-tune the model ===
model.train()
trainer.train()
model.eval()
python

最终绩效#

# === Evaluate MCQ accuracy after fine-tuning ===
print("Evaluating fine-tuned model on MCQ dataset...")
ft_acc, ft_details = eval_mcq_accuracy(
    model,
    tokenizer,
    mcq_df,
    max_new_tokens=EVAL_MAX_NEW_TOKENS,
    return_details=True,
)
ft_details.head()
print(f"Baseline acc: {baseline_acc:.4f}, Fine-tuned acc: {ft_acc:.4f}")
python
Evaluating fine-tuned model on MCQ dataset...
Processed 20/25 questions...
MCQ accuracy: 32.00% (8/25)
Baseline acc: 0.2800, Fine-tuned acc: 0.3200
plaintext
UC Berkeley CS189 Assignment 5(Part 2)
https://astro-pure.js.org/blog/cs189_assignment5_part2
Author Ziyu(Albert) Li 李子煜
Published at February 28, 2026
Comment seems to stuck. Try to refresh?✨