[ad_1]
Hãy tưởng tượng điều này. Chúng tôi có một quy trình máy học đầy đủ chức năng và nó hoàn hảo. Vì vậy, chúng tôi quyết định đẩy nó vào môi trường sản xuất. Tất cả đều ổn trong quá trình sản xuất và một ngày nọ, một thay đổi nhỏ xảy ra ở một trong các thành phần tạo ra dữ liệu đầu vào cho quy trình của chúng tôi và quy trình đó bị hỏng. Ối!!!
Tại sao điều này xảy ra??
Bởi vì các mô hình ML phụ thuộc rất nhiều vào dữ liệu đang được sử dụng, hãy nhớ câu nói cổ xưa, Rubbish In, Garabage Out. Với dữ liệu phù hợp, quy trình hoạt động tốt, bất kỳ thay đổi nào và quy trình đều có xu hướng không ổn định.
Dữ liệu được truyền vào đường ống chủ yếu được tạo ra thông qua các hệ thống tự động, do đó làm giảm khả năng kiểm soát đối với loại dữ liệu được tạo ra.
Vậy ta phải làm sao?
Xác thực dữ liệu là câu trả lời.
Xác thực dữ liệu là hệ thống giám hộ sẽ xác minh xem dữ liệu có ở định dạng phù hợp để quy trình sử dụng hay không.
Đọc bài viết này để hiểu lý do tại sao việc xác thực lại quan trọng trong quy trình ML và 5 giai đoạn xác thực máy học.
Xác thực dữ liệu TensorFlow (TFDV), là một phần của hệ sinh thái TFX, có thể được sử dụng để xác thực dữ liệu trong đường ống ML.
TFDV tính toán số liệu thống kê mô tả, lược đồ và xác định các điểm bất thường bằng cách so sánh dữ liệu huấn luyện và dữ liệu phục vụ. Điều này đảm bảo dữ liệu đào tạo và cung cấp nhất quán và không phá vỡ hoặc tạo ra các dự đoán ngoài ý muốn trong quy trình.
Mọi người tại Google muốn TFDV được sử dụng ngay từ giai đoạn đầu tiên trong quy trình ML. Do đó họ đảm bảo rằng TFDV có thể được sử dụng với máy tính xách tay. Chúng tôi sẽ làm điều tương tự ở đây.
Để bắt đầu, chúng ta cần cài đặt thư viện xác thực dữ liệu tenorflow-data bằng pip. Tốt nhất là tạo một môi trường ảo và bắt đầu với quá trình cài đặt của bạn.
Một lưu ý thận trọng: Trước khi cài đặt, hãy đảm bảo tính tương thích của phiên bản trong thư viện TFX
pip set up tensorflow-data-validation
Sau đây là các bước chúng tôi sẽ thực hiện trong quá trình xác thực dữ liệu:
- Tạo số liệu thống kê từ dữ liệu đào tạo
- Lược đồ suy luận từ dữ liệu đào tạo
- Tạo số liệu thống kê cho dữ liệu đánh giá và so sánh nó với dữ liệu đào tạo
- Xác định và khắc phục sự bất thường
- Kiểm tra độ lệch và độ lệch dữ liệu
- Lưu lược đồ
Chúng tôi sẽ sử dụng 3 loại bộ dữ liệu ở đây; dữ liệu đào tạo, dữ liệu đánh giá và dữ liệu phục vụ, để mô phỏng việc sử dụng theo thời gian thực. Mô hình ML được huấn luyện bằng cách sử dụng dữ liệu huấn luyện. Dữ liệu đánh giá hay còn gọi là dữ liệu thử nghiệm là một phần dữ liệu được chỉ định để kiểm tra mô hình ngay khi giai đoạn huấn luyện hoàn thành. Dữ liệu phục vụ được trình bày cho mô hình trong môi trường sản xuất để đưa ra dự đoán.
Toàn bộ mã được thảo luận trong bài viết này có sẵn trong kho lưu trữ GitHub của tôi. Bạn có thể tải nó xuống từ đây.
Chúng tôi sẽ sử dụng bộ dữ liệu tàu vũ trụ titanic từ Kaggle. Bạn có thể tìm hiểu thêm và tải xuống tập dữ liệu bằng cách sử dụng này liên kết.
Dữ liệu bao gồm một hỗn hợp của dữ liệu số và phân loại. Nó là một tập dữ liệu phân loại và nhãn lớp là Transported
. Nó giữ giá trị Đúng hoặc Sai.
Quá trình nhập cần thiết đã được thực hiện và đường dẫn cho tệp csv đã được xác định. Tập dữ liệu thực tế chứa dữ liệu huấn luyện và dữ liệu kiểm tra. Tôi đã tự giới thiệu một số lỗi và lưu tệp dưới dạng ‘titanic_test_anomalies.csv’ (Tệp này không có sẵn trong Kaggle. Bạn có thể tải xuống từ kho GitHub của tôi liên kết).
Ở đây, chúng tôi sẽ sử dụng ANOMALOUS_DATA làm dữ liệu đánh giá và TEST_DATA làm dữ liệu phục vụ.
import tensorflow_data_validation as tfdv
import tensorflow as tfTRAIN_DATA = '/information/titanic_train.csv'
TEST_DATA = '/information/titanic_test.csv'
ANOMALOUS_DATA = '/information/titanic_test_anomalies.csv'
Bước đầu tiên là phân tích dữ liệu huấn luyện và xác định các thuộc tính thống kê của nó. TFDV có generate_statistics_from_csv
chức năng đọc trực tiếp dữ liệu từ tệp csv. TFDV cũng có generate_statistics_from_tfrecord
hoạt động nếu bạn có dữ liệu dưới dạng TFRecord
.
Các visualize_statistics
Hàm trình bày bản tóm tắt 8 điểm, cùng với các biểu đồ hữu ích có thể giúp chúng ta hiểu được số liệu thống kê cơ bản của dữ liệu. Đây được gọi là chế độ xem Khía cạnh. Một số chi tiết quan trọng cần chúng ta chú ý được đánh dấu màu đỏ. Tải các tính năng khác để phân tích dữ liệu có sẵn ở đây. Chơi xung quanh và tìm hiểu nó tốt hơn.
# Generate statistics for coaching information
train_stats=tfdv.generate_statistics_from_csv(TRAIN_DATA)
tfdv.visualize_statistics(train_stats)
Ở đây, chúng tôi thấy các giá trị còn thiếu trong các tính năng Age và RoomService cần được bổ sung. Chúng tôi cũng thấy rằng RoomService có 65,52% số 0. Đó là cách dữ liệu cụ thể này được phân phối, vì vậy chúng tôi không coi đó là điều bất thường và chúng tôi sẽ tiếp tục.
Khi tất cả các vấn đề đã được giải quyết thỏa đáng, chúng ta suy ra lược đồ bằng cách sử dụng infer_schema
chức năng.
schema=tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)
Lược đồ thường được trình bày thành hai phần. Phần đầu tiên trình bày các chi tiết như kiểu dữ liệu, sự hiện diện, hiệu lực và miền của nó. Phần thứ hai trình bày các giá trị mà miền cấu thành.
Đây là lược đồ thô ban đầu, chúng tôi sẽ tinh chỉnh lược đồ này trong các bước sau.
Bây giờ chúng tôi lấy dữ liệu đánh giá và tạo số liệu thống kê. Chúng tôi cần hiểu cách xử lý các điểm bất thường, vì vậy chúng tôi sẽ sử dụng ANOMALOUS_DATA làm dữ liệu đánh giá của mình. Chúng tôi đã đưa những điểm bất thường vào dữ liệu này theo cách thủ công.
Sau khi tạo số liệu thống kê, chúng tôi trực quan hóa dữ liệu. Trực quan hóa có thể chỉ được áp dụng cho dữ liệu đánh giá (giống như chúng tôi đã làm đối với dữ liệu huấn luyện), tuy nhiên, sẽ hợp lý hơn khi so sánh số liệu thống kê của dữ liệu đánh giá với số liệu thống kê huấn luyện. Bằng cách này, chúng ta có thể hiểu dữ liệu đánh giá khác với dữ liệu huấn luyện như thế nào.
# Generate statistics for analysis informationeval_stats=tfdv.generate_statistics_from_csv(ANOMALOUS_DATA)
tfdv.visualize_statistics(lhs_statistics = train_stats, rhs_statistics = eval_stats,
lhs_name = "Coaching Information", rhs_name = "Analysis Information")
Ở đây chúng ta có thể thấy rằng tính năng RoomService không có trong dữ liệu đánh giá (Cờ đỏ lớn). Các tính năng khác có vẻ khá ổn vì chúng thể hiện sự phân bố tương tự như dữ liệu huấn luyện.
Tuy nhiên, việc quan sát là chưa đủ trong môi trường sản xuất, vì vậy chúng tôi sẽ yêu cầu TFDV thực sự phân tích và báo cáo xem mọi thứ có ổn không.
Bước tiếp theo của chúng tôi là xác thực số liệu thống kê thu được từ dữ liệu đánh giá. Chúng tôi sẽ so sánh nó với lược đồ mà chúng tôi đã tạo bằng dữ liệu huấn luyện. Các display_anomalies
sẽ cung cấp cho chúng ta cái nhìn tổng quan theo bảng về các điểm bất thường mà TFDV đã xác định cũng như mô tả.
# Figuring out Anomalies
anomalies=tfdv.validate_statistics(statistics=eval_stats, schema=schema)
tfdv.display_anomalies(anomalies)
Từ bảng, chúng tôi thấy rằng dữ liệu đánh giá của chúng tôi thiếu 2 cột (Transported và RoomService), tính năng Đích có giá trị bổ sung gọi là ‘Bất thường’ trong miền của nó (không có trong dữ liệu đào tạo), tính năng CryoSleep và VIP có giá trị ‘TRUE’ và ‘FALSE’ không có trong dữ liệu huấn luyện, cuối cùng, 5 đối tượng chứa các giá trị số nguyên, trong khi lược đồ mong đợi các giá trị dấu phẩy động.
Đó là một số ít. Vậy hãy bắt tay vào làm việc thôi.
Có hai cách để khắc phục sự bất thường; xử lý dữ liệu đánh giá (thủ công) để đảm bảo nó phù hợp với lược đồ hoặc sửa đổi lược đồ để đảm bảo những bất thường này được chấp nhận. Một lần nữa, chuyên gia về miền phải quyết định xem điểm bất thường nào có thể chấp nhận được và điểm bất thường nào bắt buộc phải xử lý dữ liệu.
Chúng ta hãy bắt đầu với tính năng ‘Đích’. Chúng tôi đã tìm thấy giá trị mới ‘Bất thường’, giá trị này bị thiếu trong danh sách tên miền trong dữ liệu đào tạo. Hãy để chúng tôi thêm nó vào miền và nói rằng đó cũng là một giá trị có thể chấp nhận được đối với đối tượng địa lý.
# Including a brand new worth for 'Vacation spot'
destination_domain=tfdv.get_domain(schema, 'Vacation spot')
destination_domain.worth.append('Anomaly')anomalies=tfdv.validate_statistics(statistics=eval_stats, schema=schema)
tfdv.display_anomalies(anomalies)
Chúng tôi đã loại bỏ điểm bất thường này và danh sách điểm bất thường không hiển thị nó nữa. Chúng ta hãy chuyển sang phần tiếp theo.
Nhìn vào miền VIP và CryoSleep, chúng ta thấy rằng dữ liệu huấn luyện có giá trị chữ thường trong khi dữ liệu đánh giá có cùng giá trị viết hoa. Một tùy chọn là xử lý trước dữ liệu và đảm bảo rằng tất cả dữ liệu được chuyển đổi thành chữ thường hoặc chữ hoa. Tuy nhiên, chúng tôi sẽ thêm các giá trị này vào miền. Vì VIP và CryoSleep sử dụng cùng một bộ giá trị (đúng và sai), nên chúng tôi đặt miền của CryoSleep để sử dụng miền của VIP.
# Including information in CAPS to area for VIP and CryoSleepvip_domain=tfdv.get_domain(schema, 'VIP')
vip_domain.worth.lengthen(('TRUE','FALSE'))
# Setting area of 1 characteristic to a different
tfdv.set_domain(schema, 'CryoSleep', vip_domain)
anomalies=tfdv.validate_statistics(statistics=eval_stats, schema=schema)
tfdv.display_anomalies(anomalies)
Việc chuyển đổi các tính năng số nguyên thành float là khá an toàn. Vì vậy, chúng tôi yêu cầu dữ liệu đánh giá suy ra các loại dữ liệu từ lược đồ của dữ liệu huấn luyện. Điều này giải quyết vấn đề liên quan đến kiểu dữ liệu.
# INT might be safely transformed to FLOAT. So we will safely ignore it and ask TFDV to make use of schemachoices = tfdv.StatsOptions(schema=schema, infer_type_from_schema=True)
eval_stats=tfdv.generate_statistics_from_csv(ANOMALOUS_DATA, stats_options=choices)
anomalies=tfdv.validate_statistics(statistics=eval_stats, schema=schema)
tfdv.display_anomalies(anomalies)
Cuối cùng, chúng tôi kết thúc với tập hợp bất thường cuối cùng; Thiếu 2 cột trong dữ liệu Đào tạo trong dữ liệu Đánh giá.
‘Đã vận chuyển’ là nhãn lớp và rõ ràng là nó sẽ không có sẵn trong dữ liệu Đánh giá. Để giải quyết các trường hợp mà chúng tôi biết rằng các tính năng đào tạo và đánh giá có thể khác nhau, chúng tôi có thể tạo nhiều môi trường. Ở đây chúng tôi tạo ra một môi trường Đào tạo và Phục vụ. Chúng tôi xác định rằng tính năng ‘Đã vận chuyển’ sẽ khả dụng trong môi trường Đào tạo nhưng sẽ không khả dụng trong môi trường Cung cấp.
# Transported is the category label and won't be out there in Analysis information.
# To point that we set two environments; Coaching and Servingschema.default_environment.append('Coaching')
schema.default_environment.append('Serving')
tfdv.get_feature(schema, 'Transported').not_in_environment.append('Serving')
serving_anomalies_with_environment=tfdv.validate_statistics(
statistics=eval_stats, schema=schema, surroundings='Serving')
tfdv.display_anomalies(serving_anomalies_with_environment)
‘RoomService’ là tính năng bắt buộc không có trong môi trường Cung cấp. Những trường hợp như vậy đòi hỏi sự can thiệp thủ công của các chuyên gia tên miền.
Tiếp tục giải quyết vấn đề cho đến khi bạn nhận được kết quả này.
Tất cả những bất thường đã được giải quyết
Bước tiếp theo là kiểm tra độ lệch và độ lệch. Sự lệch xảy ra do sự bất thường trong việc phân phối dữ liệu. Ban đầu, khi một mô hình được huấn luyện, các dự đoán của nó thường hoàn hảo. Tuy nhiên, theo thời gian, sự phân bố dữ liệu thay đổi và lỗi phân loại sai bắt đầu gia tăng, hiện tượng này gọi là trôi dạt. Những vấn đề này đòi hỏi phải đào tạo lại mô hình.
Khoảng cách L-vô cực được sử dụng để đo độ lệch và độ lệch. Giá trị ngưỡng được đặt dựa trên khoảng cách L-vô cực. Nếu sự khác biệt giữa các đặc điểm được phân tích trong môi trường đào tạo và phục vụ vượt quá ngưỡng nhất định thì đặc điểm đó được coi là đã bị lệch. Một cách tiếp cận dựa trên ngưỡng tương tự được áp dụng cho độ lệch. Trong ví dụ của chúng tôi, chúng tôi đã đặt mức ngưỡng là 0,01 cho cả độ lệch và độ lệch.
serving_stats = tfdv.generate_statistics_from_csv(TEST_DATA)# Skew Comparator
spa_analyze=tfdv.get_feature(schema, 'Spa')
spa_analyze.skew_comparator.infinity_norm.threshold=0.01
# Drift Comparator
CryoSleep_analyze=tfdv.get_feature(schema, 'CryoSleep')
CryoSleep_analyze.drift_comparator.infinity_norm.threshold=0.01
skew_anomalies=tfdv.validate_statistics(statistics=train_stats, schema=schema,
previous_statistics=eval_stats,
serving_statistics=serving_stats)
tfdv.display_anomalies(skew_anomalies)
Chúng ta có thể thấy rằng mức độ lệch do ‘Spa’ thể hiện là có thể chấp nhận được (vì nó không được liệt kê trong danh sách bất thường), tuy nhiên, ‘CryoSleep’ thể hiện mức độ lệch cao. Khi tạo quy trình tự động, những điểm bất thường này có thể được sử dụng làm yếu tố kích hoạt quá trình đào tạo lại mô hình tự động.
Sau khi giải quyết tất cả các điểm bất thường, lược đồ có thể được lưu dưới dạng tạo phẩm hoặc có thể được lưu trong kho siêu dữ liệu và có thể được sử dụng trong quy trình ML.
# Saving the Schema
from tensorflow.python.lib.io import file_io
from google.protobuf import text_formatfile_io.recursive_create_dir('schema')
schema_file = os.path.be part of('schema', 'schema.pbtxt')
tfdv.write_schema_text(schema, schema_file)
# Loading the Schema
loaded_schema= tfdv.load_schema_text(schema_file)
loaded_schema
Bạn có thể tải xuống sổ ghi chép và các tệp dữ liệu từ kho lưu trữ GitHub của tôi bằng cách sử dụng liên kết
Bạn có thể đọc các bài viết sau để biết lựa chọn của mình là gì và cách chọn khung phù hợp cho dự án quy trình ML của bạn
Cảm ơn đã đọc bài viết của tôi. Nếu bạn thích nó, hãy khuyến khích bằng cách vỗ tay cho tôi vài cái, và nếu bạn ở đầu bên kia của quan điểm, hãy cho tôi biết những gì có thể cải thiện trong phần nhận xét. Ciao.
Trừ khi có ghi chú khác, tất cả hình ảnh đều là của tác giả.
[ad_2]
Source link