Öğretici: SynapseML ve Azure AI Search kullanarak Apache Spark'tan büyük verileri dizine ekleme

Bu Azure AI Search öğreticisinde Spark kümesinden yüklenen büyük verileri dizine almayı ve sorgulamayı öğrenin. Aşağıdaki eylemleri gerçekleştiren bir Jupyter Not Defteri ayarlayın:

  • Apache Spark oturumunda veri çerçevesine çeşitli formlar (faturalar) yükleme
  • Özelliklerini belirlemek için bunları analiz etme
  • Sonuçta elde edilen çıkışı tablosal veri yapısında bir araya getirme
  • Çıktıyı Azure AI Search'te barındırılan bir arama dizinine yazma
  • Oluşturduğunuz içeriği keşfetme ve sorgulama

Bu öğretici, büyük veriler üzerinde yüksek düzeyde paralel makine öğrenmesini destekleyen bir açık kaynak kitaplığı olan SynapseML bağımlılığını alır. SynapseML'de arama dizini oluşturma ve makine öğrenmesi, özel görevler gerçekleştiren transformatörler aracılığıyla kullanıma sunulur. Transformatörler çok çeşitli yapay zeka özelliklerine sahiptir. Bu alıştırmada analiz ve yapay zeka zenginleştirmesi için AzureSearchWriter API'lerini kullanın.

Azure AI Search'ün yerel yapay zeka zenginleştirmesi olsa da bu öğreticide, Azure AI Search dışında yapay zeka özelliklerine nasıl erişabileceğiniz gösterilmektedir. Dizin oluşturucular veya beceriler yerine SynapseML kullanarak veri sınırlarına veya bu nesnelerle ilişkili diğer kısıtlamalara tabi olmazsınız.

İpucu

adresinde bu tanıtımın https://www.youtube.com/watch?v=iXnBLwp7f88kısa bir videosunu izleyin. Video, daha fazla adım ve görselle bu öğreticide genişler.

Önkoşullar

Kitaplığa synapseml ve birkaç Azure kaynağına ihtiyacınız vardır. Mümkünse, Azure kaynaklarınız için aynı aboneliği ve bölgeyi kullanın ve daha sonra basit temizleme için her şeyi tek bir kaynak grubuna yerleştirin. Aşağıdaki bağlantılar portal yüklemelerine yöneliktir. Örnek veriler genel bir siteden içeri aktarılır.

1 Bu bağlantı, paketi yüklemeye yönelik bir öğreticiye çözümleniyor.

2 Örnek verilerin dizinini oluşturmak için ücretsiz arama katmanını kullanabilirsiniz, ancak veri hacimleriniz büyükse daha yüksek bir katman seçebilirsiniz. Faturalanabilir katmanlar için bağımlılıkları ayarlama adımında daha sonra arama API'si anahtarını sağlayın.

3 Bu öğreticide Azure AI Belge Zekası ve Azure AI Çeviri kullanılır. Aşağıdaki yönergelerde, çok hizmetli bir anahtar ve bölge sağlayın. Aynı anahtar her iki hizmet için de çalışır.

4 Bu öğreticide, Azure Databricks Spark bilgi işlem platformunu sağlar. Çalışma alanını ayarlamak için portal yönergelerini kullandık.

Not

Yukarıdaki Azure kaynaklarının tümü Microsoft Identity platformundaki güvenlik özelliklerini destekler. Kolaylık olması için bu öğreticide, her hizmetin portal sayfalarından kopyalanan uç noktaları ve anahtarları kullanarak anahtar tabanlı kimlik doğrulaması varsayılır. Bu iş akışını bir üretim ortamında uygularsanız veya çözümü başkalarıyla paylaşırsanız, sabit kodlanmış anahtarları tümleşik güvenlik veya şifrelenmiş anahtarlarla değiştirmeyi unutmayın.

1. Adım: Spark kümesi ve not defteri oluşturma

Bu bölümde bir küme oluşturun, kitaplığı yükleyin synapseml ve kodu çalıştırmak için bir not defteri oluşturun.

  1. Azure portalında Azure Databricks çalışma alanınızı bulun ve Çalışma alanını başlat'ı seçin.

  2. Soldaki menüde İşlem'i seçin.

  3. İşlem oluştur'u seçin.

  4. Varsayılan yapılandırmayı kabul edin. Kümenin oluşturulması birkaç dakika sürer.

  5. synapseml Küme oluşturulduktan sonra kitaplığı yükleyin:

    1. Küme sayfasının üst kısmındaki sekmelerden Kitaplıklar'ı seçin.

    2. Yeni yükle'yi seçin.

      Yeni Yükle komutunun ekran görüntüsü.

    3. Maven'ı seçin.

    4. Koordinatlar'a com.microsoft.azure:synapseml_2.12:1.0.4

    5. Yükle'yi seçin.

      Maven paket belirtiminin ekran görüntüsü.

  6. Soldaki menüde Not Defteri Oluştur'u>seçin.

    Not Defteri Oluştur komutunun ekran görüntüsü.

  7. Not defterine bir ad verin, varsayılan dil olarak Python'ı seçin ve kitaplığı olan kümeyi synapseml seçin.

  8. Ardışık yedi hücre oluşturun. Her birine kod yapıştırın.

    Yer tutucu hücreler içeren not defterinin ekran görüntüsü.

2. Adım: Bağımlılıkları ayarlama

Aşağıdaki kodu not defterinizin ilk hücresine yapıştırın.

Yer tutucuları her kaynağın uç noktaları ve erişim anahtarlarıyla değiştirin. Yeni arama dizini için bir ad sağlayın. Başka değişiklik gerekmez, bu nedenle hazır olduğunuzda kodu çalıştırın.

Bu kod birden çok paketi içeri aktarır ve bu iş akışında kullanılan Azure kaynaklarına erişimi ayarlar.

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-cognitive-services-multi-service-key"
cognitive_services_region = "placeholder-cognitive-services-region"

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

3. Adım: Spark'a veri yükleme

Aşağıdaki kodu ikinci hücreye yapıştırın. Değişiklik gerekmez, bu nedenle hazır olduğunuzda kodu çalıştırın.

Bu kod bir Azure depolama hesabından birkaç dış dosya yükler. Dosyalar çeşitli faturalardır ve bir veri çerçevesinde okunur.

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://ignite2021@mmlsparkdemo.blob.core.windows.net/form_subset/*")
    .select("path")
    .limit(10)
    .select(udf(blob_to_url, StringType())("path").alias("url"))
    .cache())
    
display(df2)

4. Adım: Belge zekası ekleme

Aşağıdaki kodu üçüncü hücreye yapıştırın. Değişiklik gerekmez, bu nedenle hazır olduğunuzda kodu çalıştırın.

Bu kod AnalyzeInvoices transformatörunu yükler ve faturaları içeren veri çerçevesine bir başvuru geçirir. Faturalardan bilgi ayıklamak için Azure AI Belge Zekası'nın önceden oluşturulmuş fatura modelini çağırır.

from synapse.ml.cognitive 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)

Bu adımın çıktısı bir sonraki ekran görüntüsüne benzer görünmelidir. Form analizinin yoğun yapılandırılmış bir sütuna nasıl paketlendiğine ve bu sütunla çalışmanın zor olduğuna dikkat edin. Sonraki dönüştürme, sütunu satırlara ve sütunlara ayrıştırarak bu sorunu çözer.

AnalyzeInvoices çıkışının ekran görüntüsü.

5. Adım: Belge zekası çıkışını yeniden yapılandırma

Aşağıdaki kodu dördüncü hücreye yapıştırın ve çalıştırın. Değişiklik gerekmez.

Bu kod, Belge Zekası transformatörlerinin çıkışını analiz eden ve tablosal bir veri yapısı çıkaran bir transformatör olan FormOntologyLearner'ı yükler. AnalyzeInvoices'un çıkışı dinamiktir ve içeriğinizde algılanan özelliklere göre değişir. Ayrıca transformatör çıkışı tek bir sütunda birleştirir. Çıkış dinamik olduğundan ve birleştirildiğinden, daha fazla yapı gerektiren aşağı akış dönüşümlerinde kullanmak zordur.

FormOntologyLearner, tablosal veri yapısı oluşturmak için kullanılabilecek desenleri arayarak AnalyzeInvoices transformatörünün yardımcı programını genişletir. Çıkışı birden çok sütun ve satır halinde düzenlemek, içeriği AzureSearchWriter gibi diğer dönüştürücülerde kullanılabilir hale getirir.

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)

Bu dönüşümün iç içe alanları bir tabloya nasıl yeniden yayınladığına ve bu sayede sonraki iki dönüştürmenin nasıl etkinleştirildiğine dikkat edin. Bu ekran görüntüsü kısa olması için kırpılmıştır. Kendi not defterinizde takip ediyorsanız 19 sütun ve 26 satırınız vardır.

FormOntologyLearner çıkışının ekran görüntüsü.

6. Adım: Çeviri ekleme

Aşağıdaki kodu beşinci hücreye yapıştırın. Değişiklik gerekmez, bu nedenle hazır olduğunuzda kodu çalıştırın.

Bu kod, Azure yapay zeka hizmetlerinde Azure yapay zeka Çeviri hizmetini çağıran çeviri dönüştürücü olan Çeviri'yi yükler. "Açıklama" sütununda İngilizce olan özgün metin, makine tarafından çeşitli dillere çevrilmiştir. Tüm çıkışlar "output.translations" dizisinde birleştirilir.

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)

İpucu

Çevrilmiş dizeleri denetlemek için satırların sonuna kaydırın.

Çeviriler sütununu gösteren tablo çıktısının ekran görüntüsü.

7. Adım: AzureSearchWriter ile arama dizini ekleme

Aşağıdaki kodu altıncı hücreye yapıştırın ve çalıştırın. Değişiklik gerekmez.

Bu kod AzureSearchWriter yükler. Tablosal bir veri kümesi tüketir ve her sütun için bir alan tanımlayan bir arama dizini şeması çıkartır. Çeviri yapısı bir dizi olduğundan, dizinde her dil çevirisi için alt alanları olan karmaşık bir koleksiyon olarak ifade edilir. Oluşturulan dizinin bir belge anahtarı vardır ve Dizin Oluşturma REST API'sini kullanarak oluşturulan alanlar için varsayılan değerleri kullanır.

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",
    ))

Azure Portal'da arama hizmeti sayfalarını denetleyerek AzureSearchWriter tarafından oluşturulan dizin tanımını inceleyebilirsiniz.

Not

Varsayılan arama dizinini kullanamıyorsanız, JSON'da bir dış özel tanım sağlayabilir ve URI'sini "indexJson" özelliğine dize olarak geçirebilirsiniz. Hangi alanların belirtileceğini bilmeniz için önce varsayılan dizini oluşturun ve ardından örneğin belirli çözümleyicilere ihtiyacınız varsa özelleştirilmiş özelliklerle izleyin.

8. Adım: Dizini sorgulama

Aşağıdaki kodu yedinci hücreye yapıştırın ve çalıştırın. söz dizimini değiştirmek veya içeriğinizi daha fazla incelemek için daha fazla örnek denemek istemeniz dışında değişiklik gerekmez:

Sorgular veren transformatör veya modül yoktur. Bu hücre, Belge Ara REST API'sine yapılan basit bir çağrıdır.

Bu özel örnek, "door" ("search": "door") sözcüğünü aramaktır. Ayrıca eşleşen belge sayısının "sayısını" döndürür ve sonuçlar için yalnızca "Açıklama" ve "Çeviriler" alanlarının içeriğini seçer. Alanların tam listesini görmek istiyorsanız "select" parametresini kaldırın.

import requests

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

Aşağıdaki ekran görüntüsünde örnek betiğin hücre çıkışı gösterilmektedir.

Sayı, arama dizesi ve dönüş alanlarını gösteren sorgu sonuçlarının ekran görüntüsü.

Kaynakları temizleme

Kendi aboneliğinizde çalışırken, bir projenin sonunda artık ihtiyacınız olmayan kaynakları kaldırmak iyi bir fikirdir. Çalışır durumda bırakılan kaynaklar maliyetlerin artmasına neden olabilir. Kaynakları teker teker silebilir veya tüm kaynak grubunu silerek kaynak kümesinin tamamını kaldırabilirsiniz.

Sol gezinti bölmesindeki Tüm kaynaklar veya Kaynak grupları bağlantısını kullanarak kaynakları portalda bulabilir ve yönetebilirsiniz.

Sonraki adımlar

Bu öğreticide, Azure AI Search'te arama dizinleri oluşturmanın ve yüklemenin yeni bir yolu olan SynapseML'deki AzureSearchWriter transformatörü hakkında bilgi edindiniz. Transformatör, yapılandırılmış JSON'ı giriş olarak alır. FormOntologyLearner, SynapseML'deki Belge Zekası transformatörleri tarafından üretilen çıktı için gerekli yapıyı sağlayabilir.

Sonraki adım olarak, Azure AI Search aracılığıyla keşfetmek isteyebileceğiniz dönüştürülmüş içerik üreten diğer SynapseML öğreticilerini gözden geçirin: