使用PaddlePaddle搭建卷积网络做文本数据分类

PaddlePaddle是百度开源的深度学习框架,采用和cafee类似的layer搭建的方式构建深度神经网络,当前也在试图发布fluid新版本提供算子级别的网络构建技能,最近有一个文本分类的需求,试着使用paddle进行了实验,对paddle的使用体验为:

  • 文档不全,特别简陋
  • 模型库比较好,即使不懂的用法,可以搜索代码查找用法;
  • github的问题回复比较及时

感觉Paddle是在大力推广和发展的,如果有Paddle同学看到的话,建议把文档补全点;

我的输入数据包含两部分:

  • 用户画像,包括用户的性别、年龄、职业等信息;
  • 用户搜索词列表,保持时间序列,进行分词、停用词过滤等处理;

将类别信息、词语信息,进行StringIndexer之后(使用的Spark进行),输入数据如下所示:

其中单个数字列都是画像的属性分类,以|分割的数字列表代表词语列表,最后一列代表分类目标

整个代码的实现包含三部分,分别是数据读入reader的实现、训练算法的实现、使用算法的实现;

数据读入reader的实现

其中需要注意的地方,就是paddle的sequence_data的含义,就是一个list,所以对于query的数据列表,需要处理成[x,y,list(),z]中的子元素list的形式。

查看一下本脚本的运行结果:

 

训练算法的实现

 

训练后,会在当前目录下生成如下文件:

 

同时训练过程会打印过程信息:

 

试了试GPU和CPU的区别,真的发现GPU那是好多倍的速度呀,深度学习是建立在GPU上的技术果然不差;

同时可以试着打印训练集和错误集的准确率曲线:

 

可以看到,在12轮的时候打到了局部最优,之后出现过拟合;整体效果最好的是88%准确率;

在尝试多次调整dropout和l2正则化参数后依然是这个准确率,因此停止了调整;有待收集更多的数据才可以提升准确率;

利用模型做预测

既然已经训练完毕,那么怎么使用呢,看代码

 

打印一下运行结果:

 

可以看到最后一行打印了预测的6个分类的概率;

总结

以上讲述了使用paddle搭建神经网络的整个流程,包括数据读取、网络搭建、训练、模型应用等方面;

对于已经训练好的模型,可以用python flask或者django进行加载和对外提供远程调用;

其实一通百通,当一个网络搭建和实现之后,对paddle都有了很好的理解,自己同时尝试了全连接网络、LSTM网络,都和卷积网络非常类似,只要替换卷积层部分即可;

对于paddle,虽然当前还不完善,但毕竟是国内的深度学习框架,同时也能够实现业务目标,这一点还是要继续支持滴;

附带Paddle链接:

本文链接:http://crazyant.net/2177.html,转载请注明来源。

相关推荐

《使用PaddlePaddle搭建卷积网络做文本数据分类》上有3条评论

    1. 深度学习的书不多,我是了视频,然后开始看花书,同时试着用paddle和学习tf,说实话真的好难呀

发表评论

电子邮件地址不会被公开。 必填项已用*标注