| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Python对疫情期间网民情绪识别 -> 正文阅读 |
|
[人工智能]Python对疫情期间网民情绪识别 |
资源下载地址:https://download.csdn.net/download/sheziqiong/85650755 一、疫情期间网民情绪识别1.1 项目目的掌握文本处理的基本方法 理解不同算法结果的差异性 掌握对程序运行结果的评价方法 1.2 项目内容根据 train.csv 文件中的微博数据, 设计算法对 test.csv 文件中的 4500 条微博内容进行情绪识别, 判断微博内容是积极的 (1)、消极的 (-1) 还是中性的 (0)。 通过混淆矩阵对算法的结果进行评价 使用多种模型对问题进行处理,并进行对比 1.3 问题分析所有的文本分析问题,基本都包括以下几个部分,下文将对这几个方面对问题进行分析 数据预处理,根据数据的特性进行清洗 数据转换,即将文本转化为可计算的的值 模型训练,将转换后的数据输入模型中进行训练,并对测试目标进行预测 1.3.1 数据预处理由于本次项目的数据为微博真实数据,并且没有进行任何预处理,所以需要先对数据进行清洗以便后续工作。基本的预处理包括以下几个步骤 中文分词 由于中文与英文不同,不像英文一样自然以空格分割,而是全部连接在一起的。所以需要对中文进行单词的分割。也即中文分词。以便以单词为单位进行后续的分析。中文分词在业内 已经有比较成熟的解决方案,相关的工具包也比较丰富,如 jieba 分词, 清华大学的 THULAC,以及 MIT 的 SnowNLP 去除停用词 所谓停用词即为一些无法表征特别多信息的词语,如你, 我, 他,以及一些标点符号等等。 这些词语出现的次数可能非常多,但是却无法带给我们有效的信息,反而会影响我们后续的计算,所以需要进行去除。在 GitHub 上可以找到很多已经归纳好的停用词列表,可以通过综合多个停用词列表来得到一个更大的集合,从而增加去除的准确度。同时我们需要针对微博数据的特点进行针对性的处理,在给出的数据中很多情况下,一句话都包含有诸如 @ 账号名,又或是话题名等信息,如 //@ 新疆发布:# 众志成城打赢疫情防控阻击战 # 众志成城防疫情,我在新疆,我承诺!中的 @ 新疆发布就是账号名,并不是评论本身。 去除频数较小的词 (可选) 去除停用词之后可能还会有一些频数非常小的词语,其本身出现的次数不多,但是这类词语会极大地增加我们的词语集合,如果采用 one-hot 编码,将会使我们的向量变得非常庞大,难以计算(本次实验中去除后的词语集合达到了 2 万多个)。幸运的是,在训练词向量的过程中,相关的函数基本上都会提供一个可选的参数来设置词语的最小出现次数,非常方便的解决了这个问题。 1.3.2 数据转换所有的机器学习问题都要面临的一个问题就是如何将采集到的数据变为可以计算的数字,而针对文本处理,基本有以下几种常用的转换方法 独热编码 (one-hot) 即将每一个句子转化为一个长度为词库大小的向量,当包含这个词语时就将对应位置设置为 1,否则为 0,但是由于词库往往非常大,会导致生成的数据非常庞大,并且非常稀疏,导致计算效果不佳 整数编码 将每一个词语用唯一的数字标示进行标示,整个句子将表示为词语标识的序列,常常需要对句子的长度进行统一,常见于简单实现的神经网络模型中 词袋模型 (bag-of-word) 与独热编码唯一的不同就是保存了出现次数,而不仅仅为 0,1 值 词嵌入 (word-embedding) 通过 CBOW 或者 Skip-Gram 等模型,将每一个词语转化为指定维度的向量表示,生成出的向量则包含了该词语的语义信息。相近的词语在高维空间中所对应的距离往往也比较小。再通过句子所包含的所有词的词向量来获取该句子所对应的向量(通常为直接将每一个词语的向量相加)。相较于前面的几种方法,词嵌入有压缩语义信息、向量长度较短等优点。 而在本次项目中,为了提高准确率,分别针对普通线性模型,如 svm、logistics 回归,以及简单的神经网络,分别采用了词嵌入以及整数编码的方法,同时辅以 PCA 等降维方法,使得训练时间进一步减小。 1.3.3 模型训练以及评价在实际运行过程中,实际上尝试了非常多种方法,如 KNN、SVM、Logistic 回归。亦或是直接调用他人写好的文本分析库如 SnowNLP,以及一些神经网络等等。但是由于正确率等原因,最终还是选择了 logistic 回归,SVM 以及简单的神经网络作为本报告介绍的对象。 对于最终效果的评价,采用了题目中所要求的三种评价指标,分别为 Precision (精准率) Recall (召回率) -score (F1) 分数 分别对不同模型的预测结果给出相应的评价 1.4 设计与分析该部分与问题分析部分一一对应,分别介绍不同阶段的设计与主体代码,整体程序流程图如下图所示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N0zevpkJ-1655280393521)(https://www.writebug.com/myres/static/uploads/2022/6/14/5621f8600be021c1fd864fdbf16fba87.writebug)] 图 1: 数据清洗结果 1.4.1 数据预处理分词 在本次实验中,我们采用业界比较成熟的分词工具 jieba 来对数据进行分词,通过以下函数可以非常方便的将中文句子分割为一个个的单词
在经过分词、去除停用词、以及针对微博特性的清洗之后,原数据变为了易于处理的单词格式,如下图所示 1.4.1 图 2: 数据清洗结果需要注意的是,经过了上述处理之后,一些句子可能会变为空,针对这些句子也进行了去除处理,但好在这种情况非常少,不会有很大的影响。 1.4.2 数据转换以下分别介绍项目中所用的词嵌入以及整数编码的方法 词嵌入 词嵌入有多种不同的模型,其中 GloVe 模型以及 CBOW 模型是效果比较好的两种模型。通过将分词好的数据输入到对应模型中进行训练可以得到针对该数据集合的词向量。本项目中两种模型均进行了尝试。 CBOW 模型 CBOW 模型可以通过 word2vec 包来非常方便的进行训练,如下述代码所示
1.4.2 图 3: 与关心最近的词语GloVe 模型 与 CBOW 模型有标准 Python 实现不同,斯坦福的 GloVe 模型的官方实现为 C 语言,所以需要从 GitHub 克隆其,并修改 shell 脚本中的配置内容,再进行训练。脚本内容以及训练过程如下图所示 图 4: GloVe 训练过程 其中维数也设置为 800。同样以关心为例,查看其最近的几个词语,如下图所示可见效果也还不错 1.4.2 图 5: 与关心最相近的词语上述两个模型均可以在一定程度上实现词语的嵌入。但是得到的结果向量维度还是非常高。这里我们采用了 PCA 降维的方法来将其映射到低维空间,且尽量不损失信息。从而方面后续计算 首先需要计算不同维度下的信息损失程度,由此再确定要将其降维到多少,具体代码如下所示
结果如下图所示可见在 200 维的时候,既达到了大幅降低了维度的目的,同时也基本没有损失信息。 图 6: PCA 降维 整数编码 整数编码的方法在本项目中主要用于实现简单的 LSTM 神经网络,使用了 tensorflow 作为具体实现,而 tensorflow 也提供了相关的函数进行整数编码。 其中需要确定每一个句子的长度,不足的补 0,多余的部分裁去。通过对清洗后的句子的长度绘制出分布图,如下图所示 1.4.2 图 7: 句子长度分布可以发现长度设置成 60 比较合适 1.4.3 模型训练本报告选出了实际运行结果相对较好的几种模型进行介绍,分别有
LSTM 网络 其中 Logistic 以及 SVM 这两种模型可以通过调用 sklearn 包中的默认实现,输入上文所提到的 PCA 降维后的数据进行训练即可。通过多次训练,调整参数找到较优解。具体代码如下所示 1.5 结果分析1.5.1 Logistic 回归使用 word2vec 作为词向量生成,降维后运行结果如下所示 图 8: Logistic 回归运行结果-word2vec 使用 GloVe 作为词向量生成,降维后运行结果如下所示 图 9: Logistic 回归运行结果-GloVe 可见在相同配置下,GloVe 生成的词向量比 CBOW 生成的词向量更加优秀,这也与业界实际情况相符。 1.5.2 SVM使用 word2vec 作为词向量生成,降维后运行结果如下所示 图 10: Logistic 回归运行结果-word2vec 使用 GloVe 作为词向量生成,降维后运行结果如下所示 图 11: Logistic 回归运行结果-GloVe 可见不管是 SVM 还是 Logisitc,使用 GloVe 生成的词向量都要更加好。 1.5.3 LSTM使用 tensorflow 构建简单的 LSTM 模型,将转换的整数编码数据输入,设置 epoch 为 20,进行训练,如下图所示 图 12: LSTM 训练过程.png 同时可以通过训练历史绘制出正确率与 loss 的变化曲线,如下图所示 模型正确率 (b) loss 变化 图 13: LSTM 训练变化过程 可以发现在训练过程中,在第 5 个 epoch 时达到最佳状态,测试集正确率 0.52,训练集正确率 0.78,之后则发生了过拟合,训练集上的正确率不断增加但测试集的正确率却进入瓶颈并有减小的趋势,其 loss 也不断增加。 1.5.4 不同方法比较分别列出不同模型或方法的正确率,如下表所示
表 1: 不同方法的指标对比 可见不同方法之间的差异不大,其中 Logitstic+GloVe 的方法效果最好,而神经网络的方法最差。由于前者使用了词嵌入的方法,而后者只是简单的整数编码,相较之下,后者损失了不少信息。 资源下载地址:https://download.csdn.net/download/sheziqiong/85650755 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:37:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |