Tutorial: Análise de Texto com serviços de IA do Azure
Neste tutorial, você aprenderá a usar a Análise de Texto para analisar texto não estruturado no Azure Synapse Analytics. A Análise de Texto é um serviço de IA do Azure que permite executar mineração e análise de texto com recursos de Processamento de Linguagem Natural (NLP).
Este tutorial demonstra o uso da análise de texto com SynapseML para:
- Detetar rótulos de sentimento no nível da frase ou do documento
- Identificar o idioma de uma determinada entrada de texto
- Reconhecer entidades de um texto com links para uma base de dados de conhecimento conhecida
- Extrair frases-chave de um texto
- Identificar diferentes entidades no texto e categorizá-las em classes ou tipos predefinidos
- Identificar e redigir entidades sensíveis em um determinado texto
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
- Espaço de trabalho do Azure Synapse Analytics com uma conta de armazenamento do Azure Data Lake Storage Gen2 configurada como o armazenamento padrão. Você precisa ser o Contribuidor de Dados de Blob de Armazenamento do sistema de arquivos Data Lake Storage Gen2 com o qual trabalha.
- Pool de faíscas em seu espaço de trabalho do Azure Synapse Analytics. Para obter detalhes, consulte Criar um pool de faíscas no Azure Synapse.
- Etapas de pré-configuração descritas no tutorial Configurar serviços de IA do Azure no Azure Synapse.
Começar agora
Abra o Synapse Studio e crie um novo bloco de anotações. Para começar, importe SynapseML.
import synapse.ml
from synapse.ml.services import *
from pyspark.sql.functions import col
Configurar análise de texto
Use a análise de texto vinculado que você configurou nas etapas de pré-configuração.
linked_service_name = "<Your linked service for text analytics>"
Sentimento do texto
A Análise de Sentimento de Texto fornece uma maneira de detetar os rótulos de sentimento (como "negativo", "neutro" e "positivo") e pontuações de confiança no nível da frase e do documento. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de idiomas habilitados.
# Create a dataframe that's tied to it's column names
df = spark.createDataFrame([
("I am so happy today, it's 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"))
Resultados esperados
texto | sentimento |
---|---|
Estou tão feliz hoje, está sol! | positivo |
Estou frustrado com este tráfego na hora de ponta | negativo |
Os serviços de IA do Azure no spark aint bad | neutro |
Detetor de Idiomas
O Language Detetor avalia a entrada de texto para cada documento e retorna identificadores de idioma com uma pontuação que indica a força da análise. Esta funcionalidade é útil para arquivos de conteúdo que recolhem texto arbitrário quando o idioma é desconhecido. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de idiomas habilitados.
# 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))
Resultados esperados
Detetor de Entidades
O Detetor de Entidades retorna uma lista de entidades reconhecidas com links para uma base de dados de conhecimento conhecida. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de idiomas habilitados.
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")))
Resultados esperados
Extrator de frases-chave
A Extração de Frase-Chave avalia texto não estruturado e retorna uma lista de frases-chave. Esta funcionalidade é útil se precisar de identificar rapidamente os pontos principais numa coleção de documentos. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de idiomas habilitados.
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")))
Resultados esperados
texto | keyPhrases |
---|---|
Olá, mundo. Este é um texto de entrada que eu adoro. | "["Olá mundo","texto de entrada"]" |
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"]" |
Reconhecimento de Entidades Nomeadas (NER)
Named Entity Recognition (NER) é a capacidade de identificar diferentes entidades no texto e categorizá-las em classes ou tipos predefinidos, tais como: pessoa, local, evento, produto e organização. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de idiomas habilitados.
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")))
Resultados esperados
Informações de identificação pessoal (PII) V3.1
O recurso PII faz parte do NER e pode identificar e redigir entidades sensíveis em texto que estão associadas a uma pessoa individual, tais como: número de telefone, endereço de e-mail, endereço postal, número de passaporte. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de idiomas habilitados.
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")))
Resultados esperados
Clean up resources (Limpar recursos)
Para garantir que a instância do Spark seja desligada, encerre todas as sessões conectadas (blocos de anotações). O pool é desligado quando o tempo ocioso especificado no pool do Apache Spark é atingido. Também pode selecionar Parar sessão na barra de estado no canto superior direito do bloco de notas.