标签归档:中文词性标注

百度 LAC 2.0 极速体验,这是一个值得拥有的中文词法分析工具

关于中文词法分析(中文分词、词性标注、命名实体识别)相关的工具,我们在之前已经多次提到过百度LAChttps://github.com/baidu/lac),除了在易用性上稍弱外,其他方面,特别是NER在横向对比中还是很亮眼的。最近百度NLP发布了LAC2.0:开源!我知道你不知道,百度开源词法LAC 2.0帮你更懂中文,看完文章的第一感受就是易用性大大加强了,之前需要通过PaddleNLP或者PaddleHub调用lac,现在 "pip install lac" 后即可直接调用,相当方便。所以花了一点时间,把 LAC2.0 单独作为一个接口部署在AINLP公众号的自然语言处理工具测试平台了,感兴趣的同学可以关注AINLP公众号,通过公众号对话测试,输入"LAC 中文文本"直接获取百度LAC的中文文词、词性标注、NER识别结果:

关于百度LAC,首先看一下官方主页的介绍:

LAC全称Lexical Analysis of Chinese,是百度自然语言处理部研发的一款联合的词法分析工具,实现中文分词、词性标注、专名识别等功能。该工具具有以下特点与优势:

效果好:通过深度学习模型联合学习分词、词性标注、专名识别任务,整体效果F1值超过0.91,词性标注F1值超过0.94,专名识别F1值超过0.85,效果业内领先。
效率高:精简模型参数,结合Paddle预测库的性能优化,CPU单线程性能达800QPS,效率业内领先。
可定制:实现简单可控的干预机制,精准匹配用户词典对模型进行干预。词典支持长片段形式,使得干预更为精准。
调用便捷:支持一键安装,同时提供了Python、Java和C++调用接口与调用示例,实现快速调用和集成。
支持移动端: 定制超轻量级模型,体积仅为2M,主流千元手机单线程性能达200QPS,满足大多数移动端应用的需求,同等体积量级效果业内领先。

LAC 2.0 的使用还是很方便的,官方文档很清晰,可以直接参考,以下是在 Ubuntu 16.04, Python 3.6.8 环境下安装测试,这里是在 virtualenv 虚拟环境下通过 pip install lac 安装,安装完成后可以在命令行中直接输入lac进行体验:

(venv) textminer@textminer:~/nlp_tools/baidu_lac$ lac
我爱自然语言处理
我/r 爱/v 自然语言处理/nz
百度LAC是一个中文词法分析工具
百度/ORG LAC/nz 是/v 一个/m 中文/nz 词法/n 分析/vn 工具/n
习近平致信祝贺哈尔滨工业大学建校100周年
习近平/PER 致信/v 祝贺/v 哈尔滨工业大学/ORG 建校/v 100周年/m
新华社北京67日电  中共中央总书记、国家主席、中央军委主席习近平7日致信祝贺哈尔滨工业大学建校100周年,向全校师生员工和校友致以热烈的祝贺和诚挚的问候。
新华社/ORG 北京/LOC 67日/TIME 电/n  /w  /w 中共中央/ORG 总书记/n 、/w 国家主席/n 、/w 中央军委/ORG 主席/n 习近平/PER 7日/TIME 致信/v 祝贺/v 哈尔滨工业大学/ORG 建校/v 100周年/m ,/w 向/p 全校/n 师生/n 员工/n 和/c 校友/n 致以/v 热烈/a 的/u 祝贺/vn 和/c 诚挚/a 的/u 问候/vn 。/w

如果只需要测试中文分词结果,输入'lac --segonly'即可。LAC的代码调用也很方便:

(venv) textminer@textminer:~/nlp_tools/baidu_lac$ ipython
Python 3.6.8 (default, May  7 2019, 14:58:50) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.15.0 -- An enhanced Interactive Python. Type '?' for help.
 
In [1]: from LAC import LAC                                                                            
 
# 如果只需要中文分词功能,设置'seg'模式,加载中文分词模型
In [2]: lac = LAC(mode='seg')                                                                          
 
# 单个样本调用
In [3]: text = '我爱自然语言处理'                                                                      
 
In [4]: result = lac.run(text)                                                                         
 
In [5]: print(result)                                                                                  
['我', '爱', '自然语言处理']
 
# 批量样本调用
In [6]: texts = ['我爱自然语言处理', '百度LAC是一个不错的中文词法分析工具', 'AINLP@我爱自然语言处理']  
 
In [7]: result = lac.run(texts)                                                                        
 
In [8]: print(result)                                                                                 
[['我', '爱', '自然语言处理'], ['百度', 'LAC', '是', '一个', '不错', '的', '中文', '词', '法', '分析', '工具'], ['AINLP', '@', '我', '爱', '自然语言处理']]

如果需要使用LAC的词性标注与命名实体识别功能,可以调用的时候设置为'lac'模式,加载LAC模型:

In [11]: lac = LAC(mode='lac')                                                                         
 
In [12]: text = '我爱自然语言处理'                                                                     
 
In [13]: result = lac.run(text)                                                                        
 
In [14]: print(result)                                                                                 
[['我', '爱', '自然语言处理'], ['r', 'v', 'nz']]
 
In [15]: texts = ['我爱哈尔滨工业大学', '2020年6月7日哈工大迎来百年校庆']                              
 
In [16]: result = lac.run(texts)                                                                       
 
In [17]: print(result)                                                                                 
[[['我', '爱', '哈尔滨工业大学'], ['r', 'v', 'ORG']], [['2020年6月7日', '哈工大', '迎来', '百年', '校庆'], ['TIME', 'ORG', 'v', 'm', 'n']]]

这里的输出格式为(word_list, tags_list),对应每个句子的切词结果word_list和每个词的对应词性标注的tags_list,其所用的词性标记集如下,包括4个常用的专名类别(PER, LOC, ORG, TIME):

此外,LAC的词典定制化和模型增量训练功能也相当友好,这对于有在实际业务需求的团队就非常有帮助,可以基于自己的业务需求和领域词典数据定制一个面向自身业务的中文词法分析模型,以下以词典定制化为例,我们添加了一个自定义词典 mydict.txt, 内容如下:

锦江石材/ORG
正式成立

以下是加载自定义词典前后的结果对比:

In [24]: text = "锦江石材正式成立了"                                                                   
 
In [25]: result = lac.run(text)                                                                        
# 没有干预的结果
In [26]: print(result)                                                                                 
[['锦江', '石材', '正式', '成立', '了'], ['LOC', 'n', 'ad', 'v', 'xc']]
 
In [27]: lac.load_customization('mydict.txt')                                                          
 
In [28]: result = lac.run(text)                                                                        
 
# 干预后的结果
In [29]: print(result)                                                                                 
[['锦江石材', '正式成立', '了'], ['ORG', 'v', 'xc']]

至于模型增量训练,留给感兴趣的同学自己尝试了,这个功能很有用,可以参考LAC官方文档说明,很清晰。

最后需要说明一下本文主要参考了百度LAC的官方文档:
https://github.com/baidu/lac

关于LAC2.0的更详细介绍,可以参考:
开源!我知道你不知道,百度开源词法LAC 2.0帮你更懂中文

我们之前写得三篇关于百度NLP工具的相关文章,也可以对比参考和测试LAC1.x版本:

百度深度学习中文词法分析工具LAC试用之旅
来,试试百度的深度学习情感分析工具
中文命名实体识别工具(NER)哪家强?

八款中文词性标注工具使用及在线测试

结束了中文分词工具的安装、使用及在线测试,开启中文词性标注在线测试之旅,一般来说,中文分词工具大多数都附带词性标注功能的,这里测试了之前在AINLP公众号上线的8款中文分词模块或者工具,发现它们都是支持中文词性标注的,这里面唯一的区别,就是各自用的词性标注集可能有不同:

以下逐一介绍这八个工具的中文词性标注功能的使用方法,至于安装,这里简要介绍,或者可以参考之前这篇文章:Python中文分词工具大合集:安装、使用和测试,以下是在Ubuntu16.04 & Python3.x的环境下安装及测试。
继续阅读

Mecab安装过程中的一些坑

先说一点题外话,最近发现 Linode 因为庆祝13周年活动将所有的Plan加了一倍,又来了一次加量不加价,这一下子和别的产品拉开了差距,可惜目前Linode日本节点并不参加活动,否则52nlp目前所用的这台 Linode 主机性能就可以翻倍了。不过还是搞了一台 Linode 8GB(8G内存,4核,96G SSD硬盘容量) 的VPS套餐(40$/mo),选择了美国西部的 Fremont 节点,据说国内连接速度很不错。在上面选择了64位的Ubuntu14.04 版本,但是在这个环境下安装Mecab的过程中接连踩了几个坑,所以记录一下。

==============================================================================
Update: 2017.03.21

近期又试了一下Ubuntu上基于apt-get的安装方式,非常方便,如果不想踩下面源代码编译安装的坑,推荐这种方式,参考自:https://gist.github.com/YoshihitoAso/9048005

$ sudo apt-get install mecab libmecab-dev mecab-ipadic
$ sudo apt-get install mecab-ipadic-utf8
$ sudo apt-get install python-mecab

注意其中mecab-ipadic 和 mecab-ipadic-utf8 是日文词典和模型,可以选择安装或者不安装,基于需求而定。剩下的用法和之前的一样,选定一个中文词典和模型,使用即可。

==============================================================================

这里曾写过“Mecab中文分词”系列文章,也在github上发布过一个中文分词项目 MeCab-Chinese:Chinese morphological analysis with Word Segment and POS Tagging data for MeCab ,但是这个过程中没有怎么写到Mecab安装的问题,因为之前觉得rickjin的这篇《日文分词器 Mecab 文档》应该足够参考,自己当时也在Mac OS和Ubuntu环境下安装成功并测试,印象貌似不是太复杂。这次在Ubuntu 14.04的环境安装的时候,遇到了几个小坑,记录一下,做个备忘,仅供参考。
继续阅读

用MeCab打造一套实用的中文分词系统(四):MeCab增量更新

最近在处理NLPJob的一些数据,发现之前训练的Mecab中文分词工具包还有一些问题,所以想到了为NLPJob定制一个MeCab中文分词器,最简单的方法就是整理一批相关的词条,可以通过词条追加的方法加到原有的Mecab中文分词词典中去,这个可以参考《日文分词器Mecab文档》中介绍的“词条追加”方法,既可以放到系统词典中,也可以放到用户词典中,很方便。不过这个还不是最佳方案,之前有用户在《用MeCab打造一套实用的中文分词系统》中留言:

你好, 我在win7上训练的时候mecab-cost-train的时候会崩溃,请问下我能每次只训练一小部分,然后最后一起发布嘛?

google了一下,发现MeCab的作者Taku Kudo在google plus上给了一个增量更新的方案:

https://plus.google.com/107334123935896432800/posts/3g83gkBoSYE

当然这篇文章是用日文写得,不过如果熟悉Mecab的相关脚本,很容易看懂。增量更新除了可以解决在小内存机器上分批训练模型外,也可以很容易在一个已有的基准分词模型上定制特定领域的分词器,既更新词典,也更新模型,这才是我理想中NLPJob中文分词器的定制之路。
继续阅读

用MeCab打造一套实用的中文分词系统(三):MeCab-Chinese

我在Github上发布了一个MeCab中文分词项目: MeCab-Chinese , 目的是提供一个用于中文分词和词性标注的MeCab词典和模型数据,类似MeCab日文IPA词典(mecab-ipadic),并且提供一些我自己用到的特征模板和脚本,方便大家从源头开始训练一个MeCab中文分词系统。

自从上次在愚人节的时候发布了一个mecab中文词典和数据模型之后(《用MeCab打造一套实用的中文分词系统(二)》), 收到了一些反馈,而这些反馈又促使我深入的review了一下mecab,重新设计特征及特征模板,加入了一些新的词典数据,重新训练模型,感兴趣的同学可以先试试这个0.2版本: mecab-chinesedic-binary (链接: http://pan.baidu.com/s/1gdxnvFX 密码: kq9g)
注:目前所有发布的版本均默认utf-8编码,并且在Mac OS和Linux Ubuntu下测试有效,windows没有测试,感兴趣的同学可自行测试)

了解和安装mecab仍请参考:
日文分词器 Mecab 文档
用MeCab打造一套实用的中文分词系统

这里再补充一点,由于google code废弃的缘故,MeCab这个项目已经搬迁至github,但是一些资源反而不如之前那么好找了,可参考两个MeCab作者维护的页面:
MeCab日文文档: http://taku910.github.io/mecab/
MeCab github 页面:https://github.com/taku910/mecab

MeCab目前最新的版本是2013-02-18更新的MeCab 0.996,我在Mac OS和Linux Ubuntu下用的是这个版本,在MeCab-Chinese下,做了一个备份,感兴趣的同学可以从这里下载: MeCab 0.996
继续阅读

用MeCab打造一套实用的中文分词系统(二)

虽然是愚人节,但是这个不是愚人节玩笑,最近花了一些时间在MeCab身上,越发喜欢这个来自岛国的开源分词系统,今天花了一些时间训练了一个更适用的模型和词典,打包提供给大家使用,因为数据和词典涉及到一些版权问题,所以打包文件里只是mecab用于发布的二进制词典和模型文件,目前在mac os和linux ubuntu系统下测试无误,其他系统请自行测试使用:

链接: http://pan.baidu.com/s/1sjBfdXr 密码: 8udf

了解和安装mecab请参考:
日文分词器 Mecab 文档
用MeCab打造一套实用的中文分词系统

使用前请按上述文档安装mecab,下载这个中文分词模型和词典之后解压,解压后得到一个mecab-chinese-data目录,执行:

mecab -d mecab-chinese-data
扬帆远东做与中国合作的先行
扬帆 v,*,*,*,*,*,扬帆,*,*
远东 ns,*,*,*,*,*,远东,*,*
做 v,*,*,*,*,*,做,*,*
与 p,*,*,*,*,*,与,*,*
中国 ns,*,*,*,*,*,中国,*,*
合作 v,*,*,*,*,*,合作,*,*
的 u,*,*,*,*,*,的,*,*
先行 vn,*,*,*,*,*,先行,*,*
EOS

上述第二列提供了词性标注结果。

如果想得到单行的分词结果,可以这样执行:

mecab -d ./mecab-chinese-data/ -O wakati
扬帆远东做与中国合作的先行
扬帆 远东 做 与 中国 合作 的 先行

如果想直接对文件分词,可以这样执行:

mecab -d ./mecab-chinese-data/ INPUT -o OUTPUT

具体可以参考上述两个文档,另外我在mac下测试了一下中文维基百科语料的切分速度,大概700多M的语料,不到90秒切分完毕,大概7M/s的切分速度完全达到了工业届的使用标准。另外Mecab还支持Nbest输出,多种输出格式,全切分模式,系统词典和用户词典定制等等,同时通过SWIG提供了perl, ruby, python, java的调用接口,非常方便。

以下是在backoff2005 人民日报语料库上的测试结果:

=== SUMMARY:
=== TOTAL INSERTIONS: 3803
=== TOTAL DELETIONS: 1981
=== TOTAL SUBSTITUTIONS: 5004
=== TOTAL NCHANGE: 10788
=== TOTAL TRUE WORD COUNT: 104372
=== TOTAL TEST WORD COUNT: 106194
=== TOTAL TRUE WORDS RECALL: 0.933
=== TOTAL TEST WORDS PRECISION: 0.917
=== F MEASURE: 0.925
=== OOV Rate: 0.058
=== OOV Recall Rate: 0.482
=== IV Recall Rate: 0.961
### pku_test.result 3803 1981 5004 10788 104372 106194 0.933 0.917 0.925 0.058 0.482 0.961

召回率93.3%,准确率91.7%, F值为92.5%, 虽然还没有一个单纯针对这个测试语料比赛的分词结果好,但是测试了一些其他语料后觉得这个版本完全可以作为一个基准版本使用,另外mecab也提供了用户定制词典接口,方便用户按自己的需求定制使用。

最后提供一个demo仅供测试使用: 中文分词Demo

注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:http://www.52nlp.cn/用mecab打造一套实用的中文分词系统二