mrc-for-flat-nested-ner
mrc-for-flat-nested-ner 是一个基于机器阅读理解(MRC)框架的命名实体识别(NER)开源项目,源自 ACL 2020 的研究论文。它旨在解决传统 NER 模型难以同时高效处理“扁平化”和“嵌套式”实体标注的难题。在传统方法中,嵌套实体(即一个实体内部包含另一个实体)往往需要复杂的特殊设计,而 mrc-for-flat-nested-ner 创新性地将实体识别任务转化为机器阅读理解问题:通过构建针对特定实体类型的自然语言问句,让模型像回答问题一样从文本中定位实体。这种统一的建模范式不仅简化了模型架构,还显著提升了对复杂嵌套结构的识别能力。
该工具非常适合自然语言处理领域的研究人员和开发者使用,尤其是那些希望复现前沿学术成果、探索 MRC 在序列标注中应用,或需要在实际业务中处理复杂嵌套实体场景的技术团队。项目基于 PyTorch Lightning 构建,提供了完整的数据预处理脚本、训练流程、评估代码及推理示例,支持用户快速上手并自定义数据集。无论是进行学术实验还是工业级模型部署,mrc-for-flat-nested-ner 都为处理高难度 NER 任务提供了一套灵活且高效的解决方案。
使用场景
某医疗科技公司的 NLP 团队正在构建临床病历实体抽取系统,需要从非结构化文本中精准识别药物名称、剂量及复杂的嵌套并发症描述。
没有 mrc-for-flat-nested-ner 时
- 模型架构割裂:团队需分别维护两套代码,一套用序列标注处理扁平实体(如药名),另一套用跨度分类处理嵌套实体(如“慢性阻塞性肺病急性加重”中包含的疾病与状态),开发成本翻倍。
- 长尾实体识别难:传统方法对训练数据中未出现的新实体类型泛化能力差,每次新增一种病历标签都需要重新设计输出层并全量微调模型。
- 边界模糊误差大:面对嵌套结构,常规模型难以判断实体确切起止位置,常将“左肺下叶结节”错误拆解或遗漏层级关系,导致后续知识图谱构建失败。
使用 mrc-for-flat-nested-ner 后
- 统一框架降本:利用机器阅读理解(MRC)范式,将扁平与嵌套任务统一转化为问答形式,仅需一套模型即可同时处理所有类型的实体抽取,代码维护量减少 50%。
- 零样本快速扩展:新增实体类型只需构造对应的自然语言问题(如“哪些是过敏史?”),无需修改模型结构或重新训练,极大提升了业务迭代速度。
- 嵌套解析更精准:通过提问方式显式引导模型关注特定语义范围,有效解决了实体边界重叠难题,在测试集上将嵌套实体的 F1 值提升了 8.5 个百分点。
mrc-for-flat-nested-ner 通过将命名实体识别重构为统一的问答任务,彻底打破了扁平与嵌套场景的壁垒,实现了高精度与高灵活性的双重突破。
运行环境要求
- 未说明
非必需(支持 CPU),若使用 GPU 需 NVIDIA 显卡且安装 CUDA 10.1
未说明

快速开始
用于命名实体识别的统一MRC框架
该仓库包含了Shannon.AI近期研究进展的代码。
用于命名实体识别的统一MRC框架
李晓娅、冯景荣、孟宇贤、韩庆红、吴飞和李继伟
发表于ACL 2020。论文
如果您觉得本仓库对您有帮助,请引用以下文献:
@article{li2019unified,
title={A Unified MRC Framework for Named Entity Recognition},
author={Li, Xiaoya and Feng, Jingrong and Meng, Yuxian and Han, Qinghong and Wu, Fei and Li, Jiwei},
journal={arXiv preprint arXiv:1910.11476},
year={2019}
}
如有任何问题,欢迎在GitHub上提交Issue。
安装要求
代码需要Python 3.6及以上版本。
如果您使用的是配备CUDA 10.1的GPU机器,请运行
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html来安装PyTorch。否则,请参阅PyTorch官方网站获取安装说明。然后运行以下脚本以安装其余依赖:
pip install -r requirements.txt
我们基于pytorch-lightning构建项目。 如果您想了解更多关于我们训练脚本中使用的参数,请参考pytorch-lightning文档。
基线:BERT-Tagger
我们发布了用于微调BERT并将NER视为序列标注任务的代码、脚本和数据文件。
MRC-NER:准备数据集
您可以从这里下载我们在论文中使用的预处理过的MRC-NER数据集。
对于扁平型NER数据集,请使用ner2mrc/mrsa2mrc.py将您的BMES格式的NER标注转换为MRC格式。
对于嵌套型NER数据集,请使用ner2mrc/genia2mrc.py将您的起止位置格式的NER标注转换为MRC格式。
MRC-NER:训练
主要的训练流程位于train/mrc_ner_trainer.py中。
用于复现我们实验结果的脚本可以在./scripts/mrc_ner/reproduce/文件夹中找到。
请注意,您需要将DATA_DIR、BERT_DIR和OUTPUT_DIR分别替换为您自己的数据集路径、BERT模型路径和日志路径。
例如,运行./scripts/mrc_ner/reproduce/ace04.sh将开始训练MRC-NER模型,并将中间日志保存到$OUTPUT_DIR/train_log.txt。
在训练过程中,模型会每隔val_check_interval个epoch自动在验证集上进行评估,并将表现最好的前k个检查点保存到$OUTPUT_DIR。
MRC-NER:评估
训练完成后,您可以根据$OUTPUT_DIR/train_log.txt中的评估结果,在验证集上找到最佳检查点。
然后运行python3 evaluate/mrc_ner_evaluate.py $OUTPUT_DIR/<best_ckpt_on_dev>.ckpt $OUTPUT_DIR/lightning_logs/<version_0/hparams.yaml>,使用在验证集上选出的最佳检查点在测试集上进行评估。
MRC-NER:推理
用于使用训练好的MRC-NER模型进行推理的代码可以在inference/mrc_ner_inference.py文件中找到。
对于扁平型NER,我们提供了推理脚本flat_inference.sh。
对于嵌套型NER,我们提供了推理脚本nested_inference.sh。
常见问题
相似工具推荐
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
OpenHands
OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。