Membuat embedding dengan MLTransform

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.

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

Gambar 1. Alur kerja Dataflow ML yang lengkap. Gunakan 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

Diagram penyerapan pengetahuan penyematan dengan langkah-langkah pemrosesan data
chunking dan pembuatan penyematan
yang ditandai.

Gambar 2. Diagram penyerapan pengetahuan. Bagian 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 penyematan. Setelah data diproses, embedding akan disimpan di database vektor.

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:

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 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 class MLTransform dengan model Hugging 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 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. 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 Apache Beam VectorDatabaseWriteTransform. 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