关于数据挖掘:数据代码分享PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据词云可视化

4次阅读

共计 3956 个字符,预计需要花费 10 分钟才能阅读完成。

全文链接:http://tecdat.cn/?p=28877

作者:Yunfan Zhang 

Twitter 是一家美国社交网络及微博客服务的网站,致力于服务公众对话。迄今为止,Twitter 的日沉闷用户达 1.86 亿。与此同时,Twitter 也已成为突发紧急情况时人们的重要沟通渠道。因为智能手机无处不在,人们能够随时随地公布他们正在实时察看的紧急情况。因而,越来越多的救灾组织和新闻机构对通过程序形式监督 Twitter 产生了趣味。然而,咱们并不分明一个用户在推特上公布的推文是否是实在的正在产生的劫难。举个例子,用户发送了“从侧面看昨晚的天空,如同在焚烧一样。”作者明确应用了“ABLAZE”一词,但仅仅是为了形容火烧云,并非真正的火焰焚烧。这对于人类来说是不言而喻的,然而对于机器来说便很难分辨该用户是否正在预报实在产生的火灾。

解决方案

工作 / 指标

建设一个预测推文公布劫难真实性的机器学习模型,该模型能够预测哪些推文公布的是实在产生的劫难,哪些是虚伪的劫难,从而为相干组织网络监测劫难产生及救济提供帮忙。

数据源筹备

数据集中蕴含的列:
列名 解释
id 每条推文的惟一标识符
text 推特的内容
location 推文发送的地位(能够为空白)
keyword 推文中的特定关键字(能够为空白)
target 仅在 train.csv 中存在,示意推文中形容劫难的虚实,实在为 1,虚伪为 0

其中,测试集蕴含 7613 个样本,训练集蕴含 3263 个样本。

加载数据并查看

使用 pandas 别离读取训练集,测试集等。

查看训练集前五行

后果如下:

查看测试集前五行

后果如下:

数据可视化

首先,使用 plotly 绘制实在虚伪劫难数量比照的饼图,该饼图形容了正例反例在训练样本中的占比,测验数据平衡性。

counts\_train = train.target.value\_counts(sort=False)

labels = counts_train.index   

values\_train = counts\_train.values 

#输出饼图数据

data = go.Pie(labels=labels, values=values_train ,pull=\[0.03, 0\])

运行后果如下:

由饼图可知,在训练集中,劫难实在产生的样本(1)共有 3271 个,占总体的 43%,非实在产生的样本(0)有 4342 个,占总体的 57%。总体来说比例较为平衡,能够进行后续建模。
而后,为了进一步理解劫难推文的大抵内容,本文利用 wordcloud 绘制推文的内容的词云。
首先自行将一些网络常用词退出停用词表。

而后定义绘制词云图的函数:

# 设置词云格局并生成词云

wordcloud = WordCloud(width = 4000, height = 3000,    #宽高

                      background_color ='white',   #背景色

                      stopwords = stopwords,       #停用词

后果如下:

数据荡涤

家喻户晓,在进行建模之前,咱们必须首先进行数据的预处理,以便于后续进一步解决。因而,本文将进行一些根本的网络文本清理工作,例如去除网址,去除网络标签,删除标点符号,删除罕用表情符号,拼写改正等。
1. 删除网址

2. 删除 HTML 标签

3. 删除表情符号
首先,搜寻推特中罕用的表情符号,查问他们的代码点(https://emojipedia.org/reliev…),将须要删除的表情符号记录。

5. 拼写改正

文本的向量化解决

1. 文本序列化
通过 tensorflow 自带的 Tokenizer 分词器设置训练集 text 中所有词的索引值,而后将词映射为其索引值。

而后,查看 text 中独立词汇的数量

输入后果:Number of unique words: 14666

2. 嵌入 GloVe 字典
在这里咱们将应用 GloVe 预训练的语料库模型来示意咱们的单词。GloVe 模型用于进行词的向量化示意,使得向量之间尽可能多地蕴含语义和语法的信息。咱们须要输出语料库,而后通过该模型输入词向量。该办法的原理是首先基于语料库构建词的共现矩阵,而后基于共现矩阵和 GloVe 模型学习词向量。GloVe 语料库共有 3 种类型:50D,100D 和 200 D。在这里咱们将应用 100D。

3. 匹配 GloVe 向量

输入后果:
100%|██████████| 14666/14666 [00:00<00:00, 599653.57it/s]
(14667, 100)

建设模型

从 2014 年起,NLP 的支流办法转移到非线性的神经网络办法,从而输出也从稠密高维特征向量变为低位浓密特征向量。神经网络不仅像传统机器学习办法一样学习预测,同时也学习如何正确表白数据,即在解决输入输出对时,网络外部产生一系列转化以解决输出数据来预测输入数据。
因而,本次建模以神经网络为根底,设置了 Embedding 层,Dropout 层,LSTM 层,以及全连贯层。
1. 定义模型函数
导入神经网络相干库后定义模型函数。

# 嵌入层

model.add(Embedding(input\_dim=num\_words,

                    output_dim=100,

                    embeddings_initializer=initializers.Constant

增加 Embedding 层以初始化 GloVe 模型训练出的权重矩阵。input_dim 即词汇量,输出数组中的词典大小是 14666,即有 14666 个不同的词,所以我的 input_dim 便要比 14666 要大 1,output_dim 是密集嵌入的尺寸,就如同 CNN 最初的全连贯层一样,下面设置的 100,便将每一个词变为用 1 ×100 来示意的向量,embeddings_initializer 为嵌入矩阵的初始化的办法,为预约义初始化办法名的字符串,或用于初始化权重的初始化器。输出序列的长度设置为序列长度 20,将每个 text 示意为一个 20×100 的矩阵

因为文本数据的连续性,咱们增加 LSTM 层。LSTM 是作为短期记忆的解决方案而创立的长短期记忆模型,和 RNN 相似,只是当词向量作为输出进入神经元后,神经元会依照某种形式对该词向量的信息进行抉择,存储成新的信息,输出到相邻的暗藏层神经元中去。

输入后果:

2. 参数抉择与调优
本文使用穿插验证的办法失去验证集精度,并以此为规范,应用网格搜寻来确定最优超参数。
Scikit-Learn 里有一个 API 为 model.selection.GridSearchCV,能够将 keras 搭建的模型传入,作为 sklearn 工作流程一部分。因而,咱们使用此函数来包装 keras 模型以便在 scikit-learn 中应用 keras。

3. 模型训练

输入后果:

输入后果:

由训练过程可知,验证集准确率最高的参数组合为第五次训练时的参数,batch_size=10 ,epochs=10。
4. 模型评估

查看最终参数抉择的后果和穿插验证的后果:

输入后果:
穿插验证均匀准确率:0.7921975544580065
最好的参数模型:{‘batch\_size’: 10,‘nb\_epoch’: 10}

5. 与传统机器学习模型比照
将 train 中训练集数据划分为训练集和验证集,而后比照其在验证集上的准确率。

别离应用 SVM,KNN,多层感知器,奢侈贝叶斯,随机森林,GBDT 等办法构建模型,与神经网络进行比照。

输入后果:
模型 1 验证集准确率: 0.6250820748522653
模型 2 验证集准确率: 0.5843729481286933
模型 3 验证集准确率: 0.5384110308601444
模型 4 验证集准确率: 0.4799737360472751
模型 5 验证集准确率: 0.6323046618516087
模型 6 验证集准确率: 0.6401838476690742

以上模型的验证集准确率与神经网络的验证集准确率相比差异较大,可见本文基于神经网络的文本预测模型是绝对精确且牢靠的。

后果预测

咱们持续通过上述步骤构建的神经网络模型预测 test 测试集中的 target 列。

# 预测

predictions = grid\_result.predict(testing\_padded)

submission\['target'\] = (predictions > 0.5).astype(int)

输入后果:

我的项目后果

实在虚伪样本比例靠近 1:1.

劫难相干推文中提到最多的词汇是 fire。

最好的参数组合是 batch_size=10 ,epochs=10。

将测试集输出模型失去最终预测后果。

对于作者

在此对 Yunfan Zhang 对本文所作的奉献示意诚挚感激,她特长机器学习,概率论与数理统计。


 

最受欢迎的见解

1.R 语言实现 CNN(卷积神经网络)模型进行回归

2.r 语言实现拟合神经网络预测和后果可视化

3.python 用遗传算法 - 神经网络 - 含糊逻辑控制算法对乐透剖析

4.R 语言联合新冠疫情 COVID-19 股票价格预测:ARIMA,KNN 和神经网络工夫序列剖析

5.Python TensorFlow 循环神经网络 RNN-LSTM 神经网络预测股票市场价格工夫序列和 MSE 评估准确性

6.Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

7. 用于 NLP 的 seq2seq 模型实例用 Keras 实现神经机器翻译

8. R 语言用 FNN-LSTM 假近邻长短期记忆人工神经网络模型进行工夫序列深度学习预测

9.Python 用 RNN 循环神经网络:LSTM 长期记忆、GRU 门循环单元、回归和 ARIMA 对 COVID-19 新冠疫情新增人数工夫序列预测

正文完
 0