# 疫情期间网民情绪识别
# 一、疫情期间网民情绪识别
## 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 设计与分析
该部分与问题分析部分一一对应,分别介绍不同阶段的设计与主体代码,整体程序流程图如下图所示
![](https://www.writebug.com/myres/static/uploads/2022/6/14/5621f8600be021c1fd864fdbf16fba87.writebug)
图 1: 数据清洗结果
### 1.4.1 数据预处理
分词
在本次实验中,我们采用业界比较成熟的分词工具 jieba 来对数据进行分词,通过以下函数可以非常方便的将中文句子分割为一个个的单词
```c++
words = jieba.lcut(sentence, HMM=False)
```
去除停用词
我们采用 GitHub 上一个非常齐全的停用词列表来构成本项目所用到的停用词表。包括哈工大停用词表,百度停用词表等等。同时定义以下函数来综合多个停用词表。
```python
def makeStopWord():
stopword = set() for file in listdir('stopwords'):
if file.endswith("txt"):
with open(f'stopwords/{file}') as f:
lines = f.readlines() for line in lines: words = jieba.lcut(line, cut_all=False) for word in words:
stopword.add(word.strip())
return stopword
```
去除账号名等不相关数据
观察微博数据中账号名以及话题出现的模式,发现可以通过正则匹配来进行去除,如下代码便使用了正则表达式来匹配多种可能的情况,去除不相关数据
```python
def clean_redundant(comment):
comment = re.sub('#.*?#', '', comment)
comment = re.sub('//@.*?:', '', comment)
comment = re.sub('//@.*?:', '', comment)
comment = re.sub('//.*?:', '', comment)
comment = re.sub('//.*?:', '', comment)
comment = re.sub('【.*?】', '', comment)
comment = re.sub('《.*?》', '', comment)
comment = re.sub('//.*?//', '', comment)
comment = re.sub('@.*?:', '', comment)
comment = re.sub('@.*?:', '', comment)
comment = re.sub('『.*?』', '', comment)
comment = re.sub(r'\d', '', comment) return comment
```
在经过分词、去除停用词、以及针对微博特性的清洗之后,原数据变为了易于处理的单词格式,如下图所示
![](https://www.writebug.com/myres/static/uploads/2022/6/14/43c12f3b51c600c942110aad5feb34ae.writebug)
#### 1.4.1 图 2: 数据清洗结果
需要注意的是,经过了上述处理之后,一些句子可能会变为空,针对这些句子也进行了去除处理,但好在这种情况非常少,不会有很大的影响。
### 1.4.2 数据转换
以下分别介绍项目中所用的词嵌入以及整数编码的方法
词嵌入
词嵌入有多种不同的模型,其中 GloVe 模型以及 CBOW 模型是效果比较好的两种模型。通过将分词好的数据输入到对应模型中进行训练可以得到针对该数据集合的词向量。本项目中两种模型均进行了尝试�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:项目开发设计报告word+任务书+相关资料+代码及数据 根据 train.csv 文件中的微博数据, 设计算法对 test.csv 文件中的 4500 条微博内容进行情绪识别, 判断微博内容是积极的 (1)、消极的 (-1) 还是中性的 (0)。 通过混淆矩阵对算法的结果进行评价 使用多种模型对问题进行处理,并进行对比 详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/125299091
资源推荐
资源详情
资源评论
收起资源包目录
Python对疫情期间网民情绪识别.zip (31个子文件)
项目开发报告.docx 772KB
data
train.csv 10.38MB
test_labled.csv 1.02MB
test.csv 1.01MB
LICENSE 1KB
相关资料
题目 2 groudtruth.zip 1KB
项目2 数据与说明.zip 3.62MB
题目6+语音性别识别.zip 405KB
机器学习结课项目-2020.pdf 560KB
题目1+疫情期间网民情绪识别.zip 5.91MB
题目4+个人收入预测.csv 614KB
report
asset
SVM_word2vec.png 36KB
KNNClassifier_UML.png 12KB
数据清洗.png 178KB
Logistic_glove.png 51KB
pca降维分析.png 12KB
LSTMͼ2.png 13KB
Logistic_word2vec.png 51KB
句子长度.png 20KB
GloVe训练过程.png 179KB
流程图.png 52KB
LSTMͼ1.png 14KB
关心glove.png 39KB
SVM_glove.png 38KB
LSTM训练过程.png 89KB
关心word2vec.png 45KB
report.tex 24KB
report.docx 772KB
code
Code.ipynb 277KB
README.md 18KB
任务书.docx 19KB
共 31 条
- 1
shejizuopin
- 粉丝: 1w+
- 资源: 1296
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页