AI が生成したテキストの検出はホットな話題となっており、研究者や実務家がその実現可能性と倫理的影響について議論しています。モデルがより洗練されるにつれて、人間が書いたテキストと AI が生成したテキストを区別することは、刺激的な課題であると同時に重要なニーズとなっています。
この投稿では、139 万のテキスト サンプルの魅力的なデータセットを使用して、DSPy の最適化機能を利用して、このタスクのために OpenAI の GPT-4o-mini を微調整する方法を検討します。最後には、DSPy を使用して基本的な AI テキスト検出器を実装、評価、最適化する方法がわかります。手動のプロンプト エンジニアリングは必要ありません。
まず、データセットをロードしましょう。このデータセットには、人間が書いたもの、またはさまざまな人間および LLM ソースから 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 の評価ツールを使用してそのパフォーマンスを評価しましょう。このために、モデルがテキストのソース (人間または AI) を正しく予測しているかどうかをチェックする簡単な指標を定義します。
評価を設定して実行するコードは次のとおりです:
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
注: 「ライト」プリセットを使用した 1 回の最適化実行のコストは、通常、80 例のデータセットで 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 最適化を簡素化する方法を実証しました。手動によるプロンプト エンジニアリングを一切行わずに、AI が生成したテキストの検出において目に見える改善を達成しました。このモデルは完璧ではありませんが、DSPy の柔軟性により継続的な反復が可能であり、スケーラブルな AI 開発にとって貴重なツールとなっています。
DSPy のドキュメントをよく読み、他のオプティマイザーや LLM パターンを試してみることを強くお勧めします。
完全なコードは GitHub で入手できます。
質問はありますか?コメント?教えてください。DSPy で何を構築するか楽しみにしています!
LinkedIn | で私を見つけることができます。 EES の CTO 兼パートナー。
以上がDSPy を使用して AI 生成テキストを検出するための OpenAI の GPT-mini の最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。