MLflowมีข้อดีหลายประการในการพัฒนาและจัดการโมเดลการจัดหมวดหมู่ข้อความ:
- การติดตามการทดสอบ: MLflow ช่วยให้คุณสามารถบันทึกและติดตามการรันการฝึกโมเดล ไฮเปอร์พารามิเตอร์ และเมตริกประสิทธิภาพ วิธีนี้ช่วยให้คุณเก็บบันทึกการทดสอบของคุณได้อย่างครอบคลุม ทำให้ง่ายต่อการทำซ้ำและเปรียบเทียบผลลัพธ์
- การกำหนดเวอร์ชันของโมเดล: ด้วย MLflow คุณสามารถควบคุมเวอร์ชันของโมเดลได้ ทำให้คุณสามารถจัดการการวนซ้ำโมเดลหลายรอบ และเลือกโมเดลที่มีประสิทธิภาพดีที่สุดสำหรับการปรับใช้
- การทำงานร่วมกัน: MLflow ส่งเสริมการทำงานร่วมกันอย่างราบรื่นระหว่างสมาชิกในทีม ด้วยการแชร์การทดลอง MLflow ทุกคนสามารถเข้าถึง วิเคราะห์ และสร้างต่อจากงานที่ผู้อื่นทำเสร็จแล้ว
- ความสามารถในการทำซ้ำ: ด้วยการรักษาบันทึกโดยละเอียดเกี่ยวกับสภาพแวดล้อม ข้อมูล และโค้ดที่ใช้ระหว่างการฝึกโมเดล MLflow จึงอำนวยความสะดวกในการสร้างผลลัพธ์ขึ้นมาใหม่ แม้แต่ในระบบที่แตกต่างกัน
- ความยืดหยุ่นในการปรับใช้: MLflow รองรับตัวเลือกการใช้งานที่หลากหลาย ทำให้ง่ายต่อการให้บริการโมเดลที่ผ่านการฝึกอบรมของคุณบนแพลตฟอร์มที่แตกต่างกัน ไม่ว่าจะเป็นในองค์กรหรือในระบบคลาวด์
การตั้งค่า MLflow
ก่อนที่จะเจาะลึกถึงการจัดหมวดหมู่ข้อความ เรามาตั้งค่า MLflow ในสภาพแวดล้อมของเรากันก่อน ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Python แล้วใช้คำสั่งต่อไปนี้:
pip install mlflow mlflow ui
การสร้างแบบจำลองการจัดประเภทข้อความ
เพื่อจุดประสงค์ของบทช่วยสอนนี้ เราจะสร้างแบบจำลองการจัดหมวดหมู่ข้อความโดยใช้ชุดข้อมูลข่าวที่สร้างโดย ScrapeHero ซึ่งเป็นหนึ่งในบริษัทขูดเว็บชั้นนำของโลก ScrapeHero มีความสามารถในการปรับขนาดและรวบรวมข้อมูลอินเทอร์เน็ตเพื่อหาข้อมูลที่เกี่ยวข้องเพื่อช่วยฝึกโมเดล AI ของคุณ ชุดข้อมูลข่าวนี้สร้างขึ้นจาก Marketplace API ของ ScrapeHero Cloud ชุดข้อมูลภายใต้การดูแลนี้แบ่งออกเป็นเทนนิส การเมือง อาชญากรรม บันเทิง และธุรกิจ
เราจะใช้ ktrainและ scikit-learn สำหรับงานจำแนกประเภทนี้ ด้านล่างนี้คือโครงร่างของขั้นตอนที่เราจะปฏิบัติตาม:
- โหลดและประมวลผลชุดข้อมูลล่วงหน้า (เราจะโหลดชุดข้อมูลที่ประมวลผลล่วงหน้า)
import pandas as pd try: df = pd.read_csv("data/sample.csv") classes = list(set(df.label.tolist())) except Exception as e: logger.exception( "Unable to load training & test CSV, check the file path. Error: %s", e )
- แบ่งข้อมูลออกเป็นชุดการฝึกอบรม การทดสอบ และการตรวจสอบความถูกต้อง
from sklearn import model_selection train_x, valid_x, train_y, valid_y = model_selection.train_test_split(df['content'].tolist(), df['label'].tolist()) trn, val, preproc = text.texts_from_array(x_train=train_x, y_train=train_y, x_test=valid_x, y_test=valid_y, class_names=classes, preprocess_mode='distilbert', maxlen=256, max_features=10000)
- ฝึกฝนโมเดลการจัดหมวดหมู่ข้อความโดยใช้ distilbert
model = text.text_classifier('distilbert', train_data=trn, preproc=preproc) learner = ktrain.get_learner(model, train_data=trn, val_data=val, batch_size=6, use_multiprocessing=True)
- ค้นหาอัตราการเรียนรู้ที่เหมาะสมที่สุดสำหรับชุดข้อมูลของเราโดยใช้ฟังก์ชันในตัวของ ktrain
learner.lr_find(max_epochs=2) # finding the learning rate # The optimal learning rate is `2e-5`.
- บันทึกโมเดลและพารามิเตอร์ที่เกี่ยวข้อง เช่น ความแม่นยำ คะแนน f1 อัตราการเรียนรู้ และยุคโดยใช้ MLflow
ติดตามด้วย MLflow
เมื่อคุณมีโมเดลพร้อมแล้ว คุณสามารถบันทึกการทดลองได้โดยใช้ MLflow ซึ่งรวมถึงพารามิเตอร์โมเดลการบันทึก เมตริก และอาร์ติแฟกต์ (เช่น โมเดลที่บันทึกไว้ พล็อต) ต่อไปนี้เป็นข้อมูลโค้ดเพื่อแสดงกระบวนการ:
import mlflow import mlflow.sklearn from sklearn.metrics import accuracy_score, f1_score lrate = float(sys.argv[1]) if len(sys.argv) > 1 else 2e-5 epochs = int(sys.argv[2]) if len(sys.argv) > 2 else 1 print("training ktrain distilbert model (lrate={:f}, epochs={:f}):".format(lrate, epochs)) mlflow.set_experiment("text_classification_ktrain") experiment = mlflow.get_experiment_by_name("text_classification_ktrain") with mlflow.start_run(experiment_id=experiment.experiment_id, nested=True): learner.fit_onecycle(lrate, epochs) predictor = ktrain.get_predictor(learner.model, preproc) y_pred = predictor.predict(valid_x) accuracy = accuracy_score(valid_y, y_pred) f1 = f1_score(valid_y, y_pred, average="weighted") # logging the metrics and parameters to the mlflow mlflow.log_metric("accuracy", round(accuracy, 4)) mlflow.log_metric("f1-score", round(f1, 4)) mlflow.log_param("lrate", lrate) mlflow.log_param("epochs", epochs) # save the model mlflow.sklearn.log_model(learner, "text_classification1")
คุณสามารถรับโค้ดการทำงานที่สมบูรณ์ได้จาก repo github นี้
เรียกใช้ไฟล์หลัก distilbertTraining.py โดยใช้คำสั่ง:
python distilbertTraining.py 2e-6 1
เมื่อเรารันคำสั่งข้างต้นได้สำเร็จ โฟลเดอร์ mlruns โฟลเดอร์ experiment Id โฟลเดอร์ run Id พร้อมด้วยส่วนต่างๆ เมตริก และพารามิเตอร์จะถูกสร้างขึ้นโดยอัตโนมัติ ดังต่อไปนี้
การเปรียบเทียบการทดลองและการปรับใช้
หลังจากบันทึกการรันหลายครั้งด้วยโมเดลหรือไฮเปอร์พารามิเตอร์ที่แตกต่างกัน คุณสามารถเปรียบเทียบประสิทธิภาพได้โดยใช้ MLflow UI การแสดงภาพนี้ช่วยให้คุณมีข้อมูลประกอบการตัดสินใจว่าจะเลือกโมเดลใดสำหรับการปรับใช้
เราได้ฝึกอบรมโมเดลสองโมเดลที่มีอัตราการเรียนรู้ที่แตกต่างกัน 2e-5 และ 2e-6 อัตราการเรียนรู้ 2e-5 นั้นเหมาะสมที่สุดและสร้างอัตราความแม่นยำ 93.5% ในขณะที่อัตราการเรียนรู้ 2e-6 สร้างได้เพียง 63.17%
ค้นหาโมเดลที่ดีที่สุดโดยใช้การติดตาม MLflow ผ่านโค้ด
from mlflow.tracking import MlflowClient import mlflow import numpy as np # If you called your experiment something else, replace here current_experiment=dict(mlflow.get_experiment_by_name("text_classification_ktrain")) experiment_id=current_experiment['experiment_id'] # To access MLFlow stuff we need to work with MlflowClient client = MlflowClient() # Searches runs for a specific attribute runs = client.search_runs([experiment_id]) print("total runs", len(runs), "experiment id", experiment_id) # Select the best run according to test_accuracy metric best_run = np.argmax([f.data.metrics['accuracy'] for f in runs]) best_auc = np.round(runs[best_run].data.metrics['accuracy'], 4) best_runname = runs[best_run].info.run_name best_runid = runs[best_run].info.run_id print(f"Experiment had {len(runs)} rounds") print(f"Best run name - {best_runname} with run id - {best_runid} has the accuracy of {best_auc}")
เราสามารถตรวจสอบข้ามได้ที่นี่
นอกเหนือจากการค้นหาโมเดลที่ดีที่สุดแล้ว เราสามารถลงทะเบียนโมเดลและเลื่อนระดับเป็นการใช้งานจริงผ่านโค้ด Python
เมื่อพูดถึงการปรับใช้ MLflow มีตัวเลือกมากมาย รวมถึงการให้บริการโมเดลผ่าน REST API หรือการผสานรวมเข้ากับเว็บแอปพลิเคชัน
เอกสารประกอบ MLflow มีตัวอย่างมากมายและสามารถดูได้ที่นี่»
คุณสามารถรับโค้ดที่สมบูรณ์ของโมเดลการจัดหมวดหมู่ข้อความที่คล่องตัวด้วย MLflow ที่กล่าวถึงข้างต้นได้จาก GitHub repo นี้
บทสรุป
MLflow มอบชุดเครื่องมืออันทรงพลังสำหรับการสร้างและจัดการโมเดล ML ด้วยการใช้ประโยชน์จากการติดตามการทดลอง การกำหนดเวอร์ชันโมเดล และฟีเจอร์การทำงานร่วมกันของ MLflow นักวิทยาศาสตร์ข้อมูลและผู้ปฏิบัติงาน NLP จึงสามารถปรับปรุงขั้นตอนการทำงานของตนได้ ซึ่งนำไปสู่โมเดล ML ที่มีประสิทธิภาพและเชื่อถือได้มากขึ้น
โปรดจำไว้ว่า บล็อกนี้เป็นเพียงเนื้อหาคร่าวๆ ของสิ่งที่ MLflow สามารถทำได้เท่านั้น เมื่อคุณเจาะลึกเข้าไปในโลกของ NLP และการจัดหมวดหมู่ข้อความ MLflow จะกลายเป็นส่วนสำคัญของชุดเครื่องมือ Machine Learning ของคุณอย่างไม่ต้องสงสัย มีความสุขในการปรับปรุงและจัดหมวดหมู่!