Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy

“Em vez de se concentrar no código, as empresas devem se concentrar no desenvolvimento de práticas sistemáticas de engenharia para melhorar os dados de maneira confiável, eficiente e sistemática. Em outras palavras, as empresas precisam passar de uma abordagem centrada no modelo para uma abordagem centrada nos dados”. – André Ng

Uma abordagem de IA centrada em dados envolve a construção de sistemas de IA com dados de qualidade envolvendo preparação de dados e engenharia de recursos. Essa pode ser uma tarefa tediosa envolvendo coleta de dados, descoberta, criação de perfil, limpeza, estruturação, transformação, enriquecimento, validação e armazenamento seguro dos dados.

Gerenciador de dados do Amazon SageMaker é um serviço em Estúdio Amazon SageMaker que fornece uma solução completa para importar, preparar, transformar, caracterizar e analisar dados usando pouca ou nenhuma codificação. Você pode integrar um fluxo de preparação de dados do Data Wrangler em seus fluxos de trabalho de aprendizado de máquina (ML) para simplificar o pré-processamento de dados e a engenharia de recursos, levando a preparação de dados para a produção mais rapidamente sem a necessidade de criar código PySpark, instalar Apache Spark ou ativar clusters.

Para cenários em que você precisa adicionar seus próprios scripts personalizados para transformações de dados, você pode escrever sua lógica de transformação em Pandas, PySpark, PySpark SQL. O Data Wrangler agora suporta bibliotecas NLTK e SciPy para criar transformações personalizadas para preparar dados de texto para ML e executar otimização de restrição.

Você pode se deparar com cenários em que precisa adicionar seus próprios scripts personalizados para transformação de dados. Com o recurso de transformação personalizada do Data Wrangler, você pode escrever sua lógica de transformação em Pandas, PySpark, PySpark SQL.

Nesta postagem, discutimos como você pode escrever sua transformação personalizada em NLTK para preparar dados de texto para ML. Também compartilharemos alguns exemplos de transformação de código personalizado usando outras estruturas comuns, como NLTK, NumPy, SciPy e scikit-learn, bem como AWS AI Services. Para o propósito deste exercício, usaremos o Conjunto de dados do Titanic, um conjunto de dados popular na comunidade ML, que agora foi adicionado como um amostra de conjunto de dados no Data Wrangler.

Visão geral da solução

O Data Wrangler fornece mais de 40 conectores integrados para importar dados. Depois que os dados são importados, você pode criar sua análise de dados e transformações usando mais de 300 transformações integradas. Você pode então gerar pipelines industrializados para enviar os recursos para Serviço de armazenamento simples da Amazon (Amazon S3) ou Loja de recursos Amazon SageMaker. O diagrama a seguir mostra a arquitetura de alto nível de ponta a ponta.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Pré-requisitos

O Data Wrangler é um recurso do SageMaker disponível em Estúdio Amazon SageMaker. Você pode seguir o processo de integração do Studio para ativar o ambiente Studio e os notebooks. Embora você possa escolher entre alguns métodos de autenticação, a maneira mais simples de criar um domínio do Studio é seguir as instruções Instruções de início rápido. O Início rápido usa as mesmas configurações padrão da configuração padrão do Studio. Você também pode optar por integrar usando Centro de identidade do AWS IAM (sucessor do AWS Single Sign-On) para autenticação (consulte Integração no domínio do Amazon SageMaker usando o IAM Identity Center).

Importar o conjunto de dados do Titanic

Inicie seu ambiente Studio e crie um novo Fluxo do Data Wrangler. Você pode importar seu próprio conjunto de dados ou usar um conjunto de dados de amostra (Titanic), conforme mostrado na captura de tela a seguir. O Data Wrangler permite importar conjuntos de dados de diferentes fontes de dados. Para nosso caso de uso, importamos o conjunto de dados de amostra de um bucket S3.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Depois de importado, você verá dois nós (o nó de origem e o nó de tipo de dados) no fluxo de dados. O Data Wrangler identifica automaticamente o tipo de dados para todas as colunas no conjunto de dados.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Transformações personalizadas com NLTK

Para preparação de dados e engenharia de recursos com o Data Wrangler, você pode usar mais de 300 transformações integradas ou criar suas próprias transformações personalizadas. Transformações personalizadas podem ser escritos como etapas separadas no Data Wrangler. Eles se tornam parte do arquivo .flow no Data Wrangler. O recurso de transformação personalizada oferece suporte a Python, PySpark e SQL como etapas diferentes em trechos de código. Depois que os arquivos de notebook (.ipynb) são gerados a partir do arquivo .flow ou o arquivo .flow é usado como receitas, os trechos de código de transformação personalizados persistem sem exigir nenhuma alteração. Esse design do Data Wrangler permite que transformações personalizadas se tornem parte de uma tarefa de processamento do SageMaker para processar conjuntos de dados massivos com transformações personalizadas.

O conjunto de dados do Titanic tem alguns recursos (nome e home.dest) que contêm informações de texto. Nós usamos NLTK para dividir a coluna de nome e extrair o sobrenome e imprimir a frequência dos sobrenomes. NLTK é uma plataforma líder para a construção de programas Python para trabalhar com dados de linguagem humana. Ele fornece interfaces fáceis de usar para mais de 50 corpora e recursos lexicais como WordNet, juntamente com um conjunto de bibliotecas de processamento de texto para classificação, tokenização, lematização, marcação, análise e raciocínio semântico, e wrappers para bibliotecas de processamento de linguagem natural (NLP) de força industrial.

Para adicionar uma nova transformação, conclua as seguintes etapas:

  1. Escolha o sinal de mais e escolha Adicionar transformação.
  2. Escolha Adicionar Etapa e escolha Transformação personalizada.

Você pode criar uma transformação personalizada usando Pandas, PySpark, funções definidas pelo usuário do Python e SQL PySpark.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

  1. Escolha Python (pandas) e adicione o seguinte código para extrair o sobrenome da coluna de nome:
    import nltk
    nltk.download('punkt')
    tokens = [nltk.word_tokenize(name) for name in df['Name']] # Extract the last names of the passengers
    df['last_name'] = [token[0] for token in tokens]

  2. Escolha visualização para revisar os resultados.

A captura de tela a seguir mostra o last_name coluna extraída.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

  1. Adicione outra etapa de transformação personalizada para identificar a distribuição de frequência dos sobrenomes, usando o seguinte código:
    import nltk
    fd = nltk.FreqDist(df["last_name"])
    print(fd.most_common(10))

  2. Escolha visualização para rever os resultados da frequência.Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Transformações personalizadas com serviços de IA da AWS

Os serviços de IA pré-treinados da AWS fornecem inteligência pronta para seus aplicativos e fluxos de trabalho. Os serviços de IA da AWS se integram facilmente aos seus aplicativos para atender a muitos casos de uso comuns. Agora você pode usar os recursos dos serviços de IA da AWS como uma etapa de transformação personalizada no Data Wrangler.

Amazon Comprehend usa NLP para extrair insights sobre o conteúdo dos documentos. Ele desenvolve insights reconhecendo as entidades, frases-chave, linguagem, sentimentos e outros elementos comuns em um documento.

Usamos o Amazon Comprehend para extrair as entidades da coluna de nome. Conclua as seguintes etapas:

  1. Adicione uma etapa de transformação personalizada.
  2. Escolha Python (pandas).
  3. Digite o seguinte código para extrair as entidades:
    import boto3
    comprehend = boto3.client("comprehend") response = comprehend.detect_entities(LanguageCode = 'en', Text = df['name'].iloc[0]) for entity in response['Entities']:
    print(entity['Type'] + ":" + entity["Text"])

  4. Escolha visualização e visualizar os resultados.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Agora adicionamos três transformações personalizadas no Data Wrangler.

  1. Escolha Fluxo de dados para visualizar o fluxo de dados de ponta a ponta.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Transformações personalizadas com NumPy e SciPy

NumPy é uma biblioteca de código aberto para Python que oferece funções matemáticas abrangentes, geradores de números aleatórios, rotinas de álgebra linear, transformadas de Fourier e muito mais. SciPy é uma biblioteca Python de código aberto usada para computação científica e computação técnica, contendo módulos para otimização, álgebra linear, integração, interpolação, funções especiais, transformação rápida de Fourier (FFT), processamento de sinal e imagem, solucionadores e muito mais.

As transformações personalizadas do Data Wrangler permitem combinar Python, PySpark e SQL como etapas diferentes. No seguinte fluxo do Data Wrangler, diferentes funções de pacotes Python, NumPy e SciPy são aplicadas no conjunto de dados do Titanic como várias etapas.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

transformações NumPy

A coluna de tarifa do conjunto de dados do Titanic tem tarifas de embarque de diferentes passageiros. O histograma da coluna tarifária mostra distribuição uniforme, exceto para o último bin. Aplicando transformações NumPy como log ou raiz quadrada, podemos alterar a distribuição (conforme mostrado pela transformação de raiz quadrada).

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai. Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Veja o seguinte código:

import pandas as pd
import numpy as np
df["fare_log"] = np.log(df["fare_interpolate"])
df["fare_sqrt"] = np.sqrt(df["fare_interpolate"])
df["fare_cbrt"] = np.cbrt(df["fare_interpolate"])

transformações SciPy

As funções do SciPy, como z-score, são aplicadas como parte da transformação personalizada para padronizar a distribuição de tarifas com média e desvio padrão.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Veja o seguinte código:

df["fare_zscore"] = zscore(df["fare_interpolate"])
from scipy.stats import zscore

Otimização de restrições com NumPy e SciPy

As transformações personalizadas do Data Wrangler podem lidar com transformações avançadas, como otimização de restrição, aplicando funções de otimização SciPy e combinando SciPy com NumPy. No exemplo a seguir, a tarifa em função da idade não mostra nenhuma tendência observável. No entanto, a otimização de restrição pode transformar a tarifa em função da idade. A condição de restrição neste caso é que a nova tarifa total permaneça igual à antiga tarifa total. As transformações customizadas do Data Wrangler permitem que você execute a função de otimização SciPy para determinar o coeficiente ideal que pode transformar a tarifa em função da idade sob condições de restrição.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai. Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Definição de otimização, definição de objetivo e várias restrições podem ser mencionadas como funções diferentes ao formular a otimização de restrição em uma transformação personalizada do Data Wrangler usando SciPy e NumPy. As transformações personalizadas também podem trazer diferentes métodos de resolução que estão disponíveis como parte do pacote de otimização SciPy. Uma nova variável transformada pode ser gerada multiplicando o coeficiente ideal pela coluna original e adicionada às colunas existentes do Data Wrangler. Veja o seguinte código:

import numpy as np
import scipy.optimize as opt
import pandas as pd df2 = pd.DataFrame({"Y":df["fare_interpolate"], "X1":df["age_interpolate"]}) # optimization defination
def main(df2):
x0 = [0.1]
res = opt.minimize(fun=obj, x0=x0, args=(df2), method="SLSQP", bounds=[(0,50)], constraints=cons)
return res # objective function
def obj(x0, df2):
sumSquares = np.sum(df2["Y"] - x0*df2["X1"])
return sumSquares # constraints
def constraint1(x0):
sum_cons1 = np.sum(df2["Y"] - x0*df2["X1"]) - 0
return sum_cons1
con1 = {'type': 'eq', 'fun': constraint1}
cons = ([con1]) print(main(df2)) df["new_fare_age_optimized"]=main(df2).x*df2["X1"]

O recurso de transformação personalizada do Data Wrangler tem a capacidade de interface do usuário para mostrar os resultados das funções otimizadas do SciPy, como o valor do coeficiente ideal (ou múltiplos coeficientes).

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Transformações personalizadas com scikit-learn

scikit-learn é um módulo Python para aprendizado de máquina construído sobre o SciPy. É uma biblioteca de ML de código aberto que oferece suporte ao aprendizado supervisionado e não supervisionado. Ele também fornece várias ferramentas para ajuste de modelo, pré-processamento de dados, seleção de modelo, avaliação de modelo e muitos outros utilitários.

Discretização

Discretização (também conhecido como quantização or arquivamento) fornece uma maneira de particionar recursos contínuos em valores discretos. Certos conjuntos de dados com recursos contínuos podem se beneficiar da discretização, porque a discretização pode transformar o conjunto de dados de atributos contínuos em um com apenas atributos nominais. Recursos discretizados codificados em um único ponto podem tornar um modelo mais expressivo, mantendo a interpretabilidade. Por exemplo, o pré-processamento com um discretizador pode introduzir não linearidade em modelos lineares.

No código a seguir, usamos KBinsDiscretizer para discretizar a coluna de idade em 10 categorias:

# Table is available as variable `df`
from sklearn.preprocessing import KBinsDiscretizer
import numpy as np
# discretization transform the raw data
df = df.dropna()
kbins = KBinsDiscretizer(n_bins=10, encode='ordinal', strategy='uniform')
ages = np.array(df["age"]).reshape(-1, 1)
df["age"] = kbins.fit_transform(ages)
print(kbins.bin_edges_)

Você pode ver as bordas da caixa impressas na captura de tela a seguir.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Codificação única

Os valores nas colunas Embarked são valores categóricos. Portanto, temos que representar essas strings como valores numéricos para realizar nossa classificação com nosso modelo. Também poderíamos fazer isso usando uma transformação de codificação one-hot.

Existem três valores para Embarked: S, C e Q. Nós os representamos com números. Veja o seguinte código:

# Table is available as variable `df`
from sklearn.preprocessing import LabelEncoder le_embarked = LabelEncoder()
le_embarked.fit(df["embarked"]) encoded_embarked_training = le_embarked.transform(df["embarked"])
df["embarked"] = encoded_embarked_training

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

limpar

Quando você não estiver usando o Data Wrangler, é importante encerrar a instância na qual ele é executado para evitar taxas adicionais.

O Data Wrangler salva automaticamente seu fluxo de dados a cada 60 segundos. Para evitar a perda de trabalho, salve seu fluxo de dados antes de desligar o Data Wrangler.

  1. Para salvar seu fluxo de dados no Studio, escolha Envie o, Em seguida, escolha Salvar fluxo do Data Wrangler.
  2. Para encerrar a instância do Data Wrangler, no Studio, escolha Executando instâncias e kernels.
  3. Debaixo APLICATIVOS DE CORRIDA, escolha o ícone de desligamento ao lado do aplicativo sagemaker-data-wrangler-1.0.
  4. Escolha Desligar tudo para confirmar.

O Data Wrangler é executado em uma instância ml.m5.4xlarge. Esta instância desaparece de INSTÂNCIAS EM EXECUÇÃO quando você desliga o aplicativo Data Wrangler.

Depois de encerrar o aplicativo Data Wrangler, ele precisa ser reiniciado na próxima vez que você abrir um arquivo de fluxo do Data Wrangler. Isso pode levar alguns minutos.

Conclusão

Nesta postagem, demonstramos como você pode usar transformações personalizadas no Data Wrangler. Usamos as bibliotecas e a estrutura do contêiner do Data Wrangler para estender os recursos integrados de transformação de dados. Os exemplos neste post representam um subconjunto dos frameworks usados. As transformações no fluxo do Data Wrangler agora podem ser dimensionadas para um pipeline para DataOps.

Para saber mais sobre como usar fluxos de dados com o Data Wrangler, consulte Criar e usar um fluxo do Data Wrangler e Preços do Amazon SageMaker. Para começar a usar o Data Wrangler, consulte Prepare dados de ML com o Amazon SageMaker Data Wrangler. Para saber mais sobre o Autopilot e o AutoML no SageMaker, visite Automatize o desenvolvimento de modelos com o Amazon SageMaker Autopilot.


Sobre os autores

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Meenakshisundaram Thandavarayan é especialista sênior em IA/ML da AWS. Ele ajuda contas estratégicas de alta tecnologia em sua jornada de IA e ML. Ele é muito apaixonado por IA orientada a dados.

 Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Sovik Kumar Nath é um arquiteto de soluções AI/ML da AWS. Ele tem uma vasta experiência em projetos e soluções de ponta a ponta para aprendizado de máquina; análise de negócios em análise financeira, operacional e de marketing; assistência médica; cadeia de mantimentos; e IoT. Fora do trabalho, Sovik gosta de viajar e assistir a filmes.

Criação de transformações personalizadas no Amazon SageMaker Data Wrangler usando NLTK e SciPy PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Abigail é um engenheiro de desenvolvimento de software no Amazon SageMaker. Ela é apaixonada por ajudar os clientes a preparar seus dados no DataWrangler e construir sistemas distribuídos de aprendizado de máquina. Em seu tempo livre, Abigail gosta de viajar, fazer caminhadas, esquiar e cozinhar.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS