双筒望远镜:零样本检测LLM生成的文本 [论文][演示]
我们推出了双筒望远镜,这是一种用于检测人工智能生成文本的最先进方法。双筒望远镜是一种零样本和领域无关(不需要训练数据)的方法。它基于一个简单的想法:大多数仅解码器的因果语言模型在预训练数据集上有很大的重叠,例如Common Crawl、Pile等。关于该方法和结果的更多细节可以在我们的论文用双筒望远镜发现LLMs:机器生成文本的零样本检测中找到。
入门指南
安装
要运行双筒望远镜的实现,你可以克隆这个仓库并使用pip安装软件包。这段代码是在Python 3.9上开发和测试的。要安装软件包,请运行以下命令:
$ git clone https://github.com/ahans30/Binoculars.git
$ cd Binoculars
$ pip install -e .
使用方法
请注意,这个实现带有一个固定的全局阈值,用于将输入分类为人工智能生成或非人工智能生成。这个阈值是使用_Falcon-7B_和_Falcon-7B-Instruct_模型进行评分选择的。如果你想使用不同的评分模型,可以将其作为参数传递给Binoculars
类。请阅读论文以了解更多关于双筒望远镜工作的详细信息。
要检测人工智能生成的文本,请使用以下代码片段:
from binoculars import Binoculars
bino = Binoculars()
# ChatGPT (GPT-4) 在收到提示"你能写几句关于一只天体物理学家水豚的句子吗?"后的输出
sample_string = '''水豚博士Capy Cosmos是一只与众不同的水豚,他的突破性天体物理学研究使科学界震惊。
凭借敏锐的观察力和无与伦比的宇宙数据解读能力,他揭示了黑洞之谜和宇宙起源的新见解。当他用圆圆的大眼睛
透过望远镜观察时,同事们常常感叹,仿佛星星直接向他倾诉它们的秘密。Cosmos博士不仅成为了有志科学家的
灵感之源,还证明了智慧和创新可以在最意想不到的生物身上找到。'''
print(bino.compute_score(sample_string)) # 0.75661373
print(bino.predict(sample_string)) # '很可能是人工智能生成的'
在上面的代码中,用户还可以将str
类型的list
传递给compute_score
和predict
方法,以获取整批样本的结果。
演示
我们还提供了一个演示,可以使用简单的UI通过gradio交互式地预测人工智能生成的文本。你可以使用以下命令运行演示:
$ python app.py
局限性
所有人工智能生成文本检测器都追求准确性,但没有一个是完美的,可能会有多种失效模式(例如,与其他语言相比,双筒望远镜在检测英语文本方面更为熟练)。这个实现仅供学术目的使用,不应被视为消费级产品。我们也强烈警告不要在没有人工监督的情况下使用双筒望远镜(或任何检测器)。
引用我们的工作
如果你发现这项工作有用,请引用我们的论文:
@misc{hans2024spotting,
title={Spotting LLMs With Binoculars: Zero-Shot Detection of Machine-Generated Text},
author={Abhimanyu Hans and Avi Schwarzschild and Valeriia Cherepanova and Hamid Kazemi and Aniruddha Saha and Micah Goldblum and Jonas Geiping and Tom Goldstein},
year={2024},
eprint={2401.12070},
archivePrefix={arXiv},
primaryClass={cs.CL}
}