bp神经网络和softmax原理_BP神经网络文本分类招聘信息分类

news/2024/7/7 10:22:12

xue

tu

592f267c819a8b2a8f8725a860cb73e0.png

    Hello,又是一个分享的日子,上期博主介绍了BP神经网络回归---房价预测,想把整体的BP神经网络的应用都掌握的小伙伴,可以去翻一下。当然啦,还没了解原理的小伙伴也可以去看一下深度学习开端---BP神经网络。

     这期,博主给大家分享如何用BP神经网络对招聘数据进行分类,从而训练出一个可以分类招聘信息的神经网络模型。

    下面就开始我们新的征程。

自然语言处理

文本表示                                                                             

b418b4e3032c9512d85d0d7dcb2e2ece.gif

 计算机是无法直接处理文本信息的,所以,在我们构建神经网络之前,要对文本进行一定的处理。

相信大家对独热编码(one-hot encode)应该不陌生了,虽说它能把所有文本用数字表示出来,但是表示文本的矩阵会非常的稀疏,极大得浪费了空间,而且这样一个矩阵放入神经网络训练也会耗费相当多的时间。

e7516d00cc537c083b00bd483337abc7.png

独热编码示意图

      为此,有些聪明的小伙伴提出了词向量模型(Word2Vec)。词向量模型是一种将词的语义映射到向量空间的技术,说白了就是用向量来表示词,但是会比用独热编码用的空间小,而且词与词之间可以通过计算余弦相似度来看两个词的语义是否相近。下面给大家展示Word2Vec的示意图。

3d3f00bb2e496a15eb32ef99251bd9b3.png

图片来源于网络

      目前Word2Vec技术有好几种:CBOW、Skip-gram和GloVe,这里限于篇幅,且我们的实验用的词向量模型是Skip-gram,这里只介绍Skip-gram模型。博主会在后期更新一篇新的推文介绍另外两个的具体细节,它们总体的原理和Skip-gram大致相同。

Skip-gram                                                                                          

b418b4e3032c9512d85d0d7dcb2e2ece.gif

        Skip-gram是输入一个词,预测该词上下文的模型。

3e620b86cfe2652b490a61ab567449fc.png

图片来源于网络

        Skip-gram的具体训练过程如下,蓝色代表输入的词,图中的框框代表滑动窗口,用来截取蓝色词的上下文,然后形成训练标本(Training Samples),这样我们就得到了{输入和输出},放入{输入层-隐藏层-输出层}的神经网络训练,我们就能得到Skip-gram模型。因为神经网络不能直接处理文本,因此所有的词都用one-hot encode表示。

6e282936c69dc1df1eb6fbfa4d3731ea.png

Skip-gram训练过程

图片来源于网络

        Skip-gram的神经网络结构如下,隐藏层有300个神经元无激励函数,输出层用softmax激励函数,通过我们提取的词与其相应的上下文去训练,得到相应的模型。通过Softmax激励函数,输出层每个神经元输出的是概率,加起来等于1。

aea09eab3adbaa1f29cb65a701cc6811.png

Skip-gram网络结构

图片来源于网络

    但输出层并不是我们关心的,我们去掉模型的输出层,才是我们想要的词向量模型,我们通过隐藏层的权重来表示我们的词。

    现在假设我们有10000个词,每个词用one-hot encode编码,每个词大小就是1*10000,现在我们想用300个特征去表示一个词,那么隐藏层的输入是10000,输出是300(即300个神经元),因此它的权值矩阵大小为10000 * 300。那么我们的词向量模型本质上就变成了矩阵相乘。

      好了,讲到这,大家已经把词向量的原理了解清楚了,而且值得高兴的是,Keras自带了词向量层embedding layer,所以我们只要将文本处理好,就可以灌入这个层中即可,后面的实验博主会给大家细讲如何对文本进行预处理,生成符合embedding layer输入格式的词。

3848325c2eaa22571c6cc5ca64154b1e.png

[1*10000] * [10000 * 300] = [1 * 300] 

矩阵相乘 

   中文分词--jieba分词                                                                            

b418b4e3032c9512d85d0d7dcb2e2ece.gif

         中文文本处理会比处理英文多一步,中文词与词之间并不是用“空格”分开的,计算机不能处理这么高度抽象的文字,所以我们得通过一个Python库---jieba来将中文文本进行分词,然后用“空格”将词分开,形成类似英文那样的文本,方便计算机处理。

fd35d6942e2f700b38af9286137c2849.png

jieba分词示例图

# 安装指令pip install jieba

实验

实验环境                                                                                          

b418b4e3032c9512d85d0d7dcb2e2ece.gif

  • Anaconda Python 3.7 

  • Jupyter Notebook

  • Keras

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

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

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

  • 招聘数据集

提取码:38wa

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

实验流程                                                                                          

b418b4e3032c9512d85d0d7dcb2e2ece.gif

  • 加载数据

  • 数据上标签  

  • 中文分词

  • 提取文本关键词

  • 建立token字典

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

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

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

  • 将向量列表送入深度学习模型进行训练

  • 保存模型与模型可视化

  • 模型的预测功能

  • 训练过程可视化

代码                                                                                                 

b418b4e3032c9512d85d0d7dcb2e2ece.gif

  •     核心代码

batch_size = 256epochs = 5model = Sequential()# 词嵌入层model.add(Embedding(output_dim = 32,                      # 词向量的维度                    input_dim = 2000,                      # 字典大小                    input_length = 50                      # 每个数字列表的长度                   )           )model.add(Dropout(0.2)) model.add(Flatten())  # 平铺model.add(Dense(units = 256,                activation = "relu"))model.add(Dropout(0.25))model.add(Dense(units = 10,                activation = "softmax"))print(model.summary())  # 打印模型# CPU版本model.compile(loss = "sparse_categorical_crossentropy",  # 多分类损失函数            optimizer = "adam",            metrics = ["accuracy"]             )history = model.fit(        x_train,         y_train,         batch_size = batch_size,        epochs = epochs,        verbose = 2,        validation_split = 0.2          # 训练集的20%用作验证集)
  • 参数

    Dense: 全连接层。

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

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

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

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

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

    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/blob/master/MLP/MLP_Text.ipynb

训练结果                                                                                             

b418b4e3032c9512d85d0d7dcb2e2ece.gif

  • 训练过程

0646dbf94e632a9cc760732bb2c5734c.png

6a83d8731020cc849598db8bdd315a2d.png

  •     网络结构

    e606f6b0ddfb68caff587f0330bdbed4.png

  • 结果分析

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

代码实践视频                                                                                          

b418b4e3032c9512d85d0d7dcb2e2ece.gif

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

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

总结

b418b4e3032c9512d85d0d7dcb2e2ece.gif

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

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

留言

d7766b23e02e1f32d8235c10a7c1a873.gif

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

5de186ec4716803b741cb08bea8fa06d.png

ec31056470efdc90e3d9015e5f9ddee2.png

058350c36839e030126090a0ea7c8748.png

http://www.niftyadmin.cn/n/604167.html

相关文章

linux进程,作业,守护进程,进程间同步

ps axj命令查看系统中的进程。参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息; 凡是TPGID一栏写着-1的都是…

中国十大城市美女(经典套图)

NO.1 大连美女 豪放婉约 漂亮指数:95 东北女子向来以白面长身著称。大连美眉则无疑集东北女性的精华于一身。与江南女子相比,大连美眉也许婉约不够,但却多了一份豪气;与东北的其他内陆城市女人相比,大连美眉身上又多了一些清丽和…

.net wap 开发:在.net中写自己的objectlist

使用.net开发wap的都会为这个工具的强大所震撼,忘掉在php,asp,jsp中的write wml语法吧.但是,美中不足的是其中的类web中的datagrid控件objectlist没有他所宣称的那么方便,至少不符合中国人的习惯&#xff0…

概率分布分位点_分位数与QQ图

常说的QQ图究竟是怎么来的,QQ图有何意义。今天我们来了解QQ图~1.基础知识分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。在实际运用中&…

TVB十大女星比美十大名花

1、兰花:宣萱折茎聊可佩,入室自成芳。萱宣的美正如兰花的香,虽然淡淡但是持久。从“宠物情缘”到寻秦记再到“憨夫成龙”,她的每部戏总是那么的深入人心,令人回味。大多数男性的TVBfans可能更喜欢她,因为她…

idea 连接云mysql_idea配置MySQL数据库异常处理

配置MySQL数据库过程中经常出现的问题,在这里给大家说一下idea配置MySQL数据库页面常见问题一:数据库驱动driver-class-name设置错误MySQL数据库之前用的比较多的时MySQL5.6/5.7版本,再后来就是现在用的比较多的MySQL8.0.*的版本两个版本的驱…

假期安排计划

7.18到8.18是学校规定的假期。 我按照往常的习惯,还是不回家了。 必须给这个假期订立一个计划,否则会过得浑浑噩噩。 基本指导原则是: 按时作息,工作学习不要过度,当然休闲也要适当。 具体的计划: 7:30起床,8:00之…

我的世界java版gamemode指令_【服务器相关】【求助!】关于服务器中使用gamemode等命令错误。...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼事情是这样的我自己开个服务器玩玩,装了一堆插件给自己了一个op不知道怎么,TMI内置修改器每一个指令都不能用了,客户端里红字提示an internal error occurred while attempting to perform this …