Aracılığıyla paylaş


Öğretici: Synapse Machine Learning kullanarak makine öğrenmesi uygulamaları oluşturma

Bu makalede, makine öğrenmesi uygulamaları oluşturmak için Synapse Machine Learning'i (SynapseML) kullanmayı öğreneceksiniz. SynapseML, Azure AI hizmetleri, OpenCV, LightGBM ve daha fazlası gibi birçok derin öğrenme ve veri bilimi aracı ekleyerek Apache Spark'ın dağıtılmış makine öğrenmesi çözümünü genişletir. SynapseML, çeşitli Spark veri kaynaklarından güçlü ve yüksek oranda ölçeklenebilir tahmine dayalı ve analitik modeller oluşturmanıza olanak tanır. Synapse Spark şunları içeren yerleşik SynapseML kitaplıkları sağlar:

  • Vowpal Wabbit – Tweet'lerde yaklaşım analizi gibi Metin analizini etkinleştirmek için Makine öğrenmesi için kitaplık hizmetleri.
  • MMLSpark: Çok Büyük Ölçeklerde Makine Öğrenmesi Ekosistemlerini Birleştirme – Anomali algılama gibi bilişsel veri modelleme hizmetleri için çözüm tasarımı türetmek üzere SparkML işlem hatlarında Azure AI hizmetlerinin özelliğini birleştirmek için.
  • LightGBM – LightGBM, ağaç tabanlı öğrenme algoritmalarını kullanan gradyan güçlendirici bir çerçevedir. Dağıtılacak ve daha yüksek verimlilikte olacak şekilde tasarlanmıştır.
  • Koşullu KNN - Koşullu Sorgularla Ölçeklenebilir KNN Modelleri.
  • Spark üzerinde HTTP – Spark ve HTTP protokolü tabanlı erişilebilirliği tümleştirmede dağıtılmış Mikro hizmetler düzenlemesini etkinleştirir.

Bu öğreticide SynapseML'de Azure AI hizmetlerinin kullanıldığı örnekler ele alınır:

  • Metin Analizi - bir cümle kümesinin yaklaşımını (veya ruh halini) alın.
  • Görüntü İşleme - Bir resim kümesiyle ilişkili etiketleri (tek sözcüklü açıklamalar) alın.
  • Bing Resim Arama - Web'de doğal dil sorgusuyla ilgili görüntüler arayın.
  • Anomali Algılayıcısı: Zaman serisi verileri içindeki anomalileri algılayın.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

Kullanmaya başlayın

Başlamak için SynapseML'yi içeri aktarıp hizmet anahtarlarını yapılandırın.

import synapse.ml
from synapse.ml.cognitive import *
from notebookutils import mssparkutils

# An Azure AI services multi-service resource key for Text Analytics and Computer Vision (or use separate keys that belong to each service)
ai_service_key = mssparkutils.credentials.getSecret("ADD_YOUR_KEY_VAULT_NAME", "ADD_YOUR_SERVICE_KEY","ADD_YOUR_KEY_VAULT_LINKED_SERVICE_NAME") 
# A Bing Search v7 subscription key
bingsearch_service_key = mssparkutils.credentials.getSecret("ADD_YOUR_KEY_VAULT_NAME", "ADD_YOUR_BING_SEARCH_KEY","ADD_YOUR_KEY_VAULT_LINKED_SERVICE_NAME")
# An Anomaly Detector subscription key
anomalydetector_key = mssparkutils.credentials.getSecret("ADD_YOUR_KEY_VAULT_NAME", "ADD_YOUR_ANOMALY_KEY","ADD_YOUR_KEY_VAULT_LINKED_SERVICE_NAME")

Metin analizi örneği

Metin Analizi hizmeti, metinden akıllı içgörüler ayıklamak için çeşitli algoritmalar sağlar. Örneğin, verilen giriş metninin yaklaşımını bulabiliriz. Hizmet 0,0 ile 1,0 arasında bir puan döndürür; burada düşük puanlar negatif yaklaşımı, yüksek puan ise pozitif yaklaşımı gösterir. Bu örnek üç basit cümle kullanır ve her biri için yaklaşımı döndürür.

from pyspark.sql.functions import col

# Create a dataframe that's tied to it's column names
df_sentences = spark.createDataFrame([
  ("I am so happy today, its sunny!", "en-US"), 
  ("this is a dog", "en-US"), 
  ("I am frustrated by this rush hour traffic!", "en-US") 
], ["text", "language"])

# Run the Text Analytics service with options
sentiment = (TextSentiment()
    .setTextCol("text")
    .setLocation("eastasia") # Set the location of your Azure AI services resource
    .setSubscriptionKey(ai_service_key)
    .setOutputCol("sentiment")
    .setErrorCol("error")
    .setLanguageCol("language"))

# Show the results of your text query in a table format

display(sentiment.transform(df_sentences).select("text", col("sentiment")[0].getItem("sentiment").alias("sentiment")))

Beklenen sonuçlar

text Duyguları
Bu yoğun saatlik trafik beni hayal kırıklığına uğrattı! negatif
bu bir köpek nötr
Bugün çok mutluyum, güneşli! pozitif

Görüntü işleme örneği

Görüntü İşleme yüzler, nesneler ve doğal dil açıklamaları gibi yapıları tanımlamak için görüntüleri analiz eder. Bu örnekte aşağıdaki görüntüyü etiketleyeceğiz. Etiketler, görüntüdeki nesnelerin tanınabilir nesneleri, kişileri, manzarayı ve eylemleri tek sözcüklü açıklamalarıdır.

görüntü

# Create a dataframe with the image URL
df_images = spark.createDataFrame([
        ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/objects.jpg", )
    ], ["image", ])

# Run the Computer Vision service. Analyze Image extracts information from/about the images.
analysis = (AnalyzeImage()
    .setLocation("eastasia") # Set the location of your Azure AI services resource
    .setSubscriptionKey(ai_service_key)
    .setVisualFeatures(["Categories","Color","Description","Faces","Objects","Tags"])
    .setOutputCol("analysis_results")
    .setImageUrlCol("image")
    .setErrorCol("error"))

# Show the results of what you wanted to pull out of the images.
display(analysis.transform(df_images).select("image", "analysis_results.description.tags"))

Beklenen sonuçlar

görüntü tags
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/objects.jpg [paten, kişi, adam, dış mekan, binicilik, spor, kaykay, genç, tahta, gömlek, hava, park, çocuk, yan, atlama, rampa, hile, yapma, uçan]

Bing resim arama örneği

Bing Resim Arama , kullanıcının doğal dil sorgusuyla ilgili görüntüleri almak için web'de aramalar. Bu örnekte, tırnak işaretleri içeren görüntülerin arandığı bir metin sorgusu kullanacağız. Sorgumuzla ilgili fotoğrafları içeren görüntü URL'lerinin listesini döndürür.

from pyspark.ml import PipelineModel

# Number of images Bing will return per query
imgsPerBatch = 2
# A list of offsets, used to page into the search results
offsets = [(i*imgsPerBatch,) for i in range(10)]
# Since web content is our data, we create a dataframe with options on that data: offsets
bingParameters = spark.createDataFrame(offsets, ["offset"])

# Run the Bing Image Search service with our text query
bingSearch = (BingImageSearch()
    .setSubscriptionKey(bingsearch_service_key)
    .setOffsetCol("offset")
    .setQuery("Martin Luther King Jr. quotes")
    .setCount(imgsPerBatch)
    .setOutputCol("images"))

# Transformer that extracts and flattens the richly structured output of Bing Image Search into a simple URL column
getUrls = BingImageSearch.getUrlTransformer("images", "url")
pipeline_bingsearch = PipelineModel(stages=[bingSearch, getUrls])

# Show the results of your search: image URLs
res_bingsearch = pipeline_bingsearch.transform(bingParameters)
display(res_bingsearch.dropDuplicates())

Beklenen sonuçlar

görüntü
http://everydaypowerblog.com/wp-content/uploads/2014/01/Martin-Luther-King-Jr.-Quotes-16.jpg
http://www.scrolldroll.com/wp-content/uploads/2017/06/6-25.png
http://abettertodaymedia.com/wp-content/uploads/2017/01/86783bd7a92960aedd058c91a1d10253.jpg
https://weneedfun.com/wp-content/uploads/2016/05/martin-luther-king-jr-quotes-11.jpg
http://www.sofreshandsogreen.com/wp-content/uploads/2012/01/martin-luther-king-jr-quote-sofreshandsogreendotcom.jpg
https://cdn.quotesgram.com/img/72/57/1104209728-martin_luther_king_jr_quotes_16.jpg
http://comicbookandbeyond.com/wp-content/uploads/2019/05/Martin-Luther-King-Jr.-Quotes.jpg
https://exposingthepain.files.wordpress.com/2015/01/martin-luther-king-jr-quotes-08.png
https://topmemes.me/wp-content/uploads/2020/01/Top-10-Martin-Luther-King-jr.-Quotes2-1024x538.jpg
http://img.picturequotes.com/2/581/580286/dr-martin-luther-king-jr-quote-1-picture-quote-1.jpg
http://parryz.com/wp-content/uploads/2017/06/Amazing-Martin-Luther-King-Jr-Quotes.jpg
http://everydaypowerblog.com/wp-content/uploads/2014/01/Martin-Luther-King-Jr.-Quotes1.jpg
https://lessonslearnedinlife.net/wp-content/uploads/2020/05/Martin-Luther-King-Jr.-Quotes-2020.jpg
https://quotesblog.net/wp-content/uploads/2015/10/Martin-Luther-King-Jr-Quotes-Wallpaper.jpg

Anomali algılayıcısı örneği

Anomali Algılayıcısı, zaman serisi verilerinizdeki düzensizlikleri algılamak için mükemmeldir. Bu örnekte, zaman serisinin tamamında anomalileri bulmak için hizmetini kullanacağız.

from pyspark.sql.functions import lit

# Create a dataframe with the point data that Anomaly Detector requires
df_timeseriesdata = spark.createDataFrame([
    ("1972-01-01T00:00:00Z", 826.0),
    ("1972-02-01T00:00:00Z", 799.0),
    ("1972-03-01T00:00:00Z", 890.0),
    ("1972-04-01T00:00:00Z", 900.0),
    ("1972-05-01T00:00:00Z", 766.0),
    ("1972-06-01T00:00:00Z", 805.0),
    ("1972-07-01T00:00:00Z", 821.0),
    ("1972-08-01T00:00:00Z", 20000.0), # anomaly
    ("1972-09-01T00:00:00Z", 883.0),
    ("1972-10-01T00:00:00Z", 898.0),
    ("1972-11-01T00:00:00Z", 957.0),
    ("1972-12-01T00:00:00Z", 924.0),
    ("1973-01-01T00:00:00Z", 881.0),
    ("1973-02-01T00:00:00Z", 837.0),
    ("1973-03-01T00:00:00Z", 9000.0) # anomaly
], ["timestamp", "value"]).withColumn("group", lit("series1"))

# Run the Anomaly Detector service to look for irregular data
anomaly_detector = (SimpleDetectAnomalies()
  .setSubscriptionKey(anomalydetector_key)
  .setLocation("eastasia")
  .setTimestampCol("timestamp")
  .setValueCol("value")
  .setOutputCol("anomalies")
  .setGroupbyCol("group")
  .setGranularity("monthly"))

# Show the full results of the analysis with the anomalies marked as "True"
display(anomaly_detector.transform(df_timeseriesdata).select("timestamp", "value", "anomalies.isAnomaly"))

Beklenen sonuçlar

timestamp değer isAnomaly
1972-01-01T00:00:00Z 826.0 yanlış
1972-02-01T00:00:00Z 799.0 yanlış
1972-03-01T00:00:00Z 890.0 yanlış
1972-04-01T00:00:00Z 900.0 yanlış
1972-05-01T00:00:00Z 766.0 yanlış
1972-06-01T00:00:00Z 805.0 yanlış
1972-07-01T00:00:00Z 821.0 yanlış
1972-08-01T00:00:00Z 20000.0 true
1972-09-01T00:00:00Z 883.0 yanlış
1972-10-01T00:00:00Z 898.0 yanlış
1972-11-01T00:00:00Z 957.0 yanlış
1972-12-01T00:00:00Z 924.0 yanlış
1973-01-01T00:00:00Z 881.0 yanlış
1973-02-01T00:00:00Z 837.0 yanlış
1973-03-01T00:00:00Z 9000.0 true

Konuşmayı metne dönüştürme örneği

Konuşmayı metne dönüştürme hizmeti, konuşulan ses akışlarını veya dosyalarını metne dönüştürür. Bu örnekte, bir ses dosyasını metne dönüştüreceğiz.

# Create a dataframe with our audio URLs, tied to the column called "url"
df = spark.createDataFrame([("https://mmlspark.blob.core.windows.net/datasets/Speech/audio2.wav",)
                           ], ["url"])

# Run the Speech-to-text service to translate the audio into text
speech_to_text = (SpeechToTextSDK()
    .setSubscriptionKey(service_key)
    .setLocation("northeurope") # Set the location of your Azure AI services resource
    .setOutputCol("text")
    .setAudioDataCol("url")
    .setLanguage("en-US")
    .setProfanity("Masked"))

# Show the results of the translation
display(speech_to_text.transform(df).select("url", "text.DisplayText"))

Beklenen sonuçlar

url DisplayText
https://mmlspark.blob.core.windows.net/datasets/Speech/audio2.wav Özel Konuşma, ses verilerini özel konuşma portalından gelen ilgili tanıma sonucuyla karşılaştırarak modelin tanıma kalitesini görsel olarak incelemenize olanak sağlayan araçlar sağlar. Karşıya yüklenen sesi kayıttan yürütebilir ve sağlanan tanıma sonucunun doğru olup olmadığını belirleyebilirsiniz. Bu araç, herhangi bir ses verisinin dökümünü almak zorunda kalmadan Microsoft'un metin modeline veya eğitilmiş özel modele temel konuşma kalitesini hızla incelemenize olanak tanır.

Kaynakları temizleme

Spark örneğinin kapalı olduğundan emin olmak için bağlı oturumları (not defterlerini) sonlandırın. Apache Spark havuzunda belirtilen boşta kalma süresine ulaşıldığında havuz kapatılır. Not defterinin sağ üst kısmındaki durum çubuğunda oturumu durdur'u da seçebilirsiniz.

ekran görüntüsü-gösterme-durdurma-oturumu

Sonraki adımlar