Membuat embedding dengan MLTransform

Halaman ini menjelaskan alasan dan cara menggunakan fitur MLTransform untuk menyiapkan data Anda guna 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.

Diagram alur kerja ML Dataflow dengan langkah pemrosesan data yang disorot.

Gambar 1. Alur kerja Dataflow ML yang lengkap. Gunakan MLTransform dalam tahap pra-pemrosesan 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 kuncinya tidak cocok secara langsung. Hal ini merupakan lompatan signifikan di luar penelusuran berbasis kata kunci standar. Anda juga dapat menggunakan embedding untuk rekomendasi produk. Hal ini mencakup penelusuran multimodal yang menggunakan gambar dan teks, log analytics, dan untuk tugas seperti penghapusan duplikat.

Dalam RAG, embedding memainkan peran penting dalam mengambil konteks yang paling relevan dari pusat informasi untuk merujuk respons model bahasa besar (LLM). Dengan embedding 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

Diagram penyerapan pengetahuan embedding dengan langkah-langkah pemrosesan data berupa chunking dan pembuatan embedding disorot.

Gambar 2. Diagram penyerapan pengetahuan. Diagram ini menunjukkan data dokumen multimodal input dan dua langkah pemrosesan: chunking dan pembuatan embedding. Chunking adalah langkah pra-pemrosesan yang digunakan untuk data kompleks sebelum pembuatan embedding. Setelah data diproses, embedding akan disimpan di database vektor.

Untuk kasus penggunaan embedding 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 Layanan Terkelola Google Cloud untuk 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 pra-pemrosesan 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 chunking. Chunking melibatkan pemecahan materi sumber menjadi unit-unit yang lebih kecil dan mudah dikelola. Strategi chunking 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 pra-pemrosesan penting ini.

Manfaat

Class MLTransform memberikan manfaat berikut:

  • Membuat embedding yang dapat Anda gunakan untuk mengirimkan data ke database vektor atau untuk menjalankan inferensi.
  • Mentransformasikan data Anda tanpa perlu menulis kode yang kompleks atau mengelola library yang mendasarinya.
  • Merangkai 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 embedding teks:

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 natural language processing (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 Face SentenceTransformers menggunakan Python untuk membuat embedding kalimat, teks, dan gambar.
Saya ingin membuat embedding teks dan memasukkannya ke AlloyDB untuk PostgreSQL
Gunakan Apache Beam, khususnya MLTransform class dengan modelHugging Face Hub untuk membuat embedding teks. Kemudian, gunakan VectorDatabaseWriteTransform 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 update data.
Saya ingin membuat embedding teks dan memasukkannya ke BigQuery
Gunakan class MLTransform Apache Beam dengan model Hugging Face Hub untuk membuat embedding teks dari data aplikasi, seperti katalog produk. Transformasi HuggingfaceTextEmbeddings 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 VectorDatabaseWriteTransform Apache Beam. Notebook ini selanjutnya mendemonstrasikan penelusuran kemiripan vektor di BigQuery menggunakan transformasi Enrichment.

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 embedding, 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 potongan:

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