Rekayasa prompt

Panduan Lengkap tentang Pembangkitan Data Sintetis dengan LLM

mm
Tambahkan Unite.AI ke sumber pilihan Anda di Google
Synthetic data generation using LLM
div]:bg-bg-300 [&_pre]:-mr-4 md:[&_pre]:-mr-9″>
_*]:min-w-0″>

Model Bahasa Besar (LLM) adalah alat yang kuat tidak hanya untuk menghasilkan teks yang mirip manusia, tetapi juga untuk menciptakan data sintetis berkualitas tinggi. Kemampuan ini mengubah cara kita mengembangkan AI, terutama dalam skenario di mana data dunia nyata langka, mahal, atau sensitif privasi. Dalam panduan komprehensif ini, kita akan menjelajahi pembangkitan data sintetis yang didorong oleh LLM, menyelami metode, aplikasi, dan praktik terbaiknya.

Pengenalan Pembangkitan Data Sintetis dengan LLM

Data sintetis pembangkitan menggunakan LLM melibatkan memanfaatkan model AI canggih ini untuk menciptakan dataset buatan yang meniru data dunia nyata. Pendekatan ini menawarkan beberapa kelebihan:

  1. Efisiensi Biaya: Menghasilkan data sintetis seringkali lebih murah daripada mengumpulkan dan mengannotasi data dunia nyata.
  2. Perlindungan Privasi: Data sintetis dapat dibuat tanpa mengungkapkan informasi sensitif.
  3. Skalabilitas: LLM dapat menghasilkan sejumlah besar data yang beragam dengan cepat.
  4. Kustomisasi: Data dapat disesuaikan dengan kasus penggunaan atau skenario tertentu.

Mari kita mulai dengan memahami proses dasar pembangkitan data sintetis menggunakan LLM:

from transformers import AutoTokenizer, AutoModelForCausalLM

<p># Load pre-trained LLM
model_name = "gpt2-large"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)</p>

<p># Definisi prompt untuk pembangkitan data sintetis
prompt = "Generate ulasan pelanggan untuk smartphone:"</p>

<p># Hasilkan data sintetis
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output = model.generate(input_ids, max_length=100, num_return_sequences=1)</p>

<p># Dekode dan cetak teks yang dihasilkan
synthetic_review = tokenizer.decode(output[0], skip_special_tokens=True)
print(synthetic_review)

Contoh sederhana ini menunjukkan bagaimana LLM dapat digunakan untuk menghasilkan ulasan pelanggan sintetis. Namun, kekuatan sebenarnya dari pembangkitan data sintetis yang didorong oleh LLM terletak pada teknik yang lebih canggih dan aplikasi.

2. Teknik Lanjutan untuk Pembangkitan Data Sintetis

2.1 Teknik Prompt

Teknik prompt sangat penting untuk memandu LLM agar menghasilkan data sintetis berkualitas tinggi dan relevan. Dengan merancang prompt dengan hati-hati, kita dapat mengontrol berbagai aspek data yang dihasilkan, seperti gaya, konten, dan format.

Contoh prompt yang lebih canggih:

prompt = """
Generate ulasan pelanggan yang detail untuk smartphone dengan karakteristik berikut:
- Merek: {merek}
- Model: {model}
- Fitur kunci: {fitur}
- Peringkat: {peringkat}/5 bintang

<p>Ulasan harus antara 50-100 kata dan mencakup aspek positif dan negatif.</p>

Ulasan:
"""
</p>

<p>merek = ["Apple", "Samsung", "Google", "OnePlus"]
model = ["iPhone 13 Pro", "Galaxy S21", "Pixel 6", "9 Pro"]
fitur = ["5G, layar OLED, kamera triple", "120Hz refresh rate, 8K video", "kamera AI, 5G", "pengisian cepat, layar 120Hz"]
peringkat = [4, 3, 5, 4]</p>

<p># Hasilkan ulasan
for merek, model, fitur, peringkat in zip(merek, model, fitur, peringkat):
filled_prompt = prompt.format(merek=merek, model=model, fitur=fitur, peringkat=peringkat)
input_ids = tokenizer.encode(filled_prompt, 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"Ulasan untuk {merek} {model}:\n{synthetic_review}\n")

Pendekatan ini memungkinkan pembangkitan data sintetis yang lebih terkendali dan beragam, disesuaikan dengan skenario atau jenis produk tertentu.

2.2 Pembelajaran dengan Sedikit Contoh

Pembelajaran dengan sedikit contoh melibatkan memberikan LLM beberapa contoh output yang diinginkan dan gaya. Teknik ini dapat meningkatkan kualitas dan konsistensi data yang dihasilkan.

few_shot_prompt = """
Generate percakapan dukungan pelanggan antara agen (A) dan pelanggan (C) tentang masalah produk. Ikuti format ini:

<p>C: Halo, saya mengalami masalah dengan headphone baru saya. Earbud kanan tidak berfungsi.
A: Maaf mendengar itu. Bisa Anda beritahu saya model headphone yang Anda miliki?
C: Ini adalah SoundMax Pro 3000.
A: Terima kasih. Apakah Anda telah mencoba mereset headphone dengan meletakkannya di dalam kasus pengisian selama 10 detik?
C: Ya, saya mencoba itu, tetapi tidak berhasil.
A: Saya lihat. Mari kita coba pembaruan firmware. Bisa Anda pergi ke situs web kami dan mengunduh pembaruan firmware terbaru?</p>

<p>Sekarang generate percakapan baru tentang masalah produk yang berbeda:</p>

<p>C: Hai, saya baru saja menerima smartwatch baru saya, tetapi tidak bisa dihidupkan.
"""
</p>

<p># Hasilkan percakapan
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)

Pendekatan ini membantu LLM memahami struktur percakapan yang diinginkan dan gaya, menghasilkan interaksi dukungan pelanggan sintetis yang lebih realistis.

2.3 Pembangkitan Bersyarat

Pembangkitan bersyarat memungkinkan kita untuk mengontrol atribut tertentu dari data yang dihasilkan. Ini sangat berguna ketika kita perlu menciptakan dataset yang beragam dengan karakteristik yang dikendalikan.

from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch

<p>model = GPT2LMHeadModel.from_pretrained("gpt2-medium")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2-medium")</p>

<p>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)</p>

<p># Encode kondisi
condition_ids = tokenizer.encode(condition, add_special_tokens=False, return_tensors="pt")</p>

<p># Gabungkan kondisi dengan 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)</p>

<p>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)</p>

<p>return tokenizer.decode(output[0], skip_special_tokens=True)</p>

<p># Hasilkan deskripsi produk dengan kondisi yang berbeda
kondisi = ["Mewah", "Ramah lingkungan", "Teknologi tinggi"]
prompt = "Deskripsikan sebuah tas:"</p>

<p>for kondisi in kondisi:
deskripsi = generate_conditional_text(prompt, kondisi)
print(f"{kondisi} deskripsi tas:\n{deskripsi}\n")

Teknik ini memungkinkan kita untuk menghasilkan data sintetis yang beragam sambil mempertahankan kontrol atas atribut tertentu, memastikan bahwa dataset yang dihasilkan mencakup berbagai skenario atau jenis produk.

Aplikasi Data Sintetis yang Dihasilkan oleh LLM

Pengayaan Data Pelatihan

Salah satu aplikasi paling kuat dari data sintetis yang dihasilkan oleh LLM adalah pengayaan dataset pelatihan yang ada. Ini sangat berguna dalam skenario di mana data dunia nyata terbatas atau mahal untuk diperoleh.

import pandas as pd
from sklearn.model_selection import train_test_split
from transformers import pipeline

<p># Load dataset kecil dunia nyata
real_data = pd.read_csv("small_product_reviews.csv")</p>

<p># Split data
train_data, test_data = train_test_split(real_data, test_size=0.2, random_state=42)</p>

<p># Inisialisasi pipeline pembangkitan teks
generator = pipeline("text-generation", model="gpt2-medium")</p>

<p>def augment_dataset(data, num_synthetic_samples):
synthetic_data = []
for _, row in data.iterrows():
prompt = f"Generate ulasan produk serupa dengan: {row['review']}\nUlasan baru:"
synthetic_review = generator(prompt, max_length=100, num_return_sequences=1)[0]['generated_text']
synthetic_data.append({'review': synthetic_review, 'sentiment': row['sentiment'] # Anggap sentimen dipertahankan
if len(synthetic_data) &gt;= num_synthetic_samples:
break
return pd.DataFrame(synthetic_data)</p>

<p># Hasilkan data sintetis
synthetic_train_data = augment_dataset(train_data, num_synthetic_samples=len(train_data))</p>

<p># Gabungkan data asli dan sintetis
augmented_train_data = pd.concat([train_data, synthetic_train_data], ignore_index=True)</p>

<p>print(f"Ukuran data pelatihan asli: {len(train_data)}")
print(f"Ukuran data pelatihan yang diperkaya: {len(augmented_train_data)}")</p>

Pendekatan ini dapat secara signifikan meningkatkan ukuran dan keragaman dataset pelatihan Anda, potensialmente meningkatkan kinerja dan kekuatan model pembelajaran mesin Anda.

Tantangan dan Praktik Terbaik

Sementara pembangkitan data sintetis yang didorong oleh LLM menawarkan banyak keuntungan, juga datang dengan tantangan:

  1. Kontrol Kualitas: Pastikan data yang dihasilkan berkualitas tinggi dan relevan dengan kasus penggunaan Anda. Implementasikan proses validasi yang ketat.
  2. Mitigasi Bias: LLM dapat mewarisi dan memperkuat bias yang ada dalam data pelatihan mereka. Sadarilah hal ini dan implementasikan strategi deteksi dan mitigasi bias.
  3. Keragaman: Pastikan dataset sintetis Anda beragam dan mewakili skenario dunia nyata.
  4. Konsistensi: Pertahankan konsistensi dalam data yang dihasilkan, terutama ketika menciptakan dataset besar.
  5. Pertimbangan Etis: Berhati-hatilah terhadap implikasi etis, terutama ketika menghasilkan data sintetis yang meniru informasi sensitif atau pribadi.

Praktik terbaik untuk pembangkitan data sintetis yang didorong oleh LLM:

  1. Penyempurnaan Iteratif: Teruslah menyempurnakan prompt dan teknik pembangkitan Anda berdasarkan kualitas output.
  2. Pendekatan Hibrida: Gabungkan data sintetis yang dihasilkan oleh LLM dengan data dunia nyata untuk hasil yang optimal.
  3. Validasi: Implementasikan proses validasi yang kuat untuk memastikan kualitas dan relevansi data yang dihasilkan.
  4. Dokumentasi: Pertahankan dokumentasi yang jelas tentang proses pembangkitan data sintetis Anda untuk transparansi dan reproduktivitas.
  5. Panduan Etis: Kembangkan dan patuhi panduan etis untuk pembangkitan dan penggunaan data sintetis.

Kesimpulan

Pembangkitan data sintetis yang didorong oleh LLM adalah teknik yang kuat yang mengubah cara kita mengembangkan AI. Dengan memanfaatkan kemampuan model bahasa canggih, kita dapat menciptakan dataset yang beragam dan berkualitas tinggi yang memicu inovasi di berbagai domain. Ketika teknologi ini terus berkembang, ia berjanji untuk membuka kemungkinan baru dalam penelitian AI dan pengembangan aplikasi, sambil mengatasi tantangan kritis terkait kelangkaan data dan privasi.

Ketika kita melangkah maju, penting untuk mendekati pembangkitan data sintetis dengan perspektif yang seimbang, memanfaatkan keuntungannya sambil menyadari keterbatasannya dan implikasi etis. Dengan implementasi yang hati-hati dan penyempurnaan terus-menerus, pembangkitan data sintetis yang didorong oleh LLM memiliki potensi untuk mempercepat kemajuan AI dan membuka peluang baru dalam pembelajaran mesin dan ilmu data.

Saya telah menghabiskan lima tahun terakhir dengan membenamkan diri dalam dunia Machine Learning dan Deep Learning yang menarik. Minat dan keahlian saya telah memimpin saya untuk berkontribusi pada lebih dari 50 proyek rekayasa perangkat lunak yang beragam, dengan fokus khusus pada AI/ML. Rasa ingin tahu saya yang terus-menerus juga telah menarik saya ke arah Natural Language Processing, sebuah bidang yang saya ingin jelajahi lebih lanjut.