📃Datawhale AI 夏令营 NLP赛事实践—基于论文摘要的文本分类与关键词抽取挑战赛
2023-7-31
| 2024-4-15
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
password
category
Property
Apr 15, 2024 07:06 AM
icon
💡
基于论文摘要的文本分类与关键词抽取挑战赛

0 数据解析

训练集与测试集数据为CSV格式文件,各字段分别是标题、作者和摘要。Keywords为任务2的标签,label为任务1的标签。训练集和测试集都可以通过pandas读取。
notion image

1 实践思路

TF-IDF算法介绍

  • TF(Term Frequency,词频),某个词在文档中出现的次数或频率。如果某篇文档中的某个词出现多次,那这个词可能是比较重要的词。当然,需要排除停用词。计算公式如下: 词频(TF)=某个词在文档中出现的次数/文档的总词数
  • IDF(Inverse Document Frequency,逆文档频率),这是一个词语“权重”的度量,如果一个词在多篇文档中词频较低,也就表示这是一个比较少见的词,则这个词 IDF 值越大。计算公式如下:逆文档频率(IDF)=log(语料库的文档总数/(包含该词的文档数+1))
  • 将 TF 和 IDF 相乘就得到 TF-IDF,计算公式如下:TF−IDF=词频(TF)×逆文档频率(IDF
一个词的重要程度跟它在文档中出现的次数成正比,跟它在语料库出现的次数成反比。这种计算方式能有效避免常用词对关键词的影响,提高了关键词与文章之间的相关性。

Bow模型介绍

词袋模型(Bag-of-Words model,BOW)BoW(Bag of Words)词袋模型最初被用在文本分类中,将文档表示成特征矢量。它的基本思想是假定对于一个文本,忽略其词序和语法、句法,仅仅将其看做是一些词汇的集合,而文本中的每个词汇都是独立的。简单说就是讲每篇文档都看成一个袋子(因为里面装的都是词汇,所以称为词袋,Bag of words即因此而来),然后看这个袋子里装的都是些什么词汇,将其分类。如果文档中猪、马、牛、羊、山谷、土地、拖拉机这样的词汇多些,而银行、大厦、汽车、公园这样的词汇少些,我们就倾向于判断它是一篇描绘乡村的文档,而不是描述城镇的。
sklearn库实现CountVectorizer的方法中,选择利用字典来构造词库
 
任务一:文献领域分类
针对文本分类任务,可以提供两种实践思路,一种是使用传统的特征提取方法(如TF-IDF/BOW)结合机器学习模型,另一种是使用预训练的BERT模型进行建模。使用特征提取 + 机器学习的思路步骤如下:
  1. 数据预处理:首先,对文本数据进行预处理,包括文本清洗(如去除特殊字符、标点符号)、分词等操作。可以使用常见的NLP工具包(如NLTKspaCy)来辅助进行预处理。
  1. 特征提取:使用TF-IDF(词频-逆文档频率)或BOW(词袋模型)方法将文本转换为向量表示。TF-IDF可以计算文本中词语的重要性,而BOW则简单地统计每个词语在文本中的出现次数。可以使用scikit-learn库的TfidfVectorizerCountVectorizer来实现特征提取。
  1. 构建训练集和测试集:将预处理后的文本数据分割为训练集和测试集,确保数据集的样本分布均匀。
  1. 选择机器学习模型:根据实际情况选择适合的机器学习模型,如朴素贝叶斯、支持向量机(SVM)、随机森林等。这些模型在文本分类任务中表现良好。可以使用scikit-learn库中相应的分类器进行模型训练和评估。
  1. 模型训练和评估:使用训练集对选定的机器学习模型进行训练,然后使用测试集进行评估。评估指标可以选择准确率精确率召回率F1值等。
  1. 调参优化:如果模型效果不理想,可以尝试调整特征提取的参数(如词频阈值、词袋大小等)或机器学习模型的参数,以获得更好的性能。
任务二:关键词提取
论文关键词划分为两类:
  • 在标题和摘要中出现的关键词
  • 没有在标题和摘要中出的关键词
在标题和摘要中出现的关键词:这些关键词是文本的核心内容,通常在文章的标题和摘要中出现,用于概括和提炼文本的主题或要点。对于提取这类关键词,可以采用以下方法:
  • 词频统计:统计标题和摘要中的词频,选择出现频率较高的词语作为关键词。同时设置停用词去掉价值不大、有负作用的词语。
  • 词性过滤:根据文本的词性信息,筛选出名词、动词、形容词等词性的词语作为关键词。
  • TF-IDF算法:计算词语在文本中的词频和逆文档频率,选择TF-IDF值较高的词语作为关键词。
没有在标题和摘要中出现的关键词:这类关键词可能在文本的正文部分出现,但并没有在标题和摘要中提及。要提取这些关键词,可以考虑以下方法:
  • 文本聚类:将文本划分为不同的主题或类别,提取每个主题下的关键词。
  • 上下文分析:通过分析关键词周围的上下文信息,判断其重要性和相关性。
  • 基于机器学习/深度学习的方法:使用监督学习或无监督学习的方法训练模型,从文本中提取出未出现在标题和摘要中的关键词。

2 Baseline精读

任务一:文献领域分类
Baseline中我们选择使用BOW将文本转换为向量表示,选择逻辑回归模型来完成训练和评估
完整代码如下:
在任务1中还可以尝试BERT模型,但直接TF-IDF(词频-逆文档频率)或BOW(词袋模型)方法的效果已经足够好,已经可以在测试集达到0.99+的分数。
任务二:关键词提取
在提交结果处提交,分别提交 submit_task1.csv 文件和提交 submit_task2.csv 文件,在排名结果页查看自己的成绩排名。完整baseline运行后a榜分数在0.97655左右

3 进阶技巧

Bert

notion image
notion image
notion image
notion image
notion image
 

使用预训练的BERT模型解决文本二分类问题

导入前置依赖
设置全局配置
进行数据读取与数据预处理
构建Dataset和Dataloader
可以看一下第一个数据:
构造Dataloader
notion image
notion image
定义预测模型
BERT模型在文本前插入一个[CLS]符号,并将该符号对应的输出向量作为整篇文本的语义表示,用于文本分类,如上图所示。可以理解为:与文本中已有的其它字/词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个字/词的语义信息。
定义出损失函数和优化器
定义验证方法
模型训练
输出结果

使用预训练的BERT模型解决关键词提取

当我们想从特定文档中了解关键信息时,通常会转向关键词提取(keyword extraction)。关键词提取(keyword extraction)是提取与输入文本最相关的词汇、短语的自动化过程。
目前已经有很多的集成工具库类似KeyBERT,已经能够达到非常好的效果,但是在这里我们选择使用BERT创建自己的关键词提取模型,来帮助大家更好的完成文本关键词提取的整个流程
导入前置依赖
读取数据集并处理
stop.txt文件链接:链接: https://pan.baidu.com/s/1mQ50_gsKZHWERHzfiDnheg?pwd=qzuc 提取码: qzuc
Bert预训练模型方面,这里我们使用distiluse-base-multilingual-cased,因为它在相似性任务中表现出了很好的性能,这也是我们对关键词/关键短语提取的目标!
由于transformer模型有token长度限制,所以在输入大型文档时,你可能会遇到一些错误。在这种情况下,您可以考虑将您的文档分割成几个小的段落,并对其产生的向量进行平均池化(mean pooling ,要取平均值)。
提取关键词
这里我的思路是获取文本内容的embedding,同时与文本标题的embedding进行比较,文章的关键词往往与标题内容有很强的相似性,为了计算候选者和文档之间的相似度,我们将使用向量之间的余弦相似度,因为它在高维度下表现得相当好。
得到结果,最后输出为要求格式

大模型

💡
视频讲解:https://www.bilibili.com/video/BV12841117Nn/
拓展链接:https://github.com/KMnO4-zx/huanhuan-chat.git

微调ChatGLM2-6b模型解决文本二分类任务

导入数据
制作数据集
微调大模型
  • 首先需要clone微调脚本:git clone https://github.com/KMnO4-zx/huanhuan-chat.git
  • 进入目录安装环境:cd ./huanhuan-chatpip install -r requirements.txt
  • 将脚本中的model_name_or_path更换为你本地的chatglm2-6b模型路径,然后运行脚本:sh xfg_train.sh
  • 微调过程大概需要两个小时(我使用阿里云A10-24G运行了两个小时左右),微调过程需要18G的显存,推荐使用24G显存的显卡,比如3090,4090等。
  • 当然,我们已经把训练好的lora权重放在了仓库里,您可以直接运行下面的代码。
  • 更多微调的细节我们会持续在这个仓库更新,欢迎关注star!https://github.com/KMnO4-zx/huanhuan-chat.git
加载训练好的LoRA权重,进行预测
制作submit
微调后的chatglm2-6b,任务一的准确率在0.985左右,将制作好的submit文件,在提交结果出提交即可。
在提交结果处提交,分别提交 submit_task1.csv 文件和提交 submit_task2.csv 文件,在排名结果页查看自己的成绩排名。

4 参考

  • 比赛
  • AI
  • ML
  • 机器学习赛事实践-AI量化模型预测挑战赛论文解读:Detecting and Grounding Multi-Modal Media Manipulation
    Loading...
    目录