好吧,我也做了一回标题党...其实本文的分词系统是一个三层的神经网络模型,因此只是“浅度学习”,写深度学习是显得更有吸引力。NNCWS的意思是Neutral Network based Chinese Segment System,基于神经网络的中文分词系统,Python写的,目前完全公开,读者可以试用。

闲话多说 #

这个程序有什么特色?几乎没有!本文就是用神经网络结合字向量实现了一个ngrams形式(程序中使用了7-grams)的分词系统,没有像《【中文分词系列】 4. 基于双向LSTM的seq2seq字标注》那样使用了高端的模型,也没有像《【中文分词系列】 5. 基于语言模型的无监督分词》那样可以无监督训练,这里纯粹是一个有监督的简单模型,训练语料是2014年人民日报标注语料。

那这个程序的意义何在?两个字:轻便!目前的深度学习程序都相当庞大,要各种依赖库,这些库在某些平台,如Windows下安装还不一定容易;此外,参数量也可能异常庞大,以至于速度都成问题。因此,不少深度学习仅仅只是在实验室中玩玩罢了,最多也就发发论文,离真的生产应用还远得很。本程序尽量做了精简:字向量维度、模型规模都尽量缩减,最后把程序通过NumPy复现了。也就是说,我是通过Keras训练模型,然后得到模型的参数,然后用NumPy调用这些参数,最后得到的程序只需要Numpy就可以运行了。因此,程序的主要特点就是轻便!

当然,这种基于神经网络的分词系统,已经具有初步的语义理解的能力,主要体现为对歧义组合的切分还不错,以及对人名、地名等实体识别也有不错的效果。因此,在一般的情景还是值得一用的。由于是通过人民日报的语料训练的,因此对新闻领域的分词效果更好。

下载使用 #

GitHub地址:https://github.com/bojone/NNCWS

先安装程序依赖NumPy,然后运行

git clone https://github.com/bojone/NNCWS.git
cd NNCWS
python

然后就可以直接用了

from nncws import NNCWS
mycut = NNCWS()
s = u'作为一个小国的领袖,卡斯特罗必然无法跟毛泽东等而观之。但是,在卡斯特罗身上,毕竟折射出那个伟大时代的光辉。 今天,我们向卡斯特罗告别,要告别的 是那个伟大的时代,但是我们要留下的,是那个时代不朽的精神内核: ——对理想的坚定追求。 ——对国家民族独立的坚定信念。 ——不怕威胁的“硬骨头”精神!'
print ' '.join(mycut.cut_words(s))
s = u'2000年1月,李彦宏创建了百度。经过十多年的发展,百度已经发展成为全球第二大独立搜索引擎和最大的中文搜索引擎。百度 的成功,也使中国成为美国、俄罗斯和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。2005年,百度在美国纳斯达克成功 上市,并成为首家进入纳斯达克成分股的中国公司。百度已经成为中国最具价值的品牌之一。'
print ' '.join(mycut.cut_words(s))

得到

作为 一个 小国 的 领袖 , 卡斯特罗 必然 无法 跟 毛泽东 等 而 观 之 。 但是 , 在 卡斯特罗 身上 , 毕竟 折射 出 那个 伟大 时代 的 光辉 。 今天 , 我们 向 卡斯特罗 告别 , 要 告别 的 是 那个 伟大 的 时代 , 但是 我们 要 留下 的 , 是 那个 时代 不朽 的 精神 内核 : —— 对 理想 的 坚定 追求 。 —— 对 国家民族 独立 的 坚定 信念 。 —— 不怕 威胁 的 “ 硬骨头 ” 精神 !

2000年1月 , 李彦宏 创建 了 百度 。 经过 十 多年 的 发展 , 百度 已经 发展 成为 全球 第二 大 独立 搜索引擎 和 最大 的 中文 搜索引擎 。 百度 的 成功 , 也 使 中国 成为 美国 、 俄罗斯 和 韩国 之外 , 全球 仅有 的 4 个 拥有 搜索引擎 核心 技术 的 国家 之一 。 2005年 , 百度 在 美国 纳斯达克 成功 上市 , 并 成为 首家 进入 纳斯达克 成 分 股 的 中国公司 。 百度 已经 成为 中国 最 具 价值 的 品牌 之一 。

训练过程 #

如果你关心模型结构和训练过程,请看nncws_train.py这个文件,它包含了对2014人民日报语料的处理过程,模型的结构和训练,文件很短很清晰,就不多说了。训练还需要安装Keras。

如果不看代码,将脚本放到人民日报语料的目录下,直接python nncws_train.py就行了。2014年人民日报语料网上搜索一下就能够下载到了。

最后几句 #

其实这只是个玩具,故是0.1版,估计离真正实用还有很远。但这算是一个新的尝试,即把深度学习等技术的应用门槛降低(训练门槛高无所谓,大众关心的是应用门槛),既发挥新模型的有效性,又保留便捷性。

这样的模型的一个明显缺点就是,如果用户发现模型不能满足自己的要求,没法自行调整;而传统的基于查词典的方法,用户只需要自行增加词典即可,比较灵活。因此下一步的目标是:将有监督训练、无监督新词发现和词表都融合在一起,目前已经有了一点思路,请期待。

转载到请包括本文地址:https://spaces.ac.cn/archives/4114

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Nov. 29, 2016). 《轻便的深度学习分词系统:NNCWS v0.1 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/4114

@online{kexuefm-4114,
        title={轻便的深度学习分词系统:NNCWS v0.1},
        author={苏剑林},
        year={2016},
        month={Nov},
        url={\url{https://spaces.ac.cn/archives/4114}},
}