前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >达观数据基于Deep Learning的中文分词尝试(下篇)

达观数据基于Deep Learning的中文分词尝试(下篇)

作者头像
达观数据
发布2018-03-30 12:27:25
1K0
发布2018-03-30 12:27:25
举报
文章被收录于专栏:达观数据达观数据

上周分享了本文上篇,现有分词、机器学习、深度学习库Keras技术知识,下篇将详细介绍达观数据使用深度学习的分词尝试。

基于深度学习方式的分词尝试

基于上面的知识,可以考虑使用深度学习的方法进行中文分词。分词的基础思想还是使用序列标注问题,将一个句子中的每个字标记成BEMS四种label。模型整的输入是字符序列,输出是一个标注序列,因此这是一个标准的sequence to sequence问题。因为一个句子中每个字的上下文对这个字的label类型影响很大,因此考虑使用RNN模型来解决。

环境介绍

测试硬件是Macbook Pro 2014 Mid高配版,带Nvidia GT 750M GPU,虽然GPU性能有限,但通过测试性能还是强过mac自带的i7 CPU。使用GPU进行模型运算,需要安装Nvidia的cuda相关程序及cuDNN库,会有较大的性能提升。软件方面使用python2.7,安装好了keras,theano及相关库。关于keras使用GPU训练的环境搭建问题,可以参考这篇文章(Run Keras on Mac OS with GPU,http://blog.wenhaolee.com/run-keras-on-mac-os-with-gpu/)

模型训练

模型训练使用的是经典的bakeoff2005中的微软研究院的切分语料,将其中的train部分拿过来做训练,将test作为最终的测试。

训练数据准备

首先,将训练样本中出现的所有字符全部映射成对应的数字,将文本数字化,形成一个字符到数据的映射。在分词中,一个词的label受上下文影响很大,因此参考之前提到的lstm_text_generation.py示例,我们将一个长度为n个字符的输入文本处理成n个长度为k的向量,k为奇数。

举例来说,当k=7时,表示考虑了一个字前3个字和后三个字的上下文,将这个七个字作为一个输入,输出就是这个字的label类型(BEMS)。

基础模型建立‍

参考lstm_text_generation.py中的模型搭建方式,我们采用一层的LSTM构建网络,代码如下:

其中,输入的维度input_dim是字符类别总数,hidden_node 是隐藏层的结点个数。在上面的模型中,第一层输入层Embedding的作用是将输入的整数向量化。在现在这个模型中,输入是一个一维向量,里面每个值是字符对应的整数,Embedding层就可以将这些整数向量化,简单来讲就是生成了每个字的字向量。

接下来紧跟着一层是LSTM,它输出维度也是隐藏层的结点个数。Dropout层的作用是让一些神经节点随机不工作,来防止过拟合现象。Dense层是最后的输出,这里nb_classes的数目是4,代表一个字符的label。模型建立好后开始训练,重复20次,训练的结果如下:

图1 基础模型(1层LSTM优化器RMSprop)训练20次

训练好后,我们使用msr_test的测试数据进行分词,并将最终的分词结果使用icwb2自带的脚本进行测试,结果如下:

图2 基础模型F Score: 0.845

可以看到基础模型的F值一般,比传统的CRF效果差的较多,因此考虑优化模型。

效果改进

模型参数调整

首先想到的是模型参数的调整。Keras官方文档中提到,RMSprop优化方法在RNN网络中通常是一个好的选择,但是在尝试了其他的优化器后,比如Adam,发现可以取得更好的效果:

图3 1层LSTM优化器Adam训练20次

可以看到,Adam在训练过程中的精度就已经高于RMSprop,使用icwb2的测试结果为:

图4 修改优化器Adam后的模型F Score:0.889

模型结构改变

现在网络结构较简单,只有一层LSTM,参考文档示例中的模型设计,考虑使用两层的LSTM来进行测试,修改后的代码如下:

注意,第一层LSTM有个return_sequences =True可以将最后一个结果出入到输出序列,保证输出的tensor是3D的,因为LSTM的输入要求是3D的tensor。

两层LSTM模型训练过程如下:

图5 两层LSTM优化器Adam训练20次的模型

可以看到,两层LSTM使得模型更加复杂,训练时常也增加不少。模型训练后,使用icwb2的测试结果为:

图6 两层LSTM的模型F Score:0.889

可以看到,随着模型的复杂,虽然F Score无提升,但是其他的指标有一定的提升。一般来说,神经网络在大量训练数据下也会有更好的效果,后续会继续尝试更大数据集更复杂模型的效果。

总结和展望

使用深度学习技术,给NLP技术给中文分词技术带来了新鲜血液,改变了传统的思路。深度神经网络的优点是可以自动发现特征,大大减少了特征工程的工作量,随着深度学习技术的进一步发展,在NLP领域将会发挥更大的作用。达观数据将在已有成熟的NLP算法及模型基础上,逐渐融合基于深度神经网络的NLP模型,在文本分类、序列标注、情感分析、语义分析等功能上进一步优化提升效果,来更好为客户服务。

作者

高翔,达观数据联合创始人,上海交通大学通信硕士,负责达观数据产品技术相关开发管理工作,曾任职于盛大文学、盛大创新院,在搜索引擎、自然语言处理、机器学习及前端技术有着丰富的经验。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 达观数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于深度学习方式的分词尝试
  • 总结和展望
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档