NCRFpp
NCRF++ 是一款基于 PyTorch 开发的开源神经序列标注工具包,专为自然语言处理中的序列标注任务设计。它能够有效解决命名实体识别(NER)、词性标注(POS)及中文分词等核心任务中的特征提取与标签预测难题。
该工具主要面向 NLP 领域的研究人员与开发者,特别是那些希望快速复现前沿算法或灵活定制模型架构的用户。NCRF++ 的最大亮点在于其“零代码”配置能力:用户无需修改底层代码,仅通过一个简单的配置文件,即可自由组合字符级(LSTM/CNN/GRU)、词级神经网络以及输出层(Softmax/CRF)等多种结构。这种设计不仅完美复刻了经典统计工具 CRF++ 的灵活性,还融入了深度学习的强大表征能力。
此外,NCRF++ 在性能上表现卓越,利用全批量 GPU 加速操作,实现了极高的训练与解码速度(解码速度可达每秒 2000 句以上),并支持输出概率最高的 N 个候选结果。作为曾荣获 COLING 2018 最佳论文奖的技术成果,NCRF++ 以高效、灵活且易用的特性,成为了构建高性能序列标注模型的得力助手。
使用场景
某医疗科技公司的 NLP 团队正致力于从非结构化的电子病历中自动提取疾病名称、药物剂量及手术部位等关键实体,以构建结构化数据库。
没有 NCRFpp 时
- 开发效率低下:每次尝试新的模型组合(如切换字符级 CNN 或双向 LSTM)都需要重写大量 PyTorch 代码,迭代周期长达数周。
- 特征工程僵化:难以灵活融合医生自定义的规则特征与预训练词向量,导致模型无法充分利用领域专业知识。
- 推理精度受限:仅使用 Softmax 层进行标签预测,忽略了标签间的依赖关系(如“疾病”后通常接“部位”),造成实体边界识别错误率高。
- 训练速度缓慢:缺乏高效的批量 GPU 加速机制,处理百万级病历数据时耗时过长,严重拖慢项目进度。
使用 NCRFpp 后
- 零代码模型配置:仅需修改配置文件即可自由组合字符/词级别的 LSTM、CNN 及 CRF 层,一天内即可完成多种 SOTA 架构的验证。
- 灵活特征融合:轻松接入手工定义的医疗规则特征与预训练嵌入,显著提升了模型对专业术语的捕捉能力。
- 全局最优解码:利用内置的 CRF 推断层建模标签转移概率,有效解决了实体边界断裂问题,F1 值提升约 5%。
- 高效批量运算:借助全批量 GPU 操作,训练速度突破 1000 句/秒,解码速度超 2000 句/秒,大幅缩短了模型上线时间。
NCRFpp 通过配置驱动的灵活架构与高效的 CRF 推断能力,让医疗实体抽取任务的研发从“重复造轮子”转变为“专注业务优化”。
运行环境要求
- 非必需,但推荐使用 NVIDIA GPU 以加速训练和解码(文中测试环境为 Nvidia GTX 1080)
- 未明确指定显存大小和 CUDA 版本,需与安装的 PyTorch 版本兼容
未说明

快速开始

NCRF++:开源神经序列标注工具包
- 1. 简介
- 2. 需求
- 3. 优势
- 4. 使用方法
- 5. 数据格式
- 6. 性能
- 7. 添加手工特征
- 8. 速度
- 9. N-best 解码
- 10. 复现论文结果与超参数调优
- 11. 报告问题或错误
- 12. 引用
- 13. 未来计划
- 13. 更新
简介
序列标注模型在许多自然语言处理任务中非常流行,例如命名实体识别(NER)、词性标注(POS)和分词等。当前最先进的序列标注模型大多采用带有输入词特征的CRF结构。LSTM(或双向LSTM)是序列标注任务中一种流行的基于深度学习的特征提取器。此外,由于计算速度更快,CNN也可以被使用。除此之外,单词内部的特征对于表示单词也很有用,这些特征可以通过字符级LSTM、字符级CNN结构或者人工定义的神经网络特征来捕捉。
NCRF++是一个基于PyTorch的框架,提供了灵活的输入特征和输出结构选择。使用NCRF++设计神经序列标注模型时,所有配置都可以通过一个配置文件完成,无需编写任何代码。NCRF++可以被视为CRF++的神经网络版本,而CRF++是一个著名的统计CRF框架。
该框架已被ACL 2018接受为演示论文。同时,使用NCRF++进行的详细实验报告和分析也被COLING 2018接受为最佳论文。
NCRF++支持在三个层次上对不同结构进行组合:字符序列表示、词序列表示和推理层。
- 字符序列表示:字符LSTM、字符GRU、字符CNN以及手工制作的词特征。
- 词序列表示:词LSTM、词GRU、词CNN。
- 推理层:Softmax、CRF。
欢迎给本仓库点个赞!
需求
Python: 2 或 3
PyTorch: 1.0
优势
- 完全可配置:所有神经网络结构均可通过配置文件设置。
- 最先进的系统性能:基于NCRF++构建的模型能够达到与当前最先进模型相当甚至更好的效果。
- 特征灵活:用户可以自定义特征及预训练的特征嵌入。
- 运行速度快:NCRF++采用完全批处理操作,在GPU的帮助下系统效率极高(训练速度超过1000句/秒,解码速度超过2000句/秒)。
- N-best 输出:NCRF++支持
nbest解码(并附带相应的概率)。
使用方法
NCRF++支持通过配置文件设计神经网络结构。程序有两种运行模式:训练和解码。(本仓库已包含示例配置和数据)
在训练模式下:
python main.py --config demo.train.config
在解码模式下:
python main.py --config demo.decode.config
配置文件控制着网络结构、输入输出、训练设置以及超参数。
详细配置及说明请参阅此处。
NCRF++的设计分为三层(如下所示):字符序列层、词序列层和推理层。借助配置文件,大多数最先进的模型都可以轻松复现,且无需编写代码。另一方面,用户也可以通过设计自己的模块来扩展每一层(例如,他们可能希望设计除CNN/LSTM/GRU之外的其他神经网络结构)。我们分层的设计使得模块扩展变得十分方便,模块扩展的说明请参阅此处。

数据格式
- 您可以参考sample_data中的数据格式。
- NCRF++支持BIO和BIOES(BMES)两种标签体系。
- 请注意,IOB格式(与BIO不同)目前不被支持,因为这种标签体系较为老旧,且表现不如其他体系好Reimers and Gurevych, 2017。
- 这三种标签体系之间的区别已在该论文中解释过。
- 我编写了一个脚本,用于在IOB/BIO/BIOES之间转换标签体系。欢迎大家试用。
性能
在CONLL 2003英语NER任务上的结果与具有相同结构的SOTA结果相比,要么更好,要么相当。
CharLSTM+WordLSTM+CRF:91.20 vs 90.94,出自Lample .etc, NAACL16;
CharCNN+WordLSTM+CRF:91.35 vs 91.21,出自Ma .etc, ACL16。
默认情况下,LSTM为双向LSTM。
| 编号 | 模型 | 无字符特征 | CharLSTM | CharCNN |
|---|---|---|---|---|
| 1 | WordLSTM | 88.57 | 90.84 | 90.73 |
| 2 | WordLSTM+CRF | 89.45 | 91.20 | 91.35 |
| 3 | WordCNN | 88.56 | 90.46 | 90.30 |
| 4 | WordCNN+CRF | 88.90 | 90.70 | 90.43 |
我们在统计实验条件下,对十二种神经序列标注模型({charLSTM, charCNN, 无} x {wordLSTM, wordCNN} x {softmax, CRF})在三个基准数据集(POS、Chunking、NER)上进行了比较。详细结果及对比分析请参阅我们的COLING 2018论文《神经序列标注中的设计挑战与误解》Design Challenges and Misconceptions in Neural Sequence Labeling。
添加手工特征
NCRF++ 集成了几种当前最先进的神经网络字符序列特征提取器:CNN(Ma 等,ACL16)、LSTM(Lample 等,NAACL16)和 GRU(Yang 等,ICLR17)。此外,手工特征在序列标注任务中也被证明非常重要。NCRF++ 允许用户设计自己的特征,例如大小写、词性标签或其他任何特征(上图中的灰色圆圈)。用户可以通过配置文件来设置这些自定义特征(特征嵌入维度、预训练的特征嵌入等)。示例输入数据格式见 train.cappos.bmes,其中包含两个人工定义的特征 [POS] 和 [Cap]。([POS] 和 [Cap] 只是示例,您可以为特征命名任意名称,只需遵循 [xx] 的格式,并在配置文件中使用相同的名称进行配置。)
用户可以在配置文件中通过以下方式配置每个特征:
feature=[POS] emb_size=20 emb_dir=%your_pretrained_POS_embedding
feature=[Cap] emb_size=20 emb_dir=%your_pretrained_Cap_embedding
未提供预训练嵌入的特征将被随机初始化。
速度
NCRF++ 使用完全批处理计算实现,因此在模型训练和解码方面都非常高效。借助 GPU(Nvidia GTX 1080)和较大的批量大小,使用 NCRF++ 构建的 LSTMCRF 模型在训练和解码时分别可以达到 1000 句子/秒和 2000 句子/秒的速度。

N 最优解码
传统的 CRF 结构只解码概率最大的一条标签序列(即 1-best 输出)。而 NCRF++ 则可以提供多种选择,解码出前 n 个概率最高的标签序列(即 n-best 输出)。这种 n-best 解码功能已经被一些流行的 统计 CRF 框架所支持。然而,据我们所知,NCRF++ 是首个也是唯一一个支持 神经 CRF 模型 n-best 解码的工具包。
在我们的实现中,当 nbest=10 时,基于 NCRF++ 构建的 CharCNN+WordLSTM+CRF 模型在 CoNLL 2003 NER 任务上可以获得 97.47% 的 oracle F1 值(nbest=1 时 F1=91.35%)。

复现论文结果与超参数调优
要复现我们 COLING 2018 论文中的结果,您只需将配置文件 demo.train.config 中的 iteration=1 改为 iteration=100,并在该配置文件中配置好您的文件目录即可。默认配置文件描述的是 Char CNN + Word LSTM + CRF 模型,您可以通过相应地修改配置来构建自己的模型。此演示配置文件中的参数与我们论文中的参数一致。(请注意,与 Word CNN 相关的模型需要略微不同的参数,详细信息请参阅我们的 COLING 论文。)
如果您想在新的任务或数据集上使用该框架,这里有一些由 @Victor0118 提供的 调优技巧。
报告问题或故障
如果您想报告问题或提出疑问,请在必要时附上以下材料。有了这些信息,我可以更快更准确地为您提供讨论和建议。
日志文件配置文件样本数据
引用
如果您在论文中使用了 NCRF++,请引用我们的 ACL 演示论文:
@inproceedings{yang2018ncrf,
title={NCRF++: 一个开源的神经序列标注工具包},
author={Yang, Jie and Zhang, Yue},
booktitle={第56届计算语言学协会年会论文集},
Url = {http://aclweb.org/anthology/P18-4013},
year={2018}
}
如果您使用了 NCRF++ 的实验结果和分析,请引用我们的 COLING 论文:
@inproceedings{yang2018design,
title={神经序列标注中的设计挑战与误解},
author={Yang, Jie and Liang, Shuailong and Zhang, Yue},
booktitle={第27届国际计算语言学会议 (COLING) 论文集},
Url = {http://aclweb.org/anthology/C18-1327},
year={2018}
}
未来计划
- 文档分类(正在进行中)
- 支持 API 使用
- 将训练好的模型上传至分词/词性标注/命名实体识别平台
- 启用加载预训练的 ELMo 参数功能
- 添加 BERT 特征提取层
更新
- 2018年12月17日,NCRF++ v0.2,支持 PyTorch 1.0
- 2018年3月30日,NCRF++ v0.1,初始版本
- 2018年1月6日,添加结果对比。
- 2018年1月2日,支持字符特征选择。
- 2017年12月6日,初始版本
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
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 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器