2021.08.08 技術シェア
【技术浅谈】有监督机器学习---情感分析分类实践

前言


大家好,本期为大家介绍如何使用python进行简单的英文文章的情感分析。简单的来说,就是通过机器学习,判断文章报道内容是正面消息或是负面消息,本期我们将通过python中常用的机器学习库tensorflow来实现有监督的机器学习。这种二元分类问题是机器学习擅长的,也是机器学习的常用方式。让我们实际动手试试看吧。


 

1.下载并安装TensorFlow 2.0 测试版包。将 TensorFlow 载入,我们将版本号打印出来,显示是2.1.0。


图片

2. 然后让我们下载 IMDB 数据集用于本次模拟,其中的数据data是关于某电影的影评,label是我们对影评的判断,正面评价label为1,负面评价label为0。我们将数据分为train(学习)和test(测试)两部分,前者用于机器学习,后者用于验证学习效果。Num_words是一个调节出现单词数的参数,这里我们让最常见的10000个单词出现,滤过对分类无用的稀有词。


图片


让我们看看具体里面都有啥,可以看到训练数据集中有25000件数据和他们的label(0或1)。


图片


再看看训练数据中有什么


咦,怎么都是数字?答案是每个数字都代表一个英文单词,在这里数据集已经事先为我们准备好了,如果想查看原来的影评的话可以使用一下的代码查看。实际应用中我们也需要通过某些方法让文章变成数字,这样才能通过数学方法对他们进行分类。


图片

3. 进入神经网络的电影评论长度必须相同,我们将使用 pad_sequences 函数来使长度标准化,接下来让我们通过一下方法把数据同一成一个形式吧。当然了,方法不限于此。类似于one-hot编码的方法也是常用的。


图片


好了,数据准备完成。我们可以看到每个影评的长度都调整到了256个单词,对于不足的地方我们已经用0填充好了。接下来可以进入让机器学习的阶段啦。


 

4. 首先,机器本身是不会学习的,让我们来构建一个神经网络用于学习。在这里我们的主要目的是通过神经网络,让原本是256维的数据变为1维,然后得到0或1的分类结果。对于不同的情况,我们都需要按照自己的需求去思考设计,模型里有多少层?每个层里有多少隐层单元(hidden units)?比如说图中的第8行代码,我们需要最后输出是0或1的数字,那么我们要在最后一步让数据的维度下降为1,并用sigmoid函数让靠近低于0.5的结果归为0,高于0.5的结果归为1。这是机器学习中的重点难点,我们将之后单独一期来为大家介绍。


图片


如图,神经网络就创建好了。那么,接下来要思考的是,机器要如何学习?学习多少次?每次结果我们如何优化?所以接下来我们为机器创建一个评分方法和学习计划,定义损失函数与创建优化器。


图片


 

5. 有了学习方法(模型),也有了评分方法(损失函数)和学习计划(优化器),那我们就可以开始让机器学习了。用以下代码让机器开始学习,这里我们让机器学习的次数是40次(epochs=40)。图中的loss是损失函数,即我们的评判标准,可以看到每次学习完损失函数都下降了,那是因为我们认为loss越小越好。accuracy是准确率,就是预测结果的准度,每次学习完会不断上升。当然了,准确率也不是越高越好的,有时候会因为学习过度而出现过拟合现象,即对于学习数据来说准度很高,而当我们实际应用的时候却发现准度不够的现象。如何防止过拟合现象也是一门学问。


 

6. 最后,让我们投入训练数据给模型用于训练吧。


图片


 


最终我们得到了如下图的训练好的模型,用测试数据和evaluate函数验证模型的效果,我们得到了87%的准度,之后我们可以用这个训练好的模型(model)来判断不同的影评是积极还是消极评论了。


图片


 


好了,本篇文章的目的带领大家体验构建机器学习模型的流程已经带大家走完了。怎么样,机器学习虽然理论只是很复杂,可是代码里确实很容易实现的呢。当然了,关于机器学习如何处理数据,建立模型,以及最后如何防止过拟合等都是需要AI工程师去解决的难点,这类问题我们将在以后为大家介绍。如果对tensorflow感兴趣也可以登录他们的官方网站https://www.tensorflow.org/查看哦。同时也欢迎大家报名我们的python课程学习。


 


图片