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

张开发
2026/7/2 13:46:35 15 分钟阅读
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从 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 1203.转为标注器友好 CSV人工审阅python3 convert_top_to_annotator.py -t tech_suggestions_top100.csv -e P020260202487301304903_extraction_suggested.json -o tech_suggestions_top100_annotator.csv4.可选把 top-N 自动合并进 extraction生成注释 JSONpython3 auto_ingest_top.py -t tech_suggestions_top100.csv -e P020260202487301304903_extraction_suggested.json -o P020260202487301304903_autoingest_top100.json5.把注释 JSON 转为 spaCy 训练 JSONpython3 apply_annotations.py P020260202487301304903_autoingest_top100.json P020260202487301304903_training_autoingest_top100.json --auto-tag --tech-terms tech_terms.json --freq-csv tech_terms_freq.csv6.用 spaCy 微调模型示例 10 iterspython3 spacy_pdf_ner.py --train P020260202487301304903_training_autoingest_top100.json --output-model test_model_auto_ingest --iters 107.合并模型输出与建议保留源信息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 1008.将标注内容转换为 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 JSONpython3 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 100examples/tech_suggestions_top100.csvAnnotator CSVexamples/tech_suggestions_top100_annotator.csv自动合并注释 JSONexamples/P020260202487301304903_autoingest_top100.json训练用 JSONexamples/P020260202487301304903_training_autoingest_top100.json新模型目录examples/test_model_auto_ingest合并后的优先 CSV含来源examples/tech_suggestions_merged_top100.csvLabel Studio 可导入 JSONLexamples/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项先人工过一遍再合并入训练集。

更多文章