AI가 생성한 텍스트를 감지하는 것은 연구자와 실무자들이 그 타당성과 윤리적 의미를 논의하면서 뜨거운 주제가 되었습니다. 모델이 더욱 정교해짐에 따라 사람이 작성한 텍스트와 AI가 생성한 텍스트를 구별하는 것이 흥미로운 과제이자 중요한 요구 사항이 되었습니다.
이 게시물에서는 139만 개의 텍스트 샘플로 구성된 흥미로운 데이터세트를 사용하여 이 작업에 맞게 OpenAI의 GPT-4o-mini를 미세 조정하기 위해 DSPy의 최적화 기능을 활용하는 방법을 살펴보겠습니다. 결국에는 수동 프롬프트 엔지니어링이 필요 없이 DSPy를 사용하여 기본 AI 텍스트 감지기를 구현, 평가 및 최적화하는 방법을 알게 됩니다.
먼저, 다양한 인간 및 LLM 소스에서 사람이 작성했거나 AI가 생성한 것으로 라벨이 지정된 텍스트 샘플이 포함된 데이터세트를 로드해 보겠습니다. 시작하려면 DSPy 및 포옹 얼굴 데이터세트 라이브러리와 함께 Python 3을 설치했는지 확인하세요.
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
참고: "light" 사전 설정을 사용한 단일 최적화 실행 비용은 일반적으로 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에서 저를 찾으실 수 있습니다 | CTO 및 파트너 @ EES.
위 내용은 DSPy를 사용하여 AI 생성 텍스트를 감지하도록 OpenAI의 GPT-mini 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!