ホームページ バックエンド開発 Python チュートリアル DSPy を使用して AI 生成テキストを検出するための OpenAI の GPT-mini の最適化

DSPy を使用して AI 生成テキストを検出するための OpenAI の GPT-mini の最適化

Nov 24, 2024 am 06:46 AM

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% の精度を達成しました。データセットのランダムなサンプリングにより結果が異なる場合があることに注意してください。

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


DSPy による最適化

DSPy の真の力は、その最適化機能にあります。 MIPROv2 オプティマイザーを使用すると、プロンプトを手動で調整することなく検出器のパフォーマンスを向上させることができます。オプティマイザーは、少数のショットの例、動的なテンプレート、自己教師ありの手法を使用してこのプロセスを自動化します。

オプティマイザーを設定して実行する方法は次のとおりです:

pip install dspy datasets

注: 「ライト」プリセットを使用した 1 回の最適化実行のコストは、通常、80 例のデータセットで 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)

次の方法でさらに反復できます:

  • オプティマイザーの自動パラメータ (軽、中、重) を調整するか、ハイパーパラメータを自分で設定します。
  • トレーニングと評価用のデータセットのサイズを増やします。
  • より高度な、または更新された LLM を使用したテスト。

結論

わずか数ステップで、DSPy が実際のユースケース向けに LLM 最適化を簡素化する方法を実証しました。手動によるプロンプト エンジニアリングを一切行わずに、AI が生成したテキストの検出において目に見える改善を達成しました。このモデルは完璧ではありませんが、DSPy の柔軟性により継続的な反復が可能であり、スケーラブルな AI 開発にとって貴重なツールとなっています。

DSPy のドキュメントをよく読み、他のオプティマイザーや LLM パターンを試してみることを強くお勧めします。


完全なコードは GitHub で入手できます。

質問はありますか?コメント?教えてください。DSPy で何を構築するか楽しみにしています!

LinkedIn | で私を見つけることができます。 EES の CTO 兼パートナー。

以上がDSPy を使用して AI 生成テキストを検出するための OpenAI の GPT-mini の最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Pythonクラスには複数のコンストラクターを持つことができますか? Pythonクラスには複数のコンストラクターを持つことができますか? Jul 15, 2025 am 02:54 AM

はい、apythonclasscanhavemultipleconstructorsthroughtertechniques.1.Defaultargumentsionthodto __tododtoallowdodtoibleInitialization with varyingnumbersofparameters.2.declassmethodsasasaLternativeconstructorsoriable rerableible bulible clurecreatureati

量子機械学習用のPython 量子機械学習用のPython Jul 21, 2025 am 02:48 AM

Quantum Machine Learning(QML)を開始するには、優先ツールがPythonであり、Pennylane、Qiskit、Tensorflowquantum、Pytorchquantumなどのライブラリをインストールする必要があります。次に、Pennylaneを使用して量子ニューラルネットワークを構築するなど、例を実行してプロセスに慣れます。次に、データセットの準備、データエンコード、パラメトリック量子回路の構築、古典的なオプティマイザートレーニングなどの手順に従ってモデルを実装します。実際の戦闘では、最初から複雑なモデルを追求したり、ハードウェアの制限に注意を払ったり、ハイブリッドモデル構造を採用したり、開発をフォローアップするための最新のドキュメントと公式文書を継続的に参照することを避ける必要があります。

完成したPython Blockbuster Online Viewing Entrant Python無料完成ウェブサイトコレクション 完成したPython Blockbuster Online Viewing Entrant Python無料完成ウェブサイトコレクション Jul 23, 2025 pm 12:36 PM

この記事では、いくつかのトップPython「完成した」プロジェクトWebサイトと、高レベルの「大ヒット作「学習リソースポータル」が選択されています。開発のインスピレーション、観察、学習のマスターレベルのソースコードを探している場合でも、実用的な機能を体系的に改善している場合でも、これらのプラットフォームは見逃せず、Pythonマスターに迅速に成長するのに役立ちます。

PythonのWeb APIからのデータへのアクセス PythonのWeb APIからのデータへのアクセス Jul 16, 2025 am 04:52 AM

Pythonを使用してWebAPIを呼び出してデータを取得するための鍵は、基本的なプロセスと共通のツールをマスターすることです。 1.リクエストを使用してHTTPリクエストを開始することが最も直接的な方法です。 GETメソッドを使用して応答を取得し、json()を使用してデータを解析します。 2。認証が必要なAPIの場合、ヘッダーからトークンまたはキーを追加できます。 3.応答ステータスコードを確認する必要があります。respons.raise_for_status()を使用して、例外を自動的に処理することをお勧めします。 4.ページングインターフェイスに直面すると、さまざまなページを順番にリクエストし、遅延を追加して周波数制限を回避できます。 5.返されたJSONデータを処理する場合、構造に従って情報を抽出する必要があり、複雑なデータをデータに変換できます

Python 1行の場合 Python 1行の場合 Jul 15, 2025 am 01:38 AM

PythonのOnelineifelseは、XifconditionElseyとして書かれた3成分演算子であり、単純な条件付き判断を簡素化するために使用されます。 Status = "Adult" ifage> = 18else "minor"など、可変割り当てに使用できます。また、defget_status(age):urtuel "adult" ifage> = 18else "minor"などの関数で結果を直接返すためにも使用できます。 result = "a" iなど、ネストされた使用はサポートされていますが

Python他の例 Python他の例 Jul 15, 2025 am 02:55 AM

PythonのIfelseステートメントを書くための鍵は、論理構造と詳細を理解することです。 1.インフラストラクチャは、条件が確立されている場合、コードを実行することです。 2.多条件判断はElifで実施され、順次実行され、満たされると停止します。 3。ネストされている場合、さらに区画の判断に使用されている場合、2つの層を超えないことをお勧めします。 4.単純なシナリオでは、単純なifelseを置き換えるために、三元式を使用できます。インデント、条件付き順序、論理的完全性に注意を払うことによってのみ、明確で安定した判断コードを書くことができます。

Python Run Shellコマンドの例 Python Run Shellコマンドの例 Jul 26, 2025 am 07:50 AM

subprocess.run()を使用して、シェルコマンドを安全に実行し、出力をキャプチャします。注入リスクを避けるために、リストのパラメーターを渡すことをお勧めします。 2。シェル特性が必要な場合は、シェル= trueを設定できますが、コマンドインジェクションに注意してください。 3. subprocess.popenを使用して、リアルタイム出力処理を実現します。 4。Check = COMMATが失敗したときに例外をスローするためにtrueを設定します。 5.単純なシナリオで直接チェーンを呼び出して出力を取得できます。 os.system()または非推奨モジュールの使用を避けるために、日常生活の中でsubprocess.run()を優先する必要があります。上記の方法は、Pythonでシェルコマンドを実行するコアの使用を上書きします。

Python Seabornジョイントプロットの例 Python Seabornジョイントプロットの例 Jul 26, 2025 am 08:11 AM

Seabornのジョイントプロットを使用して、2つの変数間の関係と分布をすばやく視覚化します。 2。基本的な散布図は、sns.jointplot(data = tips、x = "total_bill"、y = "tip"、dind = "scatter")によって実装され、中心は散布図であり、ヒストグラムは上部と右側と右側に表示されます。 3.回帰線と密度情報をdind = "reg"に追加し、marminal_kwsを組み合わせてエッジプロットスタイルを設定します。 4。データ量が大きい場合は、「ヘックス」を使用することをお勧めします。

See all articles