全文链接: 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,便将每一个词变为用1x100来示意的向量,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新冠疫情新增人数工夫序列预测