프롬프트 엔지니어링
LLM 합성 데이터 생성에 대한 완벽한 가이드

By
Aayush Mittal Mittal
대규모 언어 모델(LLM)은 인간과 같은 텍스트 생성뿐만 아니라 고품질의 합성 데이터 생성에도 강력한 도구입니다. 이 기능은 특히 실제 데이터가 부족하거나 비용이 많이 들거나 개인 정보가 민감한 시나리오에서 AI 개발 방식을 변경하고 있습니다. 이 포괄적인 가이드에서는 LLM 기반의 합성 데이터 생성에 대해 깊이 있게 다루어 보겠습니다. 방법, 응용 프로그램 및 최선의实践에 대해 살펴보겠습니다.
LLM을 사용한 합성 데이터 생성 소개
합성 데이터 생성은 이러한 고급 AI 모델을 사용하여 실제 데이터를 모방하는 인공 데이터 세트를 생성하는 것을 의미합니다. 이 접근 방식에는 여러 가지 이점이 있습니다:
- 비용 효율성: 합성 데이터를 생성하는 것은 실제 데이터를 수집하고 주석을 달기보다 일반적으로 더 저렴합니다.
- 개인 정보 보호: 합성 데이터를 생성하여 민감한 정보를 노출하지 않을 수 있습니다.
- 확장성: LLM은 빠르게 다양한 데이터를大量으로 생성할 수 있습니다.
- 사용자 지정: 데이터를 특정 사용 사례 또는 시나리오에 맞게 조정할 수 있습니다.
LLM을 사용한 합성 데이터 생성의 기본 프로세스를 이해해 보겠습니다:
from transformers import AutoTokenizer, AutoModelForCausalLM # 사전 훈련된 LLM 로드 model_name = "gpt2-large" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) # 합성 데이터 생성을 위한 프롬프트 정의 prompt = "스마트폰에 대한 고객 리뷰를 생성하세요:" # 합성 데이터 생성 input_ids = tokenizer.encode(prompt, return_tensors="pt") output = model.generate(input_ids, max_length=100, num_return_sequences=1) # 생성된 텍스트 디코딩 및 출력 synthetic_review = tokenizer.decode(output[0], skip_special_tokens=True) print(synthetic_review)
이 간단한 예제는 LLM을 사용하여 합성 고객 리뷰를 생성하는 방법을 보여줍니다. 그러나 LLM 기반 합성 데이터 생성의 실제 강점은 더 복잡한 기술과 응용 프로그램에 있습니다.
2. 합성 데이터 생성을 위한 고급 기술
2.1 프롬프트 엔지니어링
프롬프트 엔지니어링은 LLM이 높은 품질의 관련 합성 데이터를 생성하도록 안내하는 데 중요합니다. 프롬프트를 신중하게 설계함으로써 생성된 데이터의 스타일, 내용 및 형식을 제어할 수 있습니다.
보다 복잡한 프롬프트의 예:
prompt = """
스마트폰에 대한 자세한 고객 리뷰를 생성하세요. 다음 특성을 갖는 스마트폰입니다:
- 브랜드: {브랜드}
- 모델: {모델}
- 주요 기능: {기능}
- 평점: {평점}/5개 별
리뷰는 50~100단어 사이로 작성되어야 하며 양호한 측면과 불량한 측면을 모두 포함해야 합니다.
리뷰:
"""
브랜드 = ["Apple", "Samsung", "Google", "OnePlus"]
모델 = ["iPhone 13 Pro", "Galaxy S21", "Pixel 6", "9 Pro"]
기능 = ["5G, OLED 디스플레이, 트리플 카메라", "120Hz 리프레시 레이트, 8K 비디오", "AI 기반 카메라, 5G", "快速 충전, 120Hz 디스플레이"]
평점 = [4, 3, 5, 4]
# 여러 리뷰 생성
for 브랜드, 모델, 기능, 평점 in zip(브랜드, 모델, 기능, 평점):
채워진_프롬프트 = prompt.format(브랜드=브랜드, 모델=모델, 기능=기능, 평점=평점)
input_ids = tokenizer.encode(채워진_프롬프트, return_tensors="pt")
output = model.generate(input_ids, max_length=200, num_return_sequences=1)
synthetic_review = tokenizer.decode(output[0], skip_special_tokens=True)
print(f"{브랜드} {모델} 리뷰:\n{synthetic_review}\n")
이 접근 방식은 더 제어된 합성 데이터 생성을 허용하며 특정 시나리오 또는 제품 유형에 맞게 조정할 수 있습니다.
2.2 少샷 학습
少샷 학습은 LLM에 원하는 출력 형식 및 스타일의 몇 가지 예를 제공하는 것을 포함합니다. 이 기술은 생성된 데이터의 품질과 일관성을 크게 향상시킬 수 있습니다.
few_shot_prompt = """ 고객 지원 대화 생성: 에이전트(A)와 고객(C) 사이의 제품 문제에 대한 대화입니다. 다음 형식을 따르세요: 안녕하세요, 새로운 헤드폰에서 문제가 있습니다. 오른쪽 이어버드는 작동하지 않습니다. SoundMax Pro 3000입니다. 네, 시도했지만 도움이 되지 않았습니다. 안녕하세요, 새로운 스마트워치를 받았지만 켜지지 않습니다. """ # 대화 생성 input_ids = tokenizer.encode(few_shot_prompt, return_tensors="pt") output = model.generate(input_ids, max_length=500, num_return_sequences=1) synthetic_conversation = tokenizer.decode(output[0], skip_special_tokens=True) print(synthetic_conversation)
이 접근 방식은 LLM이 원하는 대화 구조와 스타일을 이해하도록 도와주어 더 실제적인 합성 고객 지원 상호 작용을 생성할 수 있습니다.
2.3 조건부 생성
조건부 생성은 생성된 데이터의 특정 속성을 제어할 수 있도록 합니다. 이는 특정 특성을 갖는 다양한 데이터 세트를 생성해야 할 때 특히 유용합니다.
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch
model = GPT2LMHeadModel.from_pretrained(“gpt2-medium”)
tokenizer = GPT2Tokenizer.from_pretrained(“gpt2-medium”)
def generate_conditional_text(prompt, condition, max_length=100):
input_ids = tokenizer.encode(prompt, return_tensors=”pt”)
attention_mask = torch.ones(input_ids.shape, dtype=torch.long, device=input_ids.device)
# 조건을 인코딩합니다.
condition_ids = tokenizer.encode(condition, add_special_tokens=False, return_tensors=”pt”)
# 조건과 input_ids를 연결합니다.
input_ids = torch.cat([condition_ids, input_ids], dim=-1)
attention_mask = torch.cat([torch.ones(condition_ids.shape, dtype=torch.long, device=condition_ids.device), attention_mask], dim=-1)
output = model.generate(input_ids, attention_mask=attention_mask, max_length=max_length, num_return_sequences=1, no_repeat_ngram_size=2, do_sample=True, top_k=50, top_p=0.95, temperature=0.7)
return tokenizer.decode(output[0], skip_special_tokens=True)
# 제품 설명을 다양한 조건으로 생성합니다.
conditions = [“Luxury”, “Budget-friendly”, “Eco-friendly”, “High-tech”]
prompt = “백팩을 설명하세요:”
지난 5년 동안私は Machine Learning과 Deep Learning의 매력적인 세계에 몰두해 왔습니다.私の情熱と専門知識は、AI/ML에 중점을 둔 50개 이상의 다양한 소프트웨어 엔지니어링 프로젝트에 기여했습니다.私の継続的な 호기심은 또한 자연어 처리 분야로私の 관심을 끌었고, 더 깊이 탐구하고 싶은 분야입니다.









