Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Cao đẳng - Đại học Công nghệ thông tin 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...

Tài liệu 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

.PDF
19
1
117

Mô tả:

ĐẠ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 -

Tài liệu liên quan