首页 >后端开发 >Python教程 >优化 OpenAI 的 GPT-mini 以使用 DSPy 检测 AI 生成的文本

优化 OpenAI 的 GPT-mini 以使用 DSPy 检测 AI 生成的文本

Linda Hamilton
Linda Hamilton原创
2024-11-24 06:46:14257浏览

检测人工智能生成的文本已成为一个热门话题,研究人员和从业者对其可行性和伦理影响进行了争论。随着模型变得越来越复杂,区分人类编写的文本和人工智能生成的文本既成为一项令人兴奋的挑战,也成为一项迫切的需求。

在这篇文章中,我们将探索如何利用 DSPy 的优化功能,使用包含 139 万个文本样本的迷人数据集来微调 OpenAI 的 GPT-4o-mini 以完成此任务。最后,您将了解如何使用 DSPy 实现、评估和优化基本的 AI 文本检测器,无需手动提示工程。


数据集加载

首先,让我们加载数据集,其中包含标记为人类编写或人工智能从各种人类和法学硕士来源生成的文本样本。首先,请确保您已安装 Python 3,以及 DSPy 和拥抱面部数据集库:

pip install dspy datasets

数据集大小约为 2GB,因此根据您的互联网速度,此步骤可能需要几分钟。

以下是均匀加载和分割数据集以进行训练和测试的代码:

from datasets import load_dataset

# Load the dataset
ds = load_dataset("artem9k/ai-text-detection-pile", split="train")

# For simplicity, we’ll do an even split of data for testing and training
NUM_EXAMPLES = 80  # Adjust this to experiment with dataset size
ds = ds.train_test_split(test_size=NUM_EXAMPLES, train_size=NUM_EXAMPLES)

提示:您可以调整 NUM_EXAMPLES 来试验更大的数据集或降低运行优化时的成本。


模型设置

接下来,我们将使用 OpenAI 的 GPT-4o-mini 创建一个基本的 DSPy 预测器。 GPT-4o-mini 是 OpenAI GPT-4o 模型的轻量级版本,使其实验成本高效。 DSPy 通过使用签名(定义结构化输入输出映射)来简化此过程。

在运行代码之前将“YOUR_API_KEY”替换为您的 OpenAI API 密钥:

import dspy
from typing import Literal

# Initialize the OpenAI GPT-4o-mini model
lm = dspy.LM('openai/gpt-4o-mini', api_key="YOUR_API_KEY")
dspy.configure(lm=lm, experimental=True)

# Define the AI text detector signature
class DetectAiText(dspy.Signature):
    """Classify text as written by human or by AI."""
    text: str = dspy.InputField()
    source: Literal['ai', 'human'] = dspy.OutputField()

# Create a basic predictor
detector = dspy.Predict(DetectAiText)

请注意,我们在这里没有进行任何提示工程。相反,我们依靠 DSPy 来处理这个问题,以及自动的输入输出关系。

您可以使用一些示例输入来测试“检测器”:

print(detector(text="Hello world (this definitely wasn't written by AI)"))

预测将出现在输出的“源”字段中。


评估探测器

现在我们有了一个基本的检测器,让我们使用 DSPy 的评估工具评估其性能。为此,我们将定义一个简单的指标来检查模型是否正确预测文本的来源(人类或人工智能)。

这是设置和运行评估的代码:

from dspy.evaluate import Evaluate

# Define a simple evaluation metric
def validate_text_source(example: dspy.Example, pred, trace=None) -> int:
    return 1 if example.source.lower() == pred.source.lower() else 0

# Transform the dataset into DSPy-compatible "Example" objects
dspy_trainset = [
    dspy.Example(source=x['source'], text=x['text']).with_inputs('text') for x in ds['train']
]
dspy_devset = [
    dspy.Example(source=x['source'], text=x['text']).with_inputs('text') for x in ds['test']
]

# Evaluate the detector
evaluator = Evaluate(devset=dspy_devset, num_threads=12)  # Adjust threads based on your system
evaluator(detector, metric=validate_text_source)

在最初的测试中,我的准确率达到了 76%–81%。请注意,由于数据集的随机采样,结果可能会有所不同。

Optimizing OpenAI’s GPT-mini to Detect AI-Generated Text Using DSPy


使用 DSPy 进行优化

DSPy 的真正强大之处在于它的优化能力。通过使用 MIPROv2 优化器,我们可以提高检测器的性能,而无需手动调整提示。优化器使用少量示例、动态模板和自我监督技术自动执行此过程。

以下是设置和运行优化器的方法:

pip install dspy datasets

注意:对于 80 个示例的数据集,使用“light”预设运行单次优化的成本通常低于 0.50 美元。


结果和迭代

运行优化后,我观察到性能显着提升。与基线的 76%–81% 相比,我的第一次运行的准确率达到了 91.25%。随后的运行范围在 81.2%91.25% 之间,证明了以最小的努力实现了一致的改进。

Optimizing OpenAI’s GPT-mini to Detect AI-Generated Text Using DSPy

加载优化模型以供进一步使用:

from datasets import load_dataset

# Load the dataset
ds = load_dataset("artem9k/ai-text-detection-pile", split="train")

# For simplicity, we’ll do an even split of data for testing and training
NUM_EXAMPLES = 80  # Adjust this to experiment with dataset size
ds = ds.train_test_split(test_size=NUM_EXAMPLES, train_size=NUM_EXAMPLES)

您可以通过以下方式进一步迭代:

  • 调整优化器的自动参数(轻、中、重),或自行设置超参数。
  • 增加训练和评估的数据集大小。
  • 使用更高级或更新的法学硕士进行测试。

结论

只需几个步骤,我们就演示了 DSPy 如何简化现实用例的 LLM 优化。在没有任何手动提示工程的情况下,我们在检测人工智能生成的文本方面取得了显着的进步。虽然该模型并不完美,但 DSPy 的灵活性允许持续迭代,使其成为可扩展 AI 开发的宝贵工具。

我强烈建议通读 DSPy 的文档并尝试其他优化器和 LLM 模式。


完整代码可在 GitHub 上获取。

有问题吗?评论?让我知道,我期待看到您使用 DSPy 构建的内容!

你可以在 LinkedIn 上找到我 |首席技术官兼合伙人@EES。

以上是优化 OpenAI 的 GPT-mini 以使用 DSPy 检测 AI 生成的文本的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn