目录

军事命名实体关系识别

自然语言处理课程实验(大三下):基于 Qwen2.5-3B-Instruct 完成军事领域文本的命名实体识别(NER)与关系抽取(RE),覆盖量化部署、LLM 异步标注、LoRA 微调与知识图谱构建的完整管线,并在课程竞赛平台取得 0.85 分(排名第 1)。

任务背景

依托 Qwen2.5-3B-Instruct 与远程 GPU 服务器,围绕军事数据集(fned.json,10,450 条文本,BIO 字符级标签)完成四个递进任务,并向竞赛平台提交 LoRA 权重接受自动评测:

  1. task1 模型量化与推理性能对比:FP16 与 4-bit NF4 量化的显存对比;Transformers 串行与 vLLM 并发的延迟对比。
  2. task2 异步批量实体关系标注:用 DeepSeek Flash API 标注 10,450 条军事文本,Prompt 定义 12 种军事关系本体;asyncio + Semaphore 高并发、response_format=json_object 强制 JSON、每 10 条断点续传。
  3. task3 LoRA 微调与多维度评测:LlamaFactory 对 Qwen2.5-3B 做 LoRA 微调(rank 8,lr 1e-4,3 epochs,NER+ER 联合 14,759 条样本);vLLM 挂 LoRA 推理;自实现四维度 F1 评测(实体 IoU、实体名称、三元组严格、三元组宽松)。
  4. task4 Neo4j 知识图谱构建:三元组导入 Neo4j,PyVis 交互式可视化;附实体位置(pos)修复脚本与独立评测脚本。

关键结果:

任务 指标 结果
task1 4-bit NF4 量化显存 5.77 GB 降至 2.13 GB(约 -63%)
task1 vLLM vs Transformers 平均延迟 加速约 3.84 倍
task2 有效 ER 三元组 10,450 条标注得 6,399 条(保留率 66.9%)
task3 三元组宽松 F1(LoRA 前/后) 0.14 提升至 0.44
task3 实体名称 F1(LoRA 前/后) 0.46 提升至 0.75
竞赛 平台评分 0.85,排名第 1(截图未入库)

竞赛评分四阶段:NER+ER 联合(未修 pos)0.37;纯 NER 误交 1 epoch checkpoint 得 0.21;NER+ER 联合(修复 pos)0.841;最终纯 NER 完整 3 epoch 版本 0.85。经验:训练充分性与提交文件 MD5 校验比策略调整更关键。

内容结构

路径 说明
task1/ 量化与推理对比;task1.ipynb 为主笔记本,01.ipynb 为课程占位
task2/ 异步标注;convert_csv.py 转 CSV 编码,task2_bk.ipynb 为备份
task3/ LoRA 微调与评测;er_test_old/backup/fixed.csv 为评测集迭代版本
task4/ 知识图谱;fix_pos.py 修 pos,evaluate_er_f1.py 四维 F1 评测,lib/ 为 knowledge_graph.html 所需 vis.js/tom-select 离线前端库
taskN/results/ 原始模型 vs 微调模型推理输出对比 CSV
taskN/fned*.json、er*.csv 课件数据及其小型派生文件(er.csv 等)
generate_report.py 用 python-docx 生成实验报告 docx 的脚本

未入库内容(体积或产物原因,予以说明):各 task 的 datasets/ 目录(LlamaFactory dataset_info.json、qwen_lora_config.yaml 与训练用大 json)、task3/save/ 的 LoRA 权重与 zip、超过 20MB 的标注中间文件(task2/er.csv 125.7MB;task3/er.csv、er_fixed.csv 128.4MB、er_dsflash.csv 125.7MB;task4/er.csv 92.0MB、er_fixed.csv 128.4MB)、实验报告 docx、排行榜截图、散装 whl。核心数据 fned.json(8 至 18MB)与小型 er_test/fned_train/fned_test 文件已保留,可复现数据处理全流程。

运行方法

环境:Python 3.10+ 与 CUDA GPU;主要依赖 torch、transformers、bitsandbytes、vllm、openai、pandas、json_repair、neo4j(或 py2neo)、pyvis、llamafactory、python-docx(原散装 whl 不入库,请直接 pip 安装)。

# task1:先起 vLLM 服务,再逐格运行 notebook
vllm serve /path/to/Qwen2.5-3B-Instruct --dtype=half --trust-remote-code --gpu-memory-utilization 0.7
jupyter lab task1/task1.ipynb

# task2:填入 DeepSeek API key 后批量标注(输出 er.csv,约 1.6 小时)
jupyter lab task2/task2.ipynb

# task3:pos 修复、转训练数据后 LoRA 微调,再以 vLLM LoRA 推理
python task4/fix_pos.py
llamafactory-cli train datasets/qwen_lora_config.yaml
vllm serve /path/to/Qwen2.5-3B-Instruct --enable-lora \
  --lora-modules ner-lora=/path/to/lora/checkpoint-4983

# task4:四维度 F1 评测;notebook 内导入 Neo4j(neo4j://127.0.0.1:7687)生成 knowledge_graph.html
python task4/evaluate_er_f1.py

注意:notebook 内模型路径为课程服务器路径,本地复现需替换;LoRA 训练所需 datasets/ 未入库,需按 alpaca 格式(instruction/input/output)重建,配置要点见 task3.ipynb。

来源声明

  • 课程框架:task*/01.ipynb 占位与 taskN.ipynb 的教程骨架(关卡式 markdown 讲解)来自课程实训平台下发;task1/2/4 原仓库远程即课程平台,task3 无独立仓库。
  • 自研部分:taskN.ipynb 中填写的代码(量化对比、异步标注框架、数据转换、vLLM LoRA 推理、四维度评测、Neo4j 建图),以及 convert_csv.py、fix_pos.py、evaluate_er_f1.py、generate_report.py。
  • 数据:fned.json 与 er_test.csv 由课程提供;er.csv 系列标注结果由 DeepSeek Flash API 生成并经 pos 程序化修复。
  • 第三方:task4/lib/ 为 vis.js 9.1.2 与 tom-select 官方发行文件,仅用于知识图谱离线展示。
关于

自然语言处理竞赛作业:军事数据集 NER/RE 四个 task,含 LoRA 微调,排行榜第一(0.85)

12.2 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号