news 2026/4/16 2:56:11

spaCy PDF NER — 训练与标注流程指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
spaCy PDF NER — 训练与标注流程指南

本文件记录在examples下完成的训练/标注流水线:从 PDF 提取、自动建议(词典+模型)、生成优先 CSV、导入 Label Studio 到自动合并并微调模型的完整命令和脚本说明。

关键脚本(工作区相对路径)

  • spacy_pdf_ner.py — 训练与推理入口(spaCy)。

  • apply_annotations.py — 把extractionJSON 转为 spaCy 训练 JSON(可选自动标注 TECH 词典)。

  • save_extraction_suggest.py — 生成带suggested_entities的 extraction(若不存在请参考项目中的对应脚本)。

  • export_top_suggestions.py — 从*_extraction_suggested.json导出 top-N 建议 CSV。

  • convert_top_to_annotator.py — 把 top CSV 转为标注器友好 CSV。

  • auto_ingest_top.py — 自动把 top-N 建议注入 extraction JSON(生成带实体的注释 JSON)。

  • merge_model_and_suggestions.py — 用模型推理并将模型实体与建议合并(去重/避免重叠)。

  • export_merged_top.py — 从合并后的 extraction 导出带来源(MODEL/SUGGESTED)的 top-N CSV。

  • batch_process_pdfs.py — 批量对目录内 PDF 运行模型并输出 suggested/merged JSON。

  • annotator_csv_to_labelstudio.py — 把 annotator CSV 转为 Label Studio 可导入的 JSONL。


环境准备(示例)

建议在examples下使用虚拟环境:

cd examples python3 -m venv .venv source .venv/bin/activate # 安装依赖(仓库可能包含 requirements-spacy.txt) .venv/bin/pip install --upgrade pip .venv/bin/pip install -r requirements-spacy.txt

如果没有 requirements 文件,请确保安装:spacy,pdfminer.six,PyPDF2等。

常用命令及流程

下面给出典型顺序与可复制的命令片段(相对路径基于examples):

  1. 从 PDF 生成初始建议(若已有建议可跳过)

  • 运行脚本或工具生成Pxxx_extraction_suggested.json(示例文件:P020260202487301304903_extraction_suggested.json)。

2.导出 top-N 建议 CSV(频率优先)

source .venv/bin/activate python3 export_top_suggestions.py -i P020260202487301304903_extraction_suggested.json -o tech_suggestions_top100.csv -n 100 -c 120

3.转为标注器友好 CSV(人工审阅)

python3 convert_top_to_annotator.py -t tech_suggestions_top100.csv -e P020260202487301304903_extraction_suggested.json -o tech_suggestions_top100_annotator.csv

4.(可选)把 top-N 自动合并进 extraction(生成注释 JSON)

python3 auto_ingest_top.py -t tech_suggestions_top100.csv -e P020260202487301304903_extraction_suggested.json -o P020260202487301304903_autoingest_top100.json

5.把注释 JSON 转为 spaCy 训练 JSON

python3 apply_annotations.py P020260202487301304903_autoingest_top100.json P020260202487301304903_training_autoingest_top100.json --auto-tag --tech-terms tech_terms.json --freq-csv tech_terms_freq.csv

6.用 spaCy 微调模型(示例 10 iters)

python3 spacy_pdf_ner.py --train P020260202487301304903_training_autoingest_top100.json --output-model test_model_auto_ingest --iters 10

7.合并模型输出与建议(保留源信息)

python3 merge_model_and_suggestions.py -m test_model_auto_ingest -s P020260202487301304903_extraction_suggested.json -o P020260202487301304903_extraction_merged_model.json python3 export_merged_top.py -i P020260202487301304903_extraction_merged_model.json -o tech_suggestions_merged_top100.csv -n 100

8.将标注内容转换为 Label Studio JSONL 以便人工标注(每个文档一个任务)

python3 convert_top_to_annotator.py -t tech_suggestions_merged_top100.csv -e P020260202487301304903_extraction_merged_model.json -o tech_suggestions_merged_top100_annotator.csv python3 annotator_csv_to_labelstudio.py -c tech_suggestions_merged_top100_annotator.csv -o tech_suggestions_merged_top100_labelstudio.jsonl

在 Label Studio 中:Project → Import Tasks → 选择生成的*.jsonl

批量处理示例

对目录中所有 PDF 使用已训练模型并生成 suggested/merged JSON:

python3 batch_process_pdfs.py -d . -m test_model_auto_ingest -t tech_terms.json -o ./batch_out # 会为每个 PDF 生成 <stem>_extraction_suggested.json 和 <stem>_extraction_merged.json

人工确认与再次训练(建议流程)

  • 在 Label Studio 中完成确认后,导出为 JSONL。将已确认的标注转换回extraction格式(或手动合并)并运行apply_annotations.py生成训练 JSON。

  • 将新的训练 JSON 与原训练集合并(或直接替换少量样本),再运行spacy_pdf_ner.py做下一轮微调(建议 10–40 次,视数据量而定)。

文件与产物清单(本次运行产物)

  • 标注器 CSV(优先 top 100):examples/tech_suggestions_top100.csv

  • Annotator CSV:examples/tech_suggestions_top100_annotator.csv

  • 自动合并注释 JSON:examples/P020260202487301304903_autoingest_top100.json

  • 训练用 JSON:examples/P020260202487301304903_training_autoingest_top100.json

  • 新模型目录:examples/test_model_auto_ingest

  • 合并后的优先 CSV(含来源):examples/tech_suggestions_merged_top100.csv

  • Label Studio 可导入 JSONL:examples/tech_suggestions_merged_top100_labelstudio.jsonl

通过训练模型提取pdf文件中的“问题,缺陷,错误”:

.venv/bin/python spacy_pdf_ner.py --model test_model_final --pdf P020260202487301304903.pdf --keywords 问题,缺陷,错误 --lang zh

返回的部分实体与问题句子:

注意与建议

  • 避免训练示例中实体跨度重叠(spaCy Example.from_dict 对重叠会报错)。脚本中已有去重/避让逻辑。

  • 小样本微调(几十到几百条)时,训练次数不宜过多(会过拟合)。先做 10–40 次,观察损失与验证样本表现。

  • 自动合并建议会引入噪声,建议把SUGGESTED项先人工过一遍,再合并入训练集。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 2:51:41

3分钟搞定Windows激活:KMS_VL_ALL_AIO智能激活完全指南

3分钟搞定Windows激活&#xff1a;KMS_VL_ALL_AIO智能激活完全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗&#xff1f;KMS_VL_ALL_AIO是一款智能激活脚本&…

作者头像 李华
网站建设 2026/4/16 2:49:11

材料科学入门:从晶体到非晶体,这些基础概念你掌握了吗?

材料科学入门&#xff1a;晶体与非晶体的本质差异与应用探索 当我们拿起一部智能手机&#xff0c;触摸着光滑的玻璃屏幕&#xff1b;或是佩戴一副轻便的树脂眼镜&#xff0c;感受着它的柔韧性&#xff1b;亦或是使用金属餐具&#xff0c;体会其坚固耐用的特性——这些日常体验…

作者头像 李华
网站建设 2026/4/16 2:37:17

智能家居DIY:用FPGA+DHT11搭建高精度环境监测系统(带波形分析)

智能家居DIY&#xff1a;用FPGADHT11搭建高精度环境监测系统&#xff08;带波形分析&#xff09; 在智能家居领域&#xff0c;环境监测系统的精度和实时性直接影响用户体验。传统方案多采用现成模块或单片机实现&#xff0c;但存在采样率低、数据处理能力有限等问题。本文将展示…

作者头像 李华
网站建设 2026/4/16 2:32:20

VS Code 快速生成 Vue3 组件模板的实用技巧

1. 为什么你需要Vue3组件模板 每次新建Vue组件都要重复写<template>、<script setup>和<style>这些基础结构&#xff1f;作为一个从Vue2转到Vue3的老手&#xff0c;我深刻理解这种重复劳动的痛苦。特别是在大型项目中&#xff0c;每天可能要创建十几个组件&…

作者头像 李华
网站建设 2026/4/16 2:30:14

Jmeter HTML报告深度解析:如何定制你的专属性能图表?

Jmeter HTML报告深度解析&#xff1a;如何定制你的专属性能图表&#xff1f; 当你完成一轮压力测试&#xff0c;面对Jmeter自动生成的HTML报告&#xff0c;是否曾觉得那些默认图表无法完全满足你的分析需求&#xff1f;或许你需要更直观的响应时间分布展示&#xff0c;或是希望…

作者头像 李华