HanLP
Описание
Языки
- Python79,5%
- Jupyter Notebook19,1%
- Java1,4%
HanLP: Han Language Processing
English | 日本語 | 文档 | 论文 | 论坛 | docker | ▶️在线运行
面向生产环境的多语种自然语言处理工具包,基于PyTorch和TensorFlow 2.x双引擎,目标是普及落地最前沿的NLP技术。HanLP具备功能完善、精度准确、性能高效、语料时新、架构清晰、可自定义的特点。
借助世界上最大的多语种语料库,HanLP2.1支持包括简繁中英日俄法德在内的130种语言上的10种联合任务以及多种单任务。HanLP预训练了十几种任务上的数十个模型并且正在持续迭代语料库与模型:
| 功能 | RESTful | 多任务 | 单任务 | 模型 | 标注标准 |
|---|---|---|---|---|---|
| 分词 | 教程 | 教程 | 教程 | tok | 粗分、细分 |
| 词性标注 | 教程 | 教程 | 教程 | pos | CTB、PKU、863 |
| 命名实体识别 | 教程 | 教程 | 教程 | ner | PKU、MSRA、OntoNotes |
| 依存句法分析 | 教程 | 教程 | 教程 | dep | SD、UD、PMT |
| 成分句法分析 | 教程 | 教程 | 教程 | con | Chinese Tree Bank |
| 语义依存分析 | 教程 | 教程 | 教程 | sdp | CSDP |
| 语义角色标注 | 教程 | 教程 | 教程 | srl | Chinese Proposition Bank |
| 抽象意义表示 | 教程 | 暂无 | 教程 | amr | CAMR |
| 指代消解 | 教程 | 暂无 | 暂无 | 暂无 | OntoNotes |
| 语义文本相似度 | 教程 | 暂无 | 教程 | sts | 暂无 |
| 文本风格转换 | 教程 | 暂无 | 暂无 | 暂无 | 暂无 |
| 关键词短语提取 | 教程 | 暂无 | 暂无 | 暂无 | 暂无 |
| 抽取式自动摘要 | 教程 | 暂无 | 暂无 | 暂无 | 暂无 |
| 生成式自动摘要 | 教程 | 暂无 | 暂无 | 暂无 | 暂无 |
| 文本语法纠错 | 教程 | 暂无 | 暂无 | 暂无 | 暂无 |
| 文本分类 | 教程 | 暂无 | 暂无 | 暂无 | 暂无 |
| 情感分析 | 教程 | 暂无 | 暂无 | 暂无 | |
| 语种检测 | 教程 | 暂无 | 教程 | 暂无 | ISO 639-1编码 |
量体裁衣,HanLP提供RESTful和native两种API,分别面向轻量级和海量级两种场景。无论何种API何种语言,HanLP接口在语义上保持一致,在代码上坚持开源。如果您在研究中使用了HanLP,请引用我们的EMNLP论文。
轻量级RESTful API
仅数KB,适合敏捷开发、移动APP等场景。简单易用,无需GPU配环境,秒速安装。语料更多、模型更大、精度更高,强烈推荐。服务器GPU算力有限,匿名用户配额较少,建议申请免费公益API秘钥。
Python
创建客户端,填入服务器地址和秘钥:
Golang
安装 ,创建客户端,填入服务器地址和秘钥:
Java
在中添加依赖:
创建客户端,填入服务器地址和秘钥:
快速上手
无论何种开发语言,调用接口,传入一篇文章,得到HanLP精准的分析结果。
更多功能包括语义相似度、风格转换、指代消解等,请参考文档和测试用例。
海量级native API
依赖PyTorch、TensorFlow等深度学习技术,适合专业NLP工程师、研究者以及本地海量数据场景。要求Python 3.6至3.10,支持Windows,推荐*nix。可以在CPU上运行,推荐GPU/TPU。安装PyTorch版:
- HanLP每次发布都通过了Linux、macOS和Windows上Python3.6至3.10的单元测试,不存在安装问题。
HanLP发布的模型分为多任务和单任务两种,多任务速度快省显存,单任务精度高更灵活。
多任务模型
HanLP的工作流程为加载模型然后将其当作函数调用,例如下列联合多任务模型:
Native API的输入单位为句子,需使用多语种分句模型或基于规则的分句函数先行分句。RESTful和native两种API的语义设计完全一致,用户可以无缝互换。简洁的接口也支持灵活的参数,常用的技巧有:
- 灵活的
任务调度,任务越少,速度越快,详见教程。在内存有限的场景下,用户还可以删除不需要的任务达到模型瘦身的效果。tasks - 高效的trie树自定义词典,以及强制、合并、校正3种规则,请参考demo和文档。规则系统的效果将无缝应用到后续统计模型,从而快速适应新领域。
单任务模型
根据我们的最新研究,多任务学习的优势在于速度和显存,然而精度往往不如单任务模型。所以,HanLP预训练了许多单任务模型并设计了优雅的流水线模式将其组装起来。
输出格式
无论何种API何种开发语言何种自然语言,HanLP的输出统一为格式兼容的:
特别地,Python RESTful和native API支持基于等宽字体的可视化,能够直接将语言学结构在控制台内可视化出来:
关于标注集含义,请参考《语言学标注规范》及《格式规范》。我们购买、标注或采用了世界上量级最大、种类最多的语料库用于联合多语种多任务学习,所以HanLP的标注集也是覆盖面最广的。
训练你自己的领域模型
写深度学习模型一点都不难,难的是复现较高的准确率。下列代码展示了如何在sighan2005 PKU语料库上花6分钟训练一个超越学术界state-of-the-art的中文分词模型。
其中,由于指定了随机数种子,结果一定是。不同于那些虚假宣传的学术论文或商业项目,HanLP保证所有结果可复现。如果你有任何质疑,我们将当作最高优先级的致命性bug第一时间排查问题。
请参考demo了解更多训练脚本。
性能
| lang | corpora | model | tok | pos | ner | dep | con | srl | sdp | lem | fea | amr | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fine | coarse | ctb | pku | 863 | ud | pku | msra | ontonotes | SemEval16 | DM | PAS | PSD | |||||||||
| mul | UD2.7 OntoNotes5 | small | 98.62 | - | - | - | - | 93.23 | - | - | 74.42 | 79.10 | 76.85 | 70.63 | - | 91.19 | 93.67 | 85.34 | 87.71 | 84.51 | - |
| base | 98.97 | - | - | - | - | 90.32 | - | - | 80.32 | 78.74 | 71.23 | 73.63 | - | 92.60 | 96.04 | 81.19 | 85.08 | 82.13 | - | ||
| zh | open | small | 97.25 | - | 96.66 | - | - | - | - | - | 95.00 | 84.57 | 87.62 | 73.40 | 84.57 | - | - | - | - | - | - |
| base | 97.50 | - | 97.07 | - | - | - | - | - | 96.04 | 87.11 | 89.84 | 77.78 | 87.11 | - | - | - | - | - | - | ||
| close | small | 96.70 | 95.93 | 96.87 | 97.56 | 95.05 | - | 96.22 | 95.74 | 76.79 | 84.44 | 88.13 | 75.81 | 74.28 | - | - | - | - | - | - | |
| base | 97.52 | 96.44 | 96.99 | 97.59 | 95.29 | - | 96.48 | 95.72 | 77.77 | 85.29 | 88.57 | 76.52 | 73.76 | - | - | - | - | - | - | ||
| ernie | 96.95 | 97.29 | 96.76 | 97.64 | 95.22 | - | 97.31 | 96.47 | 77.95 | 85.67 | 89.17 | 78.51 | 74.10 | - | - | - | - | - | - | ||
HanLP采用的数据预处理与拆分比例与流行方法未必相同,比如HanLP采用了完整版的MSRA命名实体识别语料,而非大众使用的阉割版;HanLP使用了语法覆盖更广的Stanford Dependencies标准,而非学术界沿用的Zhang and Clark (2008)标准;HanLP提出了均匀分割CTB的方法,而不采用学术界不均匀且遗漏了51个黄金文件的方法。HanLP开源了一整套语料预处理脚本与相应语料库,力图推动中文NLP的透明化。
总之,HanLP只做我们认为正确、先进的事情,而不一定是流行、权威的事情。
引用
如果你在研究中使用了HanLP,请按如下格式引用:
License
源代码
HanLP源代码的授权协议为 Apache License 2.0,可免费用做商业用途。请在产品说明中附加HanLP的链接和授权协议。HanLP受版权法保护,侵权必究。
自然语义(青岛)科技有限公司
HanLP从v1.7版起独立运作,由自然语义(青岛)科技有限公司作为项目主体,主导后续版本的开发,并拥有后续版本的版权。
上海林原公司
HanLP 早期得到了上海林原公司的大力支持,并拥有1.28及前序版本的版权,相关版本也曾在上海林原公司网站发布。
预训练模型
机器学习模型的授权在法律上没有定论,但本着尊重开源语料库原始授权的精神,如不特别说明,HanLP的多语种模型授权沿用CC BY-NC-SA 4.0,中文模型授权为仅供研究与教学使用。
