檢測人工智慧產生的文本已成為一個熱門話題,研究人員和從業者對其可行性和倫理影響進行了爭論。隨著模型變得越來越複雜,區分人類編寫的文本和人工智慧生成的文本既成為一項令人興奮的挑戰,也成為一項迫切的需求。
在這篇文章中,我們將探索如何利用 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%。請注意,由於資料集的隨機採樣,結果可能會有所不同。
DSPy 的真正強大之處在於它的最佳化能力。透過使用 MIPROv2 優化器,我們可以提高檢測器的性能,而無需手動調整提示。優化器使用少量範例、動態模板和自我監督技術自動執行此過程。
以下是設定和運行最佳化器的方法:
pip install dspy datasets
注意:對於 80 個範例的資料集,使用「light」預設運行單次最佳化的成本通常低於 0.50 美元。
運行優化後,我觀察到效能顯著提升。與基線的 76%–81% 相比,我的第一次運行的準確率達到了 91.25%。隨後的運行範圍在 81.2% 和 91.25% 之間,證明了以最小的努力實現了一致的改進。
載入最佳化模型以供進一步使用:
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中文網其他相關文章!