MiNLP-Tokenizer是小米AI实验室NLP团队自研的中文分词工具,基于深度学习序列标注模型实现,在公开测试集上取得了SOTA效果。其具备以下特点:
- 分词效果好:基于深度学习模型在大规模语料上进行训练,粗、细粒度在SIGHAN 2005 PKU测试集上的F1分别达到95.7%和96.3%[1]
- 轻量级模型:精简模型参数和结构,模型仅有20MB,在CPU(i7-6700 3.4GHz)环境下,分词速度可达到150KB/s
- 词典可定制:灵活、方便的干预机制,根据用户词典对模型结果进行干预
- 多粒度切分:提供粗、细粒度两种分词规范,满足各种场景需要
- 调用更便捷:一键快速安装,API简单易用
注1:我们结合公司应用场景,制定了粗、细粒度分词规范,并按照规范对PKU测试集重新进行了标注(由于测试集版权限制,未包含在本项目中)。
pip全自动安装:
pip install minlp-tokenizer
适用环境:Python 3.5~3.8,TensorFlow>=1.14
- 分词(逐句或者列表):
from minlptokenizer.tokenizer import MiNLPTokenizer
tokenizer = MiNLPTokenizer(granularity='fine') # fine:细粒度,coarse:粗粒度,默认为细粒度
print(tokenizer.cut('今天天气怎么样?')) # 单句分词
# ['今天','天气','怎么样']
print(tokenizer.cut(['今天天气怎么样', '小米的价值观是真诚与热爱'])) # 列表分词
# [['今天','天气','怎么样'],['小米','的','价值观','是','真诚','与','热爱']]
-
多进程分词: 开启多个进程并行分词,加快分词速度:
(1)由于开启进程需要额外的时间开销,适用于分词数量较大的情况,建议数量在10万+时启用多进程分词。
(2)请根据自身硬件和负载情况,选择合适的进程数量,进程数默认为1,即不启用多进程。
from minlptokenizer.tokenizer import MiNLPTokenizer
texts = ['小米的价值观是真诚与热爱'] * 2048
tokenizer = MiNLPTokenizer(granularity='fine') # fine:细粒度,coarse:粗粒度,默认为细粒度
result = tokenizer.cut(texts, n_jobs=4) # n_jobs:进程数,默认为1,即不启用多进程
- List添加/文件路径方式:
from minlptokenizer.tokenizer import MiNLPTokenizer
tokenizer = MiNLPTokenizer(file_or_list=['word1', 'word2'], granularity='fine') # 用户自定义干预词典传入
tokenizer = MiNLPTokenizer(file_or_list='/path/to/your/lexicon/file', granularity='coarse') # 构造函数的参数为用户词典路径
由于Windows和Linux对multi-processing的实现方法不同,Linux基于Fork实现多进程,Windows则是启动新进程。在Windows环境下使用多进程分词(n_jobs>1)时,请务必保证调用时在 if __name__=='__main__'之后(详情见:官方文档),例如:
from minlptokenizer.tokenizer import MiNLPTokenizer
# Windows 环境下使用多进程分词
if __name__ == '__main__':
texts = ['小米的价值观是真诚与热爱'] * 2048
tokenizer = MiNLPTokenizer(granularity='fine')
result = tokenizer.cut(texts, n_jobs=4) # n_jobs:进程数,默认为1,即不启用多进程
MiNLP是小米AI实验室NLP团队开发的小米自然语言处理平台,目前已经具备词法、句法、语义等数十个功能模块,在公司业务中得到了广泛应用。 第一阶段我们开源了MiNLP的中文分词功能,后续我们将陆续开源词性标注、命名实体识别、句法分析等功能,和开发者一起打造功能强大、效果领先的NLP工具集。
我们欢迎开发者向MiNLP-Tokenizer贡献代码,也欢迎提出各种Issue和反馈意见。 开发流程详见CONTRIBUTING.md。
感谢社区众多的开发者对MiNLP-Tokenizer提出的支持、意见、鼓励和建议。在此特别感谢以下开发者为MiNLP-Tokenizer分词工具贡献了PR:
- 2020.12.4 aseaday 贡献了有关多进程分词的代码,提升了分词速度。
如果您在学术成果中使用了MiNLP中文分词工具,请按如下格式引用:
- 中文:郭元凯, 史亮, 陈宇鹏, 孟二利, 王斌. MiNLP-Tokenizer:小米中文分词工具. 2020.
- 英文:Yuankai Guo, Liang Shi, Yupeng Chen, Erli Meng, Bin Wang. MiNLP-Tokenzier: XiaoMi Chinese Word Segmenter. 2020.