Connect with us

프롬프트 엔지니어링

LLM 합성 데이터 생성에 대한 완벽한 가이드

mm
Synthetic data generation using LLM

대규모 언어 모델(LLM)은 인간과 같은 텍스트 생성뿐만 아니라 고품질의 합성 데이터 생성에도 강력한 도구입니다. 이 기능은 특히 실제 데이터가 부족하거나 비용이 많이 들거나 개인 정보가 민감한 시나리오에서 AI 개발 방식을 변경하고 있습니다. 이 포괄적인 가이드에서는 LLM 기반의 합성 데이터 생성에 대해 깊이 있게 다루어 보겠습니다. 방법, 응용 프로그램 및 최선의实践에 대해 살펴보겠습니다.

LLM을 사용한 합성 데이터 생성 소개

합성 데이터 생성은 이러한 고급 AI 모델을 사용하여 실제 데이터를 모방하는 인공 데이터 세트를 생성하는 것을 의미합니다. 이 접근 방식에는 여러 가지 이점이 있습니다:

  1. 비용 효율성: 합성 데이터를 생성하는 것은 실제 데이터를 수집하고 주석을 달기보다 일반적으로 더 저렴합니다.
  2. 개인 정보 보호: 합성 데이터를 생성하여 민감한 정보를 노출하지 않을 수 있습니다.
  3. 확장성: LLM은 빠르게 다양한 데이터를大量으로 생성할 수 있습니다.
  4. 사용자 지정: 데이터를 특정 사용 사례 또는 시나리오에 맞게 조정할 수 있습니다.

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개 이상의 다양한 소프트웨어 엔지니어링 프로젝트에 기여했습니다.私の継続的な 호기심은 또한 자연어 처리 분야로私の 관심을 끌었고, 더 깊이 탐구하고 싶은 분야입니다.