合并两个Clickbait数据集并训练文本分类器
将两个Clickbait数据集合并并训练文本分类器
本项目使用Python对两个Clickbait数据集进行合并、划分和训练,并构建一个文本分类器来识别Clickbait文本。
数据集
- 正面例子:https://github.com/pfrcks/clickbait-detection/blob/master/clickbait
- 负面例子:https://github.com/pfrcks/clickbait-detection/blob/master/not-clickbait
问题
问题 1 - 读取数据 (5 分)
- 使用Python读取两个Clickbait数据集,并将它们合并成一个随机排序的单一数据集。(可以使用numpy.random.shuffle函数来随机排序数据)
- 然后将数据集分成训练集、测试集和验证集。训练集占72%,验证集占8%,测试集占20%。(相当于20%的测试集,剩余的90%/10%用于训练和验证)。
问题 2 - 基准性能 (10 分 - 在Blackboard中回答)
- 假设你有一个简单的基准分类器,它将所有呈现给它的文本都标记为Clickbait。这个分类器在测试集上的精度、召回率和F1分数是多少?你认为是否有另一个好的基准分类器可以获得更高的F1分数?
- 如果你愿意,你可以将每个分割保存为一个索引(行号列表),而不是创建三个独立的数据集。
- 这三个数据集的“目标率”是多少?也就是说,测试数据集中有多少百分比的文本被标记为Clickbait?在你的笔记本中展示你的结果。
问题 3 - 训练单一的词袋 (BOW) 文本分类器 (20 分)
- 使用scikit-learn的管道模块,创建一个管道来训练一个BOW朴素贝叶斯模型。我们建议使用CountVectorizer和MultinomialNB类。在你的模型中包含一元词和二元词 (见参数:ngram_range)
- 在你的训练集上拟合你的分类器
- 使用sklearn.metrics中的函数,计算你的训练集和验证集上的精度、召回率和F1分数。在你的笔记本中展示结果。将“clickbait”作为你的目标类 (即,对于clickbait,y=1,对于非clickbait,y=0)
替代方案: 如果你已经熟悉朴素贝叶斯,你可以选择另一个词袋分类器来解决这个问题。你的方法应该有一些方法来选择最重要的特征或关键指标,映射到你词汇表中的词或n-gram,这样你就可以完成剩下的问题
问题 4 - 超参数调整 (20 分)
- 使用ParameterGrid类,运行一个小型的网格搜索,在其中至少改变三个模型参数
- CountVectorizer的max_df (用于过滤文档频率的阈值)
- 朴素贝叶斯模型的alpha或平滑度
- 你选择的另一个参数。这可以是非数字的;例如,你可以考虑一个带有和不带有二元词的模型 (见CountVectorizer类中的参数“ngram”)
- 展示你验证集上的精度、召回率和F1分数指标。如果你的网格搜索非常大 (>50 行),你可以将输出限制为最高和最低结果。
替代方案: 如果你在问题 3 中使用了朴素贝叶斯以外的方法,那么请确保你明确说明在问题 4 中调整了哪些指标。
问题 5 - 模型选择 (10 分)
- 使用上一问题中验证集指标,选择一个模型作为你的选定模型。你可以选择如何选择这个模型;一种方法是选择在你的训练集上显示最高F1分数的模型。
- 接下来将你选定的模型应用于你的测试集,并计算精度、召回率和F1分数。在你的笔记本中展示结果。
问题 6 - 关键指标 (10 分)
- 使用你在上一问题中选择的模型的对数概率,选择 5 个强烈的Clickbait指标词。也就是说,如果你需要根据单个词来过滤标题,而不需要机器学习模型,那么这些词将是一个不错的选择。在你的笔记本中展示这个关键词列表。
- 你可以选择如何处理二元词 (例如,'win
big');你可以选择忽略它们,只选择一元词词汇表中的词作为关键指标。
问题 7 - 正则表达式 (10 分)
- 你的 IT 部门联系了你,因为他们听说你可以帮助他们找到Clickbait。他们对你的机器学习模型感兴趣,但他们今天需要一个解决方案。
- 写一个正则表达式来检查文本中是否包含上一问题中的任何关键词。你应该写一个正则表达式来检测你的前 5 个关键词中的任何一个。你的正则表达式应该以某种方式识别词边界。也就是说,关键词“win”不应该在文本“Gas prices up in winter months”中被检测到。
- 使用python re 库 - 将你的函数应用于你的测试集 (见函数 re.search)。这个分类器的精度和召回率是多少?在你的笔记本中展示你的结果。
问题 8 - 比较结果 (15 分 - 在Blackboard中回答)
- 将上一问题中的基于规则的分类器与你的机器学习解决方案进行比较。哪个分类器显示出最好的模型指标?你认为它为什么表现最好?这两个分类器与你的简单基准 (问题 2) 相比如何?
- 如果你有更多时间来尝试改进这个Clickbait检测解决方案,你会探索什么?(这个问题没有唯一的正确答案;回顾你的结果,提出你自己的想法)
问题 8 分析
问题 2 中的基准分类器将所有文本都标记为clickbait,这是因为基准分类器没有根据任何特征或模型进行判断,而是简单地将所有文本都判定为clickbait。因此,基准分类器的精确度、召回率和F1分数都为0,因为它无法正确识别非clickbait文本。
从问题 4 和问题 5 中,我们可以选择出性能最好的模型,并将其应用于测试集。通过比较规则-based分类器和机器学习解决方案,我们可以得出以下结论:
-
性能比较:机器学习解决方案通常会比规则-based分类器具有更高的模型指标,如精确度、召回率和F1分数。这是因为机器学习模型能够利用大量的训练数据和特征来学习和判断,而规则-based分类器仅仅基于预定义的规则进行判断,无法适应不同的数据和情况。
-
原因分析:机器学习解决方案的性能更好的原因是它能够学习和捕捉数据中的复杂模式和特征。它可以根据训练数据中的上下文和语义信息来做出判断,而规则-based分类器则只能根据预定义的规则进行判断,无法适应不同的数据和情况。
-
与基准分类器的比较:与基准分类器相比,机器学习解决方案通常能够提供更好的性能。基准分类器将所有文本都标记为clickbait,因此其精确度、召回率和F1分数都为0。而机器学习解决方案通过学习和判断数据中的模式和特征,能够更准确地将clickbait和非clickbait文本进行分类,从而得到更好的模型指标。
如果有更多时间来改进clickbait检测解决方案,可以考虑以下方面:
-
特征工程:尝试使用更多的特征,如文本长度、单词频率、情感分析等,来增强模型的性能。
-
模型选择:尝试其他的文本分类模型,如支持向量机 (SVM)、决策树、随机森林等,以找到更适合数据的模型。
-
超参数优化:通过网格搜索或随机搜索来优化模型的超参数,以获得更好的性能。
-
数据增强:使用数据增强技术来扩充训练数据集,以改善模型的泛化能力。
-
集成学习:尝试使用集成学习方法,如投票、堆叠等,来提高模型的性能和鲁棒性。
总之,改进clickbait检测解决方案的方法有很多,可以从特征工程、模型选择、超参数优化、数据增强和集成学习等方面进行尝试,以获得更好的性能和准确性。
原文地址: https://www.cveoy.top/t/topic/C4g 著作权归作者所有。请勿转载和采集!