593. LLM - Detect AI Generated Text | llm-detect-ai-generated-text
我们的团队仍然对获得第一名感到有些震惊(🤯)。Raja之前发布了一个简短总结,但在这里我们将更详细地介绍我们的解决方案以及我们认为起作用的关键因素。
主办方没有透露太多关于生成文章的信息,因此我们致力于创建一套多样化的生成文章数据集,希望这能(1)使模型具有更好的泛化能力,(2)让数据更接近私有排行榜的分布。建模方法本身并不那么重要,由于数据集质量很高,我们的多个单模型都达到了0.970+的分数。
我们的数据集采用增量方式创建,重点关注规模、多样性和复杂性,以促进良好的泛化能力和对对抗样本的强大抵抗力。每次数据集迭代时,我们都试图填补上一代模型的盲点,同时保持鲁棒性。
为了最大限度地利用领域内的人类文本,我们使用了完整的Persuade语料库,包含所有15个提示。我们还包含了来自各种来源的人类文本,如OpenAI GPT2输出数据集、ELLIPSE语料库、NarrativeQA、维基百科、NLTK Brown语料库和IMDB电影评论。
对于LLM微调,我们使用了autotrain和基于transformers库的自定义代码。
我们使用了各种生成配置和提示策略来提升数据的多样性和复杂性。生成的文章综合采用了以下方法:
最后,我们纳入了增强文章,使我们的模型能够识别针对LLM内容检测系统的典型攻击以及训练数据中存在的混淆方法。我们主要对随机子集的文章采用了以下组合增强方法:
作为一个细节,我们创建了一个经过重度预处理的版本(移除特殊字符、规范化空白字符、全部转为小写)的数据集。我们的假设是,在这个版本上训练的模型将学到更深层的模式,从而在集成中做出重要贡献。此外,重度预处理将降低隐藏测试集中随机字符攻击的风险。
我们表现最好的模型在16万个样本(未经预处理)上训练,其中4万个是人类书写。
我们采用了以下建模策略:
我们推测,与数据集相比,建模策略本身对整体性能的影响较小。我们的每个单独模型都达到了金牌水平。
我们在我们精心策划的数据集上,使用(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。
使用transformers中的AutoModelForSequenceClassification
使用BCE损失和连续标签(例如,由指令微调LLM生成的文章得分小于1)
带间隔的成对损失
(原始仓库)
该方法使用两个较小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快得多
我们通过修改弱标记和最终分数计算的逻辑,实现了该方法的变体。
我们使用mistral模型的置信预测进行弱标记
对于给定的文章,我们首先基于动态阈值选择相邻的人类和生成文章。然后,我们对所选文章的相似度分数使用均值聚合(而非原始工作中的最小值聚合)。
在组合预测时,我们使用了排名而非原始预测值。得分最低的文章排名为1,得分最高的文章排名为n,其中n是测试集中文章的数量。这些排名在模型间取平均值,平均排名成为"generated"列的最终值。根据公开排行榜和直觉进行了轻微的加权。我们对mistral-7b模型赋予了最大权重。
我们得分最高的选择提交可在此处查看
我们的代码可在此处获取
非常感谢Raja (@conjuring92) 和 Udbhav (@ubamba98) 的巨大贡献!!👏👏👏