THULAC:一个高效的中文词法分析工具包

目录

  • 软件简介
  • 在线演示
  • 编译和安装
  • 使用方式
  • 与代表性分词软件的性能对比
  • 词性标记集
  • THULAC的不同配置
  • 获取链接
  • 注意事项
  • 历史
  • 开源协议
  • 相关论文
  • 作者
  • 常见问题
  • 致谢

软件简介

THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:

  1. 能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。

  2. 准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。

  3. 速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。

在线演示

THULAC在线演示平台thulac.thunlp.org/demo

编译和安装

  • C++版

      在当前路径下运行make会在当前目录下得到thulac和train_c(thulac需要模型的支持,需要将下载的模型放到当前目录下)
    
  • java版

      可直接按照分词程序命令格式运行可执行的jar包自行编译需要安装Gradle, 然后在项目根目录执行gradle build, 生成文件在build/libs下
    (thulac需要模型的支持,需要将下载的模型放到当前目录下)
    
  • python版(兼容python2.x和python3.x)

    1. 源代码下载

      将thulac文件放到目录下,通过 import thulac 来引用
      thulac需要模型的支持,需要将下载的模型放到thulac目录下。

    2. pip下载

      sudo pip install thulac
      通过 import thulac 来引用

使用方式

1.分词和词性标注程序

1.1.命令格式

  • C++版(接口调用参见1.5)

    • ./thulac [-t2s] [-seg_only] [-deli delimeter] [-user userword.txt] 从命令行输入输出
    • ./thulac [-t2s] [-seg_only] [-deli delimeter] [-user userword.txt] outputfile 利用重定向从文本文件输入输出(注意均为UTF8文本)
  • java版

    • java -jar THULAC_lite_java_run.jar [-t2s] [-seg_only] [-deli delimeter] [-user userword.txt] 从命令行输入输出
    • java -jar THULAC_lite_java_run.jar [-t2s] [-seg_only] [-deli delimeter] [-user userword.txt] -input input_file -output output_file 从文本文件输入输出(注意均为UTF8文本)
  • python版(兼容python2.x和python3.x)

    通过python程序import thulac,新建thulac.thulac(args)类,其中args为程序的参数。之后可以通过调用thulac.cut()进行单句分词。

    具体接口参数可查看python版接口参数

    代码示例

    代码示例1
    import thulac   thu1 = thulac.thulac()  #默认模式
    text = thu1.cut("我爱北京天安门", text=True)  #进行一句话分词
    print(text)

    代码示例2
    thu1 = thulac.thulac(seg_only=True)  #只进行分词,不进行词性标注
    thu1.cut_f("input.txt", "output.txt")  #对input.txt文件内容进行分词,输出到output.txt

1.2.通用参数(C++版、Java版)

-t2s                将句子从繁体转化为简体
-seg_only           只进行分词,不进行词性标注
-deli delimeter     设置词与词性间的分隔符,默认为下划线_
-filter             使用过滤器去除一些没有意义的词语,例如“可以”。
-user userword.txt  设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码(python版暂无)
-model_dir dir      设置模型文件所在文件夹,默认为models/

1.3.Java版特有的参数

-input input_file   设置从文件读入,默认为命令行输入
-output output_file 设置输出到文件中,默认为命令行输出

1.4.python版接口参数

  • thulac(user_dict=None, model_path=None, T2S=False, seg_only=False, filt=False)初始化程序,进行自定义设置

    user_dict           设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码
    T2S                 默认False, 是否将句子从繁体转化为简体
    seg_only            默认False, 时候只进行分词,不进行词性标注
    filt                默认False, 是否使用过滤器去除一些没有意义的词语,例如“可以”。
    model_path          设置模型文件所在文件夹,默认为models/

  • cut(文本, text=False) 对一句话进行分词

    text                默认为False, 是否返回文本,不返回文本则返回一个二维数组([[word, tag]..]),tag_only模式下tag为空字符。

  • cut_f(输入文件, 输出文件) 对文件进行分词

  • run() 命令行交互式分词(屏幕输入、屏幕输出)

1.5.C++版接口参数(需include "include/thulac.h")

  • 首先需要实例化THULAC类,然后可以调用以下接口:

    int init(const char* model_path = NULL, const char* user_path = NULL, int just_seg = 0, int t2s = 0, int ufilter = 0, char separator = '_');

    初始化程序,进行自定义设置

      user_path           设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码t2s                 默认False, 是否将句子从繁体转化为简体just_seg            默认False, 时候只进行分词,不进行词性标注ufilter             默认False, 是否使用过滤器去除一些没有意义的词语,例如“可以”。model_path          设置模型文件所在文件夹,默认为models/separator           默认为‘_’, 设置词与词性之间的分隔符
    

1.5.分词和词性标注模型的使用

THULAC需要分词和词性标注模型的支持,用户可以在下载列表中下载THULAC模型 Models_v1.zip,并放到THULAC的根目录即可,或者使用参数-model_dir dir指定模型的位置。

2.模型训练程序

THULAC工具包提供模型训练程序train_c,用户可以使用train_c训练获得THULAC的所需的模型。

2.1.命令格式

    ./train_c [-s separator] [-b bigram_threshold] [-i iteration] training_filename model_filename   使用training_filename为训练集,训练出来的模型名字为model_filename

2.2.参数意义

    -s              设置词与词性间的分隔符,默认为斜线/-b              设置二字串的阈值,默认为1-i              设置训练迭代的轮数,默认为15

2.3.训练集格式

我们使用默认的分隔符(斜线/)作为例子,训练集内容应为

    我/r 爱/vm 北京/ns 天安门/ns

类似的已经进行词性标注的句子。

若要训练出只分词的模型,使用默认的分隔符(斜线/)作为例子,训练集内容应为

    我/ 爱/ 北京/ 天安门/

类似的句子。

2.4.使用训练出的模型

将训练出来的模型覆盖原来models中的对应模型,之后执行分词程序即可使用训练出来的模型。

与代表性分词软件的性能对比

我们选择LTP-3.2.0 、ICTCLAS(2015版) 、jieba(C++版)等国内具代表性的分词软件与THULAC做性能比较。我们选择Windows作为测试环境,根据第二届国际汉语分词测评(The Second International Chinese Word Segmentation Bakeoff)发布的国际中文分词测评标准,对不同软件进行了速度和准确率测试。

在第二届国际汉语分词测评中,共有四家单位提供的测试语料(Academia Sinica、 City University 、Peking University 、Microsoft Research), 在评测提供的资源icwb2-data中包含了来自这四家单位的训练集(training)、测试集(testing), 以及根据各自分词标准而提供的相应测试集的标准答案(icwb2-data/scripts/gold).在icwb2-data/scripts目录下含有对分词进行自动评分的perl脚本score。

我们在统一测试环境下,对上述流行分词软件和THULAC进行了测试,使用的模型为各分词软件自带模型。THULAC使用的是随软件提供的简单模型Model_1。评测环境为 Intel Core i5 2.4 GHz 评测结果如下:

msr_test(560KB)

Algorithm Time Precision Recall F-Measure
LTP-3.2.0 3.21s 0.867 0.896 0.881
ICTCLAS(2015版) 0.55s 0.869 0.914 0.891
jieba(C++版) 0.26s 0.814 0.809 0.811
THULAC_lite 0.62s 0.877 0.899 0.888

pku_test(510KB)

Algorithm Time Precision Recall F-Measure
LTP-3.2.0 3.83s 0.960 0.947 0.953
ICTCLAS(2015版) 0.53s 0.939 0.944 0.941
jieba(C++版) 0.23s 0.850 0.784 0.816
THULAC_lite 0.51s 0.944 0.908 0.926

除了以上在标准测试集上的评测,我们也对各个分词工具在大数据上的速度进行了评测,结果如下:

CNKI_journal.txt(51 MB)

Algorithm Time Speed
LTP-3.2.0 348.624s 149.80KB/s
ICTCLAS(2015版) 106.461s 490.59KB/s
jieba(C++版) 22.558s 2314.89KB/s
THULAC_lite 42.625s 1221.05KB/s

词性标记集

通用标记集(适用于所有版本)

n/名词 np/人名 ns/地名 ni/机构名 nz/其它专名
m/数词 q/量词 mq/数量词 t/时间词 f/方位词 s/处所词
v/动词 a/形容词 d/副词 h/前接成分 k/后接成分 i/习语
j/简称 r/代词 c/连词 p/介词 u/助词 y/语气助词
e/叹词 o/拟声词 g/语素 w/标点 x/其它

特殊标记集(适用于lite_v1_2版)

为了方便在分词和词性标注后的过滤,在v1_2版本,我们增加了两种词性,如果需要可以下载使用。

vm/能愿动词 vd/趋向动词

THULAC的不同配置

  1. 我们随THULAC源代码附带了简单的分词模型Model_1,仅支持分词功能。该模型由人民日报分词语料库训练得到。

  2. 我们随THULAC源代码附带了分词和词性标注联合模型Model_2,支持同时分词和词性标注功能。该模型由人民日报分词和词性标注语料库训练得到。

  3. 我们还提供更复杂、完善和精确的分词和词性标注联合模型Model_3和分词词表。该模型是由多语料联合训练训练得到(语料包括来自多文体的标注文本和人民日报标注文本等)。由于模型较大,如有机构或个人需要,请填写“资源申请表.doc”,并发送至 thunlp@gmail.com ,通过审核后我们会将相关资源发送给联系人。

获取链接

THULAC工具包分成两个部分组成。第一部分为算法源代码部分,可以通过 网站上下载 或者 从github获取最新基础版代码 ,无需注册;第二部分为算法模型部分,THULAC需要分词和词性标注模型的支持,可以从 2.算法模型 注册后获得。

算法源代码lite版

Source Version Description Size Date Download
THULAC_lite lite版 THULAC_lite分词源代码(C++版) 799KB 2017-04-11 download
THULAC_lite分词源代码(python版) 44KB 2017-04-11
THULAC_lite分词源代码(java版) 588KB 2017-01-13
THULAC_lite分词java版可执行的jar包 55KB 2017-04-11
THULAC模型,包括分词模型和词性标注模型(lite版) 58.2MB 2016-01-10
v1_2 THULAC_lite_v1_2分词源代码(C++版) 799KB 2017-04-11 download
THULAC_lite_v1_2分词源代码(java版) 588KB 2017-01-13
THULAC_lite_v1_2分词java版可执行的jar包 55KB 2017-04-11
THULAC模型,包括分词模型和词性标注模型(v1_2) 58.3MB 2016-07-10

2.算法源代码lite版(github)

Source Description Link
THULAC_lite_C++ THULAC_lite分词源代码(C++版) link
THULAC_lite_Python THULAC_lite分词源代码(python版) link
THULAC_lite_Java THULAC_lite分词源代码(java版) link
THULAC_lite.So THULAC_lite分词源代码(So版) link

3.算法模型

Source Description Size Date Download
THULAC_lite_Model THULAC模型,包括分词模型和词性标注模型(lite版) 58.2MB 2016-01-10 download
THULAC_pro_c++_v1.zip THULAC模型,包括更复杂完善的分词和词性标注模型以及分词词表 162MB 2016-01-10 download

注意事项

该工具目前仅处理UTF8编码中文文本,之后会逐渐增加支持其他编码的功能,敬请期待。

历史

更新时间 更新内容
2017-01-17 在pip上发布THULAC分词python版本。
2016-10-10 增加THULAC分词so版本。
2016-03-31 增加THULAC分词python版本。
2016-01-20 增加THULAC分词Java版本。
2016-01-10 开源THULAC分词工具C++版本。

开源协议

  1. THULAC面向国内外大学、研究所、企业以及个人用于研究目的免费开放源代码。
  2. 如有机构或个人拟将THULAC用于商业目的,请发邮件至thunlp@gmail.com洽谈技术许可协议。
  3. 欢迎对该工具包提出任何宝贵意见和建议。请发邮件至thunlp@gmail.com。
  4. 如果您在THULAC基础上发表论文或取得科研成果,请您在发表论文和申报成果时声明“使用了清华大学THULAC”,并按如下格式引用:

    • 中文: 孙茂松, 陈新雄, 张开旭, 郭志芃, 刘知远. THULAC:一个高效的中文词法分析工具包. 2016.

    • 英文: Maosong Sun, Xinxiong Chen, Kaixu Zhang, Zhipeng Guo, Zhiyuan Liu. THULAC: An Efficient Lexical Analyzer for Chinese. 2016.

相关论文

  • Zhongguo Li, Maosong Sun. Punctuation as Implicit Annotations for Chinese Word Segmentation. Computational Linguistics, vol. 35, no. 4, pp. 505-512, 2009.

作者

Maosong Sun (孙茂松,导师), Xinxiong Chen(陈新雄,博士生), Kaixu Zhang (张开旭,硕士生), Zhipeng Guo(郭志芃,本科生), Junhua Ma (马骏骅,访问学生), Zhiyuan Liu(刘知远,助理教授).

常见问题

1.THULAC工具包提供的模型是如何得到的?

THULAC工具包随包附带的分词模型Model_1以及分词和词性标注模型Model_2是由人民日报语料库训练得到的。这份语料库中包含已标注的字数约为一千二百万字。

同时,我们还提供更复杂、完善和精确的分词和词性标注联合模型Model_3和分词词表。该模型是由多语料联合训练训练得到(语料包括来自多文体的标注文本和人民日报标注文本等)。这份语料包含已标注的字数约为五千八百万字。由于模型较大,如有机构或个人需要,请填写“资源申请表.doc”,并发送至 thunlp@gmail.com ,通过审核后我们会将相关资源发送给联系人。

2.能否提供工具包所带的模型的训练原始语料(如人民日报语料库)?

THULAC工具包中所带的模型的训练原始语料都是需要授权获得的。如果需要原始分词语料,如人民日报语料库,请联系北京大学计算语言学研究所授权获取。

致谢

  • 感谢清华大学的本科生潘星宇对THULAC-Python工具的支持和帮助。
  • 感谢付超群带领的看盘宝团队对THULAC.so工具的支持和帮助。

使用者如有任何问题、建议和意见,欢迎发邮件至 thunlp@gmail.com 。

版权所有:清华大学自然语言处理与社会人文计算实验室
Copyright:Natural Language Processing and Computational Social Science Lab, Tsinghua University

THULAC:一个高效的中文词法分析工具包相关推荐

  1. THULAC:一个高效的中文词法分析工具包 清华孙茂松老师分享

    n/名词 np/人名 ns/地名 ni/机构名 nz/其它专名 m/数词 q/量词 mq/数量词 t/时间词 f/方位词 s/处所词 v/动词 vm/能愿动词 vd/趋向动词 a/形容词 d/副词 h ...

  2. pkuseg:一个多领域中文分词工具包

    pkuseg简单易用,支持细分领域分词,有效提升了分词准确度. 目录 主要亮点 编译和安装 各类分词工具包的性能对比 使用方式 相关论文 作者 常见问题及解答 主要亮点 pkuseg具有如下几个特点: ...

  3. 【NLP】pkuseg:一个多领域中文分词工具包

  4. 百度提出PADDLESEG:一个高效的图像分割开发工具

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...

  5. 准确率创新高,北大开源中文分词工具包 pkuseg

    北京大学近日开源了一个全新的中文分词工具包 pkuseg ,相比于现有的同类开源工具,pkuseg 大幅提高了分词的准确率. pkuseg 由北大语言计算与机器学习研究组研制推出,具备如下特性: 高分 ...

  6. 北大开源了 Python 中文分词工具包,准确度远超 Jieba

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 转载自量子位 "土地,快告诉俺老孙,俺的金箍棒在哪?" &qu ...

  7. 北大开源了中文分词工具包,准确度远超Jieba,提供三个预训练模型

    车栗子 发自 凹非寺 量子位 报道 | 公众号 QbitAI "土地,快告诉俺老孙,俺的金箍棒在哪?" "大圣,您的金箍,棒就棒在特别适合您的发型." 中文分词 ...

  8. python:中文词法分析(LAC)

    转自:https://github.com/baidu/lac 中文词法分析(LAC) 本项目依赖Paddle v0.14.0版本.如果您的Paddle安装版本低于此要求,请按照安装文档中的说明更新P ...

  9. dingdang robot:一个开源的中文智能音箱项目

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:潘伟洲 免责说明:本文介绍的 dingdang-robot 与公司的叮当助手没有任何关系. 这个项目其实来源于我生活中的一个需求:我每天 ...

最新文章

  1. MVC 使用自定义HtmlHelper截断文本内容
  2. 功能对等四个原则_佛山房屋加固工程需遵循的原则与步骤
  3. Hadoop之OutputFormat数据输出详解
  4. 《机器学习概论》习题答案
  5. vim 寄存器 操作_vim指令
  6. BNU44583——Star Trek: First Contact——————【01背包】
  7. Elastic-job 2.1.3 概述
  8. 2008-8-26~2008-9-4 出差报告
  9. html5通讯录模板,[应用模板]HTML5+Phonegap通讯录
  10. 查看路由器内宽带账号密码(D-link,TP-Link)
  11. python 微信图文消息接口_用Python实现微信公众号API素材库图文消息抓取
  12. C++开发斗地主(QT)第三篇之动画发牌与位置计算
  13. Ansys在高分屏电脑下的显示以及Fluent的图形显示界面黑屏问题
  14. 防止学生机退出电子教室软件的方法
  15. 番茄时间管理——规则
  16. 多巴胺所表达的prediction error信号
  17. 利用沪江小D做个词典小工具
  18. js中将中国标准时间格式、CST日期转换为yyyy-MM-dd HH:mm:ss格式总结
  19. 数据结构与算法——左程云06
  20. 【优化求解】基于蜘蛛猴算法求解单目标优化问题matlab代码

热门文章

  1. dparsf是什么_回顾:第五届DPABI/DPARSF特训营暨DPABISurf加强营
  2. 使用sklearn实现birch聚类分析
  3. ASP.NET验证控件合集 含代码演示
  4. 2021常见user_agent大全 用户浏览器ua(互联网项目自己整理)
  5. JavaScript的escape和encodeURI
  6. Java的学习道路(一)
  7. 使用Arduino与L298N(红板) 驱动直流电机
  8. nodeJS+mysql+连接池——连接池的创建和使用
  9. MySQL连接查询——连接查询的综合应用
  10. WeChat Reader