Självstudie: Textanalys med Azure AI-tjänster
Textanalys är en Azure AI-tjänst som gör att du kan utföra textutvinning och textanalys med NLP-funktioner (Natural Language Processing). I den här självstudien får du lära dig hur du använder Textanalys för att analysera ostrukturerad text i Azure Synapse Analytics.
Den här självstudien visar hur du använder textanalys med SynapseML för att:
- Identifiera sentimentetiketter på menings- eller dokumentnivå
- Identifiera språket för en viss textinmatning
- Identifiera entiteter från en text med länkar till en välkänd kunskapsbas
- Extrahera nyckelfaser från en text
- Identifiera olika entiteter i text och kategorisera dem i fördefinierade klasser eller typer
- Identifiera och redigera känsliga entiteter i en viss text
Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Förutsättningar
- Azure Synapse Analytics-arbetsyta med ett Azure Data Lake Storage Gen2 lagringskonto konfigurerat som standardlagring. Du måste vara Storage Blob Data-deltagare för det Data Lake Storage Gen2 filsystem som du arbetar med.
- Spark-pool på din Azure Synapse Analytics-arbetsyta. Mer information finns i Skapa en Spark-pool i Azure Synapse.
- Förkonfigurationssteg som beskrivs i självstudien Konfigurera Azure AI-tjänster i Azure Synapse.
Kom igång
Öppna Synapse Studio och skapa en ny notebook-fil. Kom igång genom att importera SynapseML.
import synapse.ml
from synapse.ml.cognitive import *
from pyspark.sql.functions import col
Konfigurera textanalys
Använd den länkade textanalys som du konfigurerade i förkonfigurationsstegen .
ai_service_name = "<Your linked service for text analytics>"
Textsentiment
Textsentimentanalysen är ett sätt att identifiera sentimentetiketterna (till exempel "negativ", "neutral" och "positiv") och förtroendepoäng på menings- och dokumentnivå. I språk som stöds i Textanalys API finns en lista över aktiverade språk.
# 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 Azure AI services on spark aint bad", "en-US"),
], ["text", "language"])
# Run the Text Analytics service with options
sentiment = (TextSentiment()
.setLinkedService(linked_service_name)
.setTextCol("text")
.setOutputCol("sentiment")
.setErrorCol("error")
.setLanguageCol("language"))
# Show the results of your text query in a table format
results = sentiment.transform(df)
display(results
.withColumn("sentiment", col("sentiment").getItem("document").getItem("sentences")[0].getItem("sentiment"))
.select("text", "sentiment"))
Förväntat resultat
text | Känsla |
---|---|
Jag är så lycklig idag, dess soliga! | positivt |
Jag är frustrerad över denna rusningstrafik | negativt |
Azure AI-tjänsterna på Spark är inte bra | positivt |
Språkidentifiering
Språkidentifieringen utvärderar textindata för varje dokument och returnerar språkidentifierare med en poäng som anger styrkan i analysen. Den här funktionen är användbar för innehållslager samlar in godtycklig text, där språket är okänt. I språk som stöds i Textanalys API finns en lista över aktiverade språk.
# Create a dataframe that's tied to it's column names
df = spark.createDataFrame([
("Hello World",),
("Bonjour tout le monde",),
("La carretera estaba atascada. Había mucho tráfico el día de ayer.",),
("你好",),
("こんにちは",),
(":) :( :D",)
], ["text",])
# Run the Text Analytics service with options
language = (LanguageDetector()
.setLinkedService(linked_service_name)
.setTextCol("text")
.setOutputCol("language")
.setErrorCol("error"))
# Show the results of your text query in a table format
display(language.transform(df))
Förväntat resultat
Entitetsidentifiering
Entitetsidentifieringen returnerar en lista över identifierade entiteter med länkar till en välkänd kunskapsbas. I språk som stöds i Textanalys API finns en lista över aktiverade språk.
df = spark.createDataFrame([
("1", "Microsoft released Windows 10"),
("2", "In 1975, Bill Gates III and Paul Allen founded the company.")
], ["if", "text"])
entity = (EntityDetector()
.setLinkedService(linked_service_name)
.setLanguage("en")
.setOutputCol("replies")
.setErrorCol("error"))
display(entity.transform(df).select("if", "text", col("replies").getItem("document").getItem("entities").alias("entities")))
Förväntat resultat
Nyckelfrasextraktor
Extrahering av nyckelfraser utvärderar ostrukturerad text och returnerar en lista med nyckelfraser. Den här funktionen är användbar om du snabbt behöver identifiera de viktigaste punkterna i en samling av dokument. I språk som stöds i Textanalys API finns en lista över aktiverade språk.
df = spark.createDataFrame([
("en", "Hello world. This is some input text that I love."),
("fr", "Bonjour tout le monde"),
("es", "La carretera estaba atascada. Había mucho tráfico el día de ayer.")
], ["lang", "text"])
keyPhrase = (KeyPhraseExtractor()
.setLinkedService(linked_service_name)
.setLanguageCol("lang")
.setOutputCol("replies")
.setErrorCol("error"))
display(keyPhrase.transform(df).select("text", col("replies").getItem("document").getItem("keyPhrases").alias("keyPhrases")))
Förväntat resultat
text | keyPhrases |
---|---|
Hej världen. Detta är några indatatext som jag älskar. | "["Hello world","input text"]" |
Bonjour tout le monde | "["Bonjour","monde"]" |
La carretera estaba atascada. Había mucho tráfico el día de ayer. | "["mucho tráfico","día","carretera","ayer"]" |
Igenkänning av namngiven entitet (NER)
Igenkänning av namngiven entitet (NER) är möjligheten att identifiera olika entiteter i text och kategorisera dem i fördefinierade klasser eller typer som: person, plats, händelse, produkt och organisation. I språk som stöds i Textanalys API finns en lista över aktiverade språk.
df = spark.createDataFrame([
("1", "en", "I had a wonderful trip to Seattle last week."),
("2", "en", "I visited Space Needle 2 times.")
], ["id", "language", "text"])
ner = (NER()
.setLinkedService(linked_service_name)
.setLanguageCol("language")
.setOutputCol("replies")
.setErrorCol("error"))
display(ner.transform(df).select("text", col("replies").getItem("document").getItem("entities").alias("entities")))
Förväntat resultat
Personligt identifierbar information (PII) V3.1
PII-funktionen är en del av NER och kan identifiera och redigera känsliga entiteter i text som är associerade med en enskild person, till exempel telefonnummer, e-postadress, postadress, passnummer. I språk som stöds i Textanalys API finns en lista över aktiverade språk.
df = spark.createDataFrame([
("1", "en", "My SSN is 859-98-0987"),
("2", "en", "Your ABA number - 111000025 - is the first 9 digits in the lower left hand corner of your personal check."),
("3", "en", "Is 998.214.865-68 your Brazilian CPF number?")
], ["id", "language", "text"])
pii = (PII()
.setLinkedService(linked_service_name)
.setLanguageCol("language")
.setOutputCol("replies")
.setErrorCol("error"))
display(pii.transform(df).select("text", col("replies").getItem("document").getItem("entities").alias("entities")))
Förväntat resultat
Rensa resurser
För att säkerställa att Spark-instansen stängs av avslutar du alla anslutna sessioner (notebook-filer). Poolen stängs av när den inaktivitetstid som anges i Apache Spark-poolen nås. Du kan också välja stoppa session från statusfältet längst upp till höger i anteckningsboken.