Tải bản đầy đủ (.pdf) (19 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.09 MB, 19 trang )

ĐẠ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 hố 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
đố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 tố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 tố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. Ngồ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 đồ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 hố 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: />
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 hố 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ự đố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 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ự đố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ự đố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 tố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ự đố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: />ONNX model: />Huggingface: />Transformers: />Xử lý ngôn ngữ tự nhiên: />Cách chuyển mơ hình từ PyTorch sang ONNX: />
Link mơ hình: />Mơ hình máy học NLP cho .NET: />BERTTokenizer: />
19 | P a g e




×