1
ĐẠ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 CUỐI KỲ
ĐỒ ÁN 2
TÌM HIỂU MICROSOFT ML.NET VÀ MINH
HỌA VỚI BÀI TOÁN HỎI ĐÁP TIẾNG ANH
Giảng viên hướng dẫn:
ĐỖ THỊ THANH TUYỀN
Sinh viên thực hiện:
LÊ TRƯỜNG LONG HƯNG
18520284
Tp. Hồ Chí Minh, 6/2022
2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
……., ngày… ...... tháng……năm 2022
Người nhận xét
(Ký tên và ghi rõ họ tên)
Contents
3
CHƯƠNG I: GIỚI THIỆU ....................................................................................................4
1. Đề tài ........................................................................................................................................................ 4
2. Lý do chọn đề tài ..................................................................................................................................... 4
CHƯƠNG 2: LÝ THUYẾT CHUNG....................................................................................5
1. Machine Learning ................................................................................................................................... 5
2. Microsoft ML.NET ................................................................................................................................. 5
3. Luồng làm việc của ML.NET ................................................................................................................. 6
4. ONNX ....................................................................................................................................................... 7
5. BERT........................................................................................................................................................ 8
CHƯƠNG 3: THỰC HIỆN BÀI TỐN ...............................................................................9
1. Chuyển mơ hình sang ONNX................................................................................................................. 9
2. Cài đặt project ....................................................................................................................................... 11
3. Định nghĩa dữ liệu nhập và xuất ......................................................................................................... 13
4. Xây dựng, luyện và dự đoán ................................................................................................................ 15
CHƯƠNG 4: TỰ ĐÁNH GIÁ ............................................................................................. 22
CÁC LINK THAM KHẢO ................................................................................................. 23
4
CHƯƠNG I: GIỚI THIỆU
1. Đề tài
Theo gợi ý của giảng viên hướng dẫn, đề tài được chọn là “Tìm hiểu Microsoft
ML.NET và minh họa với bài toán hỏi – đáp tiếng Anh”.
2. Lý do chọn đề tài
Bước vào thời đại Công nghệ 4.0, ngành Công nghệ thông tin đã và đang có
nhiều phát triển tiến bộ ở mọi ngành và lĩnh vực khác nhau. Một trong những lĩnh
vực đáng chú ý và đang được nhiều người quan tâm là trí tuệ nhân tạo, hay AI
(Artificial Intelligence), và một trong những chuyên môn được chú trọng nhiều nhất
của AI là học máy, hay Machine Learning. Những bước đột phá trong lĩnh vực này
hứa hẹn sẽ tự động hóa rất nhiều cơng việc trong tương lai với một hiệu suất và độ
chính xác vượt bậc hơn con người.
Tuy nhiên, việc áp dụng Machine Learning vào các ứng dụng hiện có khơng
phải lúc nào cũng hoàn thành được chỉ trong một ngày. Để áp dụng Machine
Learning đương nhiên phải có cái “Machine”, cái “máy” thực hiện những thao tác
mong muốn, sau đó phải giúp máy nó học để có được cái phần nửa cịn lại là
“Learning”. Mà muốn đạt được điều đó thì phải có dữ liệu nguồn để nó học và tham
khảo, và để hạn chế sai sót nhất thiết phải có nhiều dữ liệu đúng và chính xác trong
nhiều trường hợp khác nhau. Machine Learning vì thế tốn rất nhiều thời gian và tài
nguyên do các tổ chức phải đầu tư vào dữ liệu huấn luyện máy, bên cạnh thời gian
cần phải bỏ ra để luyện cái máy đó thực hiện các thao tác theo mong muốn. Chưa kể
đến việc các mơ hình này có thể được tạo ra và luyện trên những ngơn ngữ, nền tảng
lập trình mà lập trình viên có thể chưa biết.
Vì thế, nhóm chọn đề tài này với mục đích giới thiệu một thư viện có khả năng
áp dụng và tạo các ứng dụng Machine Learning một cách dễ dàng và nhanh chóng,
sử dụng nền tảng .NET tương đối quen thuộc với nhiều lập trình viên. Qua báo cáo
này, nhóm hi vọng sẽ mở mang kiến thức của nhiều người cùng ngành và giúp mở
rộng việc sử dụng và áp dụng Machine Learning trong các ứng dụng nhiều hơn.
5
CHƯƠNG 2: LÝ THUYẾT CHUNG
1. Machine Learning
Nói khái quát, Machine Learning là một nhánh của nghiên cứu trí tuệ nhân
tạo tập trung vào nghiên cứu và phát triển các thuật tốn máy tính có khả năng tự cải
thiện thơng qua kinh nghiệm và sử dụng dữ liệu giống như con người. Việc dự đốn
và tính tốn kết quả của một mơ hình Machine Learning là do chính thuật tốn đó tự
tạo ra mà khơng được con người lập trình tính ra kết quả đó. Một mơ hình Machine
Learning thường sẽ được phát triển bằng cách đưa vào dữ liệu lịch sử và cho phép
thuật tốn dùng dữ liệu đó để dự đoán những kết quả mong đợi.
Việc dữ liệu ngày càng nhiều và đa dạng hơn, cộng với máy tính ngày càng
mạnh hơn và lưu trữ dữ liệu rẻ hơn đã làm Machine Learning ngày càng đáng được
quan tâm hơn. Các mơ hình Machine Learning có thể giải quyết nhiều vấn đề với
tốc độ và quy mơ con người khó đạt được, cho phép những mơ hình này cường hóa
hoặc thậm chí thay thế khả năng con người trong cơng việc. Ngồi ra, việc các mơ
hình Machine Learning có thể dự đốn dựa trên dữ liệu mẫu mà khơng cần được lập
trình để làm thế cho phép các bộ máy này phát hiển các xu hướng, họa tiết trong dữ
liệu, và từ đó có thể giúp các tập đồn, cơng ty phát hiện được xu hướng về hành vi
khách hàng và người dùng.
2. Microsoft ML.NET
Ra mắt năm 2018, ML.NET là một thư viện Machine Learning mã nguồn mở
và đa nền tảng cho các ngơn ngữ lập trình C# và F#, được phát triển bởi Tập đoàn
.NET và xuất bản bởi Microsoft. Mặc dù tương đối mới, MLNET khởi nguồn vào
năm 2002 là một dự án nghiên cứu tìm kiếm và điều hướng khai thác dữ liệu từ văn
bản sử dụng nội bộ trong các sản phẩm của Microsoft, sau đó đổi tên thành TLC
(The Learning Code) vào năm 2011; ML.NET là một sản phẩm dẫn xuất từ thư viện
này.
ML.NET có thể chạy trên Windows, Linux và macOS thông qua .NET Core,
hoặc Windows thông qua .NET Framework. Mọi nền tảng hỗ trợ chạy ML.NET 64
bit; 32 bit chỉ được hỗ trợ trên Windows, ngoài trừ các chức năng liên quan đến
TensorFlow, LightGBM và ONNX. ML.NET hỗ trợ nhiều loại mơ hình dự đoán,
như phân loại, hồi quy, nhận diện dị thường, kiến nghị, dữ liệu tuần tự và phân loại
ảnh.
Mơ hình Machine Learning là một trong những yếu tố trọng tâm của ML.Net.
Mơ hình này phải đặc tả những bước thực hiện chuyển đổi dữ liệu đầu vào thành
một dự đoán. Với ML.NET, mơ hình này có được thơng qua nhập vào mơ hình
ONNX và TensorFlow đã được luyện sẵn, hoặc tự luyện mơ hình riêng sử dụng
extension ML.NET Model Builder cho Visual Studio thông qua ML.NET CLI và
ML.NET AutoML.
6
Trong đồ án này, chúng ta sẽ dùng ML.NET để tạo một chương trình hỏi đáp
tiếng Anh sử dụng một mơ hình hỏi – đáp BERT. Do mơ hình này được xây dựng
trên nền tảng PyTorch, vốn không được hỗ trợ bởi ML.NET, chúng ta trước hết phải
chuyển mơ hình này sang một định dạng đọc được bởi ML.NET, như ONNX.
3. Luồng làm việc của ML.NET
Quá trình làm việc của ML.NET nói riêng, cũng như q trình phát triển mơ
hình Machine Learning nói chung, là một q trình mang tính lặp đi lặp lại. Phát
triển một mơ hình thường trải qua các bước sau:
Thu thập và tải dữ liệu luyện tập vào một đối tượng dữ liệu (i.e. IDataView
của ML.NET)
Đặc tả pipeline thu thập thông tin và thực thi thuật tốn Machine Learning
Luyện mơ hình (ML.NET: gọi Fit() lên pipeline)
Đánh giá mơ hình, lặp lại quy trình để cải thiện
Lưu mơ hình dưới dạng nhị phân để tích hợp vào ứng dụng
Tải mơ hình vào một đối tượng ITransformer
Gọi CreatePredictionEngine.Predict() để tiến hành dự đoán
7
4. ONNX
Viết tắt cho Open Neural Network Exchange (tạm dịch: khu trao đổi mạng
thần kinh mở), ONNX là một hệ sinh thái trí tuệ nhân tạo mã nguồn mở gồm nhiều
8
công ty công nghệ và tổ chức nghiên cứu với sứ mệnh thiết lập tiêu chuẩn xây dựng
và phát triển thuật tốn và cơng cụ Machine Learning để khuyến khích tính sáng tạo
và hợp tác trong ngành trí tuệ nhân tạo. Ban đầu được phát triển bởi đội PyTorch
của Facebook dưới tên là Toffee, nền tảng được đổi tên lại thành ONNX vào tháng
9/2017, được ra mắt bởi Facebook và Microsoft, và hứa hẹn sẽ tăng tính tương tác
giữa các framework khác nhau cũng như cải thiện hiệu suất các mạng thần kinh nhân
tạo.
Để có mơ hình ONNX, người dùng có thể tải về một mơ hình luyện sẵn từ
ONNX Model Zoo, xuất mơ hình từ các framework luyện Machine Learning như
PyTorch, hoặc chuyển các mơ hình có sẵn sang ONNX sử dụng gói ONNXMLTools
của Python.
5. BERT
Viết tắt cho Bidirectional Encoder Representations from Transformers (tạm
dịch: đại diện mã hóa song chiều từ transformer), BERT là một kỷ thuật Machine
Learning dựa trên mơ hình transformer (mơ hình Machine Learning tự chú ý) được
dùng trong xử lý ngôn ngữ tự nhiên được phát triển bởi Google. Lần đầu được xuất
bản vào năm 2018, Google bắt đầu áp dụng BERT vào Google Search từ năm 2019;
từ đó đến nay BERT được áp dụng vào hơn 70 ngôn ngữ khác nhau trong Search,
và mọi truy vấn tiếng Anh được xử lý bởi BERT.
BERT được luyện trước trên hai tác vụ: định hình ngơn ngữ và dự đốn câu
tiếp theo; vì thế BERT học được cách nhúng từ thông qua ngữ cảnh. Sau giai đoạn
tiền luyện tập, BERT có thể được tinh chỉnh với ít tài nguyên hơn trên những bộ dữ
liệu bé hơn để tối ưu hóa hiệu suất trên những cơng việc cụ thể.
9
CHƯƠNG 3: THỰC HIỆN BÀI TỐN
1. Chuyển mơ hình sang ONNX
Mơ hình chúng ta sẽ sử dụng để giải quyết bài tốn này là một mơ hình BERT
thuộc dịng các mơ hình transformer, được xây dựng bằng framework PyTorch, vì
thế trước hết chúng ta cần cấu hình hệ thống để làm việc được với Python và
transformers.
Sau khi cài đặt Python, chúng ta cần thiết lập một môi trường ảo để cài đặt
một số thư viện thêm. Cách dễ nhất đạt được điều này là tạo một project Python mới
trên Visual Studio, sau đó cấu hình tạo mơi trường ảo mới trong Visual Studio. Một
khi tạo xong, mở Python cmd, điều hướng về thư mục chứa mơi trường ảo và chạy
dịng lệnh sau để tải về PyTorch và transformers:
.\venv\Scripts\activate
pip3 install upgrade pip
pip3 install torch
pip3 install transformers
Trong project, tiến hành nhập vào các thư viện cần thiết:
1. Các thư viện nhập/xuất liệu tiêu chuẩn của Python
2. Các thư viện làm việc với ứng dụng. Chúng ta nhập vào thư viện Torch để
project làm việc với mơ hình được đề cập đến, và Path để giúp project đọc và
xuất file.
3. Các mơ hình transformers được tự động lưu vào bộ nhớ cache của máy trong
lần đầu sử dụng, cho nên tải mơ hình chỉ cần chạy code nhập trực tiếp từ thư
viện transformer, không cần pull về dùng github. Trên trang repository của
mỗi mơ hình sẽ có nút “Use in Transformers”; click vào đây sẽ hiện code cần
sao chép để nhập mơ hình vào Python.
4. Cũng từ thư viện transformers, ta nhập vào các chức năng cho phép chuyển
10
các mơ hình tải về sang định dạng ONNX.
Sau khi tải mơ hình xong, chúng ta tiến hành tạo hàm chuyển mơ hình tải về
sang định dạng ONNX. Nếu muốn, chúng ta có thể thử xem mơ hình đã được tải về
chưa bằng cách làm một truy vấn thử nghiệm. Để làm một dự đoán, chúng ta cần
định nghĩa một pipeline dùng để xử lý truy vấn của người dùng; pipeline trong
trường hợp này sẽ là một pipeline chuyên xử lý hỏi – đáp, sử dụng mơ hình vừa tải
về và tokenizer (bộ hàm dùng để chia từ trong câu) đã được định nghĩa như trên. Sau
đó, chúng ta sẽ làm một câu truy vấn, bao gồm nội dung (context – chứa thông tin
trả lời cho các câu hỏi truy vấn) và câu hỏi cần được giải đáp.
Nếu mơ hình tải về thành công, trong cmd sẽ xuất ra câu trả lời của truy vấn,
cộng vởi một điểm thể hiện mức độ tự tin của mơ hình về kết quả được đưa ra.
Sau khi đã xác nhận là mơ hình đã được tải về và hoạt động, chúng ta gọi hàm
eval() trên mơ hình để chuyển mơ hình sang trạng thái “đánh giá” nhằm chuẩn bị
xuất ra ONNX, rồi đưa vào hàm convert() của thư viện convert_graph_to_onnx để
xuất mơ hình. Trong hàm main của project, gọi hàm chuyển mơ hình để xuất mơ
hình ra ONNX.
1. Framework: nền tảng xây dựng mơ hình. Trong trường hợp này ta sử dụng
11
2.
3.
4.
5.
6.
7.
“pt” vì mơ hình sử dụng là mơ hình PyTorch; nếu mơ hình được sử dụng là
TensorFlow chúng ta sẽ ghi vào “tf”.
Model: mơ hình cần được xuất sang ONNX.
Output: Đường dẫn đến thư mục xuất mơ hình.
Opset: Mã số phiên bản, dùng cho mơ hình ONNX.
Tokenizer: Thư viện phân chia từ trong câu văn đã định nghĩa ở khâu nhập
thư viện.
User external format: Mơ hình xuất có sử dụng định dạng tùy chọn từ bên
ngồi của người dùng khơng. Thường nên để là False.
Pipeline name: Tên của pipeline mô hình sử dụng.
Kết quả mong đợi: mơ hình xuất ra với đuôi .onnx tại thư mục định nghĩa ở (3).
2. Cài đặt project
Trong đồ án này, chúng ta sẽ tạo một project WinForms tích hợp mơ hình trên
thành một ứng dụng hồn chỉnh. Khi cấu hình project cần đảm bảo framework mục
tiêu của ứng dụng ít nhất là .NET 5.0 (không phải .NET Framework); ML.NET và
các thư viện liên quan được xây dựng trên .NET 5.0 và vì thế sẽ không chạy trong
các ứng dụng sử dụng .NET Framework.
Sau khi tạo xong project, chúng ta mở NuGet Package Manager (Tools
NuGet Package Manager Manage NuGet Packages for Solution…) để cài đặt
thêm một số gói và thư viện mà chúng ta sẽ cần đến. Cụ thể, chúng ta cần những thư
viện sau:
12
Microsoft.ML: Thư viện ML.NET chính; thành phần chủ chốt và “nhân vật
chính” của đề tài.
Microsoft.ML.OnnxRuntime: Chứa một số hàm để đọc và xử lý các mơ hình
ONNX.
Microsoft.ML.OnnxTransformer: Cung cấp lớp xử lý dữ liệu các mơ hình
transformer dạng ONNX
BERTTokenizers: Cung cấp chức năng phân chia câu thành từ, do mặc định
.NET khơng có chức năng này.
Chúng ta ngồi ra sẽ làm thêm một hàm có chức năng đọc chữ từ một file text
đưa vào ứng dụng. Hàm này sẽ được sử dụng sau này để ứng dụng đọc file từ điển
của mơ hình lấy ngữ vựng; ngữ vựng này kết hợp với chức năng phân chia câu sẽ
giúp mã hóa truy vấn từ ngơn ngữ người sang ngôn ngữ máy, và dịch kết quả máy
sang ngôn ngữ người.
13
3. Định nghĩa dữ liệu nhập và xuất
Vốn là máy, mơ hình xử lý ngơn ngữ tự nhiên khơng thể nào hiểu được ngữ
cảnh mình đưa vào và câu trả lời mong đợi giống như một con người được. Chúng
chỉ thấy thơng tin mình đưa vào là một chuỗi ký tự mang giá trị khác nhau nó phải
xử lý, và xuất ra cũng một chuỗi ký tự giống vậy. Vì thế, trước tiên ứng dụng của
chúng ta phải định nghĩa mơ hình dữ liệu mơ hình sẽ nhận được và xuất ra.
Tải ứng dụng Netron rồi mở mơ hình ONNX có được từ phần 1 nêu trên.
Netron là một ứng dụng trực quan hóa các mơ hình mạng thần kinh, deep learning
và machine learning, và hỗ trợ nhiều kiểu mô hình khác nhau. Mơ hình ONNX sẽ
có hình dáng giống như sau đây:
14
Có rất nhiều thơng tin và node khác nhau cấu thành nên mơ hình này, tuy
nhiên chúng ta chỉ quan tâm đến đầu vào và ra của mơ hình. Nhấp vào một trong các
node input hoặc output (thường các node này sẽ ở tận đầu hoặc tận cuối của biểu đồ)
và màn hình đặc tính phía bên phải sẽ hiển thị hình dáng của đầu vào và đầu ra, gồm
các thuộc tính nào, kiểu dữ liệu gì và kích cỡ trường đó.
Với thơng tin này, ta quay lại ứng dụng của mình trên Visual Studio và tạo
hai lớp InputData và Prediction, định hình đầu vào và ra của mơ hình. Mỗi thuộc
tính trong Netron là một mảng dữ liệu mang tên và kiểu dữ liệu tương ứng trong
.NET. Đặc biệt quan trọng là hai thuộc tính ColumnName và VectorType được
cung cấp bởi Microsoft.ML; hai thuộc tính này báo cho ứng dụng biết xử lý đầu vào
và ra với mơ hình như thế nào. Giá trị ColumnName là tên của thuộc tính ứng với
mảng đó trong Netron (bảo đảm tên trong Netron là gì ColumnName tên phải y
chang vậy), và giá trị của VectorType là giá trị tương ứng với thuộc tính đó trong
Netron trong mục type.
Mơ hình này có trường hợp đặc biệt là giá trị của mỗi cội không phải là một
con số cụ thể, mà thay vào đó là batch và sequence. Trong transformers, batching là
một kỹ thuật cho phép mơ hình hoạt động khi người dùng nhập vào nhiều câu văn
cùng lúc, cho phép mơ hình tạo nên một “cụm” các câu khác nhau thành một
sequence, một chuỗi ký tự liên tiếp. Sequence trong đây là độ dài tối đa của một
batch, hay nói cách khác, sequence càng lớn mơ hình có thể xử lý những ngữ cảnh,
truy vấn dài hơn. Đa số các mơ hình transformers hỗ trợ xử lý những chuỗi có độ
dài từ 512 đến 1024 ký tự, và sẽ gặp sự cố nếu nó cố xử lý những chuỗi dài hơn.
Để đơn giản hóa mọi việc, trong ví dụ này ta sẽ đặt batch giá trị bằng một, để
ứng dụng chuyển thông tin đầu vào thành một chuỗi duy nhất thay vì chia nhỏ thành
nhiều chuỗi hơn nữa. Chúng ta cũng sẽ đặt kích cỡ chuỗi tối đa là 512.
15
4. Xây dựng, luyện và dự đốn
Việc mơ hình sử dụng ban đầu có định dạng PyTorch, nay mới chuyển sang
ONNX yêu cầu việc chúng ta phải huấn luyện lại mơ hình để thích nghi với định
dạng mới, và lớp ModelTrainer có vai trị đảm nhiệm vụ đó. ModelTrainer thực
hiện điều đấy bằng cách tạo đối tượng MLContext, một lớp cung cấp phương pháp
tạo thành phần cho việc chuẩn bị dữ liệu, tạo tính năng, luyện tập, dự đốn và đánh
giá mơ hình, và là lớp ngữ cảnh dùng chung cho tất cả các tác vụ trên ML.NET. Từ
MLContext, ta gọi Transforms.ApplyOnnxModel(), truyền vào đó một Dictionary
thể hiện cấu trúc dữ liệu nhập/xuất đã định nghĩa ở trên, cùng với tên các cột nhập
và xuất để xây dựng pipeline dự đốn của mơ hình. Cũng cùng trong hàm xây dựng
16
mơ hình ta gọi Fit() lên pipeline để tiến hành luyện tập mơ hình, giúp mơ hình này
có thể khớp được với dữ liệu rỗng để ta có thể áp dụng lược đồ dữ liệu vào mơ hình.
So với lớp vừa mới kể trên, lớp Predictor còn đơn giản hơn: nhận một mơ
hình đã được luyện sẵn, tạo một động cơ dự đốn (prediction engine) từ mơ hình đó,
sau đó dùng động cơ để dự đoán trên dữ liệu mới. Lớp Predictor sẽ tạo động cơ này
bằng mơ hình đã qua luyện tập trong lớp ModelTrainer, sử dụng hai lớp InputData
và Prediction như là tham số đầu vào/ra, và khi đến lúc cần dự đốn, mơ hình sẽ
nhận dữ liệu đầu vào dạng InputData và truyền vào hàm Predict() gọi trên mơ hình
đấy để tiến hành dự đốn.
17
Để hổ trợ quá trình phân từ trong câu, chúng ta sẽ định nghĩa thêm bộ biểu
tượng mặc định của BERT. BERT phân biệt giữa các câu văn và biểu tượng khác
nhau thông qua các token như [UNK], [CLS] và [SEP]; để định nghĩa các biểu tượng
ấy trong ứng dụng của mình, tham khảo từ điển từ vựng ứng với mơ hình được sử
dụng trong ứng dụng. Các giá trị ứng với các token là số thứ tự của hàng ứng với
biểu tượng đó trong từ điển. (chú ý: trong các IDE và trình soạn thảo văn bản hàng
đầu tiên ln là hàng 1, vì thế để khớp với từ điển các giá trị phải trừ thêm 1 do tính
tốn phân câu khi nhận từ điển sẽ lấy token ở hàng thứ nhất là phần tử thú 0 trong
danh sách các phần tự nhận vào).
Lớp BERT ghép tất cả các mảnh ghép lại với nhau và tiến hành việc tạo mơ
hình, dự đốn và xử lý dữ liệu trong ứng dụng. Từ mơ hình ONNX chúng ta khởi
tạo ModelTrainer luyện mơ hình và động cơ dự đốn từ mơ hình đã qua luyện tập,
và từ file từ điển chúng ta có được danh sách từ vựng. Ngồi ra, trong đồ án này,
chúng ta tạo cơ chế phân chia câu từ gói BERTTokenizer.
18
Trong lớp BERT sẽ có hàm BuildInput() có tác dụng mã hóa ngữ cảnh và
câu hỏi sử dụng cơ chế phân câu nêu trên. Cơ chế nhận vào ngữ cảnh, câu hỏi và
kích cỡ tối đa chuỗi ký tự (như ở mục 3), và xuất ra một đối tượng InputData mà mơ
hình sẽ thu nhận xử lý.
Hàm GetPredictions() nhận vào kết quả dự đốn của mơ hình, vị trí bắt đầu
trên chuỗi ký tự, số kết quả trả về và kích cỡ tối đa của chuỗi ký tự, và trả về danh
sách các kết quả được cho là tốt nhất (= số kết quả trả về ~ top kết quả điểm cao).
Mỗi kết quả trả về là vị trí đầu và cuối của câu trả lời trên chuỗi ký tự, và điểm tự
tin của mơ hình trên kết quả đó.
19
Hàm Predict() là hàm public duy nhất trong lớp, có công việc nhận ngữ cảnh
và câu hỏi và trả danh sách các câu trả lời nhận được từ mơ hình. Hàm mã hóa ngữ
cảnh và câu hỏi thành các token, tìm vị trí bắt đầu của ngữ cảnh sử dụng các hằng
số biểu tượng mặc định, đồng thời truyền các token vào BuildInput() xuất ra dữ liệu
đầu vào cho mô hình. Dữ liệu này được đưa vào Predictor để nhận chuỗi kết quả, và
các kết quả này cùng với vị trí bắt đầu của ngữ cảnh được đưa vào GetPredictions()
để phiên dịch và lấy kết quả cho người dùng. Trong GetPredictions() sẽ gọi
Untokenize() từ thư viện BERTTokenizers để phiên dịch token được trả ra từ mơ
hình sang ngơn ngữ người.
20
Đến đây là chúng ta đã hoàn thành tất cả các hàm và lớp cần thiết để tạo một
ứng dụng hỏi đáp tiếng Anh rồi. Để sử dụng mơ hình, tạo một đối tượng BERT khi
khởi tạo form chính, truyền vào đường dẫn đến mơ hình ONNX và file từ điển từ
vựng của mơ hình (nếu sử dụng BERTTokenizer gói có cung cấp từ điển dùng cho
chức năng phân từ). Chúng ta sau đó chỉ cần gắn một sự kiện truyền dữ liệu làm ngữ
cảnh và câu hỏi (như trong text box) và xuất ra câu trả lời cho người dùng xem.
21
Kết quả mong đợi: Ứng dụng xuất ra danh sách những đáp án tiếng Anh mơ hình
cho là đúng, và mức độ tự tin trên từng kết quả.
22
CHƯƠNG 4: TỰ ĐÁNH GIÁ
Nhìn chung, bản thân nhóm thấy đề tài này vừa hữu ích vừa thú vị. Khơng
những đây là một trong những vấn đề đáng quan tâm trong ngành Cơng nghệ Thơng
tin hiện nay, nhóm trước đây chưa từng làm việc với Machine Learning. Vì thế đề
tài này là một trải nghiệm hữu ích, và qua học kỳ nhóm cảm thấy hiểu biết hơn vệ
nguyên lý hoạt động của các mơ hình Machine Learning, cũng như cách áp dụng
vào phát triển ứng dụng.
Tuy nhiên, do thiếu nhân lực, và quản lý thời gian chưa tốt, bản thân nhóm
thấy làm việc thiếu hiệu quả. Quy trình và thời gian làm việc trên đồ án nhìn chung
vẫn bất bình thường, chưa có thời gian biểu cụ thể, và sản phẩm đạt được vẫn cịn
khá thơ; trong hình ví dụ ở trên có thể thấy rõ ràng là ứng dụng khơng có chức năng
sàng lọc hay tối ưu hóa kết quả, thậm chí đáp án mơ hình thấy tự tin nhất lại chưa
phải là đáp án chính xác nhất. Một phần dẫn đến những thiếu sót này cũng vì thiếu
kinh nghiệm, do nhóm trước đề tài này chưa từng làm việc với Python bao giờ, vì
thế phải nghiên cứu tìm hiểu về Python và cách tải những thư viện để có thể chuyển
mơ hình cần thiết sang ONNX.
23
CÁC LINK THAM KHẢO
ML.NET:
/> />ONNX: />Transformers: />PyTorch: />Chuyển từ PyTorch sang ONNX:
/> /> />Tích hợp mơ hình vào ML.NET:
/> /> />Mơ hình được sử dụng: />Link github đồ án:
/>(project
chuyển mơ hình sang ONNX)
(project chính áp
dụng mơ hình vào ứng dụng)