Phân tích cảm xúc khách hàng bằng máy học ML.NET Model Builder

Như đã chém gió trong bài cài đặt Visual Studio 2022, ML.NET Model Builder là một công cụ lập trình Máy Học đang được hãng Microsoft và cộng đồng phát triển vô cùng mạnh mẽ, nó là mã nguồn mở và chạy đa nền tảng.

Trong bài này, Tui sẽ hướng dẫn các bạn chi tiết cách dùng ML.NET Model Builder để tạo một dự án phân tích cảm xúc khách hàng.

Tui tóm tắt lại 6 bước cơ bản cho một bài Machine learning dưới đây để các bạn có được mindset trước:

Bước 1 “Chọn kịch bản huấn luyện cho dữ liệu”, tức là tùy vào mục đích mình dùng máy học để xử lý bài toán nào thì mình chọn kịch bản cho phù hợp, ví dụ: Data classification, Value prediction, Image classification, Recommendation …..Microsoft có sẵn các kịch bản này cho mình, chọn cho đúng theo nhu cầu.

Bước 2, “Thiết lập môi trường huấn luyện” Ta có thể cấu hình máy Local cùi bắp vừa chạy vừa khóc ra tiếng miên hoặc sử dụng các cloud như Azure của Microsoft, Google Tensorflow…. trong bài này thì ta dùng local.

Bước 3, “Chuẩn bị dữ liệu huấn luyện”, là các dữ liệu có cấu trúc, được gán nhãn, nó có thể là text file, csv, SQL Server. Nó tùy thuộc vào kịch bản dữ liệu ở bước 1 mà cấu trúc dữ liệu ở bước 3 này nó sẽ khác nhau.

Bước 4, “Tiến hành huấn luyện để tạo mô hình”, bước này máy học sẽ tiến hành chạy xịt khói để huấn luyện dữ liệu, kết quả của quá trình này thường cho ra 4 giá trị output dưới đây:

Best accuracy: Thông số này cho thấy độ chính xác của mô hình tốt nhất mà mô hình tìm thấy. Nếu giá trị này cao có nghĩa là mô hình được dự đoán chính xác hơn trên dữ liệu thử nghiệm.

Best model: Thông số này cho ta biết thuật toán nào hoạt động tốt nhất trong quá trình chạy của Trình tạo mô hình.

Training time: Phần này cho ta biết tổng thời gian đã dành để đào tạo.

Models explored (total): Phần này cho ta biết tổng số mô hình được Model chạy trong khoảng thời gian nhất định.

Bước 5 “Đánh giá mô hình”, thường thì khi huấn luyện xong ta được 1 mô hình có độ chính xác bằng bao nhiêu đó. Và ta cần thử một số dữ liệu đầu vào để đánh giá xem nó hiệu quả như thế nào. Kiểu như xem xét mô hình này có ổn để sử dụng hay không đó mà.

Cuối cùng là Bước 6, “Sử dụng mô hình”, nếu bước 5 OK thì ta sử dụng thôi. Tùy vào các hãng mà cách dùng khác nhau.

Ta bắt đầu nhé.

Lưu ý bài này là của Microsoft đã minh họa, Tui trình bày chi tiết lại hơn cho các bạn dễ hiểu và thao tác được thôi. Chứ Tui cũng kiểu gà mờ không có kiến thức nhiều lắm về máy học đâu, kiểu dạng như ở nhà trọ, đi dép Lào, chạy xe đạp và ngồi uống trà đá mà bày đặt bàn chuyện Taliban nên quản lý đất nước của họ như thế nào (hê hê, đọc cười cho vui để học cho dễ).

Mục đích Bài này là “Khi có 1 nhận xét của khách hàng về sản phẩm nào đó, hỏi nhận xét đó là tích cực hay tiêu cực?“. Ta thường nói cho nó hoa dollar “Phân tích cảm xúc”. Bài này hay, vì nó áp dụng vào kinh doanh nhằm cải thiện chất lượng dịch vụ.

Bây giờ ta tạo 1 dự án Windows App, đặt tên “CamXucApp”, chọn chính xác như dưới đây nha :

Chọn Windows Forms App như ở trên, rồi bấm nút “Next”:

Đặt tên dự án là “CamXucApp” rồi bấm Next.

Chọn “.NET 6.0 (Long-term support)” rồi bấm Create.

Sau khi bấm Create, ta có được cấu trúc hơi bị ngon như dưới đây:

Bước tiếp theo là thêm Machine Learning vào dự án bằng cách: Bấm chuột phải vào Dự án / chọn Add/ Chọn Machine Learning Model…

Màn hình Add New Item sẽ hiển thị ra như bên dưới, tìm tới “Machine Learning Model (ML.NET)”

Mặc định tên nó là “MLModel1.mbconfig”, bây giờ bạn đổi tên qua “CamXucModel.mbconfig” như hình bên dưới:

Nhấn nút “Add” để tạo file mbconfig. File này chỉ đơn giản là một tệp JSON theo dõi trạng thái của giao diện người dùng.

Sau khi bấm “Add”, ta có giao diện như dưới đây:

Để tạo Model thì trước tiên ta phải chọn Kịch bản.

Nó cung cấp 1 số loại kịch bản cho Data classification, Value prediction, Image classification, Recommendation…, Microsoft sẽ dùng Automated ML để train và tạo ra mô hình tốt nhất cho dữ liệu của bạn

Bài “Phân tích cảm xúc” nó cần biết là Tích cực hay tiêu cực, nên nó thuộc nhóm phân loại dữ liệu. Do đó ta chọn kịch bản cho Data classification.

Sau khi chọn Data classification. Thì ta cần chọn môi trường để train. Một số kịch bản Microsoft hỗ trợ train trên Azure và Local. Tuy nhiên với loại Data classification này thì hiện nay Microsoft mới hỗ trợ train phía Local, tương lai chắc là support cả bên Azure

Thế thì ta chọn Local (CPU) sau đó nhấn nút “Next step” để qua mục data:

Ta sẽ sử dụng dữ liệu của UCI Machine Learning Repository, link tải ở đây.

Dữ liệu là file nén “sentiment labelled sentences.zip“, ta tải nó về và giải nén nó ra.

Ta để ý file “yelp_labelled.txt” là dữ liệu được gán nhãn, nó đánh giá về 1 nhà hàng. Cấu trúc của nó là text file, mỗi dòng có 2 phần: Phần comment là chuỗi, phần số đằng sau là gán nhãn nó tích cực (1), tiêu cực (0).

Tiếp theo ta cần đưa dữ liệu này vào mô hình để train. Ta có thể kết nói tới file hoặc là SQL Server. bài này là text file

Trong mục Browse bạn trỏ cái file “yelp_labelled.txt” đã giải nén :

Mục “Column to predict” ->Chọn Col1 . Col1 là Label mà ta cần dự đoán. Ngoài ra ta có thể hiệu chỉnh các đặc trưng của Column bằng cách nhấn vào “Advanced data options..” nhưng ví dụ này đừng quan tâm

Mục Data preview cho ta thấy được dữ liệu trong file. Col0 là comment, col1 là label

Bây giờ nhấn “Next step” để qua bước Train.

Model Builder đánh giá nhiều mô hình với các thuật toán và cài đặt khác nhau dựa trên lượng thời gian đào tạo được đưa ra để xây dựng mô hình hoạt động tốt nhất.

Mục Time to train (second) là thời gian mà ta mong muốn nó train bao lâu, ta có thể đổi giá trị khác, ví dụ như 120 giây. Tuy nhiên với dữ liệu lớn thì Microsoft sẽ không quan tâm bạn nhập thế nào, nó tự động điều chỉnh thời gian phù hợp với dữ liệu để ra được mô hình tốt nhất.

Sau đó ta bấm “Start training“, bạn thấy nó sẽ đếm ngược, bạn chờ nhé….

Đây là kết quả sau khi train gần xong :

Đây là kết quả sau khi train xong:

Best accuracy: Thông số này cho thấy độ chính xác của mô hình tốt nhất mà mô hình tìm thấy. Giá trị xác cao có nghĩa là mô hình được dự đoán chính xác hơn trên dữ liệu thử nghiệm. Ở trên nó là 81.63%, tương đối lắm, dĩ nhiên bạn có thể khác Tui

Best model: Thông số này cho ta biết thuật toán nào hoạt động tốt nhất trong quá trình chạy của Trình tạo mô hình.

Training time: Phần này cho ta biết tổng thời gian đã dành để đào tạo.

Models explored (total): Phần này cho ta biết tổng số mô hình được Model chạy trong khoảng thời gian nhất định.

Bạn thấy nó sẽ tạo ra 2 code – behinde: CamXucModel.consumption.cs và CamXucModel.training.cs. Đồng thời 1 file nén “CamXucModel.zip” cũng dược tao ra, đó là mô hình của chương trình.

Các file này nó tự nằm ở đây trong dự án (ở CamXucModel.mbconfig bạn bấm vào hình tam giác đằng trước ra, bạn sẽ thấy 3 file này):

CamXucModel.consumption.cs: File này chứa các lớp đầu vào và đầu ra của mô hình và một phương thức Predict có thể được sử dụng để sử dụng mô hình.

CamXucModel.training.cs: File này chứa đường dẫn huấn luyện (biến đổi dữ liệu, thuật toán và các tham số thuật toán) được sử dụng để huấn luyện mô hình cuối cùng.

CamXucModel.zip: File này là mô hình ML.NET được đào tạo, là một file zip đã được serialized.

Bước tiếp theo ta sẽ đánh giá mô hình bằng cách vào “Evaluate” hay bấm nút Next step

Thấy mục “Try your model”, sameple data có hiển ở col0 là “Wow… Loved this place.” Ta thử bấm nút “Predict” xem câu này là tích cực hay tiêu cực:

Kết quả 1 (tích cực 77%), 0 tiêu cực (23%) . Kết quả khá hợp lý

Bây giờ Tui thử đại 1 câu lạ hoắc “I love Mr Thanh”:

1 (Tích cực) chiếm 90%, 0 (tiêu cực) chiếm 10%. Cũng khá hợp lý.

Bây giờ Tui thử 1 câu lạ hoắc khác “I hate Mr Thanh”:

Mô hình cho ra kết quả, 1( tích cực) 56%, 0(tiêu cực) 44%. Chắc là cũng hơi chuối, nhưng kệ xác nó vì test chơi thôi, có chữ “Thanh” là tích cực rồi. Với thường ta dùng dữ liệu trong file kia để test.

Tiếp theo là “Consume”, bước sử dụng mô hình

Bấm Next Step, Microsoft hiển thị 1 số code cho ta test :

Bấm “Copy” để lấy code đưa vào dự án gọi.

//Load sample data
var sampleData = new CamXucModel.ModelInput()
{
    Col0 = @"Wow... Loved this place.",
};

//Load model and predict output
var result = CamXucModel.Predict(sampleData);

Ta thiết kế giao diện cho phần mềm này như sau:

Bây giờ double click vào nút “Xem kết quả” để coding gọi mô hình máy học:

namespace CamXucApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnPredict_Click(object sender, EventArgs e)
        {
            //Load sample data
            var sampleData = new CamXucModel.ModelInput()
            {
                Col0 = txtReview.Text
            };

            //Load model and predict output
            var result = CamXucModel.Predict(sampleData);
            lblPositive.Text ="Tin này "+ Math.Round(result.Score[0]*100,2) + "% tích cực";
            lblNagative.Text = "Tin này " + Math.Round(result.Score[1] * 100, 2) + "% tiêu cực";

        }
    }
}

Chạy phần mềm lên để Test:

Trong ô nhập liệu bạn nhập các nhận xét sau đó bấm nút “Xem kết quả”, chương trình sẽ cho biết nhận xét này chiếm bao nhiêu % tích cực và bao nhiêu % tiêu cực. Giá trị này vô cùng hữu ích khi bạn làm bên dịch vụ, từ thông số này để biết cách mà cải thiện dịch vụ của mình cho tốt hơn. Bạn có thể kiểm tra cấu trúc dữ liệu của họ để tự tạo ra dữ liệu riêng cho mình.

Như vậy là tới đây Tui đã hướng dẫn xong chi tiết từng bước quá trình dùng máy học ML.NET Model Builder để Phân tích cảm xúc khách hàng. Tui nghĩ nó cũng là tương lai nên các bạn cũng dành thời gian nghiên cứu thêm các mô hình khác nâng cao hơn, để có thể sử dụng nhuần nhuyễn các thư viện máy học của Microsoft. các sản phẩm của họ rất là đỉnh cao.

Nếu chưa biết gì về lập trình C# thì bạn có thể đăng ký 3 khóa học dưới này, khá chi tiết và dễ hiểu:

1) C# cơ bản: https://unica.vn/toan-tap-ngon-ngu-lap-trinh-c?aff=11929
2) C# nâng cao: https://unica.vn/lap-trinh-winform-voi-c-10-ung-dung?aff=11929
3) Tăng tốc lập trình với LINQ: https://unica.vn/lap-trinh-linq-toan-tap?aff=11929

Source code bạn tải ở đây: https://www.mediafire.com/file/32lw325rjqtgbz2/CamXucApp.rar/file

Nếu cảm thấy hữu ích thì hãy Ủng hộ Tui 1 ly cafe sữa đá lề đường 

STK: 0101146302
Chủ TK: Trần Duy Thanh
Ngân Hàng: Đông Á, chi nhánh Gò Vấp

Leave a Reply