1. Trang chủ
  2. » Cao đẳng - Đại học

Tìm hiểu MICROSOFT ML NET và minh họa với bài toán hỏi đáp tiếng anh (báo cáo cuối kì đồ án 2)

23 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 1,41 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 toán dùng dữ liệu đó để dự đoán những kết quả mong đợi.. Ngoài ra, việc các mô

Trang 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:

Trang 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)

Trang 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 TOÁ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

Trang 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

Trang 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 toá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ự đoán

và tính toán kết quả của một mô hình Machine Learning là do chính thuật toá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 toá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 Ngoài ra, việc các mô hình Machine Learning có thể dự đoá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 đoà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

Trang 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ư quá trình phát triển mô hình Machine Learning nói chung, là một quá 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 toá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

Trang 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

Trang 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 toá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ự đoá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ể

Trang 9

CHƯƠNG 3: THỰC HIỆN BÀI TOÁ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 toá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

Trang 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

Trang 11

“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”

2 Model: mô hình cần được xuất sang ONNX

3 Output: Đường dẫn đến thư mục xuất mô hình

4 Opset: Mã số phiên bản, dùng cho mô hình ONNX

5 Tokenizer: Thư viện phân chia từ trong câu văn đã định nghĩa ở khâu nhập thư viện

6 User external format: Mô hình xuất có sử dụng định dạng tùy chọn từ bên ngoài của người dùng không Thường nên để là False

7 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 hoà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

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:

Trang 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 ngoà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

Trang 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:

Trang 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

Ngày đăng: 16/06/2022, 20:37

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w