Chuyển đến nội dung chính

Machine Learning với Python & Snowflake Cortex AI: Hướng dẫn

Tìm hiểu về Snowflake Cortex AI và cách sử dụng cho LLMs và machine learning.

Khám phá cùng AI

Huấn luyện mô hình AI đang nổi lên như một trong những ứng dụng tiềm năng của AI trong khoa học dữ liệu. Cụ thể hơn, machine learning có thể được thực hiện bằng Snowflake Cortex AI.

Trong hướng dẫn này, chúng tôi sẽ đề cập Snowflake Cortex AI là gì và có thể làm gì. Bên cạnh đó, chúng tôi cung cấp một hướng dẫn đơn giản để bắt đầu với machine learning và AI bằng Python và một chút SQL. Nếu bạn mới làm quen với Snowflake, hãy xem khóa học Introduction to Snowflake để bắt nhịp nhanh chóng.

Snowflake Cortex AI là gì?

Snowflake Cortex AI là một tính năng mạnh mẽ được tích hợp trong Snowflake AI Data Cloud, được thiết kế để hỗ trợ các tác vụ machine learning (ML) trực tiếp trong môi trường Snowflake. 

Nó cho phép tích hợp liền mạch các mô hình ML viết bằng Python với dữ liệu trong Snowflake, giúp tổ chức khai thác insight, dự báo và phân tích nâng cao từ các tập dữ liệu lớn đồng thời tận dụng hạ tầng đám mây.

snowflake cortex ai

Nguồn: Snowflake Cortex AI

Các tính năng chính của Snowflake Cortex AI:

  • Cortex Analyst: Tính năng phân tích tự phục vụ cho phép người dùng tương tác với dữ liệu bằng ngôn ngữ tự nhiên.
  • Cortex Search: Hệ thống tìm kiếm nâng cao dựa trên AI, được xây dựng để tìm kiếm dữ liệu trong tài liệu doanh nghiệp.
  • LLMs và Embed Models: Kết nối tới các LLM mạnh như Snowflake Arctic, Meta Llama 3 và Mistral trên kiến trúc serverless.
  • Cortex Fine-Tuning: Giúp các mô hình nhỏ tùy chỉnh đạt hiệu năng như LLMs mà không tốn chi phí cao. 

Snowflake Cortex gồm hai phần chính—các hàm LLM và các hàm ML.

Với các hàm LLM, bạn có:

  1. Summarize
  2. Translate
  3. Complete
  4. Extract Answer
  5. Sentiment
  6. Embed Text

Chúng ta sẽ xem chi tiết từng hàm ở phần sau.

Với các hàm ML, bạn có:

  1. Phát hiện bất thường (Anomaly detection): Tự động phát hiện và cảnh báo người dùng về các bất thường trong dữ liệu.
  2. Dự báo (Forecasting): Sử dụng thuật toán machine learning để dự đoán dựa trên dữ liệu lịch sử.
  3. Phân loại (Classification): Phân loại dữ liệu vào các nhóm hoặc danh mục khác nhau.
  4. Top insights:  Xác định các nguyên nhân gây dao động giá trị của chỉ số theo thời gian.

Muốn biết học Snowflake và các hàm của nó ở đâu? Hướng dẫn Snowflake cho người mới bắt đầu và hướng dẫn chứng chỉ Snowflake của chúng tôi sẽ giúp bạn.

Vì sao dùng Snowflake Cortex AI với Python?

Giờ hãy xem lợi ích khi kết hợp các công cụ này.

Ưu điểm khi kết hợp Snowflake Cortex AI với Python

Một số lợi ích chính khi dùng Snowflake Cortex AI gồm:

  • Tích hợp Python: Cho phép bạn chạy mô hình ML viết bằng Python trực tiếp trong môi trường tính toán của Snowflake.
  • Lưu trữ mô hình: Có thể lưu trữ và phục vụ mô hình cho suy luận (inference).
  • Không cần di chuyển dữ liệu: Vì mô hình chạy trong môi trường Snowflake, không cần chuyển các tập dữ liệu lớn ra máy chủ bên ngoài.

Trường hợp sử dụng và ứng dụng

Thứ nhất, Snowflake Cortex AI rất phù hợp cho doanh nghiệp muốn nâng cao năng lực khoa học dữ liệu mà không cần đầu tư lớn về nguồn lực. Với môi trường no-code, ngay cả người không chuyên kỹ thuật cũng có thể dễ dàng phát triển và triển khai mô hình ML.

Điều này đặc biệt hữu ích cho doanh nghiệp nhỏ hoặc startup không có ngân sách để thuê đội ngũ data scientist hoặc đầu tư vào các LLM đắt tiền.

Thứ hai, bằng cách tích hợp Python vào môi trường tính toán của Snowflake, người dùng có thể tận dụng thư viện phong phú các thuật toán và công cụ machine learning Python. Nghĩa là họ có thể tạo mô hình nâng cao và chính xác hơn mà không phải học ngôn ngữ lập trình mới.

Cuối cùng, các công ty đã sử dụng môi trường Snowflake sẽ tận dụng tối đa lợi ích của Cortex AI vì nó tích hợp liền mạch với kho dữ liệu hiện có, loại bỏ nhu cầu về hạ tầng bổ sung hay di chuyển dữ liệu.

Với Snowflake Cortex AI, doanh nghiệp có thể triển khai machine learning vào quy trình kinh doanh một cách dễ dàng và hiệu quả. 

Bắt đầu với Snowflake Cortex AI

Trong hướng dẫn này, chúng ta sẽ đi qua quy trình thiết lập một pipeline machine learning bằng Python và Snowflake Cortex AI.

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

Trước khi bắt đầu làm ML với Snowflake Cortex AI, hãy đảm bảo bạn đáp ứng các yêu cầu sau:

Thiết lập tài khoản Snowflake

Trước hết, bạn cần một phiên bản Snowflake nơi dữ liệu của bạn được lưu trữ và xử lý. Bạn có thể đăng ký trên trang web Snowflake.

Trong mẫu đăng ký, điền thông tin tài khoản và lưu ý thực hiện các lựa chọn sau ở trang thứ hai. Chọn Standard edition cho hướng dẫn này và Amazon Web Services để đơn giản và dễ tái lập. Với máy chủ, chọn US West (Oregon) để có đầy đủ lựa chọn các hàm LLM tốt nhất.

thiết lập tài khoản snowflake

Sau khi chọn xong, nhấp Get Started để nhận email kích hoạt. Vào email của bạn để kích hoạt tài khoản và tài khoản Snowflake của bạn đã sẵn sàng.

Yêu cầu phần mềm

Tiếp theo, bạn cũng cần đáp ứng một số yêu cầu phần mềm khác.

Danh sách đơn giản những thứ cần có:

  • Môi trường Python: Python 3.x với các gói cần thiết đã được cài đặt.
  • Snowflake: Cần cài Snowflake từ terminal để kết nối môi trường Python của bạn với tài khoản Snowflake.
  • VS Code: Có thể dùng một IDE phù hợp với Python. Các lựa chọn khác gồm DataLab, Google Colab, hoặc Jupyter Notebooks.

Trước khi bắt đầu phân tích, hãy cài mọi gói liên quan để môi trường mã hóa sẵn sàng.

Để cài đặt các gói cần thiết, bạn có thể dùng pip:

pip install snowflake
pip install python-dotenv

Sau khi cài thư viện, bạn cần thiết lập thư mục làm việc và tệp để bắt đầu.

Tôi đã tạo một thư mục tên Cortex AI Tutorial và thêm tệp .env chứa thông tin sau:

SNOWFLAKE_ACCOUNT = "<YOUR_ACCOUNT>" # eg. XXXX-XXXX

SNOWFLAKE_USER = "<YOUR_USER>" 

SNOWFLAKE_USER_PASSWORD = "<YOUR_PASSWORD>"

Sau khi nhập thông tin tài khoản, lưu tệp và tạo một tệp Python hoặc Jupyter Notebook trong cùng thư mục.

Kết nối với Snowflake

Bây giờ mọi thứ đã sẵn sàng, hãy kết nối môi trường Python của bạn với Snowflake.

Trước tiên, mở tệp Python và import tất cả thư viện cần thiết. Đây là đoạn mã để thực hiện:

import os
from dotenv import load_dotenv
from snowflake.snowpark import Session
from snowflake.cortex import Summarize, Complete, ExtractAnswer, Sentiment, Translate, EmbedText768

Tiếp theo, bạn cần nạp các biến đã lưu trong tệp .env trước đó. Điều này sẽ cung cấp thông tin xác thực tài khoản cho Snowflake để đăng nhập và sử dụng các hàm của họ.

# Loads environment variables from .env
load_dotenv()
connection_params = {
    "account": os.environ["SNOWFLAKE_ACCOUNT"],
    "user": os.environ["SNOWFLAKE_USER"],
    "password": os.environ["SNOWFLAKE_USER_PASSWORD"],
}

Khi đã kết nối bằng các biến, bạn cần thiết lập một phiên Snowflake. Đây là đối tượng sẽ xử lý mọi yêu cầu của bạn. 

# Creates a Snowflake session

snowflake_session = Session.builder.configs(connection_params).create()

Các hàm LLM của Snowflake Cortex AI

Các hàm LLM trong Cortex AI cho phép người dùng khai thác sức mạnh của LLM mà không cần tự phát triển mô hình AI.

Những hàm này giúp người dùng phân tích dữ liệu phổ thông tiếp cận phân tích dựa trên AI qua các tác vụ cơ bản.

Dưới đây là các hàm mà Snowflake Cortex cung cấp:

1. SUMMARIZE

Hàm summarize dùng để tạo bản tóm tắt dữ liệu dựa trên đầu vào cung cấp.

Nó sử dụng LLM để xác định thông tin then chốt và trình bày cô đọng.

Ví dụ, nếu bạn có một tài liệu dài và muốn có cái nhìn nhanh về nội dung, bạn có thể dùng summarize để nhận bản tóm tắt nêu bật các ý quan trọng. Điều này tiết kiệm thời gian và cho phép phân tích nhanh khối lượng dữ liệu lớn.

Ngôn ngữ đầu vào hiện bị giới hạn ở tiếng Anh tại thời điểm viết bài này.

Xem đoạn mã dưới đây để tham khảo:

# Defines the Summarize LLM Function
def summarize(user_text):
    summary = Summarize(text=user_text, session=snowflake_session)
    return summary

2. TRANSLATE

Hàm translate dùng để chuyển đổi văn bản từ ngôn ngữ này sang ngôn ngữ khác.

Nó tận dụng các thuật toán machine learning và mô hình thống kê để dịch chính xác văn bản.

Điều này hữu ích khi làm việc với dữ liệu hoặc tài liệu bằng nhiều ngôn ngữ, vì giúp giao tiếp và hiểu dễ dàng hơn.

Ví dụ, nếu bạn có một báo cáo viết bằng tiếng Tây Ban Nha và cần trình bày cho đối tượng nói tiếng Anh, bạn có thể dùng hàm translate để chuyển đổi nhanh văn bản. Điều này loại bỏ nhu cầu dịch thủ công và tiết kiệm thời gian.

Xem đoạn mã dưới đây để tham khảo:

# Defines the Translate LLM Function
def translate(user_text):
    translation = Translate(
        text=user_text, from_language="en", to_language="ko", session=snowflake_session
    )
    return translation

3. COMPLETE

Hàm complete là một hàm toàn diện có thể dùng để thực hiện các tác vụ cụ thể. Điều này được thực hiện thông qua các câu nhắc (prompt) hướng dẫn mô hình AI cung cấp thông tin cần thiết để thực thi tác vụ.

Xem đoạn mã dưới đây để tham khảo:

# Defines the Complete LLM Function
def complete(user_text):
    completion = Complete(
        model="snowflake-arctic",
        prompt=f"Provide 3 relevant keywords from the following text: {user_text}",
        session=snowflake_session,
    )
    return completion

4. EXTRACT_ANSWER

Hàm extract answer đưa ra câu trả lời dựa trên câu hỏi cung cấp cho mô hình. Đầu vào phải bằng tiếng Anh ở dạng chuỗi hoặc JSON.

Xem đoạn mã dưới đây để tham khảo:

# Defines the Extract Answer LLM Function
def extract_answer(user_text):
    answer = ExtractAnswer(
        from_text=user_text,
        question="What are some reasons why young adult South Koreans love coffee?",
        session=snowflake_session,
    )
    return answer

5. SENTIMENT

Hàm sentiment cung cấp một con số định lượng dựa trên cảm xúc của văn bản đầu vào. Nó trả về giá trị trong khoảng -1 đến 1. Giá trị -1 là tiêu cực nhất, 1 là tích cực nhất, và xung quanh 0 là trung lập.

Xem đoạn mã dưới đây để tham khảo:

# Defines the Sentiment LLM Function
def sentiment(user_text):
    sentiment = Sentiment(text=user_text, session=snowflake_session)
    return sentiment

6. EMBED_TEXT

Các hàm embed text bao gồm EMBED_TEXT_768 và EMBED_TEXT_1024. Chúng tạo vector embedding với số chiều lần lượt là 768 và 1024.

Xem đoạn mã dưới đây tham khảo hàm EMBED_TEXT_768:

# Defines the Embed Text LLM Function
def embed_text(user_text):
    embed_text = EmbedText768(text=user_text, model='snowflake-arctic-embed-m', session=snowflake_session)
    return embed_text

Giờ hãy ghép tất cả vào một hàm main và chạy với một văn bản mẫu để xem kết quả.

Tôi đã dùng một đoạn văn bản ngắn, đơn giản để nhập vào mô hình như dưới đây:

snowflake llm functions sample text input

Để thuận tiện sao chép, đây là văn bản:

user_text = """
        Young adults in South Korea are embracing coffee as a blend of energy, comfort, and culture. 
        Coffee isn't just about staying awake during demanding studies or work; it’s a cherished part of daily routines. 
        With South Korea's bustling café culture, coffee shops have become popular spaces for socializing, studying, 
        or just taking a break from the fast-paced city life. 
        The diversity of flavors and trendy cafés also offers a unique, 
        stylish experience that fits right into the evolving lifestyle of young adults, 
        who seek both connection and personal moments in the midst of it all.
    """

Bây giờ, hãy chạy mã. Mất vài giây thôi.

Đây là kết quả:

snowflake cortex llm output

Như bạn thấy, AI đã cho chúng ta mọi kết quả cần thiết dựa trên văn bản cung cấp. Nó tạo tóm tắt, dịch văn bản sang tiếng Hàn, đưa ra ba từ khóa liên quan dựa trên văn bản, và cung cấp câu trả lời theo câu hỏi của tôi.

Các hàm Machine Learning của Snowflake Cortex AI

Cortex AI cũng có các hàm ML có thể chạy chỉ với SQL. Dưới đây là một số hàm mà nó cung cấp.

1. Phát hiện bất thường

Phát hiện bất thường rất quan trọng để nhận diện các mẫu bất thường không phù hợp với hành vi kỳ vọng của dữ liệu. Snowflake đơn giản hóa phát hiện bất thường bằng cách cung cấp các hàm machine learning dựng sẵn dựa trên gradient boosting machine (GBM), cho phép nhanh chóng xác định outlier trong tập dữ liệu của bạn.

Phát hiện bất thường đặc biệt hữu ích cho các tác vụ như:

  • Phát hiện gian lận trong dữ liệu giao dịch.
  • Xác định hành vi người dùng bất thường.
  • Giám sát chuỗi thời gian để phát hiện bất thường trong hiệu năng hệ thống.

Để thực hiện phát hiện bất thường, có thể dùng lớp ANOMALY_DETECTION (SNOWFLAKE.ML) của Snowflake. Lệnh này tạo đối tượng mô hình phát hiện bất thường. Bước này sẽ fit mô hình vào dữ liệu huấn luyện.

Cách sử dụng như sau:

CREATE [ OR REPLACE ] SNOWFLAKE.ML.ANOMALY_DETECTION <model_name>(
  INPUT_DATA => <reference_to_training_data>,
  [ SERIES_COLNAME => '<series_column_name>', ]
  TIMESTAMP_COLNAME => '<timestamp_column_name>',
  TARGET_COLNAME => '<target_column_name>',
  LABEL_COLNAME => '<label_column_name>',
  [ CONFIG_OBJECT => <config_object> ]
)
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ COMMENT = '<string_literal>' ]

Sau khi tạo đối tượng, bạn có thể dùng phương thức <model_name>!DETECT_ANOMALIES để thực hiện phát hiện bất thường,

<model_name>!DETECT_ANOMALIES(
  INPUT_DATA => <reference_to_data_to_analyze>,
  TIMESTAMP_COLNAME => '<timestamp_column_name>',
  TARGET_COLNAME => '<target_column_name>',
  [ CONFIG_OBJECT => <configuration_object>, ]
  [ SERIES_COLNAME => '<series_column_name>' ]
)

Đây là bước dự đoán thực tế, nơi outlier sẽ được phát hiện bằng phương thức này.

Dưới đây là ví dụ cách thực hiện phát hiện bất thường với một tập dữ liệu.

Trước hết, bạn có thể tạo cơ sở dữ liệu bằng cách vào Data ở thanh bên trái, sau đó Add Data, rồi Load data into a Table.

thêm cơ sở dữ liệu snowflake

Trong cửa sổ bật lên, nhấp + Database và đặt tên cơ sở dữ liệu. Nhấp Create, sau đó trong cửa sổ chính, nhấp Cancel.

tạo cơ sở dữ liệu snowflake mới

Điều này sẽ tạo một cơ sở dữ liệu trống để bạn làm việc.

Các ví dụ dưới đây được điều chỉnh từ Tài liệu Snowflake.

Để bắt đầu phát hiện bất thường, vào một SQL worksheet mới, chọn cơ sở dữ liệu mới làm nguồn dữ liệu, và dán đoạn mã sau để tạo bảng:

CREATE OR REPLACE TABLE historical_sales_data (

  store_id NUMBER, item VARCHAR, date TIMESTAMP_NTZ, sales FLOAT, label BOOLEAN,

  temperature NUMBER, humidity FLOAT, holiday VARCHAR);

// Creating the dataset
INSERT INTO historical_sales_data VALUES
  (1, 'jacket', to_timestamp_ntz('2020-01-01'), 2.0, false, 50, 0.3, 'new year'),
  (1, 'jacket', to_timestamp_ntz('2020-01-02'), 3.0, false, 52, 0.3, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-03'), 5.0, false, 54, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-04'), 30.0, true, 54, 0.3, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-05'), 8.0, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-06'), 6.0, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-07'), 4.6, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-08'), 2.7, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-09'), 8.6, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-10'), 9.2, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-11'), 4.6, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-12'), 7.0, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-13'), 3.6, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-14'), 8.0, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-01'), 3.4, false, 50, 0.3, 'new year'),
  (2, 'umbrella', to_timestamp_ntz('2020-01-02'), 5.0, false, 52, 0.3, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-03'), 4.0, false, 54, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-04'), 5.4, false, 54, 0.3, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-05'), 3.7, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-06'), 3.2, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-07'), 3.2, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-08'), 5.6, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-09'), 7.3, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-10'), 8.2, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-11'), 3.7, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-12'), 5.7, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-13'), 6.3, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-14'), 2.9, false, 55, 0.2, null);

Mã của bạn nên được nhập trong một SQL worksheet trông như thế này:

anomaly detection SQL worksheet

Tiếp theo là các câu lệnh sau để tạo bảng tên new_sales_data.

// Creating a new table and adding training data
CREATE OR REPLACE TABLE new_sales_data (
  store_id NUMBER, item VARCHAR, date TIMESTAMP_NTZ, sales FLOAT,
  temperature NUMBER, humidity FLOAT, holiday VARCHAR);
INSERT INTO new_sales_data VALUES
  (1, 'jacket', to_timestamp_ntz('2020-01-16'), 6.0, 52, 0.3, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-17'), 20.0, 53, 0.3, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-16'), 3.0, 52, 0.3, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-17'), 70.0, 53, 0.3, null);

Bây giờ, tạo mô hình phát hiện bất thường:

// Creating anomaly detection model object
CREATE OR REPLACE VIEW view_with_training_data
  AS SELECT date, sales FROM historical_sales_data
    WHERE store_id=1 AND item='jacket';
CREATE OR REPLACE SNOWFLAKE.ML.ANOMALY_DETECTION basic_model(
  INPUT_DATA => TABLE(view_with_training_data),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales',
  LABEL_COLNAME => '');

Điều này sẽ tạo kết quả thông báo rằng mô hình đã được tạo như dưới đây.

mô hình phát hiện bất thường

Tiếp theo, hãy dùng đối tượng mô hình để thực hiện phát hiện.

// Perform anomaly detection
CREATE OR REPLACE VIEW view_with_data_to_analyze
  AS SELECT date, sales FROM new_sales_data
    WHERE store_id=1 and item='jacket';
CALL basic_model!DETECT_ANOMALIES(
  INPUT_DATA => TABLE(view_with_data_to_analyze),
  TIMESTAMP_COLNAME =>'date',
  TARGET_COLNAME => 'sales'
);

Đây là đầu ra của quá trình phát hiện:

kết quả phát hiện bất thường

2. Phân loại

Phân loại là việc phân loại dữ liệu vào các lớp xác định trước. Với Snowflake, bạn có thể phân loại dữ liệu trực tiếp trong Snowflake, không cần xuất dữ liệu sang môi trường ML bên ngoài. 

mô hình phân loại snowflake

Bắt đầu bằng cách tạo tập dữ liệu mẫu với đoạn mã sau:

// Creating binary class dataset
CREATE OR REPLACE TABLE training_purchase_data AS (
    SELECT
        CAST(UNIFORM(0, 4, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(0, 3, RANDOM()) AS user_rating,
        FALSE AS label,
        'not_interested' AS class
    FROM TABLE(GENERATOR(rowCount => 100))
    UNION ALL
    SELECT
        CAST(UNIFORM(4, 7, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(3, 7, RANDOM()) AS user_rating,
        FALSE AS label,
        'add_to_wishlist' AS class
    FROM TABLE(GENERATOR(rowCount => 100))
    UNION ALL
    SELECT
        CAST(UNIFORM(7, 10, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(7, 10, RANDOM()) AS user_rating,
        TRUE AS label,
        'purchase' AS class
    FROM TABLE(GENERATOR(rowCount => 100))
);
CREATE OR REPLACE table prediction_purchase_data AS (
    SELECT
        CAST(UNIFORM(0, 4, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(0, 3, RANDOM()) AS user_rating
    FROM TABLE(GENERATOR(rowCount => 100))
    UNION ALL
    SELECT
        CAST(UNIFORM(4, 7, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(3, 7, RANDOM()) AS user_rating
    FROM TABLE(GENERATOR(rowCount => 100))
    UNION ALL
    SELECT
        CAST(UNIFORM(7, 10, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(7, 10, RANDOM()) AS user_rating
    FROM TABLE(GENERATOR(rowCount => 100))
);

Cho mục đích dữ liệu huấn luyện, hãy tạo một view mới.

// Creating view for training data
CREATE OR REPLACE view binary_classification_view AS
    SELECT user_interest_score, user_rating, label
FROM training_purchase_data;
SELECT * FROM binary_classification_view ORDER BY RANDOM(42) LIMIT 5;

View này sẽ cho ra kết quả như sau:

dữ liệu huấn luyện phân loại

Tiếp theo, hãy huấn luyện mô hình dựa trên dữ liệu huấn luyện:

// Training a binary classification model
CREATE OR REPLACE SNOWFLAKE.ML.CLASSIFICATION model_binary(
    INPUT_DATA => SYSTEM$REFERENCE('view', 'binary_classification_view'),
    TARGET_COLNAME => 'label'
);

Để thực hiện phân loại, dùng phương thức PREDICT:

// Performing prediction using PREDICT method
SELECT model_binary!PREDICT(INPUT_DATA => {*})
    AS prediction FROM prediction_purchase_data;

Dự đoán sẽ trông như sau:

kết quả hàm phân loại

Để định dạng đẹp hơn, dùng câu lệnh SQL này:

// Formatting SQL predictions
SELECT *, model_binary!PREDICT(INPUT_DATA => {*})
    AS predictions FROM prediction_purchase_data;

Bạn sẽ nhận được định dạng gọn gàng cho các dự đoán như sau:

kết quả hàm phân loại đã định dạng

3. Top insights

Top Insights là công cụ giám sát để tìm các dao động trong chỉ số theo thời gian thông qua phân tích chuỗi thời gian. Sử dụng mô hình cây quyết định, Top Insights có thể xác định các yếu tố đóng góp quan trọng nhất vào việc tăng hoặc giảm của một chỉ số cụ thể.

mô hình top insights snowflake

Hãy xem ví dụ phân tích chuỗi thời gian bằng hàm này.

Trước hết, hãy tạo tập dữ liệu:

// Creating dataset
CREATE OR REPLACE TABLE input_table(
  ds DATE, metric NUMBER, dim_country VARCHAR, dim_vertical VARCHAR);
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'usa' AS dim_country,
    'tech' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'usa' AS dim_country,
    'auto' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, seq4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'usa' AS dim_country,
    'fashion' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'usa' AS dim_country,
    'finance' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'canada' AS dim_country,
    'fashion' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'canada' AS dim_country,
    'finance' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'canada' AS dim_country,
    'tech' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'canada' AS dim_country,
    'auto' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'france' AS dim_country,
    'fashion' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'france' AS dim_country,
    'finance' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'france' AS dim_country,
    'tech' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'france' AS dim_country,
    'auto' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
-- Data for the test group
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 8, 1)) AS ds,
    UNIFORM(300, 320, RANDOM()) AS metric,
    'usa' AS dim_country,
    'auto' AS dim_vertica
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 8, 1))  AS ds,
    UNIFORM(400, 420, RANDOM()) AS metric,
    'usa' AS dim_country,
    'finance' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
// Creating new view and adding labels to timestamps
CREATE OR REPLACE VIEW input_view AS (
    SELECT
        metric,
        dim_country as country,
        dim_vertical as vertical,
        ds >= '2021-01-01' AS label
    FROM input_table
);

Tiếp theo, chúng ta phải tạo đối tượng mô hình để dự đoán. Điều này cần thiết để gọi phương thức GET_DRIVERS.

// Creating the model
CREATE OR REPLACE SNOWFLAKE.ML.TOP_INSIGHTS my_insights_model()

Cuối cùng, để dự đoán, hãy gọi phương thức GET_DRIVERS.

// Performing prediction using GET_DRIVERS method
CALL my_insights_model!GET_DRIVERS(
  INPUT_DATA => TABLE(input_view),
  LABEL_COLNAME => 'label',
  METRIC_COLNAME => 'metric'
);

Bạn sẽ nhận được kết quả như sau:

kết quả hàm top insights

4. Dự báo

Dự báo rất quan trọng khi bạn cần dự đoán giá trị tương lai dựa trên dữ liệu lịch sử. Dù là dự báo doanh số, dự đoán tiêu thụ năng lượng hay lưu lượng truy cập web, các hàm dựng sẵn của Snowflake giúp các tác vụ này đơn giản hơn nhiều.

mô hình dự báo snowflake

Trong ví dụ của chúng ta, hãy thử dự báo trên một chuỗi đơn:

// Creating the dataset
CREATE OR REPLACE TABLE sales_data (store_id NUMBER, item VARCHAR, date TIMESTAMP_NTZ,
  sales FLOAT, temperature NUMBER, humidity FLOAT, holiday VARCHAR);
INSERT INTO sales_data VALUES
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-01'), 2.0, 50, 0.3, 'new year'),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-02'), 3.0, 52, 0.3, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-03'), 4.0, 54, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-04'), 5.0, 54, 0.3, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-05'), 6.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-06'), 7.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-07'), 8.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-08'), 9.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-09'), 10.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-10'), 11.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-11'), 12.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-12'), 13.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-01'), 2.0, 50, 0.3, 'new year'),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-02'), 3.0, 52, 0.3, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-03'), 4.0, 54, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-04'), 5.0, 54, 0.3, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-05'), 6.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-06'), 7.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-07'), 8.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-08'), 9.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-09'), 10.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-10'), 11.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-11'), 12.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-12'), 13.0, 55, 0.2, NULL);
-- Future values for additional columns (features)
CREATE OR REPLACE TABLE future_features (store_id NUMBER, item VARCHAR,
  date TIMESTAMP_NTZ, temperature NUMBER, humidity FLOAT, holiday VARCHAR);
INSERT INTO future_features VALUES
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-13'), 52, 0.3, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-14'), 53, 0.3, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-13'), 52, 0.3, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-14'), 53, 0.3, NULL);

Tiếp theo, hãy tách dữ liệu huấn luyện ra khỏi tập dữ liệu.

// Creating a view for training data
CREATE OR REPLACE VIEW v1 AS SELECT date, sales
  FROM sales_data WHERE store_id=1 AND item='jacket';
SELECT * FROM v1;

Trước khi bắt đầu dự báo, bạn cần huấn luyện mô hình dựa trên dữ liệu huấn luyện đã chọn.

Cách thực hiện:

// Training a forecasting model
CREATE SNOWFLAKE.ML.FORECAST model1(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales'
);

Cuối cùng, để dự báo, bạn có thể gọi phương thức FORECAST để thực hiện bước dự đoán.

// Performing the forecast by calling the FORECAST method
call model1!FORECAST(FORECASTING_PERIODS => 5);

Đây là đầu ra kết quả dự báo của chúng ta.

kết quả hàm dự báo

Giám sát mô hình ML trong Snowflake

Có thể giám sát hiệu năng mô hình bằng cách tạo dashboard trong Snowflake thông qua tích hợp bên thứ ba (như Tableau) hoặc truy vấn log của Snowflake. Một số chỉ số hữu ích như accuracy, precision và recall có thể dùng để theo dõi mô hình.

Kết luận

Snowflake Cortex AI đơn giản hóa machine learning bằng cách cho phép tích hợp liền mạch các mô hình ngay từ nền tảng Snowflake. Hướng dẫn này đã đưa bạn qua việc sử dụng các hàm Snowflake Cortex AI và Snowflake Cortex ML.

Giải pháp này tận dụng khả năng mở rộng của Snowflake và sự linh hoạt của Python, rất phù hợp cho tổ chức muốn triển khai machine learning mà không cần đưa dữ liệu ra ngoài đám mây.

Tìm thêm tài nguyên về Snowflake? Bạn sẽ thích Hướng dẫn Snowflake cho người mới bắt đầu và hướng dẫn Snowpark của chúng tôi. Nếu bạn muốn nội dung chuyên sâu hơn, khóa học Introduction to Snowflake có thể là lựa chọn phù hợp cho bạn.

Machine Learning với Python & Snowflake Cortex: Câu hỏi thường gặp

Python có tốt cho machine learning và AI không?

Python phù hợp cho machine learning và AI nhờ các thư viện mạnh như PyTorch, TensorFlow và Keras. Các hàm Snowflake AI và ML cũng có thể được truy cập qua Python.

Cách dùng Python cho AI và machine learning?

Bạn có thể dùng Python cho AI và machine learning thông qua các thư viện dựng sẵn hoặc thông qua các hàm LLM và ML của Snowflake.

Cách sử dụng các hàm ML dựa trên Snowflake Cortex?

Các hàm dựa trên ML của Snowflake Cortex có thể được sử dụng bằng cách gọi các phương thức tương ứng của từng hàm bằng SQL.

Các mô hình AI của Snowflake là gì?

Các mô hình AI của Snowflake là các mô hình ngôn ngữ lớn cung cấp sức mạnh cho Snowflake Cortex và các hàm tương ứng của nó.

Một số ví dụ machine learning của Snowflake là gì?

Các hàm machine learning của Snowflake có thể áp dụng cho nhiều ứng dụng như phát hiện bất thường, dự báo, tìm top insights và phân loại.

Austin Chia

Tác giả

Austin Chia

Tôi là Austin, một blogger và cây bút công nghệ với nhiều năm kinh nghiệm làm nhà khoa học dữ liệu và nhà phân tích dữ liệu trong lĩnh vực chăm sóc sức khỏe. Khởi đầu hành trình công nghệ với nền tảng sinh học, tôi hiện hỗ trợ những người khác thực hiện chuyển đổi tương tự thông qua blog công nghệ của mình. Niềm đam mê công nghệ đã đưa tôi đến với việc cộng tác viết cho hàng chục công ty SaaS, truyền cảm hứng cho người khác và chia sẻ trải nghiệm của bản thân.

Chủ đề

Liên quan