Python-exempel för Cognitive Services för stordata
Följande kodfragment är redo att köras och hjälper dig att komma igång med att Cognitive Services på Spark med Python.
Exemplen i den här artikeln använder följande Cognitive Services:
- Språktjänst – hämta sentiment (eller känsla) för en uppsättning meningar.
- Visuellt innehåll – hämta de taggar (en ordbeskrivningar) som är associerade med en uppsättning bilder.
- Bing Bildsökning – sök på webben efter bilder som är relaterade till en fråga på naturligt språk.
- Tal till text – transkribera ljudfiler för att extrahera textbaserade avskrifter.
- Avvikelseidentifiering – identifiera avvikelser inom en tidsseriedata.
Förutsättningar
- Följ stegen i Komma igång för att konfigurera din Azure Databricks och Cognitive Services miljö. Den här självstudien visar hur du installerar MMLSpark och hur du skapar ditt Spark-kluster i Databricks.
- När du har skapat en ny notebook Azure Databricks kopierar du den delade koden nedan och klistrar in den i en ny cell i anteckningsboken.
- Välj ett tjänstexempel nedan och kopiera och klistra in det i en andra ny cell i anteckningsboken.
- Ersätt någon av platshållarna för tjänstprenumerationsnyckeln med din egen nyckel.
- Välj körningsknappen (triangelikonen) i det övre högra hörnet av cellen och välj sedan Kör cell.
- Visa resultat i en tabell under cellen.
Delad kod
För att komma igång måste vi lägga till den här koden i projektet:
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"
Exempel på språktjänst
Language Service tillhandahåller flera algoritmer för att extrahera intelligenta insikter från text. Vi kan till exempel hitta attityden hos den angivna indatatexten. Tjänsten returnerar ett resultat mellan 0,0 och 1,0 där låga poäng indikerar negativ attityd och hög poäng indikerar positiv attityd. Det här exemplet använder tre enkla meningar och returnerar sentiment för var och en.
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")))
Förväntat resultat
| text | Känsla |
|---|---|
| Jag är så nöjd idag, dess soliga! | positivt |
| Jag är frustrerad över den här trafiken i timmen | negativt |
| De kognitiva tjänsterna på Spark är inte bra | positivt |
Visuellt innehåll exempel
Visuellt innehåll analyserar bilder för att identifiera struktur som ansikten, objekt och beskrivningar av naturligt språk. I det här exemplet taggar vi en lista med bilder. Taggar är ordbeskrivningar av saker i bilden, till exempel identifierbara objekt, människor, landskap och åtgärder.
# 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"))
Förväntat resultat
| image | tags |
|---|---|
| https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/objects.jpg | ['skating' 'person' 'man' 'outdoor' 'sports' 'sport' 'jump' 'trick' 'board' 'shirt' 'air' 'black' 'park' 'boy' 'side' 'jump' 'trick' 'ramp' 'doing' 'jump' 'jump' 'ramp' 'doing' 'jump'] |
| https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/dog.jpg | ['dog' 'outdoor' 'fence' 'fence' 'fence' 'small' 'brown' 'building' 'sitting' 'front' 'standing' 'table' 'walking' 'board' 'beach' 'white' 'holding' 'bridge' 'track'] |
| https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/house.jpg | ['utomhus' ''' 'house' 'house' 'building' 'old' 'home' 'front' 'small' 'start' 'brick' 'brick' 'large' 'leading' 'brick' 'building' 'green' 'sitting' 'leading' 'brick' " "risk" "street" "white" "country" "clock" "sign" "parked" "field" "standing" "garden" "water" "red" "horse" "man" "tall" "fire" "group"] |
Bing Bildsökning exempel
Bing Bildsökning söker på webben för att hämta bilder relaterade till en användares fråga på naturligt språk. I det här exemplet använder vi en textfråga som söker efter bilder med citattecken. Den returnerar en lista över bild-URL:er som innehåller foton relaterade till vår fråga.
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))
Förväntat resultat
Tal till text-exempel
Tal till text-tjänsten konverterar strömmar eller filer med talat ljud till text. I det här exemplet transkriberar vi två ljudfiler. Den första filen är lätt att förstå och den andra är mer utmanande.
# 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"))
Förväntat resultat
| url | DisplayText |
|---|---|
| https://mmlspark.blob.core.windows.net/datasets/Speech/audio2.wav | Anpassat tal innehåller verktyg som gör att du visuellt kan inspektera igenkänningskvaliteten för en modell genom att jämföra ljuddata med motsvarande igenkänningsresultat från den anpassade talportalen. Du kan spela upp uppladdat ljud och avgöra om det angivna igenkänningsresultatet är korrekt. Med det här verktyget kan du snabbt inspektera kvaliteten på Microsofts baslinjetal till text-modell eller en tränad anpassad modell utan att behöva transkribera några ljuddata. |
| https://mmlspark.blob.core.windows.net/datasets/Speech/audio3.mp3 | Lägg till en sir som tänker visuell kontroll. |
| https://mmlspark.blob.core.windows.net/datasets/Speech/audio3.mp3 | Jag hör vad jag tycker. |
| https://mmlspark.blob.core.windows.net/datasets/Speech/audio3.mp3 | Jag gillar den trygghet för radio som jag kan höra också. |
Avvikelseidentifiering exempel
Avvikelseidentifiering är bra för att upptäcka oregelbundenheter i dina tidsseriedata. I det här exemplet använder vi tjänsten för att hitta avvikelser i hela tidsserien.
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"))
Förväntat resultat
| timestamp | värde | isAnomaly |
|---|---|---|
| 1972-01-01T00:00:00Z | 826 | Falskt |
| 1972-02-01T00:00:00Z | 799 | Falskt |
| 1972-03-01T00:00:00Z | 890 | Falskt |
| 1972-04-01T00:00:00Z | 900 | Falskt |
| 1972-05-01T00:00:00Z | 766 | Falskt |
| 1972-06-01T00:00:00Z | 805 | Falskt |
| 1972-07-01T00:00:00Z | 821 | Falskt |
| 1972-08-01T00:00:00Z | 20000 | Sant |
| 1972-09-01T00:00:00Z | 883 | Falskt |
| 1972-10-01T00:00:00Z | 898 | Falskt |
| 1972-11-01T00:00:00Z | 957 | Falskt |
| 1972-12-01T00:00:00Z | 924 | Falskt |
| 1973-01-01T00:00:00Z | 881 | Falskt |
| 1973-02-01T00:00:00Z | 837 | Falskt |
| 1973-03-01T00:00:00Z | 9000 | Sant |
Godtyckliga webb-API:er
Med HTTP på Spark kan alla webbtjänster användas i din stordatapipeline. I det här exemplet använder vi World Bank API för att få information om olika länder runt om i världen.
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")))
Förväntat resultat
| land | svar |
|---|---|
| Br | [{"page":1,"pages":1,"per_page":"50","total":1},[{"id":"BRA","iso2Code":"BR","name":"Brazil","region":{"id":"LCN","iso2code":"ZJ","value":"Latinamerika & Paulo "},"adminregion":{"id":"LAC","iso2code":"XJ","value":"Latinamerika & Contain (exklusive hög inkomst)"},"incomeLevel":{"id":"UMC","iso2code":"XT","value":"Upper middle income"},"type":{"id":"IBD","iso2code":"XF","value":"IBRD"},"capitalCity":"Brasilia", "longitud":"-47.9292","latitude":"-15.7801"}]] |
| Usa | [{"page":1,"pages":1,"per_page":"50","total":1},[{"id":"USA","iso2Code":"US","name":"USA","region":{"id":"NAC","iso2code":"XU","value":"Nordamerika"},"adminregion":{"id":"","iso2code":"",""value":""},"incomeLevel":{"id":"HIC","iso2code":"XD","value":"High income"},"type":{"id":"LNX","iso2code":"XX","value":"Not classified"},"capitalCity":"Washington D.C.","longitude":"-77.032","latitude":"38.8895"}]] |