北航学长的NLP赛事教程!

 Datawhale干货 

作者:阿水,北京航空航天大学,Datawhale成员

a4559ad0c51d9c3fc0f8b60280d81f3f.png

赛事背景

在人工智能领域的学习中,研读有关文献是非常重要的学习途径,而如何在汗牛充栋的论文库中,高效快速的检索到相关重要文献,就成为知识学习首先要解决的难点。

完整代码实践:

https://xj15uxcopw.feishu.cn/docx/doxcnUDk1pzzvBWi5AIfBGBpyne

赛题任务

机器通过对论文摘要等信息的理解,划分论文类别。具体输入输出示例如下:

  • 输入:论文信息,格式如下图

adfd62f1f6b12e4ec06a777ba0637185.png
  • 输出:电气

实践思路

本赛题是一个典型的文本分类任务。由于文本数据是典型的非结构化数据,此类实践的处理通常涉及到 特征提取分类模型 两部分。常见的思路有两种:基于机器学习的思路和基于深度学习的思路。

可以先尝试基于机器学习的思路:TF-IDF + 机器学习分类器,其中分类器选择SGD线性分类器。SGD是线性分类器的一种,可以理解为逻辑回归+随机梯度下降,适合处理文本TF-IDF编码后的稀疏场景。

ae8eaaeeadb4eb0afef753ed4e98a24c.png

实践代码

具体代码如下:

#安装相关依赖库 如果是windows系统,cmd命令框中输入pip安装,参考上述环境配置
#!pip install sklearn
#!pip install pandas
#---------------------------------------------------
#导入库
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import cross_val_score

#----------------数据探索----------------
#数据预处理
#加载训练集
train_df = pd.read_csv('./基于论文摘要的文本分类与查询性问答公开数据/train.csv', sep=',')
#加载测试集
test_df = pd.read_csv('./基于论文摘要的文本分类与查询性问答公开数据/test.csv', sep=',')

#EDA数据探索性分析
train_df.head()

test_df.head()

#----------------特征工程----------------
#将Topic(Label)编码
train_df['Topic(Label)'], lbl = pd.factorize(train_df['Topic(Label)'])

#将论文的标题与摘要组合为 text 特征
train_df['Title'] = train_df['Title'].apply(lambda x: x.strip())
train_df['Abstract'] = train_df['Abstract'].fillna('').apply(lambda x: x.strip())
train_df['text'] = train_df['Title'] + ' ' + train_df['Abstract']
train_df['text'] = train_df['text'].str.lower()

test_df['Title'] = test_df['Title'].apply(lambda x: x.strip())
test_df['Abstract'] = test_df['Abstract'].fillna('').apply(lambda x: x.strip())
test_df['text'] = test_df['Title'] + ' ' + test_df['Abstract']
test_df['text'] = test_df['text'].str.lower()

#使用tfidf算法做文本特征提取
tfidf = TfidfVectorizer(max_features=2500)

#----------------模型训练----------------

train_tfidf = tfidf.fit_transform(train_df['text'])
clf = SGDClassifier()
cross_val_score(clf, train_tfidf, train_df['Topic(Label)'], cv=5)

test_tfidf = tfidf.transform(test_df['text'])
clf = SGDClassifier()
clf.fit(train_tfidf, train_df['Topic(Label)'])
test_df['Topic(Label)'] = clf.predict(test_tfidf)

#----------------结果输出----------------
test_df['Topic(Label)'] = test_df['Topic(Label)'].apply(lambda x: lbl[x])
test_df[['Topic(Label)']].to_csv('submit.csv', index=None)

上分思路

上述代码详细讲解了基于机器学习的思路,若想进阶实践,可考虑尝试基于深度学习来进行实践,提供以下几种常见解题思路供大家参考:

  • 思路1:FastText:FastText是入门款的词向量,利用Facebook提供的FastText工具,可以快速构建出分类器。

  • 思路2:WordVec + 深度学习分类器:WordVec是进阶款的词向量,并通过构建深度学习分类完成分类。深度学习分类的网络结构可以选择TextCNN、TextRNN或者BiLSTM。

  • 思路3:Bert词向量:Bert是高配款的词向量,具有强大的建模学习能力。

新手村

本文为Datawhale项目实践1.0的教程,如果你是在校生,或者刚入门阶段,可以进内测群,我们在学习反馈中一起优化教程。

c79c1d69fe0ce916ef10e952e4cbbfb6.jpeg

260f3b5ae6a3d63f227dc1fcb1fd4594.png

整理不易,三连

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值