Tweet with Disaster(Kaggle NLP项目实战)

该项目是在Kaggle上的NLP挑战,目标是预测推文是否涉及真实灾难。通过EDA、数据预处理,利用Bert进行预训练模型的迁移学习。训练后模型在测试集上达到0.83742的准确率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目介绍(Real or Not? NLP with Disaster Tweets)

项目kaggle链接:https://www.kaggle.com/c/nlp-getting-started/overview

在紧急情况下,Twitter已经成为一个重要的沟通渠道。智能手机的普及使人们能够实时宣布正在观察的紧急情况。正因为如此,越来越多的机构对程序化监控Twitter(即救灾组织和新闻机构)感兴趣。但是,人们并不总是清楚一个人的话是否真的在宣告一场灾难。比如下面的例子:

在这里插入图片描述

作者明确地使用了“燃烧”这个词,但它的意思是隐喻性的。这一点对人类来说是显而易见的,特别是在视觉辅助下。但对机器来说就不那么清楚了。

在这场竞争中,你面临着建立一个机器学习模型的挑战,该模型可以预测哪些Tweets是关于真正的灾难的,哪些Tweets不是。

EDA

数据预处理部分

1 导入数据

train = pd.read_csv('../input/nlp-getting-started/train.csv')
test = pd.read_csv('../input/nlp-getting-started/test.csv')
sample_submission = pd.read_csv('../input/nlp-getting-started/sample_submission.csv')

# Print the shape of the training data
print('{} rows and {} cols in training dataset.'.format(train.shape[0], train.shape[1]))
print('{} rows and {} cols in training dataset.'.format(test.shape[0], test.shape[1]))

# Inspecting the training data
train.head(10)

输出如下:

2 描述性分析

查看标签0和1的分布情况

# Frequency for taget variable
count_table = train.target.value_counts()
display(count_table)

# Plot class distribution
plt.figure(figsize=(6,5))
plt.bar('False',count_table[0],label='False',width=0.6)
plt.bar('True', count_table[1],label='True',width=0.6)
plt.legend()
plt.ylabel('Count of examples')
plt.xlabel('Category')
plt.title('Class Distribution')
plt.ylim([0,4700])
plt.show()

数据对比
每条推特长度的分布

# Plot the frequency of tweets length
bins = 150
plt.figure(figsize=(18,5))
plt.hist(train[train['target']==0]['length'], label= 'False',bins=bins,alpha=0.8)
plt.hist(train[train['target']==1]['length'], label= 'True', bins=bins,alpha=0.8) 
plt.xlabel('Length of text (characters)')
plt.ylabel('Count')
plt.title('Frequency of tweets length')
plt.legend(loc='best')
plt.show()

在这里插入图片描述
两种推特的长度分布情况对比

# Frequency of tweets length in 2 classes
fg, (ax1, ax2)=plt.subplots(1,2,figsize=(14,5))
ax1.hist(train[train['target']==0]['length'],color='red')
ax1.set_title('Distribution of fake tweets')
ax1.set_xlabel('Tweets length (characters)')
ax1.set_ylabel('Count')
ax2.hist(train[train['target']==1]['length'],color='blue')
ax2.set_title('Distribution of true tweets')
ax2.set_xlabel('Tweets length (characters)')
ax2.set_ylabel('Count')
fg.suptitle('Characater in classes')
plt.show()

在这里插入图片描述
两种推特出现的词的数量分布

# Plot the distribution of count of words
words_true = train[train['target']==1]['text'].str.split().apply(len)
words_false = train[train['target']==0]['text'].str.split().apply(len)
plt.figure(figsize=(10,5))
plt.hist(words_false, label='False',alpha=0.8,bins=15)
plt.hist(words_true, label='True',alpha=0.6,bins=15)
plt.legend(loc='best')
plt.title('Count of words in tweets')
plt.xlabel('Count of words')
plt.ylabel('Count')
plt.show()

在这里插入图片描述

3 数据清洗

定义去除所有停用词,语气符号,html符号,表情符号的函数

# Define a function to remove URL
def remove_url(text):
    url = re.compile(r'https?://\S+|www\.\S+'
### Kaggle 上的 Transformer 资源 #### 变压器教程 Kaggle 提供了许多关于变压器模型的高质量教程,这些教程不仅涵盖了理论基础还提供了实际操作案例。对于希望深入了解如何构建和优化基于注意力机制的神经网络的人来说非常有用。 例如,在一篇名为《A Comprehensive Guide to Transformers》的文章中,作者详细介绍了Transformers的工作原理以及它们是如何通过自注意机制来处理序列数据的[^1]。这篇文章适合那些想要理解Transformer背后数学概念的学习者,并且包含了大量可视化帮助读者更好地掌握知识点。 此外,《Getting Started with Transformers on Text Classification Tasks Using Hugging Face Library》这篇笔记则更侧重于实践应用方面。它展示了怎样利用HuggingFace库快速搭建起一个用于文本分类任务的Transformer模型并对其进行微调。这对于初学者来说是一个很好的起点,因为不需要从头编写复杂的代码就可以体验到最先进的NLP技术带来的便利之处。 #### 竞赛项目 除了丰富的学习材料之外,Kaggle上还有不少涉及Transformer的应用型比赛可以参与挑战: - **Jigsaw Toxic Comment Classification Challenge**: 此次赛事的目标是从给定的数据集中识别出具有攻击性的言论。许多参赛队伍采用了预训练好的BERT或者其他变体形式作为解决方案的一部分,取得了不错的效果。 - **Quora Question Pairs Competition**: 这个竞赛旨在判断两个问题是否意思相同。由于问答配对的任务本质上属于自然语言推理范畴,因此非常适合用来测试各种改进版本的Encoder层设计效果。 ```python import transformers from transformers import BertTokenizer, TFBertForSequenceClassification tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = TFBertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) ``` 上述Python脚本展示了一个简单的例子,说明了如何加载预先训练过的Bert模型来进行二元分类任务。这只是一个入门级示范;实际上可以根据具体需求调整参数设置以适应不同类型的问题场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值