DetectGPT: Zero-Shot Machine-Generated Text Detection using Probability Curvature

828 篇文章

已下架不支持订阅

DetectGPT是一种零样本机器生成文本检测方法,通过分析大型语言模型的对数概率函数的负曲率区域来判断文本是否由模型生成。无需额外训练,DetectGPT在检测GPT-NeoX生成的假新闻时表现出高鉴别力,AUROC从0.81提升到0.95。该方法依赖于模型计算的对数概率和随机扰动,但受限于白盒假设和计算密集度。未来研究可能探索与水印算法的结合以及在其他生成模型中的应用。

本文是LLM系列文章,针对《DetectGPT: Zero-Shot Machine-Generated Text Detection using Probability Curvature》的翻译。

摘要

大型语言模型(LLM)的日益流畅和广泛使用突出了相应工具的可取性,这些工具有助于检测LLM生成的文本。在本文中,我们确定了LLM概率函数结构的一个性质,该性质对这种检测有用。具体来说,我们证明了从LLM中采样的文本往往占据模型对数概率函数的负曲率区域。利用这一观察结果,我们定义了一个新的基于曲率的标准,用于判断通道是否由给定的LLM生成。这种方法,我们称之为DetectGPT,不需要训练单独的分类器,不需要收集真实或生成的段落的数据集,也不需要显式地为生成的文本添加水印。它只使用由感兴趣的模型计算的对数概率和来自另一个通用的预先训练的语言模型(例如T5)的文章的随机扰动。我们发现,对于模型样本检测,DetectGPT比现有的零样本方法更具鉴别力,显著地将由20B参数GPT-NeoX生成的假新闻文章的检测从最强零样本基线的0.81 AUROC提高到DetectGPT的0.95 AUROC。有关代码、数据和其他项目信息,请参阅ericmitchell.ai/detectgpt。

1 引言

2 相关工作

3 零样本机器生成文本检测问题

4 DetectGPT:具有随机扰动的零样本机器生成文本检测

5 实验

6 讨论

随着大型语言模型的不断改进,它们将成为在教育、新闻和艺术等各种背景下取代人类作家的越来越有吸引力的工具,消费者可能会要求使用工

已下架不支持订阅

### DetectGPT 复现教程与解决方案 DetectGPT 是一种基于零样本学习的方法,用于检测由大型语言模型生成的文本。其核心思想在于利用混合的语言模型来评估输入文本的概率分布差异,从而判断该文本是由人类编写还是机器生成[^1]。 #### 方法概述 DetectGPT 使用多个预训练好的大规模语言模型作为基础组件,通过比较不同模型对同一段文本的预测概率一致性,推断出文本的人工或自动属性。具体而言,它依赖于以下技术要点: - **多模型集成**:采用多种不同的大语言模型(LLMs),这些模型可能具有不同的架构、参数量或者训练数据集。 - **条件概率估计**:对于给定的一段文本 \( T \),计算各 LLMs 下的条件概率 \( P(T|Model_i) \)[^1]。 - **异常检测机制**:当某一段文本在某些特定模型上的表现显著偏离其他模型时,则认为这段文本更可能是由某个特殊类型的模型生成而非自然书写。 以下是实现 DetectGPT 的主要步骤说明以及一些潜在的技术挑战及其应对策略: #### 实现流程 1. **准备环境** 需要安装支持运行多个大型语言模型所需的库和框架,并确保硬件资源充足以加载所有必要的权重文件。例如可以考虑使用 Hugging Face Transformers 库加载开源版本的大规模语言模型实例。 2. **选择合适的基线模型集合** 根据目标应用场景挑选一系列候选模型组合。理想情况下应覆盖尽可能广泛的能力范围,包括但不限于 GPT 系列、BERT 变体以及其他竞争平台发布的代表性作品。 3. **定义评分函数** 设计能够有效衡量单个句子或多句序列相对于整个语料库平均行为偏差程度的标准度量方法。这通常涉及到统计学中的假设检验理论应用,比如 z-score 转化或者其他形式的距离测度指标计算过程。 4. **验证效果并调整超参** 利用已标注好真实标签的数据集测试当前配置下的分类准确性水平;如果发现性能不佳则需重新审视前面提到的各项设计决策是否存在改进空间,直至达到满意的结果为止。 ```python from transformers import AutoTokenizer, AutoModelForCausalLM import torch def load_models(model_names=["gpt2", "distilbert-base-uncased"]): models = [] tokenizers = [] for name in model_names: tokenizer = AutoTokenizer.from_pretrained(name) model = AutoModelForCausalLM.from_pretrained(name) models.append(model.eval()) tokenizers.append(tokenizer) return models, tokenizers models, tokenizers = load_models() text_to_evaluate = "Artificial intelligence is revolutionizing the way we live and work." # Example evaluation function (to be refined based on specific requirements) def evaluate_text(text, models, tokenizers): scores = [] with torch.no_grad(): for i, (model, tokenizer) in enumerate(zip(models, tokenizers)): inputs = tokenizer.encode_plus( text, add_special_tokens=True, max_length=50, padding="max_length", truncation=True, return_tensors='pt' ) outputs = model(**inputs) logits = outputs.logits[:, :-1].contiguous() log_probs = -torch.nn.functional.cross_entropy(logits.view(-1, logits.size(-1)), inputs['input_ids'][:, 1:].reshape(-1), reduction='none') avg_log_prob = log_probs.mean().item() scores.append(avg_log_prob) return scores scores = evaluate_text(text_to_evaluate, models, tokenizers) print(f"Sentence score across different models: {scores}") ``` 上述代码片段展示了如何加载两个简单的 Transformer 模型并对指定字符串执行基本打分操作的一个例子。实际部署过程中还需要进一步优化细节处理逻辑以便适应更加复杂的真实世界需求场景。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UnknownBody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值