ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Báo Cáo Đồ Án 2
Đề Tài: Tìm Hiểu Microsoft ML.Net Và Minh Họa Với Bài
Tốn Phát Hiện Bình Luận Phản Cảm
GVHD: TS. Đỗ Thị Thanh Tuyền
Lớp: SE310.M21
Nhóm sinh viên thực hiện:
Trần Đặng Hồng Anh
MSSV: 19521213
Nguyễn Văn Huấn
MSSV: 19521556
Tp. Hồ Chí Minh, 17/06/2022
Lời cảm ơn
Đầu tiên, nhóm xin gửi lời cảm ơn chân thành đến tập thể quý Thầy Cô Trường
Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM và quý Thầy Cô khoa
Công nghệ phần mềm đã giúp cho em có những kiến thức cơ bản làm nền tảng để thực
hiện đề tài này. Đặc biệt, em xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới cô Đỗ
Thị Thanh Tuyền. Cô đã trực tiếp hướng dẫn tận tình, sửa chữa và đóng góp nhiều ý
kiến quý báu giúp em hoàn thành tốt báo cáo mơn học của mình. Trong thời gian một
học kỳ thực hiện đề tài, em đã vận dụng những kiến thức nền tảng đã tích lũy đồng
thời kết hợp với việc học hỏi và nghiên cứu những kiến thức mới. Từ đó, em vận dụng
tối đa những gì đã thu thập được đểhoàn thành một báo cáo đồ án tốt nhất. Tuy nhiên,
trong q trình thực hiện, em khơng tránh khỏi những thiếu sót. Chính vì vậy, em rất
mong nhận được những sự góp ý từ phía cơ nhằm hồn thiện những kiến thức mà em
đã học tập và là hành trang để em thực hiện tiếp các đề tài khác trong tương lai.
Xin chân thành cảm ơn các quý Thầy Cô!
2
MỤC LỤC
1. Tổng quan về đề tài. ............................................................................................... 5
2. Windows Machine Learning và ML .Net. ........................................................... 6
2.1 Machine Learning. ................................................................................................ 6
2.2 Windows Machine Learning (Windows ML). ..................................................... 7
2.3 Supervised learning (Học có giám sát):................................................................ 7
2.4 Unsupervised learning (Học khơng giám sát) ...................................................... 7
2.5 ML.NET là gì? ...................................................................................................... 8
2.6 Ưu điểm của ML.NET .......................................................................................... 8
2.7 Cách sử dụng ML.NET ........................................................................................ 9
2.8 ML.NET workflow ............................................................................................. 12
2.9 ML.NET tasks .................................................................................................... 13
2.10 ML .NET Algorithms ....................................................................................... 13
2.11 Hàm mục tiêu (Objective functions) ................................................................ 13
2.12 Trainer (ML.NET) ............................................................................................ 14
2.13 Phân loại nhị phân (Binary Classification) ....................................................... 14
2.14 Phân loại đa lớp (Multiclass Classification) ..................................................... 16
2.15 SdcaLogisticRegressionBinaryTrainer và
SdcaMaximumEntropyMulticlassTrainer ................................................................ 17
3. Microsoft ML .Net so với các framework khác. ............................................... 18
3.1 ML.NET vs TensorFlow .................................................................................... 18
3.2 ML.NET vs CNTK ............................................................................................. 18
3.3 ML.NET vs Pytorch ........................................................................................... 18
4. Áp dụng ML .NET vào “bài tốn phát hiện bình luận phản cảm” (Sentiment
analysis problem) ........................................................................................................ 19
4.1 Đặt vấn đề. .......................................................................................................... 19
4.2 Giải quyết bài toán. ............................................................................................. 19
5. Minh họa “bài tốn phát hiện bình luận phản cảm” với bộ dữ liệu Fox News
comments. .................................................................................................................... 27
5.1 Về bộ ngữ liệu Fox News comments: ................................................................ 27
5.2 Huấn luyện và đánh giá mô hình với bộ dữ liệu Fox News comments.............. 27
3
7. Kết luận đề tài. ..................................................................................................... 30
7.1 Kết quả đạt được ................................................................................................. 30
7.2 Mặt hạn chế. ....................................................................................................... 30
7.3 Định hướng phát triển ......................................................................................... 30
DANH MỤC TÀI LIỆU THAM KHẢO .................................................................. 31
4
1. Tổng quan về đề tài.
Ngày nay, Machine Learning (ML) đã và đang là một phần không thể thiếu trong
cuộc sống của chúng ta nhất là trong các lĩnh vực cơng nghệ như xử lý ngơn ngữ tự
nhiên, dự đốn số liệu hay gần gũi nhất là hệ thống khuyến nghị (suggestion) trên các
ứng dụng hiện nay.
Nhờ có Machine Learning, các hệ thống giờ đây trở nên vô cùng thông minh và có
khả năng tự tiến bộ theo thời gian, các ứng dụng có sử dụng Machine Learning vơ
cùng thu hút người dùng từ đó tạo sự bùng nổ trong ngành công nghiệp IT. Trong thập
kỷ qua, công nghệ Machine Learning đã mang lại cho chúng ta những chiếc ô tơ tự lái,
khả năng nhận dạng giọng nói thực tế, tìm kiếm trên web hiệu quả và sự hiểu biết
được cải thiện đáng kể về bộ gen của con người. Machine Learning ngày nay phổ biến
đến mức bạn có thể sử dụng nó hàng chục lần mỗi ngày mà khơng hề hay biết. Nhiều
nhà nghiên cứu cũng cho rằng đó là cách tốt nhất để đạt được tiến bộ đối với AI ở cấp
độ con người.
Trong việc xây dựng một hệ thống máy học có rất nhiều ngơn ngữ lập trình và
cơng cụ giúp chúng ta làm được việc này, có thể kể đến như ngơn ngữ lập trình
Python, Java, LISP,.. và một trong số đó có Microsoft ML.NET với lợi thế là ngôn
ngữ C# thân thuộc cùng với bộ thư viện tiện dụng dễ sử dụng.
5
2. Windows Machine Learning và ML .Net.
2.1 Machine Learning.
Machine Learning (ML) hay máy học là một nhánh của trí tuệ nhân tạo (AI), nó là
một lĩnh vực nghiên cứu cho phép máy tính có khả năng cải thiện chính bản thân
chúng dựa trên dữ liệu mẫu (training data) hoặc dựa vào kinh nghiệm (những gì đã
được học). Machine learning có thể tự dự đoán hoặc đưa ra quyết định mà khơng cần
được lập trình cụ thể.
Machine Learning có thể giải quyết các bài toán liên quan đến nhận dạng như nhận
dạng hình ảnh, âm thanh, từ ngữ,..Và các bài tốn dự đoán như dự đoán thị trường, dự
đoán dữ liệu, dự báo thời tiết,..
Quy trình chung của một ứng dụng sử dụng Machine Learning, gồm có bốn bước
như sau Data collection (thu thập dữ liệu), Preprocessing (tiền xử lý), Trainning model
(huấn luyện mơ hình), Evaluating model (đánh giá mơ hình), Improve (cải thiện), cụ
thể:
-
Data collection – thu thập dữ liệu: để máy tính có thể học được bạn cần có
một bộ dữ liệu (dataset), bạn có thể tự thu thập chúng hoặc lấy các bộ dữ
liệu đã được công bố trước đó. Lưu ý là bạn phải thu thập từ nguồn chính
thống, có như vậy dữ liệu mới chính xác và máy có thể học một cách đúng
đắng và đạt hiệu quả cao hơn.
-
Preprocessing – tiền xử lý: bước này dùng để chuẩn hóa dữ liệu, loại bỏ các
thuộc tính khơng cần thiết, gán nhãn dữ liệu, mã hóa một số đặc trưng, trích
xuất đặc trưng, rút gọn dữ liệu nhưng vẫn đảm bảo kết quả… Bước này tốn
thời gian nhất tỉ lệ thuận với số lượng dữ liệu bạn có. Bước 1 và 2 thường
chiếm hơn 70% tổng thời gian thực hiện.
-
Training model – huấn luyện mơ hình: bước này là bước bạn huấn luyện
cho mơ hình hay chính là cho nó học trên dữ liệu bạn đã thu thập và xử lý ở
hai bước đầu.
-
Evaluating model – đánh giá mơ hình: sau khi đã huấn luyện mơ hình xong,
chúng ta cần dùng các độ đo để đánh giá mơ hình, tùy vào từng độ đo khác
nhau mà mơ hình cũng được đánh giá tốt hay khơng khác nhau. Độ chính
xác của mơ hình đạt trên 80% được cho là tốt.
-
Improve – cải thiện: sau khi đã đánh giá mơ hình, các mơ hình đạt độ chính
xác khơng tốt thì cần được train lại, chúng ta sẽ lặp lại từ bước 3, cho đến
khi đạt độ chính xác như kỳ vọng. Tổng thời gian của 3 bước cuối rơi vào
khoảng 30% tổng thời gian thực hiện.
Khi xây dựng một ứng dụng ML, cần có các yêu cầu cơ bản như:
6
-
Xác định được bài toán cần giải quyết, đầu vào đầu ra.
-
Xác định được tập dữ liệu để sử dụng chia ra tập huấn luyện và tập đánh
giá.
-
Xác định được mơ hình dùng để huấn luyện, loại mơ hình thuật tốn triển
khải.
-
Thực hiện huấn luyện và đánh giá mơ hình.
2.2 Windows Machine Learning (Windows ML).
Windows Machine Learning là một API dùng để xây dựng, huấn luyện và đánh giá
một mô hình máy học do Microsoft phát triển.
Windows ML được cài đặt sẵn trên Windows 10 và Windows Server 2019,
Windows ML có những điểm mạnh sau:
-
Dễ dàng triển khai, với việc được cài đặt sẵn trên Windows 10 và Windows
Server 2019.
-
Hỗ trợ đa dạng phần cứng, giúp tích hợp GPUs và CPUs vào việc huấn luấn
mơ hình.
-
Độ trễ thấp, kết quả thời gian thực.
-
Linh động trong việc sử dụng, hỗ trợ đánh giá mơ hình khi máy tính khơng
có kết nối internet.
-
Giảm chi phí vận hành với việc hỗ trợ huấn luyện mơ hình trên cloud.
2.3 Supervised learning (Học có giám sát):
Là thuật tốn tạo nên mơ hình dự đốn đầu ra (output) của một dữ liệu mới (new
input) dựa trên các cặp input và output có sẵn từ trước. Ta có thể hiểu nơm na rằng
nhiệm vụ của mơ hình thuộc loại này là tìm sự liên hệ giữa input và output, từ đó dùng
sự liên hệ này để dự đoán trên dữ liệu mới.
Giả sử ta huấn luyện (train) 1 mơ hình dự đốn 1 bức hình có chứa con mèo hay
không, dữ liệu đưa vào là rất nhiều bức hình kèm theo nhãn (có mèo hoặc khơng có
mèo). Nhiệm vụ của mơ hình này là từ dữ liệu đó, tìm ra những điểm chung của bức
hình có mèo từ đó có thể đưa ra dự đốn cho những bức hình mới chưa biết nhãn.
Supervised learning cịn được chia thành 2 loại chính: phân loại (classification) và hồi
quy (regression).
2.4 Unsupervised learning (Học khơng giám sát)
Trong thuật tốn này, chúng ta chỉ có dữ liệu đầu vào (input) mà khơng biết trước
được đầu ra (ouput) của nó. Thuật tốn sẽ dựa trên dữ liệu này tìm ra cấu trúc, sự liên
quan giữa chúng để từ đó thực hiện 1 cơng việc nào đó ví dụ như: phân nhóm
(clustering), hoặc giảm số chiều dữ liệu (demension reduction) để thuận tiện trong tính
7
tốn. Phân nhóm (clustering) khác với phân loại (classification), đối với phân loại thì
số nhóm đã được quy định trước (biết trước) cịn phân nhóm thì số nhóm sẽ do thuật
tốn tự suy (khơng biết trước).
2.5 ML.NET là gì?
ML.NET là nền tảng Machine Learning mã nguồn mở do Microsoft phát triển.
ML.NET cung cấp khả năng để thêm công nghệ Machine Learning vào các ứng dụng
.NET. Với khả năng này, ta có thể có được những dự đốn được đưa ra tự động cho
ứng dụng bằng cách sử dụng những dữ liệu hiện có. Ứng dụng với Machine Learning
có khả năng tận dụng các hình mẫu trong dữ liệu để đưa ra những dự đốn thay vì
phải lập trình một cách rõ ràng.
Trọng tâm của ML.NET là mơ hình máy học (Machine Learning Model). Mơ hình
này chỉ định các bước cần thiết để chuyển đổi dữ liệu đầu vào thành dự đốn. Với
ML.NET, ta có thể đào tạo một mơ hình tùy chỉnh bằng cách chỉ định một thuật toán
hoặc ta có thể cho nhập các mơ hình đã được đào tạo sẵn từ trước như là TensorFlow
hay ONNX.
•
TensorFlow là thư viện mã nguồn mở dành cho Machine Learning do
Google phát triển.
•
ONNX (Open Neural Network Exchange) là một framework trung gian
dành cho Machine Learning được sử dụng để chuyển đổi giữa các
framework Machine Learning khác nhau.
ML.NET chạy được trên nhiều hệ điều hành như Windows, Linux, và macOS.
2.6 Ưu điểm của ML.NET
•
Dễ dàng áp dụng cho hệ thống .NET.
•
Hỗ trợ nhiều kịch bản đa dạng khác nhau.
•
Dễ dàng tùy chỉnh mơ hình Machine Learning.
•
Hỗ trợ tích hợp với các framework khác.
•
Hiệu suất cao.
8
2.7 Cách sử dụng ML.NET
a. Công cụ Model Builder
ML.NET Model Builder là một extension trực quan của Visual Studio để xây
dựng, đào tạo và triển khai một mơ hình Machine Learning tùy chỉnh theo ý người
dùng.
Model Builder sử dụng automated machine learning (AutoML) để tìm hiểu những
thuật tốn và cài đặt khác nhau để giúp tìm kiếm, chọn lọc ra những bộ phù hợp cho
một kịch bản cụ thể.
Ta không cần là một chuyên gia Machine Learning để có thể sử dụng Model
Builder. Tất cả những gì ta cần là một vài dữ liệu và một vấn đề để giải quyết. Model
Builder tự động tạo code để đưa mơ hình vào ứng dụng .NET.
b. Cài đặt
Yêu cầu:
•
VS 2019 hoặc VS 2022 Preview 4 hoặc lớn hơn
•
.NET Core 3.1 hoặc lớn hơn
Cài đặt:
1. Mở VS Installer
2. Chọn nút Modify để chỉnh sửa phiên bản hiện tại của VS
3. Chọn mục Indiviual components
4. Trong danh sách hiện ra thì chọn tích vào ML.NET Model Builder
(Preview)
9
c. Mơi trường (Environment)
Bạn có thể train một mơ hình Machine Learning một cách Local trên máy của bạn
hoặc trên cloud trên Azure, tùy thuộc vào kịch bản.
Khi bạn train trên local, bạn làm việc trong giới hạn của tài nguyên máy tính
(CPU, bộ nhớ và đĩa). Khi train trên cloud, bạn có thể mở rộng quy mơ tài ngun của
mình để đáp ứng nhu cầu của kịch bản, đặc biệt là đối với các bộ dữ liệu lớn.
Train trên CPU Local được hỗ trợ cho tất cả các kịch bản ngoại trừ Object
Detection.
Train trên GPU Local được hỗ trợ cho Image Classification.
Train bằng Azure được hỗ trợ cho Image Classification và Object Detection.
d. Dữ liệu (Data)
Sau khi chọn scenario, Model Builder sẽ yêu cầu cung cấp dataset. Dữ liệu sẽ
được sử dụng để tập luyện, đánh giá và chọn ra mơ hình phù hợp nhất với scenario đó.
Model Builder hỗ trợ dataset ở định dạng .tsv, .csv, .txt cũng như là định dạng cơ
sở dữ liệu SQL.
Nếu ta có file .txt thì các cột nên được cách nhau bởi:
• Dấu “,”
• Dấu “;”
• Hoặc ký tự “\t” (tab)
Nếu dữ liệu là hình ảnh thì hỗ trợ định dạng .jpg và .png.
Chọn cột đầu ra:
Một dataset là một bảng dữ liệu có các cột và dịng. Trong đó mỗi dịng sẽ có
các cột được đặt tên:
• label: các thuộc tính mà ta muốn dự đốn.
• feature: các thuộc tính đầu vào, được cung cấp để dự đoán label.
10
Ví dụ: kịch bản dự đốn giá của căn nhà.
• Các feature ở đây có thể là:
▪
Diện tích của căn nhà.
▪
Số phịng ngủ, phịng tắm.
▪
Mã zip.
• Cịn label là giá của căn nhà dự trên các feature.
11
2.8 ML.NET workflow
Quá trình lặp lại của việc phát triển mơ hình Machine Learning:
• Thu thập và tải dữ liệu dùng để đào tạo vào đối tượng IDataView.
• Cụ thể một pipeline các thao tác để trích xuất các feature và áp dụng thuật
tốn.
• Đào tạo một mơ hình bằng hàm Fit dựa trên pipeline.
• Đánh giá mơ hình và lặp lại để cải thiện.
• Lưu mơ hình lại để áp dụng vào ứng dụng.
• Load mơ hình đã lưu ở trên vào đối tượng ITransformer.
• Thực hiện dự đốn thông qua hàm CreatePredictionEngine.Predict().
12
2.9 ML.NET tasks
ML.NET tasks (tạm dịch là tác vụ ML.NET) là loại dự đoán (prediction) hoặc suy
luận cần thực hiện, phụ thuộc vào bài toán, vấn đề cụ thể và dữ liệu sẵn có. ML.NET
hỗ trợ rất nhiều tác vụ như: phân loại nhị phân (binary classification), phân loại đa lớp
(multiclass classification), hồi quy (regression), phân nhóm (clustering), phát hiện bất
thường (anomaly detection), xếp hạng (ranking), khuyến nghị (recomendation), dự
báo (forecasting), phân loại ảnh (image classification), nhận diện vật thể (object
detection).
2.10 ML .NET Algorithms
Mỗi ML.NET task sẽ có 1 số lượng thuật toán (algorithm) huấn luyện để lựa chọn.
Quyết định chọn thuật tốn nào phụ thuộc vào bài tốn mình đang giải quyết, đặc
điểm của dữ liệu đầu vào, tài ngun tính tốn và lưu trữ mà mình có. Ta có thể thử
nhiều thuật tốn để chọn thuật tốn phù hợp với tài ngun ta có nhất.
Thuật tốn thực thi trên các đặc trưng (features). Các đặc trưng là các giá trị số, vì
thế nếu dữ liệu đầu vào chưa phải là số ta cần chuyển chúng sang giá trị số. ML.NET
cung cấp nhiều phép biến đổi gọi là data transformations để thực hiện việc này. Ta có
thể dùng 1 hoặc nhiều hơn phép biến đổi để biến dữ liệu đầu vào thành các đặc trưng.
Ví dụ như ta dùng FeaturizeText để biến đổi dữ liệu đầu vào dạng chữ thành giá trị số
trong bài tốn Phát hiện bình luận phản cảm. ML.NET cung cấp các thuật toán sau:
-
Linear algorithm: averaged perceptron, stochastic dual coordinated ascent
(SDCA), L-BFGS, symbolic stochastic gradient descent, online gradient
descent
-
Decision tree, light gradient boosted machine, fast tree, fast forest,
generalized additive model (GAM)
-
Matrix factorization: Matrix Factorization, Field Aware Factorization
Machine
-
Meta algorithm: One versus all, Pairwise coupling,
-
K-Means
-
Principle component analysis (PCA)
-
Naïve Bayes
-
Prior trainer
-
Support vector machine (SVM): Linear SVM, Local Deep SVM
-
Ordinary least squares
2.11 Hàm mục tiêu (Objective functions)
13
Ta đã biết rằng Machine Learning là quá trình “học” từ dữ liệu ta đưa vào nhờ 1
thuật toán cụ thể để thực hiện tác vụ nào đó. Từ “học” ở đây có nghĩa là cải thiện độ
chính xác của tác vụ nào đó theo thời gian. Vấn đề là làm thế nào để ta biết rằng máy
đang học đúng? Khi thay đổi mơ hình dựa trên dữ liệu thì thay đổi đó có thể cải thiện
độ chính xác mơ hình hoặc khơng. Do đó ta cần 1 độ đo toán học cụ thể để làm thước
đo độ tốt của mơ hình và đó chính là hàm mục tiêu. Thơng thường người ta định nghĩa
hàm này sao cho giá trị hàm này càng nhỏ thì mơ hình càng tốt. Thuật tốn có nhiệm
vụ tối ưu hóa hàm số này để cho ra mơ hình.
2.12 Trainer (ML.NET)
𝑇𝑟𝑎𝑖𝑛𝑒𝑟 = 𝑇𝑎𝑠𝑘 + 𝐴𝑙𝑔𝑜𝑟𝑖𝑡ℎ𝑚
Thuật toán là phép toán được thực thi để tạo ra mơ hình máy học. Tùy vào
thuật tốn mà mơ hình được tạo ra sẽ có các đặc trưng khác nhau.
Trong ML.NET, cùng 1 thuật tốn có thể sử dụng cho nhiều tác vụ (task) khác
nhau. Ví dụ như Stochastic Dual Coordinate Ascent (SDCA) có thể sử dụng cho bài
tốn Binary Classification, Multiclass Classification, Regression. Sự khác biệt nằm ở
cách mà đầu ra chủa chúng được xử lý để phù hợp với tác vụ.
Với mỗi sự kết hợp giữa tác vụ và thuật toán, ML.NET cung cấp 1 đối tượng
để sử dụng. Đối tượng đó được gọi là Trainner. Ví dụ như SdcaRegressionTrainer sử
dụng thuật toán SDCA cho tác vụ hồi quy (regression).
2.13 Phân loại nhị phân (Binary Classification)
Phân loại nhị phân là tác vụ thuộc nhóm học có giám sát (supervised learning)
dùng để dự đoán một mẫu dữ liệu (a data sample) thuộc nhóm nào trong hai nhóm (hai
lớp) cho trước.
Ví dụ:
•
Đánh giá xem một bình luận của người dùng là tích cực hay tiêu cực.
•
Chẩn đốn xem bệnh nhân có mắc một căn bệnh nào đó hay khơng.
•
Đưa ra quyết định để đánh dấu email có phải là spam - là thư rác hay
khơng.
•
Xác định xem một bức ảnh có chứa một vật cụ thể nào đó hay khơng.
Có thể đào tạo một mơ hình phân loại nhị phân bằng cách sử dụng các thuật tốn
với các trainer sau:
•
AveragedPerceptronTrainer
•
SdcaLogisticRegressionBinaryTrainer
•
SdcaNonCalibratedBinaryTrainer
•
SymbolicSgdLogisticRegressionBinaryTrainer
14
•
LbfgsLogisticRegressionBinaryTrainer
•
LightGbmBinaryTrainer
•
FastTreeBinaryTrainer
•
FastForestBinaryTrainer
•
GamBinaryTrainer
•
FieldAwareFactorizationMachineTrainer
•
PriorTrainer
•
LinearSvmTrainer
Đầu vào:
•
Cột label có kiểu dữ liệu là Boolean.
•
Cột feature có kiểu dữ liệu là một vector Single với kích thước cố định.
Đầu ra:
•
Cột score có kiểu dữ liệu là Single.
•
Cột predicted label có kiểu dữ liệu là Boolean.
Cột score chứa một giá trị điểm số được tính tốn bởi mơ hình. Cột predicted label
chứa giá trị nhãn được dự đốn dựa trên dấu của score. Predicted label có giá trị là
false nếu giá trị của score là số âm và có giá trị là true nếu giá trị của score là số
dương.
15
2.14 Phân loại đa lớp (Multiclass Classification)
Đây là một supervised learning (học có giám sát) task được sử dụng để dự đoán
lớp mà thể hiện của dữ liệu thuộc về. Có thể hiểu đây là vấn đề phân loại các phần tử
trong một tập hợp thành một trong ba lớp hoặc nhiều hơn.
Ví dụ:
•
Phân loại chuyến bay là sớm, đúng giờ, hay trễ.
•
Hiểu xem đánh giá về một bộ phim là tích cực, trung lập, hay tiêu cực.
•
Phân loại xem đánh giá về một khách sạn là nói về địa điểm, giá cả, hay vệ
sinh, v.v.
Có thể đào tạo một mơ hình phân loại đa lớp bằng cách sử dụng các thuật tốn với
các trainer sau:
•
LightGbmMulticlassTrainer
•
SdcaMaximumEntropyMulticlassTrainer
•
SdcaNonCalibratedMulticlassTrainer
•
LbfgsMaximumEntropyMulticlassTrainer
•
NaiveBayesMulticlassTrainer
•
OneVersusAllTrainer
•
PairwiseCouplingTrainer
Đầu vào:
•
Cột label có kiểu dữ liệu là Key.
•
Cột feature có kiểu dữ liệu là một vector Single với kích thước cố định.
Đầu ra:
•
Cột score có kiểu dữ liệu là một vector Single.
•
Cột predicted label có kiểu dữ liệu là Key.
Cột score chứa giá trị điểm số của tất cả các lớp. Giá trị này càng lớn thì khả năng
dữ liệu này thuộc về lớp đó càng lớn. Nếu phần tử thứ i có giá trị lớn nhất thì nhãn
được dự đốn (predicted label) sẽ có thứ tự là i. Nghĩa là lớp mà dữ liệu đó thuộc về
sẽ có thứ tự là i trong tất cả các lớp).
16
2.15 SdcaLogisticRegressionBinaryTrainer và
SdcaMaximumEntropyMulticlassTrainer
Điểm chung:
-
Cả 2 trainer đều sử dụng thuật toán Stochastic Dual Coordinate Ascent
(SDCA) để tối ưu hàm mục tiêu.
-
Như đã nói ở mục trước, cả 2 loại này đều dùng được cho bài toán phân loại
nhị phân.
Điểm khác nhau:
SdcaLogisticRegressionBinaryTrainer SdcaMaximumEntropyMulticlassTrainer
ML
Task
Binary classification
Multiclass classification
Key type. Trước khi train cần chuyển
label sang dạng key bằng Transformer.
Input Boolean type.
labels
type
17
3. Microsoft ML .Net so với các framework khác.
3.1 ML.NET vs TensorFlow
TensorFlow là một trong những framework học máy mã nguồn mở phổ biến nhất
và được phát triển bởi Google. TensorFlow được viết bằng C ++ và hỗ trợ tăng tốc
GPU và TPU. Hiện tại, ML.NET không hỗ trợ tăng tốc GPU DNN, nhưng có thể sẽ
được bổ sung trong tương lai. Điểm nổi bậc của TensorFlow là học sâu bằng cách
cung cấp cho người dùng một cách trực quan để tính tốn độ dốc (gradients) trên các
biểu đồ phức tạp.
Trong khi TensorFlow chủ yếu được sử dụng với Python, thì cũng có các cách
triển khai ngơn ngữ khác. TensorFlowJS là một triển khai mạnh mẽ của TensorFlow
cho phép tạo các mơ hình học sâu bên trong trình duyệt. Mặc dù TensorFlow vượt trội
trong một số tình huống nhất định, nhưng đối với các nhà phát triển không quen thuộc
với Python hoặc JavaScript thì nó lại ít tiếp cận hơn. ML.NET cung cấp nhiều kỹ
thuật khác nhau cho việc học máy đồng thời làm cho các kỹ thuật này có thể truy cập
được đối với các nhà phát triển .NET. Trọng tâm của ML.NET không chỉ là học sâu,
mặc dù ML.NET sử dụng TensorFlow cho một số triển khai học sâu.
3.2 ML.NET vs CNTK
Microsoft’s Cognitive Toolkit (CNTK) là một framework máy học mã nguồn mở
phổ biến khác.
Trong khi ML.NET giúp các nhà phát triển .NET có thể tiếp cận máy học, thì
CNTK là một khn khổ học máy chun về học sâu và sử dụng một API python để
đào tạo các mơ hình CNTK. Tuy nhiên, sau khi được đào tạo, một mơ hình có thể
được chạy qua nhiều ngơn ngữ khác nhau, bao gồm cả C # /. NET. Ngược lại,
ML.NET cung cấp nhiều kỹ thuật học máy khác nhau có thể được đào tạo và đánh giá
bên trong C # /. NET. Có thể có một tương lai mà ML.NET hỗ trợ thêm cho học sâu
bằng cách sử dụng khung học sâu hiện có của Microsoft.
3.3 ML.NET vs Pytorch
Pytorch cũng là một framework Machine vô cùng nổi tiếng, nó được phát triển
nhằm mục đích đẩy nhanh con đường từ nghiên cứu đến triển khai sản xuất.
So sánh ML.NET và Pytorch thì ta dễ dàng nhận thấy Pytorch được sử dụng phổ
biến hơn rất nhiều. Còn về performance, ML.NET có thể đánh giá các mơ hình học
sâu với tốc độ khá và nhanh hơn PyTorch khi sử dụng CPU. Với ML.NET, bạn có thể
có tất cả các lợi thế của hệ sinh thái .NET, máy chủ web nhanh như Kestrel và mã
hướng đối tượng dễ bảo trì. Tuy nhiên khi dùng GPU thì Pytorch lại thể hiện mình là
đối thủ mạnh hơn, sử dụng ML.NET cho một số tác vụ phụ thuộc nhiều vào tính tốn
GPU có thể chậm hơn, do trước khi đánh giá một mơ hình, bạn thường cần phải xử lý
trước dữ liệu của mình. Mặc dù ML.NET có một thư viện phong phú gồm transformer
khác nhau để xử lý trước dữ liệu, nhưng việc này có thể là một task phức tạp để tạo lại
cùng một quá trình tiền xử lý trong phần mềm .NET của bạn.
18
4. Áp dụng ML .NET vào “bài toán phát hiện bình luận phản cảm”
(Sentiment analysis problem)
4.1 Đặt vấn đề.
Xây dựng một mơ hình có khả năng dự đốn nếu bình luận của khách hàng là tiêu
cực hay tích cực.
Chúng ta sẽ sử dụng một bộ dữ liệu gọi là wikipedia-detox-dataset, được chia ra
làm 2 tập, tập train và tập test, nhãn cảm xúc của mỗi bình luận là:
0 – Khơng phản cảm.
1 – Phản cảm.
Bên dưới là một vài ví dụ về bộ dữ liệu này.
Bình luận
Nhãn cảm
xúc
==You're cool== You seem like a really cool guy... *bursts out
laughing at sarcasm*.
1
==RUDE== Dude, you are rude upload that carl picture back, or else.
1
" Please stop. If you continue to vandalize Wikipedia, you will be
blocked from editing. | "
0
Oooooh thank you Mr. DietLimeCola. Once again, nice job trying to
pretend you have some authority over anybody here. You are a
wannabe admin, which is even sadder than a real admin
0
4.2 Giải quyết bài toán.
Để giải quyết bài toán này chúng ta sẽ sử dụng phân loại nhị phân (Binary
classification). Tiến hành thực hiện các bước của một bài toán ML gồm xây dựng,
huấn luyện, đánh giá và sử dụng.
19
Bài toán của chúng ta tuân theo sơ đồ bên dưới.
Đặc điểm của bài tốn chúng ta chính là bước Feature Extraction (Trích xuất
đặc trưng) của cả giai đoạn train và test, chỉ có những Extracted features (đặc trưng đã
được trích xuất) mới có thể được áp dụng để train và test mơ hình. Điều này có nghĩa
là những câu bình luận của chúng ta sẽ được chuyển thành các Feature Vectors
(Vector đặc trưng) để mơ hình có thể nhận dạng được.
Một ví dụ đơn giản cho Feature Vectors là phương pháp Bag of Words, Giả sử
chúng ta có hai văn bản đơn giản:
(1) John likes to watch movies. Mary likes movies too.
(2) John also likes to watch football games.
Dựa trên hai văn bản này, ta có danh sách các từ được sử dụng, được gọi là từ
điển với 10 từ như sau:
20
["John", "likes", "to", "watch", "movies", "also", "football", "games", "Mary",
"too"]
Với mỗi văn bản, ta sẽ tạo ra một vector đặc trưng có số chiều bằng 10, mỗi
phần tử đại diện cho số từ tương ứng xuất hiện trong văn bản đó. Với hai văn bản trên,
ta sẽ có hai vector đặc trưng là:
(1) [1, 2, 1, 1, 2, 0, 0, 0, 1, 1]
(2) [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]
Như vậy ta đã nắm được vector đặc trưng là gì hãy sang bước tiếp theo để tiến
hành xây dựng mơ hình.
a. Xây dựng mơ hình (build model):
Các thư viện sử dụng: Microsoft.ML, NuGet Package.
Tạo schema ánh xạ tới dữ liệu để load wikiDetoxAnnotated40kRows.tsv sử dụng
TextLoader. Chia datasets với tỉ lệ train/test là 80/20.
Tạo Estimator và chuyển đổi dữ liệu thành dạng vectors đặc trưng để thuật tốn
ML có thể “học” (với FeaturizeText).
Chọn thuật toán để huấn luyện là SdcaLogisticRegression, đây là một thuật toán
Logistic Regression sử dụng phương pháp Stochastic Dual Coordinate Ascent.
Code demo:
IDataView dataView =
mlContext.Data.LoadFromTextFile<SentimentIssue>(DataPath, hasHeader:
true);
TrainTestData trainTestSplit =
mlContext.Data.TrainTestSplit(dataView, testFraction: 0.2);
IDataView trainingData = trainTestSplit.TrainSet;
IDataView testData = trainTestSplit.TestSet;
var dataProcessPipeline =
mlContext.Transforms.Text.FeaturizeText(outputColumnName:
"Features", inputColumnName: nameof(SentimentIssue.Text));
var trainer =
mlContext.BinaryClassification.Trainers.SdcaLogisticRegression(label
ColumnName: "Label", featureColumnName: "Features");
var trainingPipeline = dataProcessPipeline.Append(trainer);
b. Huấn luyện mơ hình
21
ITransformer trainedModel = trainingPipeline.Fit(trainingData);
c. Đánh giá mơ hình
Percision, Recall, F1 score:
Để hiểu rõ về Percision, Recall, và F1 score, đầu tiên chúng ta xét ví dụ sau:
Predict/Actual
Predict
Positive
Actual
Positive
Negative
1 (True Positive)
0 (False Positive)
Negative 1 (False Negative)
998 (True Negative)
Nếu theo thông thường chúng ta tính Accuracy của mơ hình này chúng ta dễ
dàng tính ra Accuracy vơ cùng cao (
True Positive + True Negative
Total
= 0.99), nhưng nếu như
bài toán yêu cầu chúng ta xác định một người nhiễm covid(positive) chẳng hạn, thì số
False Negative(âm tính giả) và True Positive(dương tính thật) là những con số trọng
yếu, hãy hình dung nếu như trên thực tế số lượng True Positive khơng ít như thế thì
sao? Liệu rằng mơ hình này có nên được sử dụng? Đồng thời việc số âm tính thật q
lớn (998) thì việc đánh giá mơ hình dựa trên Accuracy thì rõ ràng không hiệu quả. Thế
nên Percision, Recall và F1 score sẽ được áp dụng nhằm đánh giá mơ hình trong
trường hợp này.
-
Percision(P): là tỉ lệ số điểm Positive mơ hình dự đốn đúng trên tổng số
điểm mơ hình dự đốn là Positive, Percision cho chúng ta biết tỉ lệ Positive
thật sự trên tổng số Posivite mơ hình đã dự đốn.
𝑃𝑒𝑟𝑐𝑖𝑠𝑖𝑜𝑛 =
-
Recall(R): là tỉ lệ số điểm Positive mơ hình dự đoán đúng trên tổng số điểm
thật sự là Positive (hay tổng số điểm được gán nhãn là Positive ban đầu),
Recall cho chúng ta biết tỉ lệ Positive thật sự mà mơ hình đã dự đốn trên
tổng số Positive thực tế.
𝑅𝑒𝑐𝑎𝑙𝑙 =
-
True Positive
True Positive + False Positive
True Positive
True Positive + False Negative
F1 score: là trung bình diều hịa giữa percision (P) và recall(R) của một mơ
hình dự đốn để tạo thành một thông số, F1 score phù hợp khi chúng ta
muốn có sự cân bằng giữa Recall và Percision và khi có sự mất cân bằng dữ
liệu (số lượng lớn True Negative).
22
𝐹1 =
2 ∗ Precision ∗ Recall
Percision + Recall
Các thông số khác(Area Under ROC Curve, Area under Precision recall Curve,
Positive Precision, Positive Recall, Negative Recall, Log Loss, Log Loss Reduction):
-
Area Under ROC Curve(AUC): để hiều về AUC thì ta cần biết ROC là gì,
ROC viết tắt của Receiver Operator Characteristic là một đường cong được
biểu diễn True Positive Rate theo False Positive Rate tại các
ngưỡng(threshold) nhằm xác định là có tín hiệu hay chỉ là do nhiễu. Area
Under ROC Curve là diện tích dưới đường cong ROC. Chỉ số AUC càng
cao thì khả năng phân biệt Posivite và Negative của mơ hình càng tốt.
23
Khi AUC = 1, đây là một mơ hình hồn hảo khơng có sự sai sót trong dự đốn.
Khi 0.5
Negative.
Khi AUC = 0.5, thì mơ hình không thể phân biệt các điểm Positive và Negative và kết
quả dự đốn có xem là đốn ngẫu nhiên.
-
Area under Percision recall Curve: đúng như tên gọi của nó Area under
Percision recall Curve là phần diện tích dưới đường cong của đồ thị với trục
tung là Percision và trục hoành là Recall, với việc vận dụng Percision và
Recall thì thơng số này phù hợp khi có sự mất cân bằng dữ liệu như trong ví
dụ ở phần Percision, Recall, F1 Score. Tương tự như AUC thì Area under
Percision recall Curve có giá trị càng gần 1 thì mơ hình càng hoàn hảo.
24
-
Positive Precision: Là Precision của kết quả dự đoán là Positive
𝑃𝑜𝑠𝑖𝑠𝑡𝑖𝑣𝑒 𝑃𝑒𝑟𝑐𝑖𝑠𝑖𝑜𝑛 =
-
Positive Recall: Là Recall của kết quả dự đoán là Positive
𝑃𝑜𝑠𝑖𝑡𝑖𝑣𝑒 𝑅𝑒𝑐𝑎𝑙𝑙 =
-
True Positive
True Positive + False Negative
Negative Precision: Là Pecision của kết quả dự đoán là Negative
𝑁𝑒𝑔𝑎𝑡𝑖𝑣𝑒 𝑃𝑒𝑟𝑐𝑖𝑠𝑖𝑜𝑛 =
-
True Negative
True Negative + False Negative
Negative Recall: Là Recall của kết quả dự đoán là Negative
𝑁𝑒𝑔𝑎𝑡𝑖𝑣𝑒 𝑅𝑒𝑐𝑎𝑙𝑙 =
-
True Positive
True Positive + False Positive
True Negative
True Negative + False Positive
LogLoss: viết tắt của Logarithmic Loss là một thông số chỉ xác suất dự
đoán gần như thế nào với giá trị thực tế. LogLoss càng gần 0 thì mơ hình
càng hồn hảo. LogLoss của mơ hình được tính như sau :
Với 𝑖 là thứ tự dòng dữ liệu, 𝑦 là giá trị thực tế, 𝑝 là xác xuất dự đoán.
-
LogLossReduction: viết tắt của Logarithmic Loss Reduction, là thông số
chỉ độ lợi thế của mơ hình so với dự đốn ngẫu nhiên, LogLossReduction
càng gần 1 thì mơ hình sẽ càng hồn hảo, ví dụ nếu LogLossReduction của
mơ hình là 0.46 thì xác xuất mà mơ hình dự đốn đúng sẽ là 46% tốt hơn so
với dự đoán ngẫu nhiên.
𝐿𝑜𝑔𝐿𝑜𝑠𝑠𝑅𝑒𝑑𝑢𝑐𝑡𝑖𝑜𝑛 =
𝐿𝑜𝑔𝐿𝑜𝑠𝑠 (𝑝𝑟𝑖𝑜𝑟) − 𝐿𝑜𝑔𝐿𝑜𝑠𝑠(𝑐𝑙𝑎𝑠𝑠𝑖𝑓𝑖𝑒𝑟)
𝐿𝑜𝑔𝐿𝑜𝑠𝑠(𝑝𝑟𝑖𝑜𝑟)
Micro-Accuracy (Multiclass classification): Về cơ bản chỉ số này không xét
đến từng thành phần lớp (class), nó được tính như accuracy cho bài toán Binary
classification. Chỉ số này sẽ được ưu tiên hơn so với Macro-Accuracy trong trường
25