AI夏令营第三期 - 基于论文摘要的文本分类与关键词抽取挑战赛笔记

赛题:基于论文摘要的文本分类与关键词抽取

背景:高效的从海量医学文献中提取疾病诊断和治疗关键信息

任务:通过论文摘要判断论文是否为医学文献 样例

数据集:csv文件,字段:标题、作者、摘要、关键词

评价指标:F1_score

解题思路:文本分类任务

思路一:特征提取+机器学习

数据预处理->特征提取->构建训练集和测试集->模型训练和评估->调参优化

数据预处理: 文本清洗(去除特殊字符、标点符号)

分词

NLP工具包(NLTK\spaCy)

特征提取: 文本转换为向量表示

TF-IDF(词频-逆文档频率):计算文本中词语的重要性

BOW(词袋模型):统计词语在文本中的出现次数

使用scikit-learn库的TfidfVectorizer或CountVectorizer来实现

构建训练集和测试集:分割预处理后的数据

模型训练和评估:训练集训练模型,测试集评估结果

调参优化:调整参数

机器学习baseline:

LogisticRegression模型

实则为一个线性分类器,通过 Logistic 函数(或

Sigmoid 函数),将数据特征映射到0~1区间的一个概率值(样本属于正例的可能性),通过与 0.5 的比对得出数据所属的分类(二分类)。逻辑回归的数学表达式为:

使用 sklearn.linear_model.LogisticRegression 来调用已实现的逻辑回归模型

复制代码
								Pandas:Python 语言的一个扩展程序库,用于数

据分析,基础是Numpy

scikit-learn:内部封装了多种机器学习算法与数据处理算法,提供了包括数据清洗、数据预处理、建模调参、数据验证、数据可视化的全流程功能

特征提取:

即从训练数据的特征集合中创建新的特征子集的过程。

提取出来的特征子集特征数一般少于等于原特征数,但能够更好地表征训练数据的情况,使用提取出的特征子集能够取得更好的预测效果。

训练数据的每一个维度称为一个特征

可以使用 sklearn 库中的 feature_extraction 包来实现文本与图片的特征提取。

在 NLP 任务中,特征提取一般需要将自然语言文本转化为数值向量表示,常见的方法包括基于 TF-IDF(词频-逆文档频率)提取或基于 BOW(词袋模型)提取

TF-IDF(term frequency--inverse document frequency):一种用于信息检索与数据挖掘的常用加权技术

TF 指 term frequence,即词频,指某个词在文章中出现次数与文章总词数的比值

IDF 指 inverse document frequence,即逆文档频率,指包含某个词的文档数占语料库总文档数的比例的倒数。

每个词最终的 IF-IDF 即为 TF 值乘以 IDF 值。计算出每个词的 TF-IDF 值后,使用 TF-IDF 计算得到的数值向量替代原文本即可实现基于 TF-IDF 的文本特征提取。

使用sklearn.feature_extraction.text 中的 TfidfVectorizer 类来简单实现文档基于 TF-IDF 的特征提取

BOW(Bag of Words)是一种常用的文本表示方法,其基本思想是假定对于一个文本,忽略其词序和语法、句法,仅仅将其看做是一些词汇的集合,而文本中的每个词汇都是独立的。

使用 sklearn.feature_extraction.text 中的 CountVectorizer 类来简单实现文档基于频数统计的 BOW 特征提取

停用词(Stop Words)是自然语言处理领域的一个重要工具,通常被用来提升文本特征的质量,或者降低文本特征的维度。

忽略一些不能提供有价值的信息作用的词语

划分数据集:训练集、验证集、预测集

同分布采样划分训练集和验证集

交叉验证,即对于一个样本总量为 T 的数据集,我们一般随机采样 10%~20%(也就是 0.1T~0.2T 的样本数)作为验证集,而取其他的数据为训练集。

使用 sklearn.model_selection 中的 train_test_split 函数便捷实现数据集的划分

选择机器学习模型:

  • sklearn.linear_model:线性模型,如线性回归、逻辑回归、岭回归等
  • sklearn.tree:树模型,一般为决策树
  • sklearn.neighbors:最近邻模型,常见如 K 近邻算法
  • sklearn.svm:支持向量机
  • sklearn.ensemble:集成模型,如 AdaBoost、GBDT等
    先实例化一个模型对象,再使用 fit 函数拟合训练数据,最后使用 predict 函数预测测试数据

数据探索:

使用pandas读取数据

利用pd.read_csv()方法对赛题数据进行读取,读取后返回一个DataFrame 数据

数据清洗:

数据和特征决定了机器学习的上限

数据清洗的作用是利用有关技术如数理统计、数据

挖掘或预定义的清理规则将脏数据转化为满足数据质量要求的数据。主要包括缺失值处理、异常值处理、数据分桶、特征归一化/标准化等流程。

由于表格中存在较多列,我们将这些列的重要内容组合在一起生成一个新的列方便训练

如果数据集中某行缺少title author abstract中的内容,我们需要利用fillna()来保证不会出现报错。

特征工程:

把原始数据转变为模型训练数据的过程,目的是获取更好的训练数据特征。比如BOW

模型训练与验证:

模型的选择决定结果的上限, 如何更好的去达到模型上限取决于模型的调参。

结果输出:

输出格式结果

改进1:使用TF-IDF,提高到0.76324

cpp 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer

vector = TfidfVectorizer().fit(train['text'])

改进2:添加停用词,下降到0.75911

cpp 复制代码
stops =[i.strip() for i in open(r'stop.txt',encoding='utf-8').readlines()] 

改进3:去掉author,更换模型RidgeClassifier()下降到0.73032

cpp 复制代码
train['text'] = train['title'].fillna('') + ' ' + train['abstract'].fillna('')+ ' ' + train['Keywords'].fillna('')
test['text'] = test['title'].fillna('') + ' ' + test['abstract'].fillna('')
model = RidgeClassifier()
相关推荐
mahuifa11 分钟前
(9)python开发经验
python·开发经验
python15636 分钟前
使用Langfuse和RAGAS,搭建高可靠RAG应用
人工智能·windows·python
秋野酱42 分钟前
python项目参考文献
开发语言·python
CodeBlossom1 小时前
java加强 -stream流
java·windows·python
(・Д・)ノ1 小时前
python打卡day28
开发语言·python
保利九里1 小时前
java中的方法详解
java·开发语言·python
Y3174291 小时前
Python Day25 学习
python·学习
江禾藜2 小时前
Python爬虫之路(14)--playwright浏览器自动化
爬虫·python·自动化
灏瀚星空2 小时前
Python标准库完全指南:os、sys与math模块详解与实战应用
开发语言·python·microsoft
坐吃山猪2 小时前
Python-Flask-Dive
开发语言·python·flask