【第一期AI夏令营丨自然语言处理】任务一:文本二分类_&&Baseline代码分析及改进
一、问题分析
从论文标题、摘要作者等信息,判断该论文是否属于医学领域的文献。
针对文本分类任务,可以提供两种实践思路,一种是使用传统的特征提取方法(如TF-IDF/BOW)结合机器学习模型,另一种是使用预训练的BERT模型进行建模。使用特征提取 + 机器学习的思路步骤如下:
- 数据预处理 :首先,对文本数据进行预处理,包括文本清洗(如去除特殊字符、标点符号)、分词等操作。可以使用常见的NLP工具包(如NLTK或spaCy)来辅助进行预处理。
- 特征提取:使用TF-IDF(词频-逆文档频率)或BOW(词袋模型)方法将文本转换为向量表示。TF-IDF可以计算文本中词语的重要性,而BOW则简单地统计每个词语在文本中的出现次数。可以使用scikit-learn库的TfidfVectorizer或CountVectorizer来实现特征提取。
- 构建训练集和测试集:将预处理后的文本数据分割为训练集和测试集,确保数据集的样本分布均匀。
- 选择机器学习模型:根据实际情况选择适合的机器学习模型,如朴素贝叶斯、支持向量机(SVM)、随机森林等。这些模型在文本分类任务中表现良好。可以使用scikit-learn库中相应的分类器进行模型训练和评估。
- 模型训练和评估:使用训练集对选定的机器学习模型进行训练,然后使用测试集进行评估。评估指标可以选择准确率、精确率、召回率、F1值等。
- 调参优化:如果模型效果不理想,可以尝试调整特征提取的参数(如词频阈值、词袋大小等)或机器学习模型的参数,以获得更好的性能。
二、Baseline代码分析
1 | # 导入pandas用于读取表格数据 |
1 | ''' |
于是我去数据集中的第一个文本中进行验证发现,access确实是出现了两次(如下图所示)。
引入模型及标签预测:
1 | test_vector = vector.transform(test['text']) |
1 | ''' |
三、代码修改
在跑通Baseline代码后,得到的分数为:0.99384。 以下是尝试的几种修改策略。
将CountVectorizer替换为TfidfVectorizer
未设置参数时得到的评分为:0.97655
设置参数后得到的评分为:0.98171
1 | # 使用TfidfVectorizer进行文本向量化 |
尝试使用SVM模型
使用SVM模型得到的评分为:0.99489
1 | from sklearn.svm import SVC |
尝试使用随机森林模型
使用随机森林模型得到的评分为:0.98995
1 | from sklearn.ensemble import RandomForestClassifier |