返回列表

Comprehensive 1st Place Write-Up

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

开始: 2023-10-31 结束: 2024-01-22 AI安全与对抗 数据算法赛
LLM检测AI生成文本冠军方案全面解析

LLM检测AI生成文本冠军方案全面解析

作者:Nicholas Broad
团队成员:Udbhav Bamba, Raja Biswas
竞赛排名:第1名
发布时间:2024年2月4日

我们的团队仍然对获得第一名感到有些震惊(🤯)。Raja之前发布了一个简短总结,但在这里我们将更详细地介绍我们的解决方案以及我们认为起作用的关键因素。

tldr

主办方没有透露太多关于生成文章的信息,因此我们致力于创建一套多样化的生成文章数据集,希望这能(1)使模型具有更好的泛化能力,(2)让数据更接近私有排行榜的分布。建模方法本身并不那么重要,由于数据集质量很高,我们的多个单模型都达到了0.970+的分数。

概述

数据集

我们的数据集采用增量方式创建,重点关注规模、多样性和复杂性,以促进良好的泛化能力和对对抗样本的强大抵抗力。每次数据集迭代时,我们都试图填补上一代模型的盲点,同时保持鲁棒性。

为了最大限度地利用领域内的人类文本,我们使用了完整的Persuade语料库,包含所有15个提示。我们还包含了来自各种来源的人类文本,如OpenAI GPT2输出数据集、ELLIPSE语料库、NarrativeQA、维基百科、NLTK Brown语料库和IMDB电影评论。

我们生成文章的数据源可分为四类:

  1. 专有LLM(gpt-3.5, gpt-4, claude, cohere, gemini, palm)
  2. 开源LLM(llama, falcon, mistral, mixtral)
  3. 现有LLM生成文本数据集
    • Synthetic dataset made by T5
    • DAIGT V2 subset
    • OUTFOX
    • Ghostbuster data
    • gpt-2-output-dataset
  4. 微调和开源LLM(mistral, llama, falcon, deci-lm, t5, pythia, BLOOM, GPT2)。对于LLM微调,我们以不同方式利用了PERSUADE语料库:
    • 指令微调:指令由不同的元数据组成,例如提示名称、整体文章分数、ELL状态和年级水平。响应是相应的学生文章。
    • 留一主题:在PERSUADE文章上微调LLM时留出一个提示。生成时,仅生成被留出的提示对应的文章。这样做是为了鼓励新的写作风格。
    • 分段生成:在剩余文章条件下,一次生成一个段落(话语)。

对于LLM微调,我们使用了autotrain和基于transformers库的自定义代码。

我们使用了各种生成配置和提示策略来提升数据的多样性和复杂性。生成的文章综合采用了以下方法:

  • Contrastive search
  • 使用Guidance scale、typical_p、suppress_tokens
  • 高温和大top-k值
  • 完形填空式提示:随机遮盖文章中的单词,让LLM重建原始文章(类似于MLM)
  • 无源文本提示
  • 有源文本提示
  • 重写现有文章提示

最后,我们纳入了增强文章,使我们的模型能够识别针对LLM内容检测系统的典型攻击以及训练数据中存在的混淆方法。我们主要对随机子集的文章采用了以下组合增强方法:

  • 拼写纠正
  • 字符删除/插入/交换
  • 同义词替换
  • 引入混淆
  • 回译
  • 随机大写
  • 交换句子

作为一个细节,我们创建了一个经过重度预处理的版本(移除特殊字符、规范化空白字符、全部转为小写)的数据集。我们的假设是,在这个版本上训练的模型将学到更深层的模式,从而在集成中做出重要贡献。此外,重度预处理将降低隐藏测试集中随机字符攻击的风险。

我们表现最好的模型在16万个样本(未经预处理)上训练,其中4万个是人类书写。

模型

我们采用了以下建模策略:

  • LLM (Q)LoRA微调:Mistral 7b
  • Deberta-v3
    • 分类
    • 自定义分词器 + MLM + 伪标签
    • 排序
  • Ghostbuster(llama 7b, tiny llama 1.1B)
  • Ahmet的无监督方法

我们推测,与数据集相比,建模策略本身对整体性能的影响较小。我们的每个单独模型都达到了金牌水平。

LLM (Q)LoRA微调:Mistral 7b

我们在我们精心策划的数据集上,使用(Q)LoRA微调了mistralai/Mistral-7B-v0.1骨干模型,配置如下。

peft_config = LoraConfig(
        r=64,
        lora_alpha=16,
        lora_dropout=0.1,
        bias="none",
        task_type=TaskType.SEQ_CLS,
        inference_mode=False,
        target_modules=["q_proj", "k_proj", "v_proj", "o_proj"]
    )

我们还使用了autotrain-advanced来训练一些用于文本生成的LLM。

Deberta

分类:deberta-v3-large

使用transformers中的AutoModelForSequenceClassification
使用BCE损失和连续标签(例如,由指令微调LLM生成的文章得分小于1)

自定义分词器 + MLM + 伪标签:deberta-v3-small

  • (灵感来源)
  • 基于训练+测试文章派生自定义分词器
  • 在训练+测试文章上使用掩码语言建模(MLM)训练一个小模型
  • 用伪标记的测试文章丰富训练数据集
  • 训练一个epoch,然后在测试文章上推理
  • 直觉:由于对隐藏测试集的专门理解,这些步骤将为结果模型提供独特优势

排序:deberta-v3-large

带间隔的成对损失

Ghostbuster

(原始仓库)
该方法使用两个较小LLM(最初是OpenAI的davinci和ada)的token概率,以及一元和二元模型的token概率。
在模型间混合时,序列概率经过向量运算(例如,将llm1概率除以llm2概率,从二元中减去一元),然后进行标量运算(取序列的最大概率)
我们没有通过OpenAI API使用模型,而是使用了Llama 7b和Tiny Llama 1.1B(这些模型必须具有相同的分词器)
一元和二元模型使用Ghostbuster仓库的代码在nltk Brown语料库上使用Llama分词器进行训练。
序列中的前25个token被忽略,因为模型没有太多上下文来生成有意义的表示。

当在PERSUADE语料库的文本上微调tiny llama模型时,我们看到了一些提升
我们没有对所有操作进行结构化搜索,而是对四个模型序列概率(llama 7b, tiny llama, unigram, trigram)各进行10种操作,同时对以下模型的比率进行相同的10种操作:llama 7b/tiny llama, llama 7b/unigram, llama 7b/trigram, tiny llama/unigram, tiny llama/trigram, unigram/trigram。
这十种操作是:最小值、最大值、平均值、中位数、10%分位数、25%分位数、75%分位数、90%分位数、L2范数、方差
总共100个特征
我们没有使用逻辑回归,而是使用了SVM分类器和随机森林分类器的集成。
我们没有对超参数进行太多调整。
使用Rapids进行训练,比sklearn快得多

Ahmet的无监督方法

我们通过修改弱标记和最终分数计算的逻辑,实现了该方法的变体。
我们使用mistral模型的置信预测进行弱标记
对于给定的文章,我们首先基于动态阈值选择相邻的人类和生成文章。然后,我们对所选文章的相似度分数使用均值聚合(而非原始工作中的最小值聚合)。

集成

在组合预测时,我们使用了排名而非原始预测值。得分最低的文章排名为1,得分最高的文章排名为n,其中n是测试集中文章的数量。这些排名在模型间取平均值,平均排名成为"generated"列的最终值。根据公开排行榜和直觉进行了轻微的加权。我们对mistral-7b模型赋予了最大权重。

我们得分最高的选择提交可在此处查看
我们的代码可在此处获取
非常感谢Raja (@conjuring92) 和 Udbhav (@ubamba98) 的巨大贡献!!👏👏👏

同比赛其他方案