Sampel Python untuk Cognitive Services untuk Big Data

Cuplikan berikut siap dijalankan dan akan membantu Anda mulai menggunakan Cognitive Services di Spark dengan Python.

Sampel dalam artikel ini menggunakan Cognitive Services berikut:

  • Layanan bahasa - mendapatkan sentimen (atau nada) dari serangkaian kalimat.
  • Visi Komputer - mendapatkan tag (deskripsi satu kata) yang terkait dengan serangkaian gambar.
  • Bing Image Search - mencari gambar di web yang terkait dengan kueri bahasa alami.
  • Ucapan ke teks - mentranskrip file audio untuk mengekstrak transkrip berbasis teks.
  • Pendeteksi Anomali - mendeteksi anomali dalam data rangkaian waktu.

Prasyarat

  1. Ikuti langkah-langkah di Memulai untuk menyiapkan lingkungan Azure Databricks dan Cognitive Services Anda. Tutorial ini menunjukkan cara menginstal MMLSpark dan cara membuat kluster Spark di Databricks.
  2. Setelah Anda membuat buku catatan baru di Azure Databricks, salin Kode bersama di bawah dan tempel ke sel baru di buku catatan Anda.
  3. Pilih sampel layanan, di bawah ini, lalu salin tempelkan ke sel baru kedua di buku catatan Anda.
  4. Ganti salah satu tempat penampung kunci langganan layanan dengan kunci Anda sendiri.
  5. Pilih tombol jalankan (ikon segitiga) di sudut kanan atas sel, lalu pilih Jalankan Sel.
  6. Tampilkan hasil dalam tabel di bawah sel.

Kode bersama

Untuk memulai, kode ini perlu ditambahkan ke proyek:

from mmlspark.cognitive import *

# A general Cognitive Services key for the Language service and Computer Vision (or use separate keys that belong to each service)
service_key = "ADD_YOUR_SUBSCRIPION_KEY"
# A Bing Search v7 subscription key
bing_search_key = "ADD_YOUR_SUBSCRIPION_KEY"
# An Anomaly Dectector subscription key
anomaly_key = "ADD_YOUR_SUBSCRIPION_KEY"

# Validate the key
assert service_key != "ADD_YOUR_SUBSCRIPION_KEY"

Sampel layanan bahasa

Layanan Bahasa menyediakan beberapa algoritma untuk mengekstrak wawasan cerdas dari teks. Misalnya, kita dapat menemukan sentimen teks input tertentu. Layanan ini akan menampilkan skor antara 0,0 dan 1,0. Dalam hal ini skor rendah menunjukkan sentimen negatif dan skor tinggi menunjukkan sentimen positif. Sampel ini menggunakan tiga kalimat sederhana dan menampilkan sentimen untuk masing-masing kalimat.

from pyspark.sql.functions import col

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

# Run the Language service with options
sentiment = (TextSentiment()
    .setTextCol("text")
    .setLocation("eastus")
    .setSubscriptionKey(service_key)
    .setOutputCol("sentiment")
    .setErrorCol("error")
    .setLanguageCol("language"))

# Show the results of your text query in a table format
display(sentiment.transform(df).select("text", col("sentiment")[0].getItem("sentiment").alias("sentiment")))

Hasil yang diharapkan

teks sentimen
Saya sangat senang karena hari ini cuacanya cerah! positif
Saya stres karena lalu lintas pada jam sibuk ini negatif
Cognitive Services pada Spark tidak buruk positif

Sampel Visi Komputer

Visi Komputer menganalisis gambar untuk mengidentifikasi struktur seperti wajah, objek, dan deskripsi bahasa alami. Dalam sampel ini, kami memberi tag pada daftar gambar. Tag adalah deskripsi satu kata dari berbagai hal dalam gambar seperti objek, orang, pemandangan, dan tindakan yang dapat dikenali.


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

# Run the Computer Vision service. Analyze Image extracts infortmation from/about the images.
analysis = (AnalyzeImage()
    .setLocation("eastus")
    .setSubscriptionKey(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).select("image", "analysis_results.description.tags"))

Hasil yang diharapkan

gambar tag
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/objects.jpg ['seluncur' 'orang' 'pria' 'luar ruangan' 'naik' 'olahraga' 'papan seluncur' 'muda' 'papan' 'kemeja' 'udara' 'hitam' 'taman' 'anak laki-laki' 'samping' 'melompat' ' trik' 'jalan' 'aktivitas' 'terbang']
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/dog.jpg ['anjing' 'luar ruangan' 'pagar' 'kayu' 'kecil' 'coklat' 'bangunan' 'duduk' 'depan' 'bangku' 'berdiri' 'meja' 'berjalan' 'papan' 'pantai' 'putih' ' memegang' 'jembatan' 'trek']
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/house.jpg ['luar ruangan' 'rumput' 'rumah' 'bangunan' 'tua' 'rumah' 'depan' 'kecil' 'gereja' 'batu' 'besar' 'merumput' 'halaman' 'hijau' 'duduk' 'memimpin' 'domba' 'bata' 'bangku' 'jalan' 'putih' 'negara' 'jam' 'tanda' 'parkir' 'lapangan' 'berdiri' 'taman' 'air' 'merah' 'kuda' 'pria' 'tinggi' 'api' 'grup']

Sampel Bing Image Search

Bing Image Search menelusuri web untuk mengambil gambar yang terkait dengan kueri bahasa alami pengguna. Dalam contoh ini, kami menggunakan kueri teks yang mencari gambar dengan tanda kutip. Contoh ini menampilkan daftar URL gambar yang berisi foto terkait dengan kueri kami.

from pyspark.ml import PipelineModel

# Number of images Bing will return per query
imgsPerBatch = 10
# A list of offsets, used to page into the search results
offsets = [(i*imgsPerBatch,) for i in range(100)]
# 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(bing_search_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")

# This displays the full results returned, uncomment to use
# display(bingSearch.transform(bingParameters))

# Since we have two services, they are put into a pipeline
pipeline = PipelineModel(stages=[bingSearch, getUrls])

# Show the results of your search: image URLs
display(pipeline.transform(bingParameters))

Hasil yang diharapkan

url
https://iheartintelligence.com/wp-content/uploads/2019/01/powerful-quotes-martin-luther-king-jr.jpg
http://everydaypowerblog.com/wp-content/uploads/2014/01/Martin-Luther-King-Jr.-Quotes-16.jpg
http://www.sofreshandsogreen.com/wp-content/uploads/2012/01/martin-luther-king-jr-quote-sofreshandsogreendotcom.jpg
https://everydaypowerblog.com/wp-content/uploads/2014/01/Martin-Luther-King-Jr.-Quotes-18.jpg
https://tsal-eszuskq0bptlfh8awbb.stackpathdns.com/wp-content/uploads/2018/01/MartinLutherKingQuotes.jpg

Sampel Ucapan ke Teks

Layanan Ucapan ke teks mengonversi stream atau file audio lisan menjadi teks. Dalam sampel ini, kami mentranskrip dua file audio. File pertama mudah dimengerti, dan file kedua yang lebih menantang.


# 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",),
                           ("https://mmlspark.blob.core.windows.net/datasets/Speech/audio3.mp3",)
                           ], ["url"])

# Run the Speech-to-text service to translate the audio into text
speech_to_text = (SpeechToTextSDK()
    .setSubscriptionKey(service_key)
    .setLocation("eastus")
    .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"))

Hasil yang diharapkan

url DisplayText
https://mmlspark.blob.core.windows.net/datasets/Speech/audio2.wav Ucapan kustom menyediakan alat yang memungkinkan Anda memeriksa kualitas pengenalan model secara visual dengan membandingkan data audio dengan hasil pengenalan yang sesuai dari portal ucapan kustom. Anda dapat memutar ulang audio yang diunggah dan menentukan apakah hasil pengenalan yang diberikan sudah benar. Alat ini memungkinkan Anda untuk dengan cepat memeriksa kualitas model ucapan ke teks garis besar Microsoft atau model kustom terlatih tanpa harus mentranskripsikan data audio apa pun.
https://mmlspark.blob.core.windows.net/datasets/Speech/audio3.mp3 Tambahkan seorang pria Tuan, pikirkan pemeriksaan visual.
https://mmlspark.blob.core.windows.net/datasets/Speech/audio3.mp3 Saya mendengar suara saya.
https://mmlspark.blob.core.windows.net/datasets/Speech/audio3.mp3 Saya suka penghiburan untuk radio karena saya bisa mendengarnya juga.

Sampel Pendeteksi Anomali

Pendeteksi Anomali merupakan cara ampuh untuk mendeteksi penyimpangan dalam data rangkaian waktu Anda. Dalam sampel ini, kami menggunakan layanan untuk menemukan anomali di seluruh rangkaian waktu.

from pyspark.sql.functions import lit

# Create a dataframe with the point data that Anomaly Detector requires
df = 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),
    ("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)
], ["timestamp", "value"]).withColumn("group", lit("series1"))

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

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

Hasil yang diharapkan

tanda waktu nilai isAnomaly
1972-01-01T00:00:00Z 826 False
1972-02-01T00:00:00Z 799 False
1972-03-01T00:00:00Z 890 False
1972-04-01T00:00:00Z 900 False
1972-05-01T00:00:00Z 766 False
1972-06-01T00:00:00Z 805 False
1972-07-01T00:00:00Z 821 False
1972-08-01T00:00:00Z 20000 True
1972-09-01T00:00:00Z 883 False
1972-10-01T00:00:00Z 898 False
1972-11-01T00:00:00Z 957 False
1972-12-01T00:00:00Z 924 False
1973-01-01T00:00:00Z 881 False
1973-02-01T00:00:00Z 837 False
1973-03-01T00:00:00Z 9000 True

API web arbitrer

Dengan HTTP di Spark, layanan web apa pun dapat digunakan dalam alur big data Anda. Dalam contoh ini, kami menggunakan API Bank Dunia untuk mendapatkan informasi tentang berbagai negara di seluruh dunia.

from requests import Request
from mmlspark.io.http import HTTPTransformer, http_udf
from pyspark.sql.functions import udf, col

# Use any requests from the Python requests library
def world_bank_request(country):
  return Request("GET", "http://api.worldbank.org/v2/country/{}?format=json".format(country))

# Create a dataframe with spcificies which countries we want data on
df = (spark.createDataFrame([("br",),("usa",)], ["country"])
  .withColumn("request", http_udf(world_bank_request)(col("country"))))

# Much faster for big data because of the concurrency :)
client = (HTTPTransformer()
      .setConcurrency(3)
      .setInputCol("request")
      .setOutputCol("response"))

# Get the body of the response
def get_response_body(resp):
  return resp.entity.content.decode()

# Show the details of the country data returned
display(client.transform(df).select("country", udf(get_response_body)(col("response")).alias("response")))

Hasil yang diharapkan

negara respons
br [{"page":1,"pages":1,"per_page":"50","total":1},[{"id":"BRA","iso2Code":"BR","name":"Brazil","region":{"id":"LCN","iso2code":"ZJ","value":"Latin America & Caribbean "},"adminregion":{"id":"LAC","iso2code":"XJ","value":"Latin America & Caribbean (excluding high income)"},"incomeLevel":{"id":"UMC","iso2code":"XT","value":"Upper middle income"},"lendingType":{"id":"IBD","iso2code":"XF","value":"IBRD"},"capitalCity":"Brasilia","longitude":"-47.9292","latitude":"-15.7801"}]]
amerika serikat [{"page":1,"pages":1,"per_page":"50","total":1},[{"id":"USA","iso2Code":"US","name":"United States","region":{"id":"NAC","iso2code":"XU","value":"North America"},"adminregion":{"id":"","iso2code":"","value":""},"incomeLevel":{"id":"HIC","iso2code":"XD","value":"High income"},"lendingType":{"id":"LNX","iso2code":"XX","value":"Not classified"},"capitalCity":"Washington D.C.","longitude":"-77.032","latitude":"38.8895"}]]

Lihat juga