返回列表

12th place solution: DeBERTa + TF-IDF

593. LLM - Detect AI Generated Text | llm-detect-ai-generated-text

开始: 2023-10-31 结束: 2024-01-22 AI安全与对抗 数据算法赛

第12名解决方案:DeBERTa + TF-IDF

作者:Uesugi Erii(Kaggle MASTER级)
比赛排名:第12名
发布时间:2024年1月24日

感谢主办方举办了如此有趣的比赛。最终解决方案采用了DeBERTa和TF-IDF的集成方法。

关键点

  1. TF-IDF使用测试数据集
  2. 数据覆盖范围尽可能广泛

让我分享一些关于TF-IDF的思考。该方法仅考虑测试集中需要预测的n-gram特征,这意味着从测试集获得的n-gram肯定是干净且有价值的特征。使用这些特征在训练集上进行训练是非常正确高效的做法。从另一个角度看,这相当于将测试集的数据(特征)"泄露"到训练过程中。在Kaggle竞赛中,数据泄露通常能显著提升成绩,因此没有理由不采用这种方法。

数据集构建

在初期阶段,我为Persuade语料库中的每个提示生成了数据。但当我在该数据上训练DeBERTa模型时,发现其在LB上的表现很差。因此我放弃使用该部分数据进行训练,转而将其作为本地CV数据集。这场比赛让我联想到Stable Diffusion的"Image to Prompts"任务,于是我开始考虑使用更广泛的数据集。

在寻找数据集的过程中,我发现有很多选择。经过仔细考虑,我选择了tiiuae/falcon-refinedweb数据集,主要原因是它经过了详细的过滤处理,在Falcon论文中表现优于其他数据集。

由于目标是找到最全面的数据,我将数据集中第一个分块文件的全部文本视为初始文本池。对于其他分块文件中的文本,我使用BAAI/bge-base-en-v1.5计算当前文本与之前文本池中所有文本的相似度,只有当相似度低于阈值(0.7)时,才将该文本加入文本池。

经过长度过滤(>768个token)后,最终数据集包含约60万条数据。

对于每个文本,我随机抽取部分内容:将开头128~384个token的随机长度文本作为上下文指导,其余文本作为训练数据(generated=0)。对于提取的上下文,输入到不同的LLM中,基于上下文风格继续生成文本(generated=1)。

根据我的经验和观察,除mistral和llama2外,其他模型生成的LLM质量都不高,因此我主要使用这两个模型及其变体。

部分LLM生成的序列非常短,且质量普遍较低,因此后续我增加了长度过滤(>170个token)。

最终LLM生成约41万条数据,因此最终数据集由82万条文本组成,正负样本比例为1:1。

对于给定上下文,我拥有真实文本和LLM生成的文本,且两者长度差异显著。因此在DeBERTa训练过程中,我会将文本随机截断至randint(128, min(原始长度, LLM长度))的范围,确保不同标签文本的长度分布在训练过程中保持一致,避免模型学习文本长度这一无关变量。

模型结构

DeBERTa

  • 模型ID:deberta-v3-large
  • 训练和推理长度:512
  • 训练轮数:3
  • 头部结构:平均池化
  • LLRD(层间学习率衰减)

TF-IDF

代码来自LLM DAIGT Analyse edge cases

我尝试进行了一些修改,但改进效果不够显著,因此决定保持原样。本地数据与测试集的分布必然存在巨大差异,为了避免在本地数据上过拟合并更好地利用测试集,我最终决定不做任何修改。

集成方法

TF-IDF : deberta = 0.85 : 0.15

权重基于本地和LB表现的平均值确定。

放弃的思路

以下思路在初步尝试后被放弃,可能是因为超出我的能力范围或需要大量计算资源:

  1. 微调LLM模仿Persuade风格

    微调后发现LLM生成质量大幅下降,且未能使DeBERTa更难区分,因此放弃了该方法。

  2. 对抗学习

    让LLM生成数据,DeBERTa选择难以区分的困难样本,LLM继续在困难样本上训练并生成...

    评估所需计算量后,我果断放弃了该方案。

  3. 微调LLM进行分类

    需要过多计算资源。我从82万数据集中采样8.2万条训练Mistral-7b,使用3090Ti每轮训练超过10小时,但LB分数仅为0.642,没有足够资源继续尝试。

对我不起作用的方法

  1. 软标签(soft label)
  2. 基于拼写错误的文本分类
  3. 拼写错误修正:尝试了多种方案(基于距离和神经网络),均未奏效
  4. 在DeBERTa上的提示工程

致谢

感谢Kaggle社区的热心成员提供的数据集。

感谢@batprem提供的高分笔记本,特别感谢@datafan07提供的有趣见解。

同比赛其他方案