Skip to main content

Kiến trúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 2: Real-time Dashboards và Stream Analytics

Thu thập dữ liệu theo thời gian thực mới chỉ là bước khởi đầu. Giá trị thực sự của kiến trúc xử lý dữ liệu luồng nằm ở khả năng biến những luồng dữ liệu liên tục thành thông tin hữu ích để hỗ trợ ra quyết định ngay lập tức.

Kiến trúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 1: Giá trị của Streaming và Kiến trúc Streaming Ingest

Kiến trúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 3: Continuous Intelligence và AI thời gian thực

Trong phần thứ hai của series Kiến trúc cho xử lý dữ liệu luồng, chúng ta sẽ tìm hiểu cách xây dựng các bảng điều khiển thời gian thực (Real-time Dashboards), cách phân tích dữ liệu ngay khi sự kiện xảy ra thông qua Stream Analytics.

3. Real-time Dashboards (Bảng điều khiển thời gian thực)

Bảng điều khiển thời gian thực được xây dựng để giúp các nhà điều hành quan sát trực quan những gì đang xảy ra với doanh nghiệp ngay lúc này. Thay vì đọc các bảng số liệu thô kệch, họ nhìn vào các biểu đồ tự động cập nhật để đưa ra quyết định nhanh hơn.

Live Querying (Truy vấn trực tiếp)

Hãy tưởng tượng bạn đang điều hành một cửa hàng trực tuyến và muốn biết chính xác có bao nhiêu đơn hàng được đặt tính đến từng giây phút hiện tại. Thay vì phải đợi đến cuối ngày để xem báo cáo, Live Querying cho phép các bảng điều khiển (dashboards) tự động đặt câu hỏi cho Kho dữ liệu (DWH) một cách định kỳ để cập nhật thông tin mới nhất.

Điểm khác biệt:

  • Không cần trung gian: Trong quá khứ, để làm dashboard nhanh, người ta thường phải trích xuất dữ liệu ra các "khối" nhỏ (data cubes) để lưu trữ riêng. Nhưng với sức mạnh của đám mây, các công cụ dashboard hiện đại có thể gửi truy vấn SQL thẳng vào Kho dữ liệu gốc.
  • Luôn tươi mới: Vì truy vấn diễn ra liên tục, mọi biểu đồ bạn nhìn thấy đều phản ánh đúng những gì đang có trong kho dữ liệu ngay lúc đó.

Real-time Dashboards - Live Querying

Hình trên minh họa một đường ống dữ liệu cực kỳ tinh gọn để phục vụ các báo cáo thời gian thực:

  • Ứng dụng (Applications): Đây là nơi phát sinh ra dữ liệu (ví dụ: khách bấm nút mua hàng).
  • Thành phần chèn dữ liệu (Client library): Ứng dụng sử dụng một thư viện mã nguồn nhỏ để "chèn" (Insert) dữ liệu thẳng vào Kho dữ liệu.
  • Kho dữ liệu (Data warehouse): Đóng vai trò là "trái tim" lưu trữ mọi thông tin.
  • Bảng điều khiển thời gian thực (Real-time dashboard): Đây là giao diện mà người dùng nhìn vào.
  • Mũi tên "Periodically query" (Truy vấn định kỳ) kèm biểu tượng đồng hồ: Đây là điểm quan trọng nhất. Thay vì đợi dữ liệu được đẩy đến, dashboard chủ động "gõ cửa" Kho dữ liệu (thường là vài giây một lần) bằng các lệnh SQL để lấy thông tin mới nhất và cập nhật biểu đồ.

Bạn cần tận dụng tối đa sức mạnh của Kho dữ liệu đám mây.

  • Đừng tạo thêm bản sao: Bạn không cần phải tạo ra các "data mart" chi tiết lỉnh kỉnh bên ngoài. Hãy để dashboard truy vấn trực tiếp vào kho.
  • Tối ưu hóa thông minh: Nếu hệ thống bắt đầu chậm khi có quá nhiều người xem dashboard, hãy bật các tính năng hỗ trợ như Bộ nhớ đệm (Cache) hoặc BI Engine mà nhà cung cấp đám mây cung cấp để tăng tốc độ phản hồi mà không làm phức tạp hóa kiến trúc.

Tóm lại: Live Querying là phương pháp "truy vấn tại nguồn", giúp đơn giản hóa hệ thống và đảm bảo nhà quản lý luôn nhìn thấy dữ liệu thực tế nhất để ra quyết định kịp thời.

Materialize Some Views

Đây là một bước nâng cao sau khi bạn đã có hệ thống truy vấn trực tiếp (Live Querying).

Hãy tưởng tượng mỗi lần bảng điều khiển (dashboard) cập nhật, nó lại gửi một câu lệnh SQL phức tạp vào Kho dữ liệu để tính toán lại từ đầu. Nếu có hàng trăm người cùng xem dashboard đó, Kho dữ liệu sẽ phải làm việc cực kỳ vất vả và tốn kém.

Để giải quyết việc này, giải pháp là Materialized View:

  • Cách hoạt động: Thay vì chỉ là một view thông thường được tính toán mỗi khi có yêu cầu, Materialized View thực sự lưu kết quả tính toán đó xuống đĩa cứng.
  • Lợi ích: Khi dashboard cần dữ liệu, nó chỉ việc lấy kết quả đã có sẵn thay vì tính lại toàn bộ. Điều này giúp tốc độ hiển thị cực nhanh, giống như việc bạn chuẩn bị sẵn một món ăn thay vì đợi khách gọi mới bắt đầu đi chợ và nấu.

Real-time-Dashboards Materialized View

Hình này minh họa cách thức hoạt động của cơ chế này trong một hệ thống thực tế:

  • Ứng dụng (Applications): Vẫn tiếp tục chèn (Insert) dữ liệu sự kiện mới vào Kho dữ liệu liên tục.
  • Kho dữ liệu (Data warehouse): Bên trong nó xuất hiện một bước quan trọng là "Materialize view". Hệ thống sẽ tự động tổng hợp các sự kiện thô vừa nạp vào và cập nhật chúng vào một bảng kết quả đã được tính toán sẵn.
  • Bảng điều khiển (Real-time dashboard): Thay vì gửi truy vấn vào các bảng dữ liệu thô khổng lồ, dashboard bây giờ chỉ truy vấn (Periodically query) trực tiếp vào Materialized View. Vì dữ liệu ở đây đã được xử lý gọn gàng, dashboard sẽ cập nhật gần như tức thì.

Dù Materialized View rất mạnh mẽ, nhưng Đừng làm dụng nó:

  • Tốn kém lưu trữ: Mỗi Materialized View là một bản sao dữ liệu, nên nó sẽ làm tăng chi phí lưu trữ.
  • Chỉ dùng khi cần thiết: Chỉ nên tạo những View nào được truy cập cực kỳ thường xuyên. Đối với hầu hết các trường hợp khác, hãy cứ để dashboard truy vấn trực tiếp vào dữ liệu gốc (Live Querying) để đảm bảo tính đơn giản và tiết kiệm chi phí.

Tóm lại: Materialize Views giống như một "phím tắt" về hiệu suất. Bạn dùng nó để làm cho các báo cáo quan trọng nhất chạy nhanh hơn, nhưng phải cân nhắc giữa tốc độ và chi phí lưu trữ thêm.

4. Stream Analytics (Phân tích luồng)

Stream Analytics (Phân tích luồng) là việc thực hiện các tính toán trên dữ liệu ngay khi nó vừa đến để trích xuất các thông tin chi tiết và đưa ra cảnh báo kịp thời cho người dùng.

Phân tích dữ liệu luồng giúp doanh nghiệp không chỉ biết "chuyện gì đang xảy ra" mà còn có thể tự động phát hiện các vấn đề hoặc cơ hội ngay trong khoảnh khắc chúng vừa phát sinh.

Phân tích chuỗi thời gian (Time-Series Analytics)

Đây là ứng dụng phổ biến nhất của việc xử lý dữ liệu luồng, tập trung vào việc theo dõi và phân tích các giá trị thay đổi theo thời gian. Mục đích là biến các con số khô khan thành thông tin có thể hành động ngay lập tức.

Các ứng dụng tiêu biểu bao gồm:

  • Theo dõi tài sản (ví dụ: xe đang ở đâu).
  • Dự báo tác động của các sự kiện.
  • Bảo trì dự báo (biết trước khi nào máy móc sắp hỏng để sửa).

Time-Series Analytics

Hình này minh họa một ví dụ cụ thể: Một chiếc xe vận chuyển liên tục gửi vị trí của nó về đám mây. Hệ thống cần phải cảnh báo ngay nếu xe đi ra khỏi vùng quy định hoặc chạy quá tốc độ.

Quy trình hoạt động (theo từng bước trong hình):

1.     Xe (Vehicle): Phát bản tin vị trí (Publish) vào một "Hàng đợi sự kiện" (Asset location events topic).

2.     Đường ống luồng (Streaming pipeline): Đây là "bộ não" xử lý dữ liệu ngay khi nó tới. Nó làm hai việc cùng lúc:

o    Tính toán: Tính tốc độ trung bình dựa trên các mốc thời gian (time windows).

o    Đối chiếu: Đọc từ một "Cơ sở dữ liệu giới hạn tốc độ" (Database of speed limits) để xem xe có đang vi phạm hay không.

3.     Kết quả đi về hai ngả:

o    Nhánh 1 - Lưu trữ: Dữ liệu thô và các cảnh báo được đưa vào Dashboard warehouse để con người có thể truy vấn và xem báo cáo sau này.

o    Nhánh 2 - Hành động: Nếu có vi phạm, một tin nhắn cảnh báo được gửi vào "Hàng đợi cảnh báo" (Alert messages topic).

4.     Kích hoạt (Activation function): Tin nhắn cảnh báo này sẽ kích hoạt một hàm tự động để gửi email hoặc tin nhắn văn bản đến người quản lý.

Có một nguyên tắc quan trọng trong thiết kế là: Đừng để hệ thống tự động gửi tin nhắn trực tiếp từ đường ống xử lý.

  • Tại sao? Cần tách biệt trách nhiệm: đường ống chỉ làm nhiệm vụ tính toán, còn việc thông báo nên để cho một bộ phận riêng (Activation function) đảm nhận.
  • Lợi ích: Việc lưu mọi cảnh báo vào Kho dữ liệu (DWH) giúp con người có thể kiểm tra lại, phát hiện các quy luật (ví dụ: tại sao tài xế A hay chạy quá tốc độ ở cung đường này?) và cho phép người dùng quyền kiểm soát việc họ muốn nhận loại thông báo nào.

Tóm lại: Phân tích chuỗi thời gian trong luồng không chỉ là biết xe đang ở đâu, mà là hệ thống hóa việc tự động phát hiện vi phạmlưu trữ dữ liệu thông minh để con người có thể cải tiến quy trình vận hành.

Clickstream Analytics (Phân tích dữ liệu nhấp chuột)

Hãy tưởng tượng mỗi khi khách hàng ghé thăm trang web hoặc ứng dụng của bạn, họ để lại những "dấu chân kỹ thuật số" — đó chính là các lần nhấp chuột, xem trang, hoặc thêm hàng vào giỏ.

  • Mục tiêu: Việc theo dõi chuỗi sự kiện này giúp doanh nghiệp hiểu sâu sắc về hành vi khách hàng, từ đó tối ưu hóa hành trình mua sắm, thử nghiệm các tính năng mới (A/B testing) và phát hiện các điểm gây khó khăn khiến khách hàng rời đi.
  • Cách thu thập: Thông thường, doanh nghiệp sử dụng các công cụ có sẵn như Google Marketing Platform hoặc Salesforce Marketing Cloud để tự động ghi lại và chuyển dữ liệu này vào Kho dữ liệu (DWH) như BigQuery hoặc Snowflake.

Dù các công cụ trên rất mạnh, nhưng dữ liệu thô thường gặp phải 3 vấn đề lớn mà SQL thông thường khó giải quyết triệt để:

  • Kết nối danh tính (Identity stitching): Khách hàng có thể xem hàng trên điện thoại nhưng lại mua trên máy tính. Hệ thống cần "xâu chuỗi" các hành động này lại thành một người duy nhất.
  • Quy định quyền riêng tư: Cần xóa bỏ hoặc mã hóa các thông tin nhạy cảm (PII) trong các ô văn bản do người dùng nhập vào.
  • Lọc Bot (Bot detection): Cần loại bỏ các truy cập ảo từ công cụ tìm kiếm hoặc kẻ xấu để không làm sai lệch kết quả kinh doanh.

Clickstream Analytics

Để giải quyết các thách thức trên, một kiến trúc có tên là "Backfill pipeline" (Đường ống xử lý bổ sung) được đề xuất như minh họa trong hình trên:

·        Xuất dữ liệu (Export): Dữ liệu từ các nền tảng (như Google Marketing Platform) được đẩy vào Kho dữ liệu (Data warehouse).

·        Xử lý bổ sung (Backfill pipeline): Đây là một đường ống luồng chạy song song. Nó "nhặt" dữ liệu từ kho lên để xử lý chuyên sâu những việc mà công cụ gốc làm chưa tốt (như nối danh tính hoặc lọc bot).

·        Làm giàu thông tin (Other data sources): Điểm hay nhất ở đây là đường ống này có thể đọc thêm từ các nguồn khác (như danh sách khách hàng thân thiết, kho hàng, giá cả) để "đắp thêm" thông tin vào dữ liệu nhấp chuột.

·        Kết quả cuối cùng: Dữ liệu sau khi đã được "lọc sạch" và "làm giàu" sẽ được ghi ngược lại vào Kho dữ liệu để phục vụ cho các báo cáo chính xác nhất.

Tóm lại: Đừng chỉ dựa vào những gì công cụ có sẵn cung cấp. Để thực sự hiểu khách hàng, bạn cần xây dựng một đường ống xử lý riêng biệt nhằm tinh chỉnh dữ liệu theo đặc thù của chính doanh nghiệp mình. Dữ liệu nhấp chuột chỉ thực sự có giá trị khi nó được làm sạch và đặt trong đúng ngữ cảnh của khách hàng.

Anomaly Detection (Phát hiện bất thường)

Phát hiện bất thường trong dữ liệu luồng là quá trình nhận diện các mẫu hành vi lạ thường ngay khi chúng vừa xảy ra. Sự khác biệt giữa phương pháp "dựa trên chữ ký" (signature-based) truyền thống và phương pháp "phát hiện bất thường" hiện đại:

  • Cách làm cũ (Signature-based): Giống như việc cảnh sát có một cuốn sổ ghi danh sách các tên tội phạm đã biết mặt. Nếu thấy ai giống trong sổ, họ sẽ bắt. Tuy nhiên, cách này sẽ bỏ lọt những tên tội phạm mới chưa có trong sổ.
  • Cách làm hiện đại (Anomaly Detection): Hệ thống sẽ học xem thế nào là "hành vi bình thường" từ dữ liệu lịch sử. Khi có một sự kiện không khớp với quy luật bình thường đó, nó sẽ bị coi là đáng ngờ. Điều này cho phép doanh nghiệp phát hiện cả những mối đe dọa mới chưa từng thấy trước đây.

Các ứng dụng thực tế:

  • Phát hiện các món hàng bị định giá sai (bỗng nhiên có lượng mua đột biến).
  • Nhận diện máy móc đang bị quá tải.
  • Phát hiện "rô-bốt" hoặc hành vi gian lận trong trò chơi trực tuyến.

Anomaly Detection

Hình trên minh họa một quy trình thông minh gồm hai giai đoạn chạy song song để phát hiện bất thường một cách linh hoạt:

1.     Nhánh trên - Học quy luật (Giai đoạn gom nhóm):

o    Một đường ống luồng (Streaming pipeline) sẽ nhìn vào dữ liệu trong một "khung cửa sổ trượt" dài (ví dụ: dữ liệu của 3 ngày qua) và cứ mỗi 6 giờ lại tính toán lại một lần.

o    Mục tiêu là tạo ra các Cụm dữ liệu (Clusters) đại diện cho những hành vi "bình thường" hiện tại. Việc cập nhật liên tục này giúp hệ thống tự thích nghi khi môi trường thay đổi.

2.     Nhánh dưới - Kiểm tra thực tế (Giai đoạn so sánh):

o    Từng sự kiện mới phát sinh sẽ đi qua một đường ống luồng thứ hai.

o    Đường ống này sẽ lấy sự kiện đó so sánh ngay lập tức với các "Cụm dữ liệu bình thường" vừa được tạo ra ở nhánh trên.

3.     Kết quả: Nếu sự kiện mới nằm quá xa các cụm bình thường, nó sẽ được đẩy vào một hàng đợi cảnh báo (Alerts queue) để xử lý kịp thời.

Tóm lại: Sự bất thường là một khái niệm tương đối. Những gì là bình thường của tháng trước có thể không còn đúng ở tháng này. Vì vậy, thay vì dùng các quy tắc cứng nhắc, kiến trúc cần sử dụng các "khung cửa sổ thời gian" để giúp hệ thống luôn được tái đào tạo một cách tự động, từ đó luôn có cái nhìn cập nhật nhất về những gì đang diễn ra.

Resilient Streaming (Xử lý luồng bền bỉ)

Resilient Streaming tập trung vào cách đảm bảo hệ thống dữ liệu luôn hoạt động ổn định và không bị mất dữ liệu, ngay cả khi gặp phải những sự kiện không mong muốn hoặc khi cần cập nhật phần mềm.

Sự khác biệt giữa "Luồng" và "Lô" khi gặp lỗi

Trong xử lý theo lô (batch), nếu gặp lỗi logic, bạn có thể đơn giản là dừng chương trình, sửa mã nguồn và chạy lại toàn bộ. Tuy nhiên, trong xử lý luồng (streaming), hệ thống phải chạy liên tục. Bạn không thể dừng cả một "băng chuyền" đang chạy chỉ vì một vài món hàng bị lỗi, và bạn cũng không được phép bỏ qua các lỗi đó.

Hàng đợi tin nhắn rác (Dead-letter queue)

  • Cách hoạt động: Thay vì làm dừng toàn bộ hệ thống, những dữ liệu "không xử lý được" sẽ được đẩy sang một khu vực riêng.
  • Mục đích: Các kỹ sư có thể vào kiểm tra khu vực này sau đó để tìm ra nguyên nhân lỗi (do dữ liệu hay do mã nguồn) và sửa chữa mà không làm gián đoạn dòng chảy dữ liệu chính.

Cập nhật hệ thống mà không làm mất dữ liệu

Khi bạn đã sửa xong lỗi và muốn đưa mã nguồn mới vào sử dụng, thách thức là làm sao để thay đổi "bộ não" của hệ thống mà không làm rơi mất bất kỳ mẩu dữ liệu nào đang trên đường đi. Có hai phương pháp:

  • Cập nhật tại chỗ (Update in place): Hệ thống mới sẽ tiếp quản ngay lập tức và giữ nguyên trạng thái của những dữ liệu đang được xử lý dở dang. Cách này đòi hỏi sự tương thích giữa phiên bản cũ và mới nhưng đảm bảo được nguyên tắc "xử lý đúng một lần" (exactly-once) – nghĩa là mỗi sự kiện đều được tính toán chính xác, không thừa không thiếu.
  • Drain: Hệ thống cũ sẽ dừng tiếp nhận dữ liệu mới, tập trung xử lý nốt những gì còn tồn đọng trong bộ nhớ cho đến khi xong xuôi, sau đó mới chuyển giao hoàn toàn cho hệ thống mới. Phương pháp này đảm bảo nguyên tắc "ít nhất một lần" (at-least-once) – thà xử lý lặp lại còn hơn là làm mất dữ liệu.

Đừng bao giờ nhấn nút "Hủy" (Cancel) một hệ thống đang chạy thực tế, vì điều đó đồng nghĩa với việc bạn ném dữ liệu vào thùng rác. Một kiến trúc luồng thực sự bền bỉ phải luôn có cơ chế để tự phục hồichuyển giao êm thắm giữa các phiên bản, đảm bảo tính toàn vẹn tuyệt đối của dữ liệu kinh doanh.

Kết luận

Khi dữ liệu được phân tích ngay tại thời điểm phát sinh, doanh nghiệp không chỉ biết điều gì đang diễn ra mà còn có thể phát hiện rủi ro, cơ hội hoặc những hành vi bất thường trước khi chúng tạo ra hậu quả. Đây chính là bước chuyển từ việc "quan sát dữ liệu" sang "hiểu dữ liệu" trong thời gian thực.

Ở bài cuối của series, chúng ta sẽ đi thêm một bước nữa khi kết hợp Streaming với AI để xây dựng Continuous Intelligence, nơi hệ thống có thể tự học, tự dự báo và tự động thực hiện hành động mà gần như không cần sự can thiệp của con người.

Comments

Popular posts from this blog

Cloud Native là gì? Tư duy thiết kế hệ thống hiện đại cho thời đại đám mây

Cloud Native đang trở thành nền tảng của hầu hết các hệ thống hiện đại từ Netflix, Amazon đến Google. Nhưng Cloud Native thực sự là gì? Liệu việc đưa ứng dụng lên AWS hay Google Cloud đã đủ để gọi là Cloud Native chưa? Trong bài viết này, chúng ta sẽ tìm hiểu nguồn gốc của khái niệm Cloud Native, bài học từ sự cố AWS năm 2015, và những đặc tính quan trọng giúp các hệ thống hiện đại đạt được khả năng mở rộng, chống chịu và triển khai liên tục. 1. Bài học từ sự cố AWS: Lỗi là “Luật”, không phải “Ngoại lệ” Vào năm 2015, Amazon Web Services (AWS) gặp sự cố sập mạng chấn động. Trong khi các “ông lớn” như Airbnb hay Nest đều bị tê liệt, thì Netflix chỉ bị ảnh hưởng rất nhỏ và phục hồi gần như ngay lập tức. AWS phân vùng các dịch vụ mà nó cung cấp thành các vùng (region) và vùng khả dụng (Availability Zone - AZ). Các vùng ánh xạ đến các khu vực địa lý (như Virginia, California, Oregon) và AZ cung cấp thêm dự phòng và cô lập trong một vùng duy nhất. Hình bên dưới hoàn toàn là giả định (nhưng v...

Kiến trúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 3: Continuous Intelligence và AI thời gian thực

Khi hệ thống đã có khả năng thu thập dữ liệu liên tục và phân tích sự kiện theo thời gian thực, câu hỏi tiếp theo là: liệu máy tính có thể tự đưa ra quyết định thay con người hay không? Kiếntrúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 1: Giá trị củaStreaming và Kiến trúc Streaming Ingest Kiếntrúc cho xử lý dữ liệu luồng (Streaming Architecture) - Phần 2: Real-timeDashboards và Stream Analytics Đó chính là mục tiêu của Continuous Intelligence – giai đoạn cao nhất trong kiến trúc xử lý dữ liệu luồng. Thay vì chỉ hiển thị cảnh báo trên dashboard, hệ thống có thể liên tục huấn luyện mô hình AI, thực hiện suy luận (Inference) ngay khi dữ liệu phát sinh và tự động kích hoạt các hành động phù hợp. Trong bài viết cuối cùng của series Kiến trúc cho xử lý dữ liệu luồng , chúng ta sẽ cùng khám phá cách xây dựng một hệ thống dữ liệu thông minh có khả năng học hỏi, thích nghi và phản ứng gần như theo thời gian thực. 5. Continuous Intelligence (Trí tuệ liên tục) Đây là cấp...

Reinforcement Learning (Học tăng cường) là gì? Hiểu bản chất qua giải thích về cách AI tự học

Nếu học có giám sát giúp AI học từ những đáp án đã biết trước, còn học không giám sát giúp AI tự khám phá cấu trúc của dữ liệu, thì học tăng cường (Reinforcement Learning - RL) lại đi theo một hướng hoàn toàn khác: AI học bằng chính trải nghiệm của mình. Deep Reinforcement Learning là gì? Vì sao AI cần kết hợp Học sâu với Học tăng cường Reinforcement Learning (Học tăng cường) hoạt động như thế nào? Dynamic Programming, Monte Carlo và các ứng dụng thực tế Thay vì được hướng dẫn từng bước, tác nhân (agent) liên tục tương tác với môi trường, thử nhiều hành động khác nhau và nhận phần thưởng hoặc hình phạt. Sau hàng nghìn, thậm chí hàng triệu lần thử nghiệm, AI dần học được chiến lược tối ưu để đạt mục tiêu. Trong bài viết này, chúng ta sẽ cùng tìm hiểu bản chất của học tăng cường, các thành phần quan trọng như Agent, Environment, Reward, Action và Observation, đồng thời minh họa bằng ví dụ trực quan để thấy AI thực sự "học" như thế nào. 1. Học có giám sát (Supervised learni...