Skip to content

Feature/recognition optimize - #105

Merged
AfishInLake merged 10 commits into
masterfrom
Feature/recognition-optimize
Sep 16, 2026
Merged

AfishInLake merged 10 commits into
masterfrom
Feature/recognition-optimize

Conversation

@AfishInLake

Copy link
Copy Markdown
Owner

📌 关联 Issue

  • Closes #xxx
  • Related to #yyy

🎯 变更概述

  • 兼容现有功能(默认选项)
  • 包含破坏性更新(如勾选,请完整填写以下内容)

⚠️ 破坏性更新说明(仅当上方勾选时填写)

  • 受影响的用户场景

    (例如:使用 v0.2 格式配置文件的用户升级后将遇到解析错误)

  • 具体变更点

    (例如:YAML 配置中 style.font_size 字段已移除,改为嵌套结构 style.font.size)

  • 迁移建议

    (例如:请将 font_size: 12 更新为 font: { size: 12 })

  • 是否提供自动迁移工具?

    • 是(路径:scripts/migrate_v02_to_v03.py)
    • 否

✅ 提交前自查清单

🔹 测试保障

  • 已通过 make test(或等效命令)
  • 新增/修改的功能有对应单元测试(位于 tests/ 目录)
  • 所有测试均使用 io.BytesIO,未保存任何临时 .docx 文件到磁盘
  • 测试覆盖了正常路径、边界情况和错误输入

🔹 配置与兼容性

  • YAML 配置变更向后兼容(旧配置仍能运行,或提供迁移说明)
  • 新增配置项已在 example/ 中提供示例
  • 不依赖未声明的第三方库(requirements.txt 或 pyproject.toml 已更新)

🔹 文档与示例

  • README.md 已更新(如新增功能说明、命令参数)
  • 示例文档(example/)能正常运行且反映最新能力
  • 复杂逻辑已添加必要注释(尤其是涉及 python-docx 底层操作的部分)

🔹 安全与资源

  • 无敏感信息泄露(如 API Key、本地路径)
  • 无内存泄漏风险(如大文档处理时及时释放对象)
  • 未使用不安全的反序列化(如 pickle、yaml.load 未指定 Loader)

🔹 其他

  • 分支基于最新 master 切出,无无关提交
  • Commit 信息清晰(建议遵循 Conventional Commits,如 feat: add table caption check)

💡 温馨提示:勾选 [x] 表示你已确认该项。未勾选项可能成为 Review 阻塞点。

识别后处理 (base.py):
- 分级置信度阈值:低于阈值保留原标签并标记 needs_review,不再硬砍 body_text
- 章节状态机置信度门控 (STATE_MIN_CONF=0.6):低置信伪标题不触发内容传播
- 附录区中性化:可信 heading_fulu 之后把摘要/关键词/致谢类回退 body_text
- 摘要页标题回补、目录识别、参考文献/致谢正文序列修正(均复用置信度门控,
  避免把内联源码的孤立 "{" 误判为致谢标题后扫成 acknowledgements_content)

节点对齐 (structure/settings.py):
- CATEGORY_TO_CLASS 补齐 heading_mulu/heading_fulu/document_title/footer,
  修复 create_node 丢弃节点导致的段落与文档树错位

推理与流水线:
- onnx_infer.py 批量推理、settings.py BATCH_SIZE、stages.py 段落对齐

工具与测试:
- scripts/eval_recognition.py:零依赖识别准确率评估(classification_report + 混淆矩阵)
- 新增后处理与门控单测;1054 passed,覆盖率 87.82%

实测:真实论文准确率 98.6%→100%,源码/内联代码附录零污染。
- 新增训练流水线(dump/fix/train 三脚本,编号增强+小类上采样)
- onnx_infer 单模型化:model_info.json 驱动、[PREV] 上下文链
- 22 类标签表与 tokenizer 切换为 chinese_roberta_L-4_H-256
- 推理参数调优:BATCH_SIZE 32 + intra 2/inter 1(基准验证)
- 环境变量文档化,.gitignore 排除训练数据与模型大文件
- thesis_paragraph_classifier_int8.onnx(8.6MB) 直接提交仓库分发,不再走 Release
- 新增摘要内容位置门控 _gate_abstract_content(修复绪论被误吸)
- 训练集/测试集/训练脚本/checkpoint 收拢到 training/,不入库
- 补充合成数据补齐训练报告
生产仅保留 int8 ONNX(8.6MB) + tokenizer + 标签表;fp32 可由
training/checkpoints/model_small_bert 重新导出恢复
- 前端 SCORE_THRESHOLD 0.8(旧BERT时代) 改为 22 类分级阈值表,与后端统一
- 后端 CONF_THRESHOLDS 补全 22 类:以正确段 p10 分档 0.35~0.6
- 留出集实测:ui 标记率 44.9% -> 2.06%,正确段误标仅 1.64%
- node-meta 加 max-width 30% + ellipsis,hover 显示完整注释
- node-content 改 flex 1 1 0,保证收缩责任落在注释上
- 消除超长注释(如位置门控说明)把正文压成单列瘦条的问题
- flex-wrap: wrap + node-meta width:100%,注释不再与正文争行内宽度
- 无注释节点不再渲染 meta 行(去掉'无注释'占位)
- 上次只 build 到 dist 未同步 api/static,导致后端 serve 的仍是旧版
- utils.js abstract.english.keywords.rules 补齐 trailing_punctuation(中文侧已有)
- AbstractConfig.vue 深层访问 config.english.keywords.rules.trailing_punctuation.enabled 不再 undefined
- 同步 api/static 构建产物
- 前端 DocTagChecker:移除 figure_image 数据层过滤(改为显示层隐藏),
  保证节点与文档段落 1:1 对应,杜绝 keywords_chinese/caption_figure/
  heading_level_* 规则错位套用(正文被加"图1.1"编号、中文关键词批注
  出现在论文题目等);统一过滤/原始索引换算,修正选中与详情面板
- 后端 ParagraphAlignmentStage:zip 前校验节点数与段落数一致,
  不一致显式报错并给出可操作指引,不再静默错位
- 后端新增 _fix_references_content 位置门控:参考文献标题前的
  references_content(正文综述段含 [n] 引用标记被误判)回退 body_text
- 前端格式化前提醒低置信(needs_review)节点数量,防止误格式化
- base.py 补 score 重置与标题编号正则校准(沿用既有后处理链)
- 测试:新增 alignment_guard 防错位、references 位置门控用例,
  修正 mock 树与段落数不匹配的旧用例,全量 1073 通过
- 同步前端构建产物至 api/static
@AfishInLake
AfishInLake merged commit 371998d into master Sep 16, 2026
12 checks passed
@AfishInLake
AfishInLake deleted the Feature/recognition-optimize branch September 16, 2026 15:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant