Halaman ini menjelaskan alasan dan cara menggunakan fitur MLTransform
untuk menyiapkan
data Anda untuk melatih model machine learning (ML). Secara khusus, halaman ini menunjukkan cara memproses data dengan membuat embedding menggunakan MLTransform
.
Dengan menggabungkan beberapa transformasi pemrosesan data dalam satu class, MLTransform
menyederhanakan proses penerapan operasi pemrosesan data ML Apache Beam ke alur kerja Anda.
MLTransform
dalam langkah praproses alur kerja.
Ringkasan embedding
Embedding sangat penting untuk aplikasi penelusuran semantik modern dan Retrieval Augmented Generation (RAG). Embedding memungkinkan sistem memahami dan berinteraksi dengan informasi pada tingkat yang lebih dalam dan konseptual. Dalam penelusuran semantik, embedding mengubah kueri dan dokumen menjadi representasi vektor. Representasi ini menangkap makna dan hubungan yang mendasarinya. Oleh karena itu, Anda dapat menemukan hasil yang relevan meskipun kata kunci tidak cocok secara langsung. Hal ini merupakan lompatan signifikan di luar penelusuran berbasis kata kunci standar. Anda juga dapat menggunakan penyematan untuk rekomendasi produk. Hal ini mencakup penelusuran multimodal yang menggunakan gambar dan teks, analisis log, dan untuk tugas seperti penghapusan duplikat.
Dalam RAG, embedding memainkan peran penting dalam mengambil konteks yang paling relevan dari pusat informasi untuk mendasari respons model bahasa besar (LLM). Dengan menyematkan kueri pengguna dan potongan informasi dalam pusat informasi, sistem RAG dapat secara efisien mengidentifikasi dan mengambil potongan yang paling mirip secara semantik. Pencocokan semantik ini memastikan bahwa LLM memiliki akses ke informasi yang diperlukan untuk menghasilkan jawaban yang akurat dan informatif.
Menyerap dan memproses data untuk embedding
Untuk kasus penggunaan penyematan inti, pertimbangan utamanya adalah cara menyerap dan memproses pengetahuan. Penyerapan ini dapat dilakukan secara batch atau streaming. Sumber pengetahuan ini dapat sangat bervariasi. Misalnya, informasi ini dapat berasal dari file yang disimpan di Cloud Storage, atau dapat berasal dari sumber streaming seperti Pub/Sub atau Google Cloud Managed Service for Apache Kafka.
Untuk sumber streaming, data itu sendiri mungkin berupa konten mentah (misalnya, teks biasa) atau URI yang mengarah ke dokumen. Terlepas dari sumbernya, tahap pertama biasanya melibatkan praproses informasi. Untuk teks mentah, hal ini mungkin minimal, seperti pembersihan data dasar. Namun, untuk dokumen yang lebih besar atau konten yang lebih kompleks, langkah pentingnya adalah memecah. Chunking melibatkan pemecahan materi sumber menjadi unit-unit yang lebih kecil dan mudah dikelola. Strategi pengelompokan yang optimal tidak distandardisasi dan bergantung pada data dan aplikasi tertentu. Platform seperti Dataflow menawarkan kemampuan bawaan untuk menangani berbagai kebutuhan chunking, sehingga menyederhanakan tahap praproses penting ini.
Manfaat
Class MLTransform
memberikan manfaat berikut:
- Buat embedding yang dapat Anda gunakan untuk mengirim data ke database vektor atau untuk menjalankan inferensi.
- Transformasikan data Anda tanpa perlu menulis kode yang kompleks atau mengelola library yang mendasarinya.
- Rangkai beberapa jenis operasi pemrosesan secara efisien dengan satu antarmuka.
Dukungan dan batasan
Class MLTransform
memiliki batasan berikut:
- Tersedia untuk pipeline yang menggunakan Apache Beam Python SDK versi 2.53.0 dan yang lebih baru.
- Pipeline harus menggunakan jendela default.
Transformasi penyematan teks:
- Mendukung Python 3.8, 3.9, 3.10, 3.11, dan 3.12.
- Mendukung pipeline batch dan streaming.
- Mendukung Vertex AI text-embeddings API dan modul Hugging Face Sentence Transformers.
Kasus penggunaan
Notebook contoh menunjukkan cara menggunakan MLTransform
untuk kasus penggunaan
tertentu.
- Saya ingin membuat embedding teks untuk LLM saya menggunakan Vertex AI
- Gunakan class
MLTransform
Apache Beam dengan Vertex AI text-embeddings API untuk membuat embedding teks. Embedding teks adalah cara untuk merepresentasikan teks sebagai vektor numerik, yang diperlukan untuk banyak tugas pemrosesan bahasa alami (NLP). - Saya ingin membuat embedding teks untuk LLM saya menggunakan Hugging Face
- Gunakan class
MLTransform
Apache Beam dengan model Hugging Face Hub untuk membuat embedding teks. Framework Hugging FaceSentenceTransformers
menggunakan Python untuk membuat embedding kalimat, teks, dan gambar. - Saya ingin membuat embedding teks dan memasukkannya ke AlloyDB untuk PostgreSQL
- Gunakan Apache Beam, khususnya class
MLTransform
dengan model Hugging Face Hub untuk membuat embedding teks. Kemudian, gunakanVectorDatabaseWriteTransform
untuk memuat embedding dan metadata terkait ini ke dalam AlloyDB untuk PostgreSQL. Notebook ini menunjukkan cara membuat pipeline data batch dan streaming Beam yang skalabel untuk mengisi database vektor AlloyDB untuk PostgreSQL. Hal ini mencakup penanganan data dari berbagai sumber seperti Pub/Sub atau tabel database yang ada, pembuatan skema kustom, dan pembaruan data. - Saya ingin membuat penyematan teks dan memasukkannya ke BigQuery
- Gunakan class
MLTransform
Apache Beam dengan model Hugging Face Hub untuk membuat penyematan teks dari data aplikasi, seperti katalog produk. TransformasiHuggingfaceTextEmbeddings
Apache Beam digunakan untuk hal ini. Transformasi ini menggunakan framework SentenceTransformers Hugging Face, yang menyediakan model untuk membuat embedding kalimat dan teks. Embedding yang dibuat dan metadatanya kemudian diserap ke BigQuery menggunakan Apache BeamVectorDatabaseWriteTransform
. Notebook ini selanjutnya mendemonstrasikan penelusuran kemiripan vektor di BigQuery menggunakan transformasi Pengayaan.
Untuk mengetahui daftar lengkap transformasi yang tersedia, lihat Transformasi dalam dokumentasi Apache Beam.
Menggunakan MLTransform untuk pembuatan embedding
Untuk menggunakan class MLTransform
guna membagi informasi dan membuat penyematan, sertakan kode berikut dalam pipeline Anda:
def create_chunk(product: Dict[str, Any]) -> Chunk:
return Chunk(
content=Content(
text=f"{product['name']}: {product['description']}"
),
id=product['id'], # Use product ID as chunk ID
metadata=product, # Store all product info in metadata
)
[...]
with beam.Pipeline() as p:
_ = (
p
| 'Create Products' >> beam.Create(products)
| 'Convert to Chunks' >> beam.Map(create_chunk)
| 'Generate Embeddings' >> MLTransform(
write_artifact_location=tempfile.mkdtemp())
.with_transform(huggingface_embedder)
| 'Write to AlloyDB' >> VectorDatabaseWriteTransform(alloydb_config)
)
Contoh sebelumnya membuat satu bagian per elemen, tetapi Anda juga dapat menggunakan LangChain untuk membuat bagian:
splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=20)
provider = beam.ml.rag.chunking.langchain.LangChainChunker(
document_field='content', metadata_fields=[], text_splitter=splitter)
with beam.Pipeline() as p:
_ = (
p
| 'Create Products' >> beam.io.textio.ReadFromText(products)
| 'Convert to Chunks' >> provider.get_ptransform_for_processing()
Langkah berikutnya
- Untuk mengetahui detail selengkapnya tentang
MLTransform
, lihat Memproses data dalam dokumentasi Apache Beam. - Untuk contoh lainnya, lihat
MLTransform
untuk pemrosesan data di katalog transformasi Apache Beam. - Jalankan notebook interaktif di Colab.