参加了DataWhale的夏令营学习活动,本文是根据讯飞平台数据,基于论文摘要的文本分类与关键词抽取挑战赛:2023 iFLYTEK A.I.开发者大赛-讯飞开放平台
本次夏令营使用三种方法对文本标签进行预测:
1.文本特征提取+机器学习方法
2.深度学习BERT模型
3.使用大模型方法Topline
本文是用第一种方法即文本特征提取+机器学习方法,使用baseline跑通数据集。适合新手上手。
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
# 过滤警告信息
from warnings import simplefilter
from sklearn.exceptions import ConvergenceWarning
simplefilter("ignore", category=ConvergenceWarning)
#读取数据集
train = pd.read_csv('F:/nlp学习/初学/train.csv')
train
# 监测是否有缺失值
train[train['title'].isna()] #没有有缺失值的行
# 填补缺失值
train['title'] = train['title'].fillna('')
train['abstract'] = train['abstract'].fillna('')
#读取测试集
test = pd.read_csv('F:/nlp学习/初学/testB.csv')
test
可以测试集是不含有label变量,即标签的。也没有Keywords变量,即关键词。
# 填补缺失值
test['title'] = test['title'].fillna('')
test['abstract'] = test['abstract'].fillna('')
# 提取文本特征,生成训练集与测试集
# 拼接字符串
train['text'] = train['title'].fillna('')+' '+train['author'].fillna('')+' '+train['abstract'].fillna('')+' '+train['Keywords'].fillna('')
test['text'] = test['title'].fillna('')+' '+test['author'].fillna('')+' '+test['abstract'].fillna('')
# test的‘text’没有拼接keywords
# 向量化
vector = CountVectorizer().fit(train['text'])
train_vector = vector.transform(train['text'])
test_vector = vector.transform(test['text'])
#引入模型--logistics回归
model = LogisticRegression()
#开始训练
model.fit(train_vector, train['label'])
#利用模型对测试集【预测】
test['label'] = model.predict(test_vector)
# 保存最终提交的文件
test['Keywords'] = test['title'].fillna('') #?
test[['uuid','Keywords','label']].to_csv('submit_task1.csv', index=None)
本文仅使用了词袋法结合Logistic回归。使用F1-score评判模型优劣,最终测试集的分数表现为0.67116。