HIT-NLP 课程模型归档

本仓库汇总自然语言处理课程实验中的模型产物与复现材料。大体积权重不入 git,统一存放在这里; 代码、数据与报告见课程仓库 HIT-NLP,本地复现条件见其中的 MODELS.md。

存放内容

仓库路径 本地对应位置 大小 说明
lab1/teaching-package/ lab1/实验一情感分析教学包/ ~971 MB 教学包全量:两本 notebook、数据、15 个经典模型、微调模型、UER 基座、指标与曲线
lab1/report/ lab1/report/ ~684 KB 实验一报告 PDF 与插图源码
lab2/weights/ HPC lab2/code/saved_models、lab2/runs/*/saved_models ~7.3 GiB 23 组 Transformer 终稿参数 transformer.pdparams(基线/调参 8 组、结构消融 6 组、4 种子网格 8 组),另含 rel_pos_bias.npy
lab2/ 其余 lab2/ ~18 MB 代码、结果、日志与报告
lab3/adapters/ HPC lab3/runs/*/ ~949 MiB 7 组 LoRA/DoRA adapter(含 smoke 验证),各含 adapter_config.json、tokenizer 与 trainer_state.json
lab3/ 其余 lab3/ ~12 MB 配置、脚本、结果、日志与报告
SHA256SUMS — — 教学包全部文件的 SHA-256
SHA256SUMS.weights — — lab2 权重与 lab3 adapter 的 SHA-256

下载与校验

hf download biscuitzzz/hit-nlp-course-models --repo-type model \
  --include "lab2/weights/**" --include "lab3/adapters/**" \
  --local-dir hit-nlp-models
cd hit-nlp-models && sha256sum -c SHA256SUMS.weights

复现条件(lab1)

项目 条件
代码与数据版本 课程仓库提交 101b245;模型归档说明与文档见提交 c718e0d
数据 MARC 中文评论;train 20,000 / validation 4,000;seed 42;剔除 3 星中性样本;标签 0=负面、1=正面(data/manifest.json)
基座模型 uer/chinese_roberta_L-8_H-512,revision 5684143aeca0f9f4ecc91ef249b8184525767eff;8 层 / 512 隐层 / 8 头 / vocab 21,128
微调配方 max_length 256,batch 32,eval batch 64,epochs 3,lr 2e-5,warmup_ratio 0.1,weight_decay 0.01,seed 2024;最优 epoch 2
微调指标(验证集) macro-F1 0.8787 / accuracy 0.8788
经典最优 TF-IDF char1-3(min_df=1)+ 卡方 top-50,000 + LR(C=10),macro-F1 0.8495;15 模型对照最优为 RidgeClassifier char13,macro-F1 0.8467
Python 环境 Python 3.11;torch 2.5.1;transformers 4.44.2;tokenizers 0.19.1;scikit-learn 1.5.2;numpy 1.26.4;pandas 2.2.3;jieba 0.42.1(lab1/pyproject.toml、uv.lock)
硬件与耗时 NVIDIA RTX 4060 Laptop 8GB;微调 GPU 约 8 分钟,经典全流程 CPU 约 30 分钟

复现步骤

cd lab1
uv sync

# 可选:把权重从 HF 拉回本地教学包目录
hf download biscuitzzz/hit-nlp-course-models --repo-type model \
  --include "lab1/teaching-package/*" --local-dir /tmp/hit-nlp-models
  • 微调路线:全量运行 实验一情感分析教学包/中文预训练模型情感分类微调.ipynb(第 6—8 节,GPU 约 8 分钟)。
  • 经典路线:全量运行 实验一情感分析教学包/经典机器学习情感分类介绍.ipynb(第 6—10 节,CPU 约 30 分钟)。
  • 权重是可再生产物,不下载也可通过上述 notebook 重新生成。
  • 训练记录:finetuned/train_log.json、epoch_metrics.csv、steps.csv、training_curves.png;经典对照记录:classical/classical15_reports.json、refine_final_selection.csv。

复现条件(lab2)

项目 条件
任务 WMT 中文-英文翻译(zhen),Transformer 的 PaddlePaddle 实现
代码 课程仓库 lab2/aistudio-project/、lab2/improve/;运行入口 lab2/jobs/hpc/*.sbatch
数据 WMT17/18/19 zhen + BPE3;未上传,按 lab2/aistudio-project/README.md 下载并预处理
训练设置 基线 lr 2.0、warmup 8000、label smoothing 0.1、beam 5;save_step 5000,训练结束额外保存 step_final
随机性 默认未固定 seed;4 种子网格固定 seed 23/42/7/123,用于同种子成对比较
归档内容 仅 step_final/transformer.pdparams;未上传 transformer.pdopt(优化器状态)与 step_5000/10000/15000 中间检查点
评测 同时给出课程脚本与 sacreBLEU aligned 两种口径;2018 测试集

各组配置与 2018 测试集 aligned BLEU:

HF 路径 配置 BLEU
lab2/weights/baseline/ lr 2.0, warmup 8000, ls 0.1 11.31
lab2/weights/tuning/base_s23/ 基线 + seed 23 11.01
lab2/weights/tuning/base_s42/ 基线 + seed 42 11.27
lab2/weights/tuning/base_s7/ 基线 + seed 7 10.24
lab2/weights/tuning/base_s123/ 基线 + seed 123 11.31
lab2/weights/tuning/combo/ lr 3.0, warmup 4000, ls 0.05 11.00
lab2/weights/tuning/lr3/ lr 3.0 11.11
lab2/weights/tuning/ls05/ ls 0.05 10.86
lab2/weights/tuning/warmup4k/ warmup 4000 11.32
lab2/weights/improve/relpos/ 基线 + 相对位置偏置(rel_pos_bias.npy) 11.45
lab2/weights/improve/relpos_s23/ 相对位置偏置 + seed 23 10.89
lab2/weights/improve/loconly_s23/ 局部性(前 3 层)+ seed 23 11.11
lab2/weights/improve/locrel_s23/ 相对位置 + 局部性(前 3 层)+ seed 23 11.26
lab2/weights/improve/locrelstd_s23/ 相对位置 + 局部性(前 3 层)+ 标准缩放,seed 23 11.24
lab2/weights/improve/stdscale_s23/ 仅标准缩放(无偏置),seed 23 10.78
lab2/weights/improve/loconly6_s23/ 局部性(6 层)+ seed 23 11.41
lab2/weights/improve/loconly6_s42/ 局部性(6 层)+ seed 42 11.17
lab2/weights/improve/loconly6_s7/ 局部性(6 层)+ seed 7 10.91
lab2/weights/improve/loconly6_s123/ 局部性(6 层)+ seed 123 10.62
lab2/weights/improve/locrel6_s23/ 最终配置:相对位置 + 局部性(6 层),seed 23 11.54
lab2/weights/improve/locrel6_s42/ 最终配置 + seed 42 11.63
lab2/weights/improve/locrel6_s7/ 最终配置 + seed 7 10.68
lab2/weights/improve/locrel6_s123/ 最终配置 + seed 123 11.01

4 种子网格用于同种子成对比较:最终配置在 2018 上平均增益 +0.26±0.38(3/4 种子为正),2017 上 +0.11±0.52(3/4 种子为正)。tuning/beam10 不产生权重:它复用基线模型,仅把解码 beam 改为 10(BLEU 10.88),日志见课程仓库 lab2/results/tuning/beam10/。

加载方式(Paddle):

import paddle

state = paddle.load("lab2/weights/baseline/transformer.pdparams")
# 实例化课程仓库 lab2/aistudio-project 中的 Transformer 后
# model.set_dict(state)

复现条件(lab3)

项目 条件
任务 中文对话/推理指令微调(医学问答 + CMMLU 评测)
基座模型 Qwen/Qwen2-7B-Instruct;HPC 上为 models/Qwen2-7B-Instruct
代码与配置 课程仓库 lab3/scripts/(train_sft.py、eval_models.py、export_merge.py 等)与 lab3/configs/*.yaml
数据 按实验指导书准备;未上传
训练设置 1 epoch,cutoff_len 1024,max_samples 12000,batch 4 × grad_accum 8,cosine,warmup 0.03,fp16,gradient checkpointing,seed 42;最终 step 375
归档内容 adapter_model.safetensors + adapter_config.json + tokenizer 文件 + trainer_state.json
未归档 checkpoint-375(与终稿相同)、dora_r8_qv 的 checkpoint-200(中间快照)、exports/*_merged(约 15 GB/个,可由 scripts/export_merge.py 重建)、基座模型与数据集
HF 路径 方法 rank / alpha target lr 大小
lab3/adapters/lora_r8_qv/ LoRA 8 / 16 q_proj, v_proj 1e-4 10.1 MB
lab3/adapters/dora_r8_qv/ DoRA 8 / 16 q_proj, v_proj 1e-4 10.5 MB
lab3/adapters/lora_r16_all/ LoRA 16 / 32 全部线性层 2e-4 161.5 MB
lab3/adapters/lora_r16_all_lr1e4/ LoRA 16 / 32 全部线性层 1e-4 161.5 MB
lab3/adapters/dora_r16_all/ DoRA 16 / 32 全部线性层 2e-4 167.1 MB
lab3/adapters/lora_r32_all/ LoRA 32 / 64 全部线性层 2e-4 323.0 MB
lab3/adapters/smoke_v100s/ LoRA(smoke 验证,20 step) 16 / 32 全部线性层 2e-4 161.5 MB

加载方式(PEFT):

from transformers import AutoModelForCausalLM
from peft import PeftModel

base = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen2-7B-Instruct", torch_dtype="auto", device_map="auto")
model = PeftModel.from_pretrained(
    base, "biscuitzzz/hit-nlp-course-models",
    subfolder="lab3/adapters/lora_r16_all")

合并导出:

python lab3/scripts/export_merge.py \
  --base Qwen/Qwen2-7B-Instruct \
  --adapter lab3/adapters/lora_r8_qv \
  --output merged/lora_r8_qv

使用方式(lab1)

微调模型(自包含 config 与词表):

from transformers import AutoTokenizer, AutoModelForSequenceClassification

repo = "biscuitzzz/hit-nlp-course-models"
sub = "lab1/teaching-package/finetuned"
tok = AutoTokenizer.from_pretrained(repo, subfolder=sub)
model = AutoModelForSequenceClassification.from_pretrained(repo, subfolder=sub)
# id2label: 0=负面, 1=正面

经典最优模型(自包含 Pipeline:tfidf → chi2 → clf):

import joblib

pipe = joblib.load("best_refined.joblib")
pred = pipe.predict(["这家店味道很好,服务也不错"])

其余 14 个经典模型以 vectorizer_char13.joblib 产出的 TF-IDF 特征为输入(mlp 额外含 SVD 步骤),完整用法见经典 notebook。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support