Logo Zephyrnet

Cấp phép chuyển đổi tùy chỉnh trong Amazon SageMaker Data Wrangler bằng cách sử dụng NLTK và SciPy

Ngày:

“Thay vì tập trung vào mã, các công ty nên tập trung vào phát triển các phương pháp kỹ thuật có hệ thống để cải thiện dữ liệu theo cách đáng tin cậy, hiệu quả và có hệ thống. Nói cách khác, các công ty cần chuyển từ cách tiếp cận lấy mô hình làm trung tâm sang cách tiếp cận lấy dữ liệu làm trung tâm.” – Andrew Ng

Cách tiếp cận AI tập trung vào dữ liệu liên quan đến việc xây dựng các hệ thống AI với dữ liệu chất lượng liên quan đến việc chuẩn bị dữ liệu và kỹ thuật tính năng. Đây có thể là một nhiệm vụ tẻ nhạt liên quan đến việc thu thập dữ liệu, khám phá, lập hồ sơ, làm sạch, cấu trúc, chuyển đổi, làm phong phú, xác thực và lưu trữ dữ liệu một cách an toàn.

Trình sắp xếp dữ liệu Amazon SageMaker là một dịch vụ trong Xưởng sản xuất Amazon SageMaker cung cấp giải pháp đầu cuối để nhập, chuẩn bị, chuyển đổi, làm nổi bật và phân tích dữ liệu bằng cách sử dụng ít hoặc không cần mã hóa. Bạn có thể tích hợp luồng chuẩn bị dữ liệu Data Wrangler vào quy trình công việc máy học (ML) của mình để đơn giản hóa quá trình tiền xử lý dữ liệu và kỹ thuật tính năng, giúp quá trình chuẩn bị dữ liệu được đưa vào sản xuất nhanh hơn mà không cần phải tạo mã PySpark, cài đặt Apache Spark hoặc khởi tạo các cụm.

Đối với các tình huống mà bạn cần thêm tập lệnh tùy chỉnh của riêng mình để chuyển đổi dữ liệu, bạn có thể viết logic chuyển đổi của mình trong Pandas, PySpark, PySpark SQL. Trình sắp xếp dữ liệu hiện hỗ trợ các thư viện NLTK và SciPy để tạo các chuyển đổi tùy chỉnh nhằm chuẩn bị dữ liệu văn bản cho ML và thực hiện tối ưu hóa ràng buộc.

Bạn có thể gặp phải các tình huống phải thêm tập lệnh tùy chỉnh của riêng mình để chuyển đổi dữ liệu. Với khả năng chuyển đổi tùy chỉnh của Data Wrangler, bạn có thể viết logic chuyển đổi của mình trong Pandas, PySpark, PySpark SQL.

Trong bài đăng này, chúng tôi thảo luận về cách bạn có thể viết chuyển đổi tùy chỉnh của mình trong NLTK để chuẩn bị dữ liệu văn bản cho ML. Chúng tôi cũng sẽ chia sẻ một số ví dụ về chuyển đổi mã tùy chỉnh bằng cách sử dụng các khung phổ biến khác như NLTK, NumPy, SciPy và scikit-learning cũng như Dịch vụ AI của AWS. Với mục đích của bài tập này, chúng tôi sử dụng Bộ dữ liệu Titanic, một bộ dữ liệu phổ biến trong cộng đồng ML, hiện đã được thêm vào dưới dạng tập dữ liệu mẫu trong Data Wrangler.

Tổng quan về giải pháp

Data Wrangler cung cấp hơn 40 trình kết nối tích hợp để nhập dữ liệu. Sau khi dữ liệu được nhập, bạn có thể xây dựng phép biến đổi và phân tích dữ liệu của mình bằng cách sử dụng hơn 300 phép biến đổi được tích hợp sẵn. Sau đó, bạn có thể tạo các quy trình công nghiệp hóa để đẩy các tính năng tới Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) hoặc Cửa hàng tính năng Amazon SageMaker. Sơ đồ sau đây cho thấy kiến ​​trúc cấp cao từ đầu đến cuối.

Điều kiện tiên quyết

Data Wrangler là một tính năng SageMaker có sẵn trong Xưởng sản xuất Amazon SageMaker. Bạn có thể đi theo tui quy trình giới thiệu Studio để cải thiện môi trường Studio và sổ ghi chép. Mặc dù bạn có thể chọn từ một số phương pháp xác thực, nhưng cách đơn giản nhất để tạo miền Studio là làm theo hướng dẫn Hướng dẫn bắt đầu nhanh. Bắt đầu nhanh sử dụng các cài đặt mặc định giống như cài đặt Studio tiêu chuẩn. Bạn cũng có thể chọn tham gia bằng cách sử dụng Trung tâm nhận dạng AWS IAM (kế thừa Đăng nhập một lần AWS) để xác thực (xem Tham gia vào miền Amazon SageMaker bằng Trung tâm nhận dạng IAM).

Nhập bộ dữ liệu Titanic

Bắt đầu môi trường Studio của bạn và tạo một môi trường mới Luồng Data Wrangler. Bạn có thể nhập tập dữ liệu của riêng mình hoặc sử dụng tập dữ liệu mẫu (Titanic) như minh họa trong ảnh chụp màn hình sau. Data Wrangler cho phép bạn nhập bộ dữ liệu từ các nguồn dữ liệu khác nhau. Đối với trường hợp sử dụng của chúng tôi, chúng tôi nhập tập dữ liệu mẫu từ bộ chứa S3.

Sau khi được nhập, bạn sẽ thấy hai nút (nút nguồn và nút loại dữ liệu) trong luồng dữ liệu. Data Wrangler tự động xác định loại dữ liệu cho tất cả các cột trong tập dữ liệu.

Biến đổi tùy chỉnh với NLTK

Để chuẩn bị dữ liệu và kỹ thuật tính năng với Data Wrangler, bạn có thể sử dụng hơn 300 phép biến đổi được tích hợp sẵn hoặc tạo các phép biến đổi tùy chỉnh của riêng bạn. chuyển đổi tùy chỉnh có thể được viết dưới dạng các bước riêng biệt trong Data Wrangler. Chúng trở thành một phần của tệp .flow trong Data Wrangler. Tính năng chuyển đổi tùy chỉnh hỗ trợ Python, PySpark và SQL dưới dạng các bước khác nhau trong đoạn mã. Sau khi các tệp sổ ghi chép (.ipynb) được tạo từ tệp .flow hoặc tệp .flow được sử dụng làm công thức nấu ăn, các đoạn mã chuyển đổi tùy chỉnh vẫn tồn tại mà không yêu cầu bất kỳ thay đổi nào. Thiết kế này của Data Wrangler cho phép các biến đổi tùy chỉnh trở thành một phần của công việc Xử lý SageMaker để xử lý các tập dữ liệu lớn với các biến đổi tùy chỉnh.

Bộ dữ liệu Titanic có một số tính năng (tên và home.dest) chứa thông tin văn bản. Chúng tôi sử dụng NLTK để tách cột tên và trích xuất họ và in tần suất xuất hiện của họ. NLTK là một nền tảng hàng đầu để xây dựng các chương trình Python hoạt động với dữ liệu ngôn ngữ của con người. Nó cung cấp các giao diện dễ sử dụng để hơn 50 kho ngữ liệu và từ vựng chẳng hạn như Mạng từ, cùng với một bộ thư viện xử lý văn bản để phân loại, mã thông báo, tạo gốc, gắn thẻ, phân tích cú pháp và lý luận ngữ nghĩa cũng như trình bao bọc cho các thư viện xử lý ngôn ngữ tự nhiên (NLP) cường độ công nghiệp.

Để thêm một biến đổi mới, hãy hoàn thành các bước sau:

  1. Chọn dấu cộng và chọn Thêm chuyển đổi.
  2. Chọn Thêm bước Và chọn Biến đổi tùy chỉnh.

Bạn có thể tạo biến đổi tùy chỉnh bằng cách sử dụng Pandas, PySpark, hàm do người dùng xác định Python và SQL PySpark.

  1. Chọn Python (Gấu trúc) và thêm đoạn mã sau để trích xuất họ từ cột tên:
    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. Chọn Xem trước để xem lại kết quả.

Ảnh chụp màn hình sau đây cho thấy last_name cột được trích xuất.

  1. Thêm một bước chuyển đổi tùy chỉnh khác để xác định phân bố tần suất của họ, sử dụng mã sau:
    import nltk
    fd = nltk.FreqDist(df["last_name"])
    print(fd.most_common(10))

  2. Chọn Xem trước để xem xét kết quả của tần số.

Chuyển đổi tùy chỉnh với các dịch vụ AWS AI

Các dịch vụ AI được đào tạo trước của AWS cung cấp trí thông minh được tạo sẵn cho các ứng dụng và quy trình làm việc của bạn. Các dịch vụ AI của AWS dễ dàng tích hợp với các ứng dụng của bạn để giải quyết nhiều trường hợp sử dụng phổ biến. Giờ đây, bạn có thể sử dụng các chức năng dành cho dịch vụ AWS AI như một bước chuyển đổi tùy chỉnh trong Data Wrangler.

Amazon hiểu sử dụng NLP để trích xuất những hiểu biết sâu sắc về nội dung của tài liệu. Nó phát triển những hiểu biết sâu sắc bằng cách nhận ra các thực thể, cụm từ khóa, ngôn ngữ, tình cảm và các yếu tố phổ biến khác trong tài liệu.

Chúng tôi sử dụng Amazon Comprehend để trích xuất các thực thể từ cột tên. Hoàn thành các bước sau:

  1. Thêm một bước chuyển đổi tùy chỉnh.
  2. Chọn Python (Gấu trúc).
  3. Nhập mã sau đây để giải nén các thực thể:
    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. Chọn Xem trước và trực quan hóa kết quả.

Chúng tôi hiện đã thêm ba biến đổi tùy chỉnh trong Data Wrangler.

  1. Chọn Dòng dữ liệu để trực quan hóa luồng dữ liệu từ đầu đến cuối.

Biến đổi tùy chỉnh với NumPy và SciPy

numpy là một thư viện mã nguồn mở dành cho Python cung cấp các hàm toán học toàn diện, trình tạo số ngẫu nhiên, quy trình đại số tuyến tính, biến đổi Fourier, v.v. khoa học viễn tưởng là một thư viện Python nguồn mở được sử dụng cho điện toán khoa học và điện toán kỹ thuật, chứa các mô-đun để tối ưu hóa, đại số tuyến tính, tích hợp, nội suy, các hàm đặc biệt, biến đổi Fourier nhanh (FFT), xử lý tín hiệu và hình ảnh, bộ giải, v.v.

Các biến đổi tùy chỉnh của Data Wrangler cho phép bạn kết hợp Python, PySpark và SQL thành các bước khác nhau. Trong luồng Trình sắp xếp dữ liệu sau đây, các chức năng khác nhau từ các gói Python, NumPy và SciPy được áp dụng trên tập dữ liệu Titanic dưới dạng nhiều bước.

biến đổi NumPy

Cột giá vé của bộ dữ liệu Titanic có giá vé lên máy bay của các hành khách khác nhau. Biểu đồ của cột giá vé hiển thị phân phối đồng đều, ngoại trừ thùng cuối cùng. Bằng cách áp dụng các phép biến đổi NumPy như log hoặc căn bậc hai, chúng ta có thể thay đổi phân phối (như thể hiện bằng phép biến đổi căn bậc hai).

Xem mã sau đây:

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"])

phép biến đổi SciPy

Các chức năng sciPy như điểm số z được áp dụng như một phần của chuyển đổi tùy chỉnh để chuẩn hóa phân phối giá vé với độ lệch chuẩn và trung bình.

Xem mã sau đây:

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

Hạn chế tối ưu hóa với NumPy và SciPy

Các biến đổi tùy chỉnh của Data Wrangler có thể xử lý các biến đổi nâng cao như tối ưu hóa ràng buộc áp dụng các chức năng tối ưu hóa SciPy và kết hợp SciPy với NumPy. Trong ví dụ sau, giá vé là một hàm của độ tuổi không hiển thị bất kỳ xu hướng có thể quan sát được nào. Tuy nhiên, tối ưu hóa ràng buộc có thể biến đổi giá vé như một hàm của tuổi. Điều kiện ràng buộc trong trường hợp này là tổng giá vé mới không đổi so với tổng giá vé cũ. Các biến đổi tùy chỉnh của Data Wrangler cho phép bạn chạy chức năng tối ưu hóa SciPy để xác định hệ số tối ưu có thể biến đổi giá vé dưới dạng hàm tuổi trong các điều kiện ràng buộc.

Định nghĩa tối ưu hóa, định nghĩa mục tiêu và nhiều ràng buộc có thể được đề cập dưới dạng các chức năng khác nhau trong khi lập công thức tối ưu hóa ràng buộc trong biến đổi tùy chỉnh Data Wrangler bằng SciPy và NumPy. Biến đổi tùy chỉnh cũng có thể mang lại các phương pháp giải khác nhau có sẵn như một phần của gói tối ưu hóa SciPy. Một biến được chuyển đổi mới có thể được tạo bằng cách nhân hệ số tối ưu với cột ban đầu và thêm vào các cột hiện có của Data Wrangler. Xem đoạn mã sau:

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"]

Tính năng biến đổi tùy chỉnh Data Wrangler có khả năng giao diện người dùng để hiển thị kết quả của các chức năng tối ưu hóa SciPy như giá trị của hệ số tối ưu (hoặc nhiều hệ số).

Chuyển đổi tùy chỉnh với scikit-learning

học hỏi là một mô-đun Python dành cho máy học được xây dựng trên SciPy. Đó là một thư viện ML mã nguồn mở hỗ trợ học tập có giám sát và không giám sát. Nó cũng cung cấp nhiều công cụ khác nhau để điều chỉnh mô hình, tiền xử lý dữ liệu, lựa chọn mô hình, đánh giá mô hình và nhiều tiện ích khác.

Thận trọng

Thận trọng (còn được gọi là lượng tử hóa or đóng thùng) cung cấp một cách để phân vùng các tính năng liên tục thành các giá trị rời rạc. Một số bộ dữ liệu có các tính năng liên tục có thể được hưởng lợi từ việc rời rạc hóa, bởi vì sự rời rạc hóa có thể chuyển đổi tập dữ liệu gồm các thuộc tính liên tục thành một tập dữ liệu chỉ có các thuộc tính danh nghĩa. Các tính năng rời rạc được mã hóa một lần có thể làm cho mô hình trở nên biểu cảm hơn trong khi vẫn duy trì khả năng diễn giải. Chẳng hạn, tiền xử lý với bộ phân biệt có thể đưa tính phi tuyến tính vào các mô hình tuyến tính.

Trong đoạn mã sau, chúng tôi sử dụng KBinsDiscretizer để phân biệt cột tuổi thành 10 thùng:

# 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_)

Bạn có thể thấy các cạnh thùng được in trong ảnh chụp màn hình sau.

Mã hóa một lần nóng

Các giá trị trong cột Bắt tay là các giá trị phân loại. Do đó, chúng tôi phải biểu diễn các chuỗi này dưới dạng các giá trị số để thực hiện phân loại với mô hình của mình. Chúng tôi cũng có thể thực hiện việc này bằng cách sử dụng biến đổi mã hóa một lần nóng.

Có ba giá trị cho Embarked: S, C và Q. Chúng tôi biểu thị những giá trị này bằng số. Xem đoạn mã sau:

# 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

Làm sạch

Khi bạn không sử dụng Data Wrangler, điều quan trọng là phải tắt phiên bản mà nó chạy để tránh phát sinh thêm phí.

Data Wrangler tự động lưu luồng dữ liệu của bạn cứ sau 60 giây. Để tránh mất công việc, hãy lưu luồng dữ liệu của bạn trước khi tắt Data Wrangler.

  1. Để lưu luồng dữ liệu của bạn trong Studio, hãy chọn Tập tin, sau đó chọn Lưu dữ liệu Wrangler Flow.
  2. Để tắt phiên bản Data Wrangler, trong Studio, hãy chọn Phiên bản và hạt nhân đang chạy.
  3. Theo ĐANG CHẠY CÁC ỨNG DỤNG, chọn biểu tượng tắt bên cạnh ứng dụng sagemaker-data-wrangler-1.0.
  4. Chọn Tắt tất cả xác nhận.

Data Wrangler chạy trên một phiên bản ml.m5.4xlarge. Phiên bản này biến mất khỏi CẢI TIẾN CHẠY khi bạn tắt ứng dụng Data Wrangler.

Sau khi bạn tắt ứng dụng Data Wrangler, nó phải khởi động lại vào lần tiếp theo bạn mở tệp luồng Data Wrangler. Quá trình này có thể mất vài phút.

Kết luận

Trong bài đăng này, chúng tôi đã trình bày cách bạn có thể sử dụng các phép biến đổi tùy chỉnh trong Data Wrangler. Chúng tôi đã sử dụng các thư viện và khung trong bộ chứa Data Wrangler để mở rộng khả năng chuyển đổi dữ liệu tích hợp. Các ví dụ trong bài đăng này đại diện cho một tập hợp con của các khung được sử dụng. Giờ đây, các biến đổi trong luồng Trình sắp xếp dữ liệu có thể được thu nhỏ thành một đường dẫn cho DataOps.

Để tìm hiểu thêm về cách sử dụng luồng dữ liệu với Data Wrangler, hãy tham khảo Tạo và sử dụng Luồng trình xử lý dữ liệuAmazon SageMaker Giá. Để bắt đầu với Data Wrangler, hãy xem Chuẩn bị dữ liệu ML với Amazon SageMaker Data Wrangler. Để tìm hiểu thêm về Autopilot và AutoML trên SageMaker, hãy truy cập Tự động hóa phát triển mô hình với Amazon SageMaker Autopilot.


Giới thiệu về tác giả

Meenakshisundaram Thandavarayan là chuyên gia cao cấp về AI / ML của AWS. Anh ấy giúp các tài khoản chiến lược công nghệ cao trên hành trình AI và ML của họ. Anh ấy rất đam mê về AI theo hướng dữ liệu.

 Sovik Kumar Nath là kiến ​​trúc sư giải pháp AI/ML của AWS. Ông có nhiều kinh nghiệm về các giải pháp và thiết kế đầu cuối cho máy học; phân tích kinh doanh trong phân tích tài chính, hoạt động và tiếp thị; chăm sóc sức khỏe; chuỗi cung ứng; và IoT. Ngoài công việc, Sovik thích đi du lịch và xem phim.

Abigail là Kỹ sư phát triển phần mềm tại Amazon SageMaker. Cô ấy đam mê giúp khách hàng chuẩn bị dữ liệu của họ trong DataWrangler và xây dựng các hệ thống máy học phân tán. Khi rảnh rỗi, Abigail thích đi du lịch, đi bộ đường dài, trượt tuyết và nướng bánh.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img