Text Classification
Transformers
Joblib
Safetensors
PaddlePaddle
Chinese
sentiment-analysis
machine-translation
lora
dora
chinese
scikit-learn
bert
Instructions to use biscuitzzz/hit-nlp-course-models with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use biscuitzzz/hit-nlp-course-models with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="biscuitzzz/hit-nlp-course-models")# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("biscuitzzz/hit-nlp-course-models", device_map="auto") - Notebooks
- Google Colab
- Kaggle
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。