NCRFpp

GitHub
1.9k 441 简单 1 次阅读 2周前Apache-2.0图像视频语言模型音频开发框架
AI 解读 由 AI 自动生成,仅供参考

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 推断能力,让医疗实体抽取任务的研发从“重复造轮子”转变为“专注业务优化”。

运行环境要求

GPU
  • 非必需,但推荐使用 NVIDIA GPU 以加速训练和解码(文中测试环境为 Nvidia GTX 1080)
  • 未明确指定显存大小和 CUDA 版本,需与安装的 PyTorch 版本兼容
内存

未说明

依赖
notes该工具是一个基于配置文件的神经序列标注框架,无需修改代码即可调整模型结构。支持字符级(LSTM/GRU/CNN)和词级特征提取,以及 Softmax 或 CRF 推断层。若使用 PyTorch 0.3 需切换至特定分支。数据格式支持 BIO 和 BIOES,不支持旧的 IOB 格式。
python2 或 3
PyTorch>=1.0
NCRFpp hero image

快速开始

NCRF++ Logo

NCRF++:开源神经序列标注工具包

简介

序列标注模型在许多自然语言处理任务中非常流行,例如命名实体识别(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 

兼容PyTorch 0.3的版本请见这里。

优势

  • 完全可配置:所有神经网络结构均可通过配置文件设置。
  • 最先进的系统性能:基于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之外的其他神经网络结构)。我们分层的设计使得模块扩展变得十分方便,模块扩展的说明请参阅此处

alt text

数据格式

  • 您可以参考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 句子/秒的速度。

alt text

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%)。

alt text

复现论文结果与超参数调优

要复现我们 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),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

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 真正成长为懂上

159.3k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架