ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO ĐỒ ÁN
MÔN HỌC: ĐỒ ÁN 1
Đề tài: Tìm hiểu ML.NET và xây dựng bài toán so sánh
ngữ nghĩa 2 câu tiếng Anh
GVHD: Đỗ Thị Thanh Tuyền
Sinh viên thực hiện:
Thiều Quang Lâm
MSSV: 19520674
Tp. Hồ Chí Minh, 05/2022
SE121 – Đồ án 1
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
……., ngày……...tháng……năm 20…
Người nhận xét
(Ký tên và ghi rõ họ tên)
2|Page
SE121 – Đồ án 1
DANH MỤC HÌNH ẢNH
Hình 1. Giao diện mô hình trên trang Huggingface ........................................................7
Hình 2. Khai báo các thư viện .........................................................................................8
Hình 3. Thiết lập tokenizer và model ..............................................................................8
Hình 4. Định nghĩa Convert_ONNX() ............................................................................9
Hình 5. Kết quả sau khi chạy chương trình chuyển đổi ..................................................9
Hình 6. Thư mục chứa project chuyển đổi ....................................................................10
Hình 7. Giao diện trang web Netron .............................................................................10
Hình 8. Trực quan hoá mô hình ONNX trên Netron .....................................................11
Hình 9. Các package cần thiết cho project ....................................................................12
Hình 10. BERTInput.cs .................................................................................................13
Hình 11. BERTOutput.cs ..............................................................................................13
Hình 12. BERTTrainer.cs ..............................................................................................14
Hình 13. Trainer ............................................................................................................14
Hình 14. BERTPredictor.cs ...........................................................................................15
Hình 15. BERT.cs..........................................................................................................16
Hình 16. hàm SoftMax ..................................................................................................16
Hình 17. Predict .............................................................................................................17
Hình 18. Program.cs ......................................................................................................17
Hình 19. Kết quả sau khi chạy Program.cs ...................................................................17
MỤC LỤC
Chương 1: Tổng quan đề tài ............................................................................................ 4
Chương 2: Cơ sở lý thuyết............................................................................................... 5
Chương 3: Thực hiện đề tài ............................................................................................. 7
Chương 4: Kết luận ....................................................................................................... 18
Phụ lục: Tài liệu tham khảo ........................................................................................... 19
3|Page
SE121 – Đồ án 1
Chương 1: Tổng quan đề tài
Theo dòng chảy của cuộc cách mạng 4.0, trí tuệ nhân tạo (AI) ngày càng được phổ
biến và ứng dụng rộng rãi trong mọi lĩnh vực của cuộc sống, mặc dù được John
McCarthy – nhà khoa học máy tính người Mỹ đề cập lần đầu tiên vào những năm 1950
nhưng đến ngày nay thuật ngữ trí tuệ nhân tạo mới thực sự được biết đến rộng rãi và
được các “ông lớn” của làng công nghệ chạy đua phát triển.
AI là công nghệ sử dụng đến kỹ thuật số có khả năng thực hiện những nhiệm vụ mà
bình thường phải cần tới trí thông minh của con người, được xem là phổ biến nhất.
Đặc trưng của công nghệ AI là năng lực “tự học” của máy tính, do đó có thể tự phán
đoán, phân tích trước các dữ liệu mới mà không cần sự hỗ trợ của con người, đồng
thời có khả năng xử lý dữ liệu với số lượng rất lớn và tốc độ cao. Trí tuệ nhân tạo là
một lĩnh vực liên quan đến chuyên ngành khoa học máy tính và công nghệ thông tin,
bản chất của trí tuệ nhân tạo vẫn do con người làm ra, họ xây dựng các thuật toán, lập
trình bằng các công cụ phần mềm công nghệ thông tin, giúp các máy tính có thể tự
động xử lý các hành vi thông minh như con người.
Trong đó, việc ứng dụng AI vào những bài toán cơ bản cần đến trí thông minh của con
người như xử lý ngôn ngữ tự nhiên, phân loại hình ảnh,… chính là nền tảng để phát
triển và nâng cao trí thông minh của AI, nhằm giúp cho máy tính xử lý những bài toán
phức tạp hơn.
4|Page
SE121 – Đồ án 1
Chương 2: Cơ sở lý thuyết
2.1. Windows Machine Learning
Windows Machine Learning (Windows ML) là một thư viện hỗ trợ máy học, được tích
hợp vào các phiên bản mới nhất của Windows 10 và Windows Server 2019, đồng thời
cũng được phát hành dưới dạng các NuGet package. Một số lợi ích của Windows ML
có thể kể đến bao gồm:
• Dễ phát triển: Chỉ cần một máy tính Windows 10 hoặc Windows Server 2019
đã được cài đặt sẵn Visual Studio và một mô hình ONNX đã được huấn luyện,
chúng ta có thể tiến hành làm việc với một mô hình AI ngay trên máy tính của
chúng ta. Thậm chí, Windows ML còn có thể được cài đặt dưới dạng NuGet
package cho các máy tính sử dụng Windows từ các phiên bản mới nhất đến
phiên bản 8.1.
• Hỗ trợ nhiều cấu hình: Windows ML có thể được dùng để nâng cao hiệu suất
trong việc huấn luyện mô hình AI trên CPU hoặc GPU.
• Độ trễ thấp và kết quả theo thời gian thực: Các mô hình ML có thể được xử lý,
phân tích nội bộ trên máy tính theo thời gian thực với lượng lớn dữ liệu bao
gồm hình ảnh, văn bản, video, … Kết quả sẽ được trả về gần như ngay lập tức
phù hợp với nhiều tác vụ khác nhau.
• Tính linh hoạt cao: Các mô hình ML có thể được đánh giá khi máy tính có kết
nối Internet không ổn định, hoặc trong trường hợp mất mát dữ liệu khi phải
nhận dữ liệu từ đám mây.
• Chi phí vận hành thấp: Huấn luyện các mô hình ML và đánh giá nội bộ trên
máy tính sẽ làm giảm đáng kể chi phí cần thiết cho băng thông. Ngoài ra, khi áp
dụng mô hình trên các máy chủ, các lập trình viên có thể nâng cấp phần cứng
để có thể xử lý luồng làm việc tốt hơn mà không làm phát sinh chi phí.
2.2. Mô hình ONNX
Open Neural Network Exchange (ONNX) là một hệ sinh thái mở nhằm phục vụ các
lập trình viên AI lựa chọn công cụ phù hợp cho các dự án liên quan. ONNX cung cấp
một format mã nguồn mở cho các mô hình AI, bao gồm cả các mô hình học sâu (deep
learning) và các mô hình AI truyền thống.
Các mô hình ONNX có thể được tải xuống và sử dụng hoàn toàn miễn phí trên mạng,
ví dụ như ONNX Model Zoo bao gồm các mô hình ONNX đã được huấn luyện sẵn,
5|Page
SE121 – Đồ án 1
hoặc có thể chuyển các mô hình từ các framework khác như PyTorch, Caffee2,
Chainer, …
2.3. Huggingface và Transformers
Huggingface là nhà cung cấp nền tảng cho các công nghệ AI dưới dạng mã nguồn mở.
Đến nay đã có hơn 50,000 mô hình AI đã được đăng tải lên trang web của
Huggingface, trong đó bao gồm cả các mô hình của các tập đoàn công nghệ lớn như
Google, Facebook, Microsoft, …
Transformers là một thư viện mã nguồn mở của Huggingface cung cấp các API cần
thiết hỗ trợ trong việc tải và huấn luyện các mô hình của Huggingface. Transformers
chủ yếu hỗ trợ các thư viện PyTorch, TensorFlow, JAX, nhưng Transformers cũng hỗ
trợ việc xuất các mô hình sang dạng ONNX với package transformers.onnx.
2.4. Xử lý ngôn ngữ tự nhiên (Natural Language Processing – NLP)
Xử lý ngôn ngữ tự nhiên là một nhánh của Trí tuệ nhân tạo, tập trung vào việc nghiên
cứu sự tương tác giữa máy tính và ngôn ngữ tự nhiên của con người, dưới dạng tiếng
nói (speech) hoặc văn bản (text). Mục tiêu của lĩnh vực này là giúp máy tính hiểu và
thực hiện hiệu quả những nhiệm vụ liên quan đến ngôn ngữ của con người như: tương
tác giữa người và máy, cải thiện hiệu quả giao tiếp giữa con người với con người, hoặc
đơn giản là nâng cao hiệu quả xử lý văn bản và lời nói.
Có nhiều lý do khiến xử lý ngôn ngữ tự nhiên là một nhiệm vụ khó như tập từ vựng
rộng lớp và được cập nhật thường xuyên, cấu trúc ngữ pháp linh hoạt và đôi khi khá
lỏng lẻo, ngôn ngữ đôi khi thể hiện cảm xúc, ẩn ý của người viết. Tuy nhiên có hai lý
do cơ bản nhất là tính nhập nhằng của ngôn ngữ (ambiguity) và sự cần thiết của tri
thức nền (background knowledge).
6|Page
SE121 – Đồ án 1
Chương 3: Thực hiện đề tài
3.1. Chuẩn bị
Bài toán yêu cầu đầu vào là 2 câu tiếng Anh (cả 2 câu có thể cùng nằm trên 1 dòng và
được ngăn cách bằng dấu chấm), đầu ra là một trong ba nhãn dán (label): Entailment
(tương tự nhau), Contradiction (trái ngược nhau), Neutral (không liên quan). Các nhãn
dán được đánh số lần lượt là LABEL_1, LABEL_0, LABEL_3.
Chúng ta sẽ sử dụng một mô hình đã được huấn luyện sẵn từ Huggingface. Đây là một
mô hình BERT Base Uncased, sử dụng bộ dữ liệu SNLI (Stanford Natural Language
Inference) để huấn luyện. Tuy nhiên, mô hình này sử dụng PyTorch để huấn luyện.
Nếu muốn áp dụng vào ML.NET, trước tiên chúng ta cần phải chuyển về dạng ONNX.
Hình 1. Giao diện mô hình trên trang Huggingface
7|Page
SE121 – Đồ án 1
Lưu ý là mô hình trên sử dụng nhãn dán khác với yêu cầu đề bài, cụ thể là LABEL_0
là tương đồng, LABEL_1 là không liên quan, và LABEL_2 là trái ngược nhau.
3.2. Chuyển mô hình từ PyTorch sang ONNX
Trước khi bắt đầu việc chuyển đổi, chúng ta cần cài đặt các thư viện cần thiết phục vụ
cho việc chuyển đổi. Chúng ta sẽ sử dụng pip để cài đặt.
Mở pip dưới dạng cmd và gõ 2 lệnh sau:
pip install torch
pip install transformers
Sau khi hoàn thành chúng ta có thể bắt đầu công việc chuyển đổi. Ở đây chúng ta sẽ
dùng Python có sẵn trên Visual Studio để thực hiện.
Khai báo các thư viện đã cài đặt trước đó:
Hình 2. Khai báo các thư viện
AutoTokenizer và AutoModelForSequenceClassification sẽ được dùng để định nghĩa
tokenizer và model phục vụ cho việc chuyển đổi.
Ngoài ra, convert_graph_to_onnx cũng được khai báo để thực hiện việc chuyển đổi
một cách dễ dàng.
Path sẽ được dùng để định nghĩa vị trí của file ONNX sau khi chuyển đổi.
Hình 3. Thiết lập tokenizer và model
Chúng ta tiếp tục thiết lập tokenizer và model, ở đây có thêm from_pretrained để lấy
dữ liệu từ mô hình đã huấn luyện sẵn trên Huggingface.
Cuối cùng, chúng ta định nghĩa Convert_ONNX() để thực hiện chuyển đổi.
Ở đây cần lưu ý:
• framework chỉ môi trường ban đầu của model, ‘pt’ tức là PyTorch, còn nếu đó
là ‘tf’ thì đó là TensorFlow.
• opset là một con số định nghĩa phiên bản của ONNX, tức là file ONNX của
chúng ta sẽ có opset là 11
8|Page
SE121 – Đồ án 1
• user_external_format là các định dạng từ phía người dùng, thông thường nếu
chúng ta sẽ không định dạng gì khác với ban đầu thì để là False.
Hình 4. Định nghĩa Convert_ONNX()
Kết quả sau khi chạy chương trình:
Hình 5. Kết quả sau khi chạy chương trình chuyển đổi
Kiểm tra trong thư mục của project, chúng ta thấy có một folder mới với tên gọi
“onnx”, trong đó có một file với tên gọi “bert-base-uncased-snli.onnx”
9|Page
SE121 – Đồ án 1
Hình 6. Thư mục chứa project chuyển đổi
Để tìm hiểu xem mô hình ONNX vừa nhận được có đầu vào và đầu ra là gì, chúng ta
sẽ dùng Netron để phân tích.
Netron là một phần mềm trực quan hoá các mô hình trí tuệ nhân tạo, máy học, và mô
hình học sâu. Có thể tải về Netron trên máy tính hoặc truy cập trực tiếp trên trang web
của Netron: https://netron.app/.
Hình 7. Giao diện trang web Netron
Trên trang Netron, chúng ta nhấn vào “Open Model” sau đó lựa chọn mô hình ONNX
trên máy tính. Kết quả hiện ra:
10 | P a g e
SE121 – Đồ án 1
Hình 8. Trực quan hoá mô hình ONNX trên Netron
Trong mô hình này có thể thấy có 3 input khác nhau bao gồm input_ids,
attention_mask, và token_type_ids, và 1 output với tên gọi output_0.
Ở đây cần chú ý đến kiểu dữ liệu của cả input và output, khi các input đều có dạng
[batch, sequence], còn output thì có dạng [batch, 3]. Trong Transformers, batch là một
hoặc nhiều câu văn, có thể được gửi cùng một lúc tới mô hình để xử lý, còn sequence
là độ dài của các batch. Thông thường thì các mô hình Transformers có thể xử lý độ
dài từ 512 đến 1024 ký tự, đối với mô hình BERT chúng ta sẽ sử dụng thì độ dài tối đa
là 512.
3.3. Tạo project sử dụng mô hình ONNX
Đầu tiên chúng ta sẽ tạo project console sử dụng C#, có thể dùng .NET 5.0 (không
được hỗ trợ bởi Microsoft kể từ 10/5/2022) hoặc .NET 6.0 (yêu cầu Visual Studio
2022).
Sau khi tạo project, từ của sổ Solution Explorer, nhấn chuột phải vào Dependencies,
chọn “Manage NuGet Packages”. Chúng ta sẽ tải về các package NuGet phục vụ cho
project này. Các package cần đến bao gồm:
Microsoft.ML: framework cung cấp các thư viện căn bản nhất hỗ trợ cho lập trình máy
học trên .NET
Microsoft.ML.OnnxRuntime: cung cấp các thư viện cần thiết cho các nền tảng hỗ trợ
ONNX Runtime
Microsoft.ML.OnnxTransformers: hỗ trợ các thư viện của
Microsoft.ML.OnnxRuntime
11 | P a g e
SE121 – Đồ án 1
BERTTokenizers: cung cấp tokenizer cho các mô hình BERT, bao gồm BERT Base
Uncased, mô hình mà chúng ta sẽ sử dụng (lưu ý: BERTTokenizers phiên bản 1.1.0
không thể cài đặt được trên Visual Studio 2019, cần phải chuyển qua BERTTokenizers
phiên bản 1.0.6)
Hình 9. Các package cần thiết cho project
Cũng có thể tải các package từ giao diện console bằng cách: Từ thanh menu, chọn
Tools, chọn NuGet Package Manager, chọn Package Manager Console.
Sau khi giao diện console được hiển thị, gõ các dòng sau để tải các package về:
Install-Package Microsoft.ML -Version 1.7.1
Install-Package Microsoft.ML.OnnxRuntime -Version 1.11.0
Install-Package Microsoft.ML.OnnxTransformer -Version
1.7.1
Install-Package BERTTokenizers -Version 1.1.0
Bây giờ chúng ta có thể bắt đầu thực hiện project.
Tạo một class mới với tên BERTInput.cs, đây sẽ là class dùng để định nghĩa các input.
12 | P a g e
SE121 – Đồ án 1
Hình 10. BERTInput.cs
Tương tự, tạo lớp BERTOutput.cs để định nghĩa output. Ở đây chỉ có một kiểu output
là Output0.
Hình 11. BERTOutput.cs
Sau khi định nghĩa input và output, chúng ta sẽ tạo một class mới tên là
BERTTrainer.cs. Trong class này, MLContext được gọi để chuẩn bị dữ liệu, bao gồm
việc huấn luyện, dự đoán mô hình.
13 | P a g e
SE121 – Đồ án 1
Hình 12. BERTTrainer.cs
Tiếp theo chúng ta tạo phương thức Trainer với đầu ra là ITransformer. Phương thức
này yêu cầu đường dẫn tới mô hình ONNX và một biến bool biểu thị việc sử dụng
GPU. Trong Trainer chúng ta tạo một Dictionary mới bao gồm các input và output
cùng với kích cỡ, và sử dụng chúng trong inputColumnNames và
outputColumnNames.
Hình 13. Trainer
14 | P a g e
SE121 – Đồ án 1
Tạo thêm class mới với tên gọi BERTPredictor.cs. Như tên gọi, class này sẽ được
dùng để thực hiện việc dự đoán với phương thức Predict.
Hình 14. BERTPredictor.cs
Cuối cùng chúng ta tạo lớp BERT.cs dùng để tổng hợp các phương thức trước đó để
tạo nên dự đoán với dữ liệu đầu vào.
Như trước đó đã đề cập, vì đề bài yêu cầu các nhãn dán cho kết quả khác với mô hình
ban đầu (Trong mô hình từ PyTorch, LABEL_0 là tương đồng, LABEL_1 là không
liên quan, và LABEL_2 là trái ngược; trong khi đó theo đề bài thì LABEL_1 là tương
15 | P a g e
SE121 – Đồ án 1
đồng, LABEL_3 là không liên quan, và LABEL_0 là không liên quan), chúng ta cần
phải tạo enum Label theo thứ tự LABEL_1, LABEL_3, LABEL_0.
Hình 15. BERT.cs
Chúng ta có thể tạo thêm hàm SoftMax để tính toán thêm mức độ xuất hiện của Label
trong số 3 Label có thể xuất hiện.
Hình 16. hàm SoftMax
Cuối cùng, chúng ta tạo hàm Predict với text là đầu vào. Để đơn giản hoá, text ở đây
được nhập vào như một chuỗi liên tục với dấu chấm ngăn cách 2 câu.
16 | P a g e
SE121 – Đồ án 1
Hình 17. Predict
3.4. Kết quả
Trong Program.cs, chúng ta khai báo model và modelPath, cùng với input.
Chương trình này sẽ hoạt động liên tục để dự đoán kết quả so sánh về ngữ nghĩa của 2
câu tiếng Anh, cho đến khi input là rỗng.
Hình 18. Program.cs
Kết quả thu được:
Hình 19. Kết quả sau khi chạy Program.cs
17 | P a g e
SE121 – Đồ án 1
Chương 4: Kết luận
Thông qua đồ án này, nhóm đã tìm hiểu được các khái niệm cơ bản về máy học, về các
bài toán xử lý ngôn ngữ tự nhiên, và đã áp dụng các kiến thức tiếp thu được vào để
giải một bài toán mang tính thực tiễn với kết quả có thể xuất ra màn hình dưới dạng
console. Nhóm cũng đã được tiếp cận với một hướng phát triển mới để xây dựng các
mô hình máy học là .NET thay vì Python như các hướng phát triển thông thường.
18 | P a g e
SE121 – Đồ án 1
Phụ lục: Tài liệu tham khảo
Windows Machine Learning: https://docs.microsoft.com/en-us/windows/ai/windowsml/
ONNX model: https://docs.microsoft.com/en-us/windows/ai/windows-ml/get-onnxmodel
Huggingface: https://huggingface.co/
Transformers: https://huggingface.co/docs/transformers/index
Xử lý ngôn ngữ tự nhiên: https://digital.fpt.com.vn/linh-vuc/xu-ly-ngon-ngu-tunhien.html
Cách chuyển mô hình từ PyTorch sang ONNX: https://docs.microsoft.com/enus/windows/ai/windows-ml/tutorials/pytorch-convert-model
Link mô hình: https://huggingface.co/textattack/bert-base-uncased-snli
Mô hình máy học NLP cho .NET: https://rubikscode.net/2021/04/19/machinelearning-with-ml-net-nlp-with-bert/
BERTTokenizer: https://rubikscode.net/2022/03/14/bert-tokenizers-for-ml-net/
19 | P a g e
- Xem thêm -