Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
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
Nội dung
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 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 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 ghi rõ họ tên) Contents CHƯƠNG I: GIỚI THIỆU Đề tài Lý chọn đề tài CHƯƠNG 2: LÝ THUYẾT CHUNG Machine Learning Microsoft ML.NET Luồng làm việc ML.NET ONNX BERT CHƯƠNG 3: THỰC HIỆN BÀI TOÁN .9 Chuyển mô hình sang ONNX Cài đặt project 11 Định nghĩa liệu nhập xuất 13 Xây dựng, luyện dự đoán 15 CHƯƠNG 4: TỰ ĐÁNH GIÁ 22 CÁC LINK THAM KHẢO 23 CHƯƠNG I: GIỚI THIỆU Đề tài Theo gợi ý giảng viên hướng dẫn, đề tài chọn “Tìm hiểu Microsoft ML.NET minh họa với toán hỏi – đáp tiếng Anh” Lý chọn đề tài Bước vào thời đại Công nghệ 4.0, ngành Cơng nghệ thơng tin có nhiều phát triển tiến ngành lĩnh vực khác Một lĩnh vực đáng ý nhiều người quan tâm trí tuệ nhân tạo, hay AI (Artificial Intelligence), chuyên môn trọng nhiều AI học máy, hay Machine Learning Những bước đột phá lĩnh vực hứa hẹn tự động hóa nhiều công việc tương lai với hiệu suất độ xác vượt bậc người Tuy nhiên, việc áp dụng Machine Learning vào ứng dụng có khơng phải lúc hồn thành ngày Để áp dụng Machine Learning đương nhiên phải có “Machine”, “máy” thực thao tác mong muốn, sau phải giúp máy học để có phần nửa cịn lại “Learning” Mà muốn đạt điều phải có liệu nguồn để học tham khảo, để hạn chế sai sót thiết phải có nhiều liệu xác nhiều trường hợp khác Machine Learning tốn nhiều thời gian tài nguyên tổ chức phải đầu tư vào liệu huấn luyện máy, bên cạnh thời gian cần phải bỏ để luyện máy thực thao tác theo mong muốn Chưa kể đến việc mơ hình tạo luyện ngôn ngữ, tảng lập trình mà lập trình viên chưa biết Vì thế, nhóm chọn đề tài với mục đích giới thiệu thư viện có khả áp dụng tạo ứng dụng Machine Learning cách dễ dàng nhanh chóng, sử dụng 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 mở mang kiến thức nhiều người ngành giúp mở rộng việc sử dụng áp dụng Machine Learning ứng dụng nhiều 5 CHƯƠNG 2: LÝ THUYẾT CHUNG Machine Learning Nói khái quát, Machine Learning nhánh nghiên cứu trí tuệ nhân tạo tập trung vào nghiên cứu phát triển thuật tốn máy tính có khả tự cải thiện thông qua kinh nghiệm sử dụng liệu giống người Việc dự đốn tính tốn kết mơ hình Machine Learning thuật tốn tự tạo mà khơng người lập trình tính kết Một mơ hình Machine Learning thường phát triển cách đưa vào liệu lịch sử cho phép thuật tốn dùng liệu để dự đoán kết mong đợi Việc liệu ngày nhiều đa dạng hơn, cộng với máy tính ngày mạnh lưu trữ liệu rẻ làm Machine Learning ngày đáng quan tâm Các mơ hình Machine Learning giải nhiều vấn đề với tốc độ quy mơ người khó đạt được, cho phép mơ hình cường hóa chí thay khả người cơng việc Ngồi ra, việc mơ hình Machine Learning dự đốn dựa liệu mẫu mà khơng cần lập trình để làm cho phép máy phát hiển xu hướng, họa tiết liệu, từ giúp tập đồn, cơng ty phát xu hướng hành vi khách hàng người dùng Microsoft ML.NET Ra mắt năm 2018, ML.NET thư viện Machine Learning mã nguồn mở đa tảng cho ngơn ngữ lập trình C# F#, phát triển Tập đoàn NET xuất Microsoft Mặc dù tương đối mới, MLNET khởi nguồn vào năm 2002 dự án nghiên cứu tìm kiếm điều hướng khai thác liệu từ văn sử dụng nội sản phẩm Microsoft, sau đổi tên thành TLC (The Learning Code) vào năm 2011; ML.NET sản phẩm dẫn xuất từ thư viện ML.NET chạy Windows, Linux macOS thông qua NET Core, Windows thông qua NET Framework Mọi tảng hỗ trợ chạy ML.NET 64 bit; 32 bit hỗ trợ Windows, trừ chức liên quan đến TensorFlow, LightGBM ONNX ML.NET hỗ trợ nhiều loại mơ hình dự đốn, phân loại, hồi quy, nhận diện dị thường, kiến nghị, liệu phân loại ảnh Mơ hình Machine Learning yếu tố trọng tâm ML.Net Mơ hình phải đặc tả bước thực chuyển đổi liệu đầu vào thành dự đốn Với ML.NET, mơ hình có thơng qua nhập vào mơ hình ONNX TensorFlow luyện sẵn, 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 ML.NET AutoML 6 Trong đồ án này, dùng ML.NET để tạo chương trình hỏi đáp tiếng Anh sử dụng mơ hình hỏi – đáp BERT Do mơ hình xây dựng tảng PyTorch, vốn không hỗ trợ ML.NET, trước hết phải chuyển mơ hình sang định dạng đọc ML.NET, ONNX Luồng làm việc ML.NET Q trình làm việc ML.NET nói riêng, q trình phát triển mơ hình Machine Learning nói chung, q trình mang tính lặp lặp lại Phát triển mơ hình thường trải qua bước sau: Thu thập tải liệu luyện tập vào đối tượng liệu (i.e IDataView ML.NET) Đặc tả pipeline thu thập thông tin 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ạng nhị phân để tích hợp vào ứng dụng Tải mơ hình vào đối tượng ITransformer Gọi CreatePredictionEngine.Predict() để tiến hành dự đoán ONNX Viết tắt cho Open Neural Network Exchange (tạm dịch: khu trao đổi mạng thần kinh mở), ONNX hệ sinh thái trí tuệ nhân tạo mã nguồn mở gồm nhiều công ty công nghệ tổ chức nghiên cứu với sứ mệnh thiết lập tiêu chuẩn xây dựng phát triển thuật tốn cơng cụ Machine Learning để khuyến khích tính sáng tạo hợp tác ngành trí tuệ nhân tạo Ban đầu phát triển đội PyTorch Facebook tên Toffee, tảng đổi tên lại thành ONNX vào tháng 9/2017, mắt Facebook Microsoft, hứa hẹn tăng tính tương tác framework khác cải thiện hiệu suất mạng thần kinh nhân tạo Để có mơ hình ONNX, người dùng tải mơ hình luyện sẵn từ ONNX Model Zoo, xuất mơ hình từ framework luyện Machine Learning PyTorch, chuyển mơ hình có sẵn sang ONNX sử dụng gói ONNXMLTools Python 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 kỷ thuật Machine Learning dựa mơ hình transformer (mơ hình Machine Learning tự ý) dùng xử lý ngôn ngữ tự nhiên phát triển Google Lần đầu xuất vào năm 2018, Google bắt đầu áp dụng BERT vào Google Search từ năm 2019; từ đến BERT áp dụng vào 70 ngôn ngữ khác Search, truy vấn tiếng Anh xử lý BERT BERT luyện trước hai tác vụ: định hình ngơn ngữ dự đốn câu tiếp theo; BERT học cách nhúng từ thông qua ngữ cảnh Sau giai đoạn tiền luyện tập, BERT tinh chỉnh với tài nguyên liệu bé để tối ưu hóa hiệu suất công việc cụ thể 9 CHƯƠNG 3: THỰC HIỆN BÀI TỐN Chuyển mơ hình sang ONNX Mơ hình sử dụng để giải toán mơ hình BERT thuộc dịng mơ hình transformer, xây dựng framework PyTorch, trước hết cần cấu hình hệ thống để làm việc với Python transformers Sau cài đặt Python, cần thiết lập môi trường ảo để cài đặt số thư viện thêm Cách dễ đạt điều tạo project Python Visual Studio, sau cấu hình tạo môi trường ảo Visual Studio Một tạo xong, mở Python cmd, điều hướng thư mục chứa mơi trường ảo chạy dịng lệnh sau để tải PyTorch transformers: \venv\Scripts\activate pip3 install upgrade pip pip3 install torch pip3 install transformers Trong project, tiến hành nhập vào thư viện cần thiết: Các thư viện nhập/xuất liệu tiêu chuẩn Python 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ập đến, Path để giúp project đọc xuất file Các mơ hình transformers tự động lưu vào nhớ cache máy lần đầu sử dụng, tải mơ hình cần chạy code nhập trực tiếp từ thư viện transformer, không cần pull dùng github Trên trang repository mô hình có nút “Use in Transformers”; click vào code cần chép để nhập mơ hình vào Python Cũng từ thư viện transformers, ta nhập vào chức cho phép chuyển 10 mô hình tải sang định dạng ONNX Sau tải mơ hình xong, tiến hành tạo hàm chuyển mơ hình tải sang định dạng ONNX Nếu muốn, thử xem mơ hình tải chưa cách làm truy vấn thử nghiệm Để làm dự đoán, cần định nghĩa pipeline dùng để xử lý truy vấn người dùng; pipeline trường hợp pipeline chuyên xử lý hỏi – đáp, sử dụng mô hình vừa tải tokenizer (bộ hàm dùng để chia từ câu) định nghĩa Sau đó, làm câu truy vấn, bao gồm nội dung (context – chứa thông tin trả lời cho câu hỏi truy vấn) câu hỏi cần giải đáp Nếu mơ hình tải thành công, cmd xuất câu trả lời truy vấn, cộng vởi điểm thể mức độ tự tin mơ hình kết đưa Sau xác nhận mơ hình tải hoạt động, gọi hàm eval() mơ hình để chuyển mơ hình sang trạng thái “đánh giá” nhằm chuẩn bị xuất ONNX, đưa vào hàm convert() thư viện convert_graph_to_onnx để xuất mơ hình Trong hàm main project, gọi hàm chuyển mơ hình để xuất mơ hình ONNX Framework: tảng xây dựng mơ hình Trong trường hợp ta sử dụng 11 “pt” mơ hình sử dụng mơ hình PyTorch; mơ hình sử dụng TensorFlow ghi vào “tf” Model: mơ hình cần 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ừ 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 người dùng khơng Thường nên để False Pipeline name: Tên pipeline mơ hình sử dụng Kết mong đợi: mơ hình xuất với đuôi onnx thư mục định nghĩa (3) Cài đặt project Trong đồ án này, tạo project WinForms tích hợp mơ hình thành ứng dụng hồn chỉnh Khi cấu hình project cần đảm bảo framework mục tiêu ứng dụng NET 5.0 (không phải NET Framework); ML.NET thư viện liên quan xây dựng NET 5.0 khơng chạy ứng dụng sử dụng NET Framework Sau tạo xong project, mở NuGet Package Manager (Tools NuGet Package Manager Manage NuGet Packages for Solution…) để cài đặt thêm số gói thư viện mà cần đến Cụ thể, cần thư viện sau: 12 Microsoft.ML: Thư viện ML.NET chính; thành phần chủ chốt “nhân vật chính” đề tài Microsoft.ML.OnnxRuntime: Chứa số hàm để đọc xử lý mơ hình ONNX Microsoft.ML.OnnxTransformer: Cung cấp lớp xử lý liệu mơ hình transformer dạng ONNX BERTTokenizers: Cung cấp chức phân chia câu thành từ, mặc định NET khơng có chức Chúng ta ngồi làm thêm hàm có chức đọc chữ từ file text đưa vào ứng dụng Hàm sử dụng sau để ứng dụng đọc file từ điển mơ hình lấy ngữ vựng; ngữ vựng kết hợp với chức phân chia câu giúp mã hóa truy vấn từ ngôn ngữ người sang ngôn ngữ máy, dịch kết máy sang ngôn ngữ người 13 Định nghĩa liệu nhập xuất Vốn máy, mô hình xử lý ngơn ngữ tự nhiên khơng thể hiểu ngữ cảnh đưa vào câu trả lời mong đợi giống người Chúng thấy thơng tin đưa vào chuỗi ký tự mang giá trị khác phải xử lý, xuất chuỗi ký tự giống Vì thế, trước tiên ứng dụng phải định nghĩa mơ hình liệu mơ hình nhận xuất Tải ứng dụng Netron mở mơ hình ONNX có từ phần nêu Netron ứng dụng trực quan hóa mơ hình mạng thần kinh, deep learning machine learning, hỗ trợ nhiều kiểu mơ hình khác Mơ hình ONNX có hình dáng giống sau đây: 14 Có nhiều thơng tin node khác cấu thành nên mơ hình này, nhiên quan tâm đến đầu vào mô hình Nhấp vào node input output (thường node tận đầu tận cuối biểu đồ) hình đặc tính phía bên phải hiển thị hình dáng đầu vào đầu ra, gồm thuộc tính nào, kiểu liệu kích cỡ trường Với thơng tin này, ta quay lại ứng dụng Visual Studio tạo hai lớp InputData Prediction, định hình đầu vào mơ hình Mỗi thuộc tính Netron mảng liệu mang tên kiểu liệu tương ứng NET Đặc biệt quan trọng hai thuộc tính ColumnName VectorType cung cấp Microsoft.ML; hai thuộc tính báo cho ứng dụng biết xử lý đầu vào với mô Giá trị ColumnName tên thuộc tính ứng với mảng Netron (bảo đảm tên Netron ColumnName tên phải y chang vậy), giá trị VectorType giá trị tương ứng với thuộc tính Netron mục type Mơ hình có trường hợp đặc biệt giá trị cội số cụ thể, mà thay vào batch sequence Trong transformers, batching kỹ thuật cho phép mô hình hoạt động người dùng nhập vào nhiều câu văn lúc, cho phép mơ hình tạo nên “cụm” câu khác thành sequence, chuỗi ký tự liên tiếp Sequence độ dài tối đa batch, hay nói cách khác, sequence lớn mơ hình xử lý ngữ cảnh, truy vấn dài Đa số mơ hình transformers hỗ trợ xử lý chuỗi có độ dài từ 512 đến 1024 ký tự, gặp cố cố xử lý chuỗi dài Để đơn giản hóa việc, ví dụ ta đặt batch giá trị một, để ứng dụng chuyển thông tin đầu vào thành chuỗi thay chia nhỏ thành nhiều chuỗi Chúng ta đặt kích cỡ chuỗi tối đa 512 15 Xây dựng, luyện dự đoán Việc mơ hình sử dụng ban đầu có định dạng PyTorch, chuyển sang ONNX yêu cầu việc phải huấn luyện lại mơ hình để thích nghi với định dạng mới, lớp ModelTrainer có vai trị đảm nhiệm vụ ModelTrainer thực điều cách tạo đối tượng MLContext, lớp cung cấp phương pháp tạo thành phần cho việc chuẩn bị liệu, tạo tính năng, luyện tập, dự đốn đánh giá mơ hình, lớp ngữ cảnh dùng chung cho tất tác vụ ML.NET Từ MLContext, ta gọi Transforms.ApplyOnnxModel(), truyền vào Dictionary thể cấu trúc liệu nhập/xuất định nghĩa trên, với tên cột nhập xuất để xây dựng pipeline dự đốn mơ hình Cũng 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 khớp với liệu rỗng để ta áp dụng lược đồ liệu vào mơ hình So với lớp vừa kể trên, lớp Predictor cịn đơn giản hơn: nhận mơ hình luyện sẵn, tạo động dự đoán (prediction engine) từ mơ hình đó, sau dùng động để dự đoán liệu Lớp Predictor tạo động mơ hình qua luyện tập lớp ModelTrainer, sử dụng hai lớp InputData Prediction tham số đầu vào/ra, đến lúc cần dự đốn, mơ hình nhận liệu đầu vào dạng InputData truyền vào hàm Predict() gọi mơ hình để tiến hành dự đốn 17 Để hổ trợ trình phân từ câu, định nghĩa thêm biểu tượng mặc định BERT BERT phân biệt câu văn biểu tượng khác thông qua token [UNK], [CLS] [SEP]; để định nghĩa biểu tượng ứng dụng mình, tham khảo từ điển từ vựng ứng với mơ hình sử dụng ứng dụng Các giá trị ứng với token số thứ tự hàng ứng với biểu tượng từ điển (chú ý: IDE trình soạn thảo văn hàng hàng 1, để khớp với từ điển giá trị phải trừ thêm tính tốn phân câu nhận từ điển lấy token hàng thứ phần tử thú danh sách phần tự nhận vào) Lớp BERT ghép tất mảnh ghép lại với tiến hành việc tạo mô hình, dự đốn xử lý liệu ứng dụng Từ mơ hình ONNX khởi tạo ModelTrainer luyện mơ hình động dự đốn từ mơ hình qua luyện tập, từ file từ điển có danh sách từ vựng Ngồi ra, đồ án này, tạo chế phân chia câu từ gói BERTTokenizer 18 Trong lớp BERT có hàm BuildInput() có tác dụng mã hóa ngữ cảnh câu hỏi sử dụng chế phân câu nêu Cơ chế nhận vào ngữ cảnh, câu hỏi kích cỡ tối đa chuỗi ký tự (như mục 3), xuất đối tượng InputData mà mô hình thu nhận xử lý Hàm GetPredictions() nhận vào kết dự đốn mơ hình, vị trí bắt đầu chuỗi ký tự, số kết trả kích cỡ tối đa chuỗi ký tự, trả danh sách kết cho tốt (= số kết trả ~ top kết điểm cao) Mỗi kết trả vị trí đầu cuối câu trả lời chuỗi ký tự, điểm tự tin mơ hình kết 19 Hàm Predict() hàm public lớp, có cơng việc nhận ngữ cảnh câu hỏi trả danh sách câu trả lời nhận từ mơ hình Hàm mã hóa ngữ cảnh câu hỏi thành token, tìm vị trí bắt đầu ngữ cảnh sử dụng số biểu tượng mặc định, đồng thời truyền token vào BuildInput() xuất liệu đầu vào cho mơ hình Dữ liệu đưa vào Predictor để nhận chuỗi kết quả, kết với vị trí bắt đầu ngữ cảnh đưa vào GetPredictions() để phiên dịch lấy kết cho người dùng Trong GetPredictions() gọi Untokenize() từ thư viện BERTTokenizers để phiên dịch token trả từ mơ hình sang ngôn ngữ người 20 Đến hoàn thành tất hàm lớp cần thiết để tạo ứng dụng hỏi đáp tiếng Anh Để sử dụng mơ hình, tạo đối tượng BERT khởi tạo form chính, truyền vào đường dẫn đến mơ hình ONNX file từ điển từ vựng mơ hình (nếu sử dụng BERTTokenizer gói có cung cấp từ điển dùng cho chức phân từ) Chúng ta sau cần gắn kiện truyền liệu làm ngữ cảnh câu hỏi (như text box) xuất câu trả lời cho người dùng xem 21 Kết mong đợi: Ứng dụng xuất danh sách đáp án tiếng Anh mơ hình cho đúng, mức độ tự tin kết 22 CHƯƠNG 4: TỰ ĐÁNH GIÁ Nhìn chung, thân nhóm thấy đề tài vừa hữu ích vừa thú vị Không vấn đề đáng quan tâm ngành Công nghệ Thông tin nay, nhóm trước chưa làm việc với Machine Learning Vì đề tài trải nghiệm hữu ích, qua học kỳ nhóm cảm thấy hiểu biết vệ nguyên lý hoạt động mơ hình Machine Learning, cách áp dụng vào phát triển ứng dụng Tuy nhiên, thiếu nhân lực, quản lý thời gian chưa tốt, thân nhóm thấy làm việc thiếu hiệu Quy trình thời gian làm việc đồ án nhìn chung bất bình thường, chưa có thời gian biểu cụ thể, sản phẩm đạt cịn thơ; hình ví dụ thấy rõ ràng ứng dụng khơng có chức sàng lọc hay tối ưu hóa kết quả, chí đáp án mơ hình thấy tự tin lại chưa phải đáp án xác Một phần dẫn đến thiếu sót thiếu kinh nghiệm, nhóm trước đề tài chưa làm việc với Python bao giờ, phải nghiên cứu tìm hiểu Python cách tải thư viện để chuyển mơ hình cần thiết sang ONNX 23 CÁC LINK THAM KHẢO ML.NET: https://en.wikipedia.org/wiki/ML.NET https://docs.microsoft.com/en-us/dotnet/machine-learning/ ONNX: https://docs.microsoft.com/en-us/windows/ai/windows-ml/get-onnx-model Transformers: https://huggingface.co/docs/transformers/installation PyTorch: https://pytorch.org/ Chuyển từ PyTorch sang ONNX: https://docs.microsoft.com/en-us/windows/ai/windows-ml/tutorials/pytorchconvert-model https://github.com/huggingface/notebooks/blob/main/examples/onnxexport.ipynb https://huggingface.co/docs/transformers/serialization Tích hợp mơ hình vào ML.NET: https://rubikscode.net/2021/04/19/machine-learning-with-ml-net-nlp-withbert/ https://rubikscode.net/2021/10/25/using-huggingface-transformers-with-mlnet/ https://rubikscode.net/2022/03/14/bert-tokenizers-for-ml-net/ Mơ hình sử dụng: https://huggingface.co/csarron/bert-base-uncased-squadv1/tree/main Link github đồ án: https://github.com/HungLTL/bert_uncased_pytorch_to_onnx (project chuyển mơ hình sang ONNX) https://github.com/HungLTL/bert_uncased_onnx_mlnet (project áp dụng mơ hình vào ứng dụng) ... ML. NET CLI ML. NET AutoML 6 Trong đồ án này, dùng ML. NET để tạo chương trình hỏi đáp tiếng Anh sử dụng mơ hình hỏi – đáp BERT Do mơ hình xây dựng tảng PyTorch, vốn không hỗ trợ ML. NET, trước... Microsoft ML. NET minh họa với toán hỏi – đáp tiếng Anh? ?? Lý chọn đề tài Bước vào thời đại Công nghệ 4.0, ngành Công nghệ thông tin có nhiều phát triển tiến ngành lĩnh vực khác Một lĩnh vực đáng ý nhiều... đầu vào thành dự đoán Với ML. NET, mơ hình có thơng qua nhập vào mơ hình ONNX TensorFlow luyện sẵn, tự luyện mơ hình riêng sử dụng extension ML. NET Model Builder cho Visual Studio thông qua ML. NET