Tutorial: Mengindeks data besar dari Apache Spark menggunakan SynapseML dan Pencarian Azure AI

Catatan

Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.

Dalam tutorial Pencarian Azure AI ini, Anda mempelajari cara mengindeks dan mengkueri data besar yang dimuat dari kluster Spark. Anda menyiapkan Jupyter Notebook untuk:

  • Memuat berbagai formulir (faktur) ke dalam bingkai data dalam sesi Apache Spark
  • Menganalisis formulir untuk menentukan fiturnya
  • Merakit output yang dihasilkan ke dalam struktur data tabular
  • Menulis output ke indeks pencarian yang dihosting di Pencarian Azure AI
  • Menjelajahi dan mengkueri konten yang Anda buat

Tutorial ini mengambil dependensi pada SynapseML, pustaka sumber terbuka yang mendukung pembelajaran mesin paralel secara besar-besaran melalui big data. Di SynapseML, pengindeksan pencarian dan pembelajaran mesin diekspos melalui transformator yang melakukan tugas khusus. Transformer memanfaatkan berbagai kemampuan AI. Dalam latihan ini, Anda menggunakan API AzureSearchWriter untuk analisis dan pengayaan AI.

Meskipun Pencarian Azure AI memiliki pengayaan AI asli, tutorial ini menunjukkan kepada Anda cara mengakses kemampuan AI di luar Pencarian Azure AI. Dengan menggunakan SynapseML alih-alih pengindeks atau keterampilan, Anda tidak tunduk pada batas data atau batasan lain yang terkait dengan objek tersebut.

Tip

Tonton video singkat demo ini. Video ini mengembangkan tutorial ini dengan lebih banyak langkah dan tampilan.

Prerequisites

Anda memerlukan synapseml pustaka dan beberapa sumber daya Azure. Jika memungkinkan, gunakan langganan dan wilayah yang sama untuk sumber daya Azure Anda dan masukkan semuanya ke dalam satu grup sumber daya untuk pembersihan sederhana nanti. Tautan berikut adalah untuk penginstalan portal. Data sampel diimpor dari situs publik.

1 Tautan ini menyelesaikan tutorial untuk memuat paket.

2 Anda dapat menggunakan tingkat Gratis untuk mengindeks data sampel, tetapi memilih tingkat yang lebih tinggi jika volume data Anda besar. Untuk tingkatan yang ditagihkan, berikan kunci API pencarian pada langkah Siapkan dependensi yang berikut.

3 Tutorial ini menggunakan Kecerdasan dokumen dan Penerjemah dari Foundry Tools. Dalam instruksi berikut, masukkan kunci sumber daya Foundry dan pilih wilayahnya. Kunci yang sama berfungsi untuk kedua layanan. Untuk tutorial ini, penting bagi Anda untuk menggunakan sumber daya Foundry dengan jenis AIServicesAPI . Anda dapat memeriksa jenis API di portal Microsoft Azure di halaman Gambaran Umum sumber daya Foundry Anda. Untuk informasi selengkapnya tentang jenis API, lihat Melampirkan sumber daya Foundry di Pencarian Azure AI.

4 Dalam tutorial ini, Azure Databricks menyediakan platform komputasi Spark. Kami menggunakan instruksi portal untuk menyiapkan kluster dan ruang kerja.

Catatan

Sumber daya Azure sebelumnya mendukung fitur keamanan di platform Identitas Microsoft. Untuk kesederhanaan, tutorial ini mengasumsikan autentikasi berbasis kunci, menggunakan titik akhir dan kunci yang disalin dari halaman portal Microsoft Azure dari setiap layanan. Jika Anda menerapkan alur kerja ini di lingkungan produksi atau berbagi solusi dengan orang lain, ingatlah untuk mengganti kunci yang dikodekan secara permanen dengan keamanan terintegrasi atau kunci terenkripsi.

Membuat kluster dan notebook Spark

Di bagian ini, Anda membuat kluster, menginstal synapseml pustaka, dan membuat buku catatan untuk menjalankan kode.

  1. Di portal Microsoft Azure, temukan ruang kerja Azure Databricks Anda dan pilih Luncurkan ruang kerja.

  2. Di menu sebelah kiri, pilih Komputasi.

  3. Pilih Buat komputasi.

  4. Terima konfigurasi default. Dibutuhkan beberapa menit untuk membuat kluster.

  5. Verifikasi kluster beroperasi dan berjalan. Titik hijau dengan nama kluster mengonfirmasi statusnya.

    Cuplikan layar halaman komputasi Data Bricks dengan titik hijau berdasarkan nama kluster.

  6. Setelah kluster dibuat, instal synapseml pustaka:

    1. Pilih Pustaka dari tab di bagian atas halaman cluster.

    2. Pilih Instal baru.

      Cuplikan layar perintah Instal Baru.

    3. Pilih Maven.

    4. Di Koordinat, cari com.microsoft.azure:synapseml_2.12:1.0.9.

    5. Pilih Instal.

      Cuplikan layar spesifikasi paket Maven.

  7. Di menu sebelah kiri, pilih Buat>Buku Catatan.

    Cuplikan layar perintah Buat Buku Catatan.

  8. Beri nama buku catatan, pilih Python sebagai bahasa default, dan pilih kluster yang memiliki synapseml pustaka.

  9. Buat tujuh sel berturut-turut. Di bagian berikut, Anda menempelkan kode di sel-sel ini.

    Cuplikan layar buku catatan dengan sel tempat penampung.

Menyiapkan dependensi

Tempelkan kode berikut ke sel pertama buku catatan Anda.

Ganti placeholder dengan endpoint dan kunci akses untuk setiap sumber daya. Berikan nama untuk indeks pencarian baru yang akan dibuat untuk Anda. Tidak diperlukan modifikasi lain, jadi jalankan kode saat Anda siap.

Kode ini mengimpor beberapa paket dan menyiapkan akses ke sumber daya Azure yang digunakan dalam tutorial ini.

import os
from pyspark.sql.functions import udf, trim, split, explode, col, monotonically_increasing_id, lit
from pyspark.sql.types import StringType
from synapse.ml.core.spark import FluentAPI

cognitive_services_key = "placeholder-azure-ai-foundry-key"
cognitive_services_region = "placeholder-azure-ai-foundry-region"

search_service = "placeholder-search-service-name"
search_key = "placeholder-search-service-admin-api-key"
search_index = "placeholder-for-new-search-index-name"

Memuat data ke Spark

Tempelkan kode berikut ke sel kedua. Tidak diperlukan modifikasi, jadi jalankan kode saat Anda siap.

Kode ini memuat beberapa file eksternal dari akun penyimpanan Azure. File-file ini adalah berbagai faktur yang dibaca ke dalam kerangka data.

def blob_to_url(blob):
    [prefix, postfix] = blob.split("@")
    container = prefix.split("/")[-1]
    split_postfix = postfix.split("/")
    account = split_postfix[0]
    filepath = "/".join(split_postfix[1:])
    return "https://{}/{}/{}".format(account, container, filepath)


df2 = (spark.read.format("binaryFile")
    .load("wasbs://[email protected]/form_subset/*")
    .select("path")
    .limit(10)
    .select(udf(blob_to_url, StringType())("path").alias("url"))
    .cache())
    
display(df2)

Menambahkan kecerdasan dokumen

Tempelkan kode berikut ke sel ketiga. Tidak diperlukan modifikasi, jadi jalankan kode saat Anda siap.

Kode ini memuat transformator AnalyzeInvoices dan meneruskan referensi ke bingkai data yang berisi faktur. Ini memanggil model faktur bawaan Azure Document Intelligence di Foundry Tools untuk mengekstrak informasi dari faktur.

from synapse.ml.services import AnalyzeInvoices

analyzed_df = (AnalyzeInvoices()
    .setSubscriptionKey(cognitive_services_key)
    .setLocation(cognitive_services_region)
    .setImageUrlCol("url")
    .setOutputCol("invoices")
    .setErrorCol("errors")
    .setConcurrency(5)
    .transform(df2)
    .cache())

display(analyzed_df)

Output akan terlihat mirip dengan cuplikan layar berikut. Perhatikan bagaimana analisis formulir dikemas ke dalam kolom terstruktur padat, yang sulit untuk dikerjakan. Transformasi berikutnya menyelesaikan masalah ini dengan mengurai kolom menjadi baris dan kolom.

Tangkapan layar hasil AnalyzeInvoices.

Restrukturisasi keluaran kecerdasan dokumen

Tempelkan kode berikut ke sel keempat dan jalankan. Tidak diperlukan modifikasi.

Kode ini memuat FormOntologyLearner, transformator yang menganalisis output transformator Azure Document Intelligence dan menyimpulkan struktur data tabular. Output AnalyzeInvoices bersifat dinamis dan bervariasi berdasarkan fitur yang terdeteksi dalam konten Anda. Selain itu, transformator mengonsolidasikan output ke dalam satu kolom. Karena outputnya dinamis dan terkonsolidasi, sulit untuk digunakan dalam transformasi hilir yang membutuhkan lebih banyak struktur.

FormOntologyLearner memperluas utilitas transformator AnalyzeInvoices dengan mencari pola yang dapat digunakan untuk membuat struktur data tabular. Mengatur output menjadi beberapa kolom dan baris membuat konten dapat dikonsumsi di transformer lain, seperti AzureSearchWriter.

from synapse.ml.cognitive import FormOntologyLearner

itemized_df = (FormOntologyLearner()
    .setInputCol("invoices")
    .setOutputCol("extracted")
    .fit(analyzed_df)
    .transform(analyzed_df)
    .select("url", "extracted.*").select("*", explode(col("Items")).alias("Item"))
    .drop("Items").select("Item.*", "*").drop("Item"))

display(itemized_df)

Perhatikan bagaimana transformasi ini mengubah susunan kolom bersarang ke dalam tabel, yang memungkinkan dua transformasi berikutnya. Cuplikan layar ini dipangkas untuk singkatnya. Jika Anda mengikuti di dalam buku catatan Anda sendiri, Anda memiliki 19 kolom dan 26 baris.

Cuplikan layar output FormOntologyLearner.

Menambahkan terjemahan

Tempelkan kode berikut ke sel kelima. Tidak diperlukan modifikasi, jadi jalankan kode saat Anda siap.

Kode ini memuat Terjemahan, transformator yang memanggil Penerjemah Azure di Foundry Tools. Teks asli, yang dalam bahasa Inggris di kolom "Deskripsi", diterjemahkan ke dalam berbagai bahasa. Semua output dikonsolidasikan ke dalam array "output.translations".

from synapse.ml.cognitive import Translate

translated_df = (Translate()
    .setSubscriptionKey(cognitive_services_key)
    .setLocation(cognitive_services_region)
    .setTextCol("Description")
    .setErrorCol("TranslationError")
    .setOutputCol("output")
    .setToLanguage(["zh-Hans", "fr", "ru", "cy"])
    .setConcurrency(5)
    .transform(itemized_df)
    .withColumn("Translations", col("output.translations")[0])
    .drop("output", "TranslationError")
    .cache())

display(translated_df)

Tip

Untuk memeriksa string yang diterjemahkan, gulir ke akhir baris.

Cuplikan layar output tabel, memperlihatkan kolom Terjemahan.

Menambahkan indeks pencarian dengan AzureSearchWriter

Tempelkan kode berikut di sel keenam dan jalankan. Tidak diperlukan modifikasi.

Kode ini memuat AzureSearchWriter. Ini menggunakan himpunan data tabular dan menyimpulkan skema indeks pencarian yang menentukan satu bidang untuk setiap kolom. Karena struktur terjemahan adalah array, struktur ini diartikulasikan dalam indeks sebagai koleksi kompleks dengan subbidang untuk setiap terjemahan bahasa. Indeks yang dihasilkan memiliki kunci dokumen dan menggunakan nilai default untuk bidang yang dibuat menggunakan Create Index REST API.

from synapse.ml.cognitive import *

(translated_df.withColumn("DocID", monotonically_increasing_id().cast("string"))
    .withColumn("SearchAction", lit("upload"))
    .writeToAzureSearch(
        subscriptionKey=search_key,
        actionCol="SearchAction",
        serviceName=search_service,
        indexName=search_index,
        keyCol="DocID",
    ))

Untuk menjelajahi definisi indeks yang dibuat oleh AzureSearchWriter, periksa halaman layanan pencarian di portal Microsoft Azure.

Catatan

Jika Anda tidak dapat menggunakan indeks pencarian default, Anda dapat memberikan definisi kustom eksternal di JSON, meneruskan URI-nya sebagai string di properti "indexJson". Buat indeks default terlebih dahulu sehingga Anda tahu bidang mana yang akan ditentukan, lalu ikuti dengan properti yang disesuaikan jika Anda memerlukan penganalisis tertentu, misalnya.

Menjalankan kueri pada indeks

Tempelkan kode berikut ke sel ketujuh dan jalankan. Tidak diperlukan modifikasi, kecuali Anda mungkin ingin memvariasikan sintaks atau mencoba lebih banyak contoh untuk menjelajahi konten Anda lebih lanjut:

Tidak ada transformator atau modul yang mengeluarkan kueri. Sel ini adalah panggilan sederhana ke Search Documents REST API.

Contoh khusus ini mencari kata "pintu" ("search": "door"). Ini juga mengembalikan "jumlah" dari dokumen yang sesuai dan hanya memilih konten kolom "Deskripsi" dan "Terjemahan" untuk hasil yang ditampilkan. Jika Anda ingin melihat daftar lengkap bidang, hapus parameter "pilih".

import requests

url = "https://{}.search.windows.net/indexes/{}/docs/search?api-version=2026-04-01".format(search_service, search_index)
requests.post(url, json={"search": "door", "count": "true", "select": "Description, Translations"}, headers={"api-key": search_key}).json()

Cuplikan layar berikut menunjukkan output sel untuk contoh skrip.

Cuplikan layar hasil kueri memperlihatkan jumlah, string pencarian, dan bidang pengembalian.

Membersihkan sumber daya

Saat Anda bekerja di langganan milik Anda sendiri, di akhir proyek, sebaiknya hapus sumber daya yang tidak lagi Anda butuhkan. Sumber daya yang dibiarkan tetap aktif dapat merugikan Anda secara finansial. Anda dapat menghapus sumber daya satu per satu atau menghapus grup sumber daya untuk menghapus seluruh kumpulan sumber daya.

Anda dapat menemukan dan mengelola sumber daya di portal Azure, menggunakan tautan Semua sumber daya atau Grup sumber daya di panel navigasi kiri.

Langkah selanjutnya

Dalam tutorial ini, Anda mempelajari tentang transformator AzureSearchWriter di SynapseML, yang merupakan cara baru untuk membuat dan memuat indeks pencarian di Pencarian Azure AI. Transformator mengambil JSON terstruktur sebagai input. FormOntologyLearner dapat menyediakan struktur yang diperlukan untuk output yang dihasilkan oleh transformator Azure Document Intelligence di SynapseML.

Sebagai langkah selanjutnya, tinjau tutorial SynapseML lainnya yang menghasilkan konten yang diubah yang mungkin ingin Anda jelajahi melalui Pencarian Azure AI: