CNN神经网络文本分类----招聘信息分类

xue

tu

    

CNN神经网络文本分类----招聘信息分类_第1张图片

    Hello,又是一个分享的日子,上期博主介绍了BP神经网络文本分类----招聘信息分类,并介绍了文本在进入神经网络前的预处理工作。今天博主给大家分享CNN神经网络对招聘数据的分类,也同样要对文本进行预处理,所以还没了解文本预处理的小伙伴,一定要去看看博主的上期推文

    当然啦,博主也在往期的推文中也介绍了CNN卷积神经网络的原理,还不熟悉CNN卷积神经网络原理的小伙伴可以翻一下什么?卷积层会变胖?人工智能之光---CNN卷积神经网络(原理篇),这里博主就不进行过多的赘述了。

    下面就开始我们新的实验部分。

实验

实验环境                                                                                          

640?wx_fmt=gif

  • Anaconda Python 3.7 

  • Jupyter Notebook

  • Keras

    开发环境安装在之前的推文中已经介绍,还没安装的小伙伴可以翻一下。

  • Python开发环境---Windows与服务器篇

  • Python深度学习开发环境---Keras

  • 招聘数据集

提取码:38wa

https://pan.baidu.com/s/1t7MbjxIYN7afW9EyHeOuNQ

 

实验流程                                                                                          

640?wx_fmt=gif

  • 加载数据

  • 数据上标签  

  • 中文分词

  • 提取文本关键词

  • 建立token字典

  • 使用token字典将“文字”转化为“数字列表”

  • 截长补短让所有“数字列表”长度都是50  # 保证每个文本都是同样的长度,避免不必要的错误。

  • Embedding层将“数字列表”转化为"向量列表"

  • 将向量列表送入深度学习模型(CNN卷积神经网络)进行训练

  • 保存模型与模型可视化

  • 模型的预测功能

  • 训练过程可视化

代码                                                                                                 

640?wx_fmt=gif

  •     核心代码

model = Sequential()	
model.add(Embedding(output_dim = 32,  	
                    # 词向量的维度	
                    input_dim = 2000,  	
                    # Size of the vocabulary 字典大小	
                    input_length = 50  	
                    # 每个数字列表的长度	
                   )  	
         )	

	
model.add(Conv1D(256,  # 输出大小	
                 3,   # 卷积核大小	
                 padding='same', 	
                 activation='relu'))	
model.add(MaxPool1D(3,3,padding='same'))	
model.add(Conv1D(64, 3, padding='same', activation='relu'))	
model.add(Flatten())	
model.add(Dropout(0.3))	
model.add(BatchNormalization()) # (批)规范化层	
model.add(Dense(256,activation='relu'))	
model.add(Dropout(0.2))	
model.add(Dense(units = 10,	
                activation = "softmax"))	

	
batch_size = 256	
epochs = 20	

	
# 单GPU版本	
model.summary()  # 可视化模型	
model.compile(loss = "sparse_categorical_crossentropy",  	
              # 多分类	
            optimizer = "adam",	
            metrics = ["accuracy"])	

	
history = model.fit(	
          x_train, 	
          y_train,	
          batch_size=batch_size,	
          epochs=epochs,	
          validation_split = 0.2	
          # 训练集的20%用作验证集	
        )

  • 参数

    Dense: 全连接层。

    CNN1D:1维卷积神经网络,常用于处理文本或者语音。

    Dropout: 以一定概率放弃两层之间的一些神经元链接,防止过拟合,可以加在网络层与层之间。

    optimizer: 优化器,梯度下降的优化方法

    这些都在之前的推文中有所介绍,小伙伴们可以去翻阅一下。

    码前须知---TensorFlow超参数的设置

    activation: 激励函数,‘linear’一般用在回归任务的输出层,而‘softmax’一般用在分类任务的输出层

    validation_split 切分一定比例的训练集作为验证集

    loss: 拟合损失方法,这里用到了多分类损失函数交叉熵


        如果你的label 是 数字编码 ,用 sparse_categorical_crossentropy

       如果你的 label是 one-hot 编码,用 categorical_crossentropy

        keras还有别的误差函数,在后续的推文会一一介绍。

  • epochs 与 batch_size:前者是迭代次数,后者是用来更新梯度的批数据的大小,iteration = epochs / batch_size, 也就是完成一个epoch需要跑多少个batch。这这两个参数可以用控制变量法来调参,控制一个参数,调另外一个,看损失曲线的变化。

    小伙伴们可以去keras官网查看更多的参数含义与用途,博主也会在后续的课程中通过实验的方法将这些参数涉及进来,让大家的知识点串联起来。

        

Keras官网

https://keras.io/

  • Git链接

代码

https://github.com/ChileWang0228/DeepLearningTutorial/tree/master/CNN

训练结果                                                                                             

640?wx_fmt=gif

  • 训练过程

CNN神经网络文本分类----招聘信息分类_第2张图片

  •     网络结构

    CNN神经网络文本分类----招聘信息分类_第3张图片


  • 结果分析

    在迭代了1个epochs之后,验证集的损失loss和acc,趋于平稳,这时,我们得到的模型已经是最优的了。所以讲epoch设置为1即可。

代码实践视频                                                                                          

640?wx_fmt=gif

视频卡顿?bilibili值得拥有~(っ•̀ω•́)っ✎⁾⁾ 我爱学习

https://www.bilibili.com/video/av56362660/


总结

640?wx_fmt=gif

        好了,到这里,我们就已经将CNN卷积神经网络文本分类的知识点讲完了。大家在掌握了整个流程之后,就可以在博主的代码上修修补补,训练自己的CNN卷积神经网络来做文本分类任务了。

       下一期,博主就带领大家用CNN卷积神经网络来做图像分类,敬请期待吧~

    

留言

640?wx_fmt=gif

博主刚弄的一个留言功能,欢迎各位小伙伴踊跃留言~smiley_13.png

CNN神经网络文本分类----招聘信息分类_第4张图片

CNN神经网络文本分类----招聘信息分类_第5张图片

xmorient

你可能感兴趣的:(CNN神经网络文本分类----招聘信息分类)