Bagikan melalui


Tutorial: Menggunakan Eventhouse sebagai database vektor

Dalam tutorial ini, Anda mempelajari cara menggunakan Eventhouse sebagai database vektor untuk menyimpan dan mengkueri data vektor dalam Kecerdasan Real Time. Untuk informasi umum tentang database vektor, lihat Database vektor.

Skenario yang diberikan melibatkan penggunaan pencarian semantik di halaman Wikipedia untuk menemukan halaman dengan tema umum. Anda menggunakan himpunan data sampel yang tersedia, yang mencakup vektor untuk puluhan ribu halaman Wikipedia. Halaman-halaman ini disematkan dengan model OpenAI untuk menghasilkan vektor untuk setiap halaman. Vektor, bersama dengan beberapa metadata terkait dengan halaman, kemudian disimpan di Eventhouse. Anda dapat menggunakan himpunan data ini untuk menemukan halaman yang mirip satu sama lain, atau untuk menemukan halaman yang mirip dengan beberapa tema yang ingin Anda temukan. Misalnya, Anda ingin mencari "ilmuwan wanita terkenal abad ke-19." Anda mengodekan frasa ini menggunakan model OpenAI yang sama, lalu menjalankan pencarian kesamaan vektor atas data halaman Wikipedia yang disimpan untuk menemukan halaman dengan kesamaan semantik tertinggi.

Secara khusus, dalam tutorial ini Anda akan:

  • Siapkan tabel di Eventhouse dengan Vector16 pengodean untuk kolom vektor.
  • Simpan data vektor dari himpunan data yang telah disematkan sebelumnya ke Eventhouse.
  • Sematkan kueri bahasa alami menggunakan model Open AI.
  • Gunakan fungsi KQL series_cosine_similarity untuk menghitung kesamaan antara vektor penyematan kueri dan yang ada di halaman wiki.
  • Tampilkan baris dengan kesamaan tertinggi untuk mendapatkan halaman wiki yang paling relevan dengan kueri pencarian Anda.

Alur ini dapat divisualisasikan sebagai berikut:

Skema Eventhouse sebagai alur kerja database vektor.

Prasyarat

Catatan

Meskipun tutorial ini menggunakan Azure OpenAI, Anda dapat menggunakan penyedia model penyematan apa pun untuk menghasilkan vektor untuk data teks.

Menyiapkan lingkungan Eventhouse Anda

Dalam langkah penyiapan ini, Anda membuat tabel di Eventhouse dengan kolom dan kebijakan pengodean yang diperlukan untuk menyimpan data vektor.

  1. Telusuri beranda ruang kerja Anda di Real-Time Intelligence.

  2. Pilih Eventhouse yang Anda buat di syarat sebelumnya.

  3. Pilih database target tempat Anda ingin menyimpan data vektor. Jika Anda tidak memiliki database, Anda bisa membuatnya dengan memilih Tambahkan database.

  4. Pilih Jelajahi data saya. Salin/tempel kueri KQL berikut untuk membuat tabel dengan kolom yang diperlukan:

    .create table Wiki (id:string,url:string,['title']:string,text:string,title_vector:dynamic,content_vector:dynamic,vector_id:long)
    
  5. Salin/tempel perintah berikut untuk mengatur kebijakan pengodean kolom vektor. Jalankan perintah ini secara berurutan.

    .alter column Wiki.title_vector policy encoding type='Vector16'
    
    .alter column Wiki.content_vector policy encoding type='Vector16'
    

Menulis data vektor ke Sistem Eventhouse

Langkah-langkah berikut digunakan untuk mengimpor data Wikipedia yang disematkan dan menulisnya di Eventhouse:

Mengimpor notebook

  1. Unduh contoh buku catatan dari repositori GitHub.
  2. Masuk ke lingkungan Fabric Anda. Di pengalih pengalaman, pilih Fabric lalu ruang kerja Anda.
  3. Pilih Impor>Buku Catatan>Dari komputer ini>Unggah lalu pilih buku catatan yang Anda unduh di langkah sebelumnya.
  4. Setelah impor selesai, buka buku catatan yang diimpor dari ruang kerja Anda.

Menulis data ke Eventhouse

  1. Jalankan sel untuk menyiapkan lingkungan Anda.

    %%configure -f
    {"conf":
        {
            "spark.rpc.message.maxSize": "1024"
        }
    }
    
    %pip install wget
    
    %pip install openai
    
  2. Jalankan sel untuk mengunduh penyematan yang telah dikomputasi sebelumnya.

    import wget
    
    embeddings_url = "https://cdn.openai.com/API/examples/data/vector_database_wikipedia_articles_embedded.zip"
    
    # The file is ~700 MB so it might take some time
    wget.download(embeddings_url)
    
    import zipfile
    
    with zipfile.ZipFile("vector_database_wikipedia_articles_embedded.zip","r") as zip_ref:
        zip_ref.extractall("/lakehouse/default/Files/data")
    
    import pandas as pd
    
    from ast import literal_eval
    
    article_df = pd.read_csv('/lakehouse/default/Files/data/vector_database_wikipedia_articles_embedded.csv')
    # Read vectors from strings back into a list
    article_df["title_vector"] = article_df.title_vector.apply(literal_eval)
    article_df["content_vector"] = article_df.content_vector.apply(literal_eval)
    article_df.head()
    
  3. Untuk menulis ke eventhouse, masukkan URI Kluster Anda, yang dapat ditemukan di halaman gambaran umum sistem, dan nama database. Tabel dibuat di buku catatan dan kemudian direferensikan dalam kueri.

    # replace with your Eventhouse Cluster URI, Database name, and Table name
    KUSTO_CLUSTER =  "Eventhouse Cluster URI"
    KUSTO_DATABASE = "Database name"
    KUSTO_TABLE = "Wiki"
    
  4. Jalankan sel yang tersisa untuk menulis data ke Eventhouse. Operasi ini dapat memakan waktu untuk dijalankan.

    kustoOptions = {"kustoCluster": KUSTO_CLUSTER, "kustoDatabase" :KUSTO_DATABASE, "kustoTable" : KUSTO_TABLE }
    
    access_token=mssparkutils.credentials.getToken(kustoOptions["kustoCluster"])
    
    #Pandas data frame to spark dataframe
    sparkDF=spark.createDataFrame(article_df)
    
    # Write data to a table in Eventhouse
    sparkDF.write. \
    format("com.microsoft.kusto.spark.synapse.datasource"). \
    option("kustoCluster",kustoOptions["kustoCluster"]). \
    option("kustoDatabase",kustoOptions["kustoDatabase"]). \
    option("kustoTable", kustoOptions["kustoTable"]). \
    option("accessToken", access_token). \
    option("tableCreateOptions", "CreateIfNotExist").\
    mode("Append"). \
    save()
    

Menampilkan data di Eventhouse

Pada titik ini, Anda dapat memverifikasi bahwa data ditulis ke eventhouse dengan menelusuri ke halaman detail database.

  1. Telusuri beranda ruang kerja Anda di Real-Time Intelligence.
  2. Pilih item database yang disediakan di bagian sebelumnya. Anda akan melihat ringkasan data yang ditulis ke tabel "Wiki".

Buat penyematan untuk istilah pencarian

Setelah menyimpan data wiki yang disematkan di eventhouse, Anda dapat menggunakan data ini sebagai referensi untuk menemukan halaman pada artikel tertentu. Untuk membuat perbandingan, Anda menyematkan istilah pencarian, lalu melakukan perbandingan antara istilah pencarian dan halaman Wikipedia.

Untuk memanggil API penyematan Azure OpenAI, Anda memerlukan titik akhir.

Nama variabel Nilai
titik akhir Nilai ini dapat ditemukan di bagian Keys & Endpoint saat memeriksa sumber daya Anda dari portal Azure.

Gunakan informasi dalam tabel saat menjalankan sel Azure OpenAI.

let model_endpoint = 'https://deployment-name.openai.azure.com/openai/deployments/kusto-text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate';
let searchedEmbedding = toscalar(evaluate ai_embeddings("most difficult gymnastics moves in the olympics", model_endpoint));
print(searchedEmbedding)

Mencari kesamaan

Kueri dijalankan langsung di Eventhouse, dan menggunakan penyematan yang telah dikembalikan dari langkah sebelumnya dalam perbandingan terhadap halaman Wikipedia yang disematkan yang disimpan di Eventhouse Anda. Kueri ini menggunakan fungsi kesamaan kosinus dan mengembalikan 10 vektor paling mirip teratas.

Jalankan kueri KQL untuk melihat hasilnya. Anda bisa mengubah istilah pencarian dan menjalankan ulang kueri untuk melihat hasil yang berbeda. Anda juga dapat membandingkan entri yang ada di database Wiki untuk menemukan entri serupa.

let model_endpoint = 'https://deployment-name.openai.azure.com/openai/deployments/kusto-text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate';
//
Wiki
| extend similarity = series_cosine_similarity(searchedEmbedding, content_vector)
| top 10 by similarity desc

Membersihkan sumber daya

Setelah menyelesaikan tutorial, Anda dapat menghapus sumber daya, yang Anda buat untuk menghindari timbulnya biaya lain. Untuk menghapus sumber daya, ikuti langkah-langkah berikut:

  1. Akses beranda ruang kerja Anda.
  2. Hapus buku catatan yang dibuat dalam tutorial ini.
  3. Hapus Eventhouse atau database yang digunakan dalam tutorial ini.