xây dựng hệ thống sinh mã máy tự động áp dụng các phương pháp tinh chỉnh tham số

94 0 0
Tài liệu đã được kiểm tra trùng lặp
xây dựng hệ thống sinh mã máy tự động áp dụng các phương pháp tinh chỉnh tham số

Đ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

Dựa trên những nghiên cứu mớiđược công bố công khai, và với mục tiêu xây dựng hệ thống sinh mã máy tựđộng dựa trên yêu cầu đặc tả bằng ngôn ngữ tự nhiên, trong đề tài luận vănnày học viê

Trang 1

ĐẠI HỌC QUỐC GIA TP.HCM

TRƯỜNG ĐẠI HỌC BÁCH KHOA——————–

LÊ VŨ MINH HUY

XÂY DỰNG HỆ THỐNG SINH MÃ MÁY TỰ ĐỘNGÁP DỤNG CÁC PHƯƠNG PHÁP TINH CHỈNH THAM SỐ

Chuyên ngành: KHOA HỌC MÁY TÍNHMã số: 8480101

LUẬN VĂN THẠC SĨ

TP HỒ CHÍ MINH, tháng 1 năm 2024

Trang 2

CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠITRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQG-HCM

Cán bộ hướng dẫn khoa học:

Cán bộ chấm nhận xét 1:TS Trương Tuấn AnhCán bộ chấm nhận xét 2:TS Trần Thanh Tùng

Luận văn thạc sĩ được bảo vệ tại Trường Đại học Bách Khoa, ĐHQG Tp.HCM ngày 22 tháng 01 năm 2024.

Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm:1 Chủ tịch: PGS.TS Võ Thị Ngọc Châu

2 Thư ký: TS Phan Trọng Nhân3 Phản biện 1: TS Trương Tuấn Anh4 Phản biện 2: TS Trần Thanh Tùng5 Ủy viên: TS Nguyễn Minh Hải (VNG)

Xác nhận của Chủ tịch Hội đồng đánh giá LV và Trưởng Khoa quản lýchuyên ngành sau khi luận văn đã được sửa chữa (nếu có).

KỸ THUẬT MÁY TÍNH

PGS.TS Võ Thị Ngọc Châu

Trang 3

ĐẠI HỌC QUỐC GIA TP.HCM

TRƯỜNG ĐẠI HỌC BÁCH KHOA

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAMĐộc lập - Tự do - Hạnh phúc

NHIỆM VỤ LUẬN VĂN THẠC SĨ

Họ tên học viên: Lê Vũ Minh HuyMSHV: 2170525Ngày, tháng, năm sinh: 20/10/1999Nơi sinh: Phú YênChuyên ngành: Khoa Học Máy TínhMã số : 8480101

I TÊN ĐỀ TÀI: XÂY DỰNG HỆ THỐNG SINH MÃ MÁY TỰ ĐỘNG ÁP DỤNG CÁCPHƯƠNG PHÁP TINH CHỈNH THAM SỐ

(CODE GENERATION WITH PARAMETER-EFFICIENT FINE-TUNING METHODS)II NHIỆM VỤ VÀ NỘI DUNG:

-Xây dựng tập 20,000 cặp dữ liệu định hướng cho ngôn ngữ TypeScript, phát triển dự ánđặc thù và trích xuất dữ liệu từ dự án đặc thù, xây dựng bộ dữ liệu đặc thù.

-Nghiên cứu và xây dựng mô hình sinh mã máy cho kiến thức tổng quan với ngôn ngữTypeScript dựa trên tập dữ liệu 20,000 cặp tự xây dựng.

-Nghiên cứu và xây dựng mô hình sinh mã máy cho kiến thức đặc thù với ngôn ngữTypeScript dựa trên tập dữ liệu đặc thù tự xây dựng.

-Thử nghiệm, thống kê kết quả hai mô hình đề xuất trên với mô hình nền tảng, rút ra đánhgiá và nhận xét.

-Hiện thực hệ thống giao diện người dùng trực quan giúp người dùng tương tác được vớicác mô hình đã đề xuất.

III.NGÀY GIAO NHIỆM VỤ : 04/09/2023

IV.NGÀY HOÀN THÀNH NHIỆM VỤ: 18/12/2023

V CÁN BỘ HƯỚNG DẪN: PGS.TS Quản Thành Thơ, TS Nguyễn Tiến Thịnh

Trang 4

LỜI CẢM ƠN

Để hoàn thành luận văn tốt nghiệp này, học viên đã nhận được sự hỗ trợtích cực từ rất nhiều phía Đầu tiên, em xin gửi lời cảm ơn chân thành đến

giảng viên hướng dẫn trực tiếp của em, thầy PGS.TS.Quản Thành Thơ.

Thầy là người định hướng chính, cũng như theo dõi đốc thúc sát sao quátrình thực hiện đề tài Hơn nữa, em và thầy tình cờ gắn bó với nhau từ tậnnhững năm đầu tiên khi còn là sinh viên của Đại học Bách Khoa, thầy truyềncho em về niềm đam mê với học máy, học sâu, xử lí ngôn ngữ tự nhiên vànhiều vấn đề khác trong Lĩnh vực Khoa học Máy tính.

Em xin được gửi lời cảm ơn đến thầy TS Nguyễn Tiến Thịnh, thầy đã

đã đưa ra những góp ý quý báu để em hoàn thiện hơn Luận văn tốt nghiệpnày

Em xin được tỏ lòng biết ơn sự tận tình dạy dỗ, giúp đỡ của quý thầy côtrong khoa Khoa học và Kỹ thuật Máy tính nói riêng cũng như trường Đạihọc Bách khoa TP Hồ Chí Minh nói chung về những kiến thức quý giá khiem còn ngồi trên ghế nhà trường.

Em xin cảm ơn những bạn bè, đồng nghiệp đã hỗ trợ em trong suốt thờigian học tập, đồng hành cùng em qua những bài tập lớn hay những yêu cầugấp rút ở công ty.

Cuối cùng và quan trọng nhất, em muốn gửi lời cảm ơn đến gia đình đãluôn quan tâm, động viên, giúp đỡ cả về thể chất lẫn tinh thần, về nghị lựcvà sức khỏe Nếu không có gia đình bên cạnh, em chắc hẳn đã không thểhoàn thành được luận văn tốt nghiệp lần này.

Với lòng biết ơn chân thành, em xin gửi lời chúc sức khỏe cũng nhưnhững lời chúc tốt đẹp nhất đến các quý thầy cô trong Khoa Khoa học và Kỹthuật Máy tính - Trường Đại Học Bách Khoa Đại Học Quốc Gia Thành phốHồ Chí Minh.

Trang 5

TÓM TẮT LUẬN VĂN

Bài toán sinh mã tự động là một trong những bài toán quan trọng trong lĩnhvực trí tuệ nhân tạo và phát triển phần mềm Thậm chí, nó còn được xemnhư "chén thánh" vì độ phức tạp cũng như ý nghĩa khi nó được hoàn thiện.Trong những năm trở lại đây, bài toán này càng được quan tâm và trở nênphổ biến hơn do sự phát triển mạnh mẽ của lĩnh vực trí tuệ nhân tạo và xửlý ngôn ngữ tự nhiên Bước đột phá của các mô hình ngôn ngữ lớn là mộtthành tựu vô cùng to lớn, giúp loài người ngày càng gần hơn với thế giới màmáy móc hiểu ngôn ngữ của chúng ta đến ngưỡng có thể hỗ trợ các tác vụlập trình tự động và chính xác Tuy nhiên, để xây dựng một hệ thống sinh mãmáy như vậy đòi hỏi chi phí và nguồn lực không nhỏ, nó dần trở thành cuộcđua của những tập đoàn lớn trên thế giới Dựa trên những nghiên cứu mớiđược công bố công khai, và với mục tiêu xây dựng hệ thống sinh mã máy tựđộng dựa trên yêu cầu đặc tả bằng ngôn ngữ tự nhiên, trong đề tài luận vănnày học viên tập trung khảo sát nghiên cứu những mô hình ngôn ngữ lớn vềmã nguồn cùng các phương pháp tinh chỉnh tham số phù hợp Xuyên suốtquá trình thực hiện luận văn, học viên xây dựng mới tập 20,000 cặp dữ liệuđịnh hướng cho ngôn ngữ TypeScript, tập 40 cặp dữ liệu từ dự án đặc thù cánhân Đồng thời, học viên xây dựng thành công hai mô hình đề xuất để sinhmã lập trình TypeScript trên kiến thức tổng quan và kiến thức đặc thù chodự án cụ thể Công trình luận văn cũng được viết thành một chương trongcuốn sách: Generative Artificial Intelligence for Software Engineering - AResearch Agenda dưới sự hướng dẫn của PGS.TS.Quản Thành Thơ và cácgiảng viên, nhà nghiên cứu trên khắp thế giới.

Trang 6

ABSTRACT OF DISSERTATION

Commencing with the realm of code generation, the automatic creation ofsource code stands as a formidable challenge within the domains of arti-ficial intelligence and software development Often regarded as the "holygrail", this problem is characterized by its complexity and the meaning ofit In recent years, heightened attention and prevalence have surrounded thisproblem due to the robust advancements in the fields of artificial intelli-gence and natural language processing The groundbreaking achievementsof large language models represent a monumental stride forward, bringinghumanity closer to a world where machines comprehend our language toa level that they are able to help us with automated and precise program-ming tasks However, the construction of such a code generation systemdemands substantial costs and resources, transforming it into a competi-tive pursuit among major corporations worldwide Based on recent publiclyresearch and with the objective of constructing an automated code gener-ation system based on natural language specifications, this thesis focuseson investigating and analyzing large language models for code, along withsuitable parameter efficient fine-tuning methods Throughout the thesis, Isystematically examines and constructs a new dataset consisting of 20,000instruction pairs for the TypeScript language and an additional 40 pairs fromspecific personal projects Simultaneously, the researcher successfully de-velops two proposed models for generating TypeScript programming codebased on general knowledge and project-specific information The culmina-tion of this research is presented as a chapter in the book titled "GenerativeArtificial Intelligence for Software Engineering - A Research Agenda," un-der the guidance of Associate Professor Dr Quản Thành Thơ and variouslecturers and researchers worldwide.

Trang 7

LỜI CAM ĐOAN

Tôi xin cam đoan đề tài luận văn tốt nghiệp: “XÂY DỰNG HỆ THỐNGSINH MÃ MÁY TỰ ĐỘNG ÁP DỤNG CÁC PHƯƠNG PHÁP TINH CHỈNHTHAM SỐ” là công trình nghiên cứu của bản thân Những phần tài liệu đượcsử dụng trong luận văn đã được nêu rõ trong phần Tài liệu tham khảo Cácsố liệu, kết quả trình bày trong luận văn là hoàn toàn trung thực, nếu có saisót tôi xin chịu hoàn toàn trách nhiệm và chịu mọi kỷ luật của bộ môn vànhà trường đề ra.

Học viên

Lê Vũ Minh Huy

Trang 8

Mục lục

1.1 Giới thiệu chung 1

1.2 Tổng quan về Hệ thống sinh mã tự động 2

1.3 Mục tiêu đề tài 8

1.4 Giới hạn đề tài và đối tượng nghiên cứu 9

1.5 Đóng góp của luận văn 10

3.2 Kiến trúc Transformer 21

3.3 Các phương pháp tinh chỉnh tối ưu tham số 24

3.4 Phương pháp tối ưu tham sốLow-Rank Adaptation (LoRA) 26

3.5 Phương pháp tinh chỉnh có hướng dẫn(Instruction Tuning) 28

4Tập dữ liệu304.1 Tập dữ liệu TypeScript-Instruct 20K 30

4.2 Tập dữ liệu cá nhân 33

Trang 9

5Mô hình sinh mã36

5.1 Mô hình nền tảng 36

5.2 Mô hình sinh mã máy tự động 39

5.2.1 Kiến trúc mô hình sinh mã máy tự động 39

5.2.2 Luồng xử lý mô hình sinh mã 42

5.3 Hiện thực và kết quả thử nghiệm 43

5.3.1 Xây dựng mô hình kiến thức tổng quát (TypeScriptPublic Model 13B) 44

5.3.2 Kết quả mô hình kiến thức tổng quát (TypeScriptPublic Model 13B) 45

5.3.3 Một số đoạn mã sinh bằng mô hình kiến thức tổngquát 48

5.3.4 Mô hình kiến thức đặc thù (TypeScript Private Model) 525.3.5 Một số đoạn mã sinh bằng mô hình kiến thức đặc thù 535.4 Nhận xét 58

6Kết luận606.1 Kết quả đạt được 60

6.2 Hạn chế và vấn đề tồn đọng 62

6.3 Hướng phát triển 63

Tài liệu tham khảo64A Các đoạn mã sinh được từ mô hìnhđề xuất69A.1 Sinh mã cho các tác vụ luận lý cơ bản 69

A.2 Sinh mã cho các thành phần giao diện đơn giản 73

A.3 Sinh mã cho các tác vụ xử lý hệ thống 75

Trang 10

Danh sách hình vẽ

1.1 Tình huống thực tế cho Bài toán sinh mã tự động 3

1.2 Kết quả sinh mã cho bài toán sinh logo với mô hình kiếnthức tổng quát 3

1.3 Kết quả giải thích mã cho bài toán sinh logo với mô hìnhkiến thức tổng quát 4

1.4 Tình huống thực tế sinh mã với yêu cầu đặc thù 5

1.5 Phân loại Hệ thống sinh mã tự động 7

2.1 Các thành phần của mô hình sinh mã dựa trên khuôn mẫu 14

3.1 Một khối cơ bản của mô hình Transformer 22

3.2 Một số phương pháp tinh chỉnh tối ưu tham số 25

3.3 Bảng so sánh hiệu suất giữa phương pháp tối ưu LoRA vàcác phương pháp khác trên mô hình GPT-3 175 tỉ tham số 27

3.4 So sánh giữa tinh chỉnh có hướng dẫn với hai loại tinh chỉnhtheo yêu cầu và tinh chỉnh tiền đào tạo 29

4.1 Luồng xử lý xây dựng tập dữ liệu TypeScript-Instruct 20K 314.2 Luồng xử lý xây dựng tập dữ liệu đặc thù cá nhân 34

5.1 Giới thiệu mô hình Code Llama 36

5.2 Luồng huấn luyện các mô hình Code Llama 37

5.3 Đánh giá kết quả trên các mô hình CodeLlama 38

5.4 Tổng quan luồng xử lý của mô hình sinh mã kiến thức tổngquát 405.5 Tổng quan luồng xử lý của mô hình sinh mã kiến thức đặc thù 41

Trang 11

Danh sách bảng

5.1 Multi-Lingual HE điểm pass@1 Điểm pass@1 của mô

hình kiến thức tổng quát TypeScript Public Model 13B cho

ngôn ngữ lập trình TypeScript Kết quả của Code Llama lấy

từ bài báo gốc [1] và các kết quả khác lấy từ bài báo [2] 47

Trang 12

Danh sách mã nguồn

4.1 Một dữ liệu mẫu trong tập TypeScript-Instruct 20K 32

4.2 Dữ liệu trong tập Private Dataset 34

5.1 Cấu hình prompt cho mô hình kiến thức tổng quát 44

5.2 Sinh mã cho bài toán logo - mô hình kiến thức tổng quát 49

5.3 Sinh mã cho bài toán logo - mô hình nền tảng 50

5.4 Sinh mã cho bài toán trong tập Multi-Lingual Human Eval- mô hình kiến thức tổng quát 50

5.5 Sinh mã cho bài toán trong tập Multi Human Eval - mô hìnhnền tảng 51

5.6 Cấu hình prompt cho mô hình kiến thức đặc thù 52

5.7 Khai báo PostCategories trong dự án cá nhân 54

5.8 Sinh mã cho bài toán cập nhật PostCategories - mô hìnhkiến thức đặc thù 54

5.9 Sinh mã cho bài toán cập nhật PostCategories - mô hình nềntảng 55

5.10 Sinh mã cho bài toán Lazada Collection - mô hình kiến thứcđặc thù 55

5.11 Sinh mã cho bài toán Lazada Collection - mô hình nền tảng 57A.1 Phụ lục: Sinh mã để kiểm tra số nguyên tố 69

A.2 Phụ lục: Sinh mã để tìm số lớn nhất trong mảng 70

A.3 Phụ lục: Sinh mã để tính chuỗi Fibonacci 71

A.4 Phụ lục: Sinh mã để kiểm tra chuỗi đối xứng 71

A.5 Phụ lục: Sinh mã để tạo ra một nút bấm với React 73

A.6 Phụ lục: Sinh mã để tạo ra một modal có thể mở lên và đóngxuống 73

Trang 13

A.7 Phụ lục: Sinh mã để tạo ra một khung xử lý đăng nhập gồm

username và password 75A.8 Phụ lục: Sinh mã để gọi yêu cầu HTTP 76A.9 Phụ lục: Sinh mã để kết nối với cơ sở dữ liệu MongoDB 77A.10 Phụ lục: Sinh mã để xử lý thanh toán với thẻ hoặc ví Paypal

trong một ứng dụng mua hàng trực tuyến 79

Trang 14

Chương 1

Giới thiệu đề tài

Trong chương này, học viên xin biện luận về lý do thực hiện đề tài, giớithiệu Hệ thống sinh mã tự động, làm rõ mục tiêu và giới hạn phạm vi của đềtài Đồng thời trình bày những đóng góp đã đạt được cùng nội dung tóm tắtcủa các chương luận văn

Trong bối cảnh công nghệ phần mềm đang phát triển vượt bậc, trí tuệnhân tạo đã và đang trở thành một yếu tố quan trọng và mang lại nhiều tiềmnăng trong lĩnh vực này Theo thống kê, năm 2024 sẽ có khoảng 28,7 triệulập trình viên trên toàn thế giới, và số lượng này đang tăng lên hơn 1 triệulập trình viên mỗi năm [3] Sự gia tăng này chứng tỏ tầm quan trọng của lậptrình và nhu cầu ngày càng tăng, cả về số lượng lẫn chất lượng của lập trìnhviên Việc phát triển mã nguồn sao cho dễ dàng, hiệu quả và năng suất, từđó, dần thu hút được nhiều sự quan tâm và trở thành một trong những ưutiên hàng đầu Đặc biệt là khi lĩnh vực trí tuệ nhân tạo đã và đang đạt đượcnhiều bước đột phá lớn trong vài năm gần đây, giúp máy móc có thể hiểuđược ngôn ngữ tự nhiên một cách rất phổ quát Điều này nhận được nhiềukỳ vọng từ cộng đồng về việc xây dựng những hệ thống hỗ trợ các tác vụlập trình, giúp giảm thời gian và công sức của lập trình viên trong việc pháttriển mã nguồn, cải thiện năng suất làm việc và giúp họ tập trung nâng caochất lượng của các ứng dụng phần mềm Trí tuệ nhân tạo và sự phát triển củacộng đồng lập trình viên đang cùng nhau tạo nên một bức tranh lớn trongcông nghệ phần mềm hiện đại Sự kết hợp này mang lại tiềm năng trong

Trang 15

việc tăng năng suất phát triển mã nguồn và cung cấp cho lập trình viên cáccông cụ thông minh để tạo ra nhiều ứng dụng phần mềm tiên tiến và hiệuquả hơn Hơn thế nữa, nó còn đưa việc lập trình tiếp cận được nhiều tập đốitượng Giúp những lập trình viên mới tự tin trên con đường của mình khimã nguồn dự án, các thư viện hay ngôn ngữ lập trình ngày càng trở nên đadạng và phức tạp Giúp được cả những người ngoài mảng lập trình trongcông việc chuyên ngành của họ với bối cảnh công nghệ thông tin đang dầntrở nên thiết yếu trong mọi ngành nghề

Trên thực tế, các mô hình ngôn ngữ lớn như ChatGPT của OpenAI [4],đang tạo nên cơn sốt trên thế giới Chỉ sau hai tháng ra mắt, ChatGPT đãthu hút hơn 100 triệu người dùng, trở thành ứng dụng internet phát triểnnhanh nhất trong lịch sử (theo The Guardian, 2023 [5]) Tương tự, Copilotcủa Microsoft, một mô hình được thiết kế cho việc hỗ trợ lập trình, đã thuhút hơn 1 triệu lập trình viên chuyên nghiệp sử dụng (theo Euronews, 2023,[6]) và có thể tăng tốc các tác vụ lập trình lên đến 55% [7] Đây là nhữngcông cụ mới đầy hứa hẹn để tăng năng suất lập trình, được dự đoán sẽ có tácđộng đáng kể đến lực lượng lao động trong những năm sắp tới [8].

Bài toán sinh mã tự động là một trong những bài toán quan trọng tronglĩnh vực trí tuệ nhân tạo và phát triển phần mềm, với mục đích nhằm tạo ramột cách tự động các đoạn mã máy dựa trên yêu cầu và mô tả từ ngôn ngữtự nhiên của người dùng Việc giải quyết bài toán này mang lại rất nhiều lợiích, chẳng hạn như giúp việc lập trình trở nên dễ dàng hơn, tăng cường hiệusuất và độ chính xác của quá trình phát triển phần mềm, giảm thời gian vàcông sức cần thiết để viết mã, đảm bảo tính nhất quán và đúng đắn của cácđoạn mã được sinh ra Việc sinh mã không chỉ mang lại lợi ích khi chúng ta

Trang 16

cần lời giải cho một bài toán, mà còn dùng để kiểm chứng, học hỏi thêm từnhiều khía cạnh và cách giải quyết khác nhau.

Hình 1.1: Tình huống thực tế cho Bài toán sinh mã tự động

Hình 1.2: Kết quả sinh mã cho bài toán sinh logo với mô hình kiến thứctổng quát [5.4]

Trang 17

Yêu cầu: Sinh mã cho thành phần nút bấm màu trắng, viền xanh dương,hình tròn và có một logo hcmut ở giữa, sử dụng tailwinds, style inline

Hình 1.3: Kết quả giải thích mã cho bài toán sinh logo với mô hình kiếnthức tổng quát [5.4]

Có không ít những phương pháp cổ điển đã được nghiên cứu để cố gắnggiải quyết bài toán này [2.1], tuy nhiên chúng đều không mang lại hiệu quảcao Đa số phương pháp cổ điển đều gặp phải một vấn đề cố hữu chung của

những mô hình (template) đã được định nghĩa cứng, đó là chúng không giải

quyết được bài toán một cách tổng quát với sự biến đổi của ngôn ngữ tựnhiên Với bước đột phá của trí tuệ nhân tạo trong vài năm trở lại đây, cụ thể

là những mô hình ngôn ngữ lớn (large language models) và các phương

pháp tinh chỉnh tham số (fine-tuning methods), máy móc đã có khả năng

hiểu được ngôn ngữ tự nhiên một cách phổ quát Cuộc cách mạng này đãmở đường cho nhiều nhánh nghiên cứu trong lĩnh vực ngôn ngữ tự nhiên nóichung, và lĩnh vực sinh mã máy tự động dựa trên yêu cầu cụ thể nói riêng.

Trang 18

Để sinh được mã nguồn một cách tự động bằng việc vận dụng nhữngđột phá mới của trí thông minh nhân tạo, các mô hình hiện đại dùng để giảiquyết bài toán sinh mã thường phải được học từ rất nhiều kiến thức, hàng tỉnhững đoạn mã được thu thập từ khắp nơi trên mạng Điều đó giúp cho hệthống có được một trí thông minh tổng quát để nhìn nhận và xử lý yêu cầu từngười dùng, giải quyết được vấn đề mà các phương pháp cổ điển gặp phải.Mặc dù vậy, trong thực tế, nhu cầu thực tiễn về việc phát triển mã nguồn chonhững dự án có tính đặc thù cao, đi kèm với những yếu tố bảo mật nghiêmngặt vẫn còn là một thách thức lớn.

Hình 1.4: Tình huống thực tế sinh mã với yêu cầu đặc thù

Bởi vì, nếu không sử dụng mã nguồn và kiến thức của dự án đặc thù,hệ thống sẽ không có khả năng để sinh ra những đoạn mã thỏa mãn yêucầu phức tạp trong thực tế Kể cả khi tổ chức hay cá nhân đó cố gắng huấnluyện lại mô hình ngôn ngữ lớn trên tập mã nguồn dự án của riêng họ, điềunày cũng không mấy khả thi Thứ nhất, việc huấn luyện mô hình ngôn ngữlớn đòi hỏi một hạ tầng phần cứng đủ mạnh mà tổ chức hay cá nhân đơnlẻ khó có thể đảm bảo Thứ hai, thời gian huấn luyện thường sẽ khá đángkể Và cuối cùng, kết quả của việc huấn luyện là một bộ trọng số rất lớn, sẽtốn nhiều không gian để lưu trữ cũng như tài nguyên để vận hành Điều đócũng có nghĩa tài nguyên và công sức bỏ ra để huấn luyện nhiều dự án khác

Trang 19

nhau sẽ bị lãng phí không cần thiết trong khi người dùng chỉ cần mô hìnhhoạt động tốt trên một vài dự án đặc thù vừa và nhỏ Ngược lại, nếu chỉ tậptrung huấn luyện trên những dự án đặc thù ngay từ đầu chúng ta lại khôngtận dụng được khối kiến thức tổng quát mà mô hình ngôn ngữ lớn đem lại,dẫn đến mã nguồn được sinh ra với chất lượng không cao.

Như vậy, học viên nhận định việc sinh mã máy tự động tuy có thể hoạt

động tốt với những yêu cầu tổng quát bằng việc áp dụng các mô hình ngônngữ lớn, song vẫn còn nhiều thách thức khi vận dụng vào từng dự án cụ thể

và đặc thù

Để giải quyết những thách thức đó, trong ít năm gần đây, rất nhiều nghiên

cứu đã tích cực trong việc tìm ra phương pháp để tinh chỉnh mô hình ngônngữ lớnbằng các phương pháp tối ưu tham số Các phương pháp này hầu

hết đều có chung một mục đích, đó là vận dụng khối kiến thức tổng quátvào các bài toán đặc thù trong điều kiện phần cứng hạn chế mà vẫn giữ đượcđộ hiệu quả và chính xác tương đương Luận văn của học viên cũng sẽ vậndụng cách tiếp cận này.

Hệ thống sinh mã tự độnglà tên gọi chung cho lớp các bài toán liên quanđến việc sinh ra mã nguồn tự động dựa trên những yêu cầu đặc tả của người

dùng Có thể chia Hệ thống sinh mã thành các ba nhóm công việc chính: họckiến thức từ dữ liệu đầu vào(learning), sinh mã máy tự động (generating)và phân tích kết quả đầu ra (analyzing)

Ở giai đoạn học dữ liệu đầu vào, mục tiêu của hệ thống là học đượcnhững kiến thức, quy tắc và mô hình từ các yêu cầu đặc tả cho trước hay từmã nguồn của các dự án thực tế mà người dùng cung cấp Bằng việc ứngdụng những đột phá của trí tuệ nhân tạo thời gian gần đây, như các mô hìnhhọc sâu, mô hình ngôn ngữ lớn, việc trí thông minh nhân tạo hiểu bộ dữ liệumã nguồn đầu vào đang ngày càng được cải thiện tốt hơn Tiếp sau đó là quátrình sinh mã máy tự động, dựa vào yêu cầu cụ thể của người dùng mà hệ

Trang 20

Hình 1.5: Phân loại Hệ thống sinh mã tự động

thống sẽ đề xuất, gợi ý những đoạn mã máy phù hợp với yêu cầu đó Đây làmột nhu cầu rất thực tiễn khi lập trình Cuối cùng, hệ thống có thể tiếp tụchậu xử lý kết quả vừa được tự động sinh ra Ví dụ như tác vụ giải thích ýnghĩa của đoạn mã nguồn này, hệ thống hóa câu trúc, tự sinh ra các phươngthức kiểm thử về tính đúng đắn của kết quả, Mỗi công việc trong Hệ thốngsinh mã tự động trên đều là một lĩnh vực đang rất thu hút và được cộng đồngnghiên cứu tích cực Chúng thường được chia thành các công việc riêng biệtvà người phát triển mô hình thường phải huấn luyện hoặc tinh chỉnh các môhình khác nhau cho từng công việc Tuy nhiên, với công cụ tinh chỉnh cóhướng dẫn sẽ được học viên trình bày ở phần 3.5, công việc sinh mã tự độngvà giải thích ý nghĩa đoạn mã sẽ được huấn luyện chung chỉ trong một môhình công việc (downstream model) mà luận văn xây dựng.

Trang 21

Hệ thống sinh mã tự động hiện nay là một cuộc chạy đua của khôngchỉ giữa những nhà nghiên cứu cá nhân, mà còn của cả những công ty tậpđoàn công nghệ lớn trên thế giới Có thể kể đến các ứng dụng như ChatGPT,Github Copilot của Microsoft, hay chatbot Bard của Google, Code Whis-perer của Amazon, với một mục tiêu chung là vận dụng trí tuệ nhân tạođể giúp việc lập trình ngày càng trở nên dễ dàng và hiệu quả hơn Bên cạnhđó là vô vàn nghiên cứu mới về cách tối ưu tham số để tiếp tục huấn luyệnnhững mô hình mới với hàng trăm tỉ tham số, sử dụng Deepspeed ZeRO-3để huấn luyện song song trên nhiều GPU [9], quản lý bộ nhớ với mô hìnhPagedAttention giúp tốc đố suy đoán của mô hình đã tinh chỉnh (inferencetime) trở nên nhanh gấp 24 lần [10]

Song, những đột phá này vẫn còn chưa quá hoàn thiện và chỉ mới xuấthiện vài năm trở lại đây, vì vậy chúng hầu hết được tập trung huấn luyện vàthử nghiệm mô hình trên một ngôn ngữ chính - Python Với công việc hằngngày sử dụng ngôn ngữ TypeScript, học viên nhận thấy tính thách thức cũngnhư sự hấp dẫn khi phát triển một hệ thống bản thân có thể thực sự sử dụngcho công việc hằng ngày.

– Xây dựng và công bố bộ dữ liệu hướng dẫn TypeScript-Instruct 20K

[4.1] cho ngôn ngữ lập trình Typescript dựa trên tập dữ liệu công khai

Trang 22

The Stack [11] của cộng dồng HuggingFace với hai phương pháp làmgiàu dữ liệu: tinh chỉnh tự hướng dẫn (self-instruct) [12] và tinh chỉnhhướng dẫn cải thiện (evol-instruct) [13] [3.5]

– Xây dựng một dự án đặc thù với ngôn ngữ Typescript và trích xuất thủcông ra tập dữ liệu cá nhân từ dự án đó, được mô tả ở cụ thể mục [4.2]– Hiện thực mô hình sinh mã máy cho kiến thức tổng quan với ngôn

ngữ Typescript, gọi là mô hình kiến thức tổng quát TypeScript Public

Model 13B

– Hiện thực mô hình sinh mã máy cho kiến thức đặc thù với ngôn

ngữ Typescript, gọi là mô hình kiến thức đặc thù TypeScript Private

– Kiểm nghiệm, đánh giá kết quả các mô hình so với mô hình nền tảng– Xây dựng ứng dụng trực quan cụ thể tích hợp mô hình sinh mã máy

đã phát triển

1.4Giới hạn đề tài và đối tượng nghiên cứu

Trong phạm vi của một đề tài luận văn thạc sĩ, học viên đề xuất giới hạnnội dung nghiên cứu cụ thể như sau:

– Luận văn chỉ tập trung xây dựng hệ thống sinh mã cho ngôn ngữ lậptrình Typescript

– Khảo sát trên mô hình ngôn ngữ lớn nền tảng CodeLlama-Instruct với13 tỉ tham số

– Sử dụng hai phương pháp tinh chỉnh tham số là: Instruction Tuning[14] và Low-Rank Adaptation (LoRA) [15]

Trang 23

1.5Đóng góp của luận văn

Trong luận văn, học viên đóng góp những công việc sau:

– Trong bối cảnh các mô hình sinh mã tập trung quá nhiều vào ngônngữ Python, học viên quyết định xây dựng bộ 20,000 cặp dữ liệuđịnh hướng (intruction dataset) cho ngôn ngữ TypeScript (TypeScript-Instruct 20K [4.1]), làm nền tảng để tinh chỉnh các mô hình lớn trongtương lai tập trung chính trên ngôn ngữ này Đồng thời phát triển dựán đặc thù và trích xuất dữ liệu thủ công từ dự án ấy, cho ra bộ dữ liệuđặc thù [4.2]

– Xây dựng thành công mô hình sinh mã tự động dựa trên yêu cầu ngôn

ngữ tự nhiên và khối kiến thức tổng quát - TypeScript Public Model

– Xây dựng thành công mô hình sinh mã tự động dựa trên yêu cầu ngôn

ngữ tự nhiên và khối kiến thức đặc thù - TypeScript Private Model

– Thử nghiệm, đánh giá hai mô hình đề xuất trên với mô hình nền tảng,rút ra đánh giá và nhận xét

– Xây dựng hệ thống giao diện người dùng trực quan giúp người dùngtương tác được với nhiều mô hình khác nhau.

– Công trình luận văn cũng được viết thành một chương trong cuốnsách: Generative Artificial Intelligence for Software Engineering -A Research Agenda [16] [17] dưới sự hướng dẫn của PGS.TS.QuảnThành Thơ và các giảng viên, nhà nghiên cứu trên khắp thế giới.

Trang 24

1.6Tóm tắt nội dung

Luận văn “Xây dựng hệ thống sinh mã máy tự động áp dụng các phươngpháp tinh chỉnh tham số” bao gồm Sáu chương với các nội dung chính sauđây

– Chương 1, GIỚI THIỆU ĐỀ TÀI trình bày tổng quan về đề tài, làm

rõ lý do thực hiện đề tài và ý nghĩa thực tiễn của bài toán, cũng nhưgiới hạn và phạm vi của đề tài Cuối cùng là nhiệm vụ và cấu trúc củaluận văn.

– Chương 2, CÁC CÔNG TRÌNH NGHIÊN CỨU LIÊN QUAN trình

bày một cách tổng quát về những nghiên cứu liên quan đã và đangđược thực hiện, cũng như xu hướng chung hiện nay trong việc giảiquyết bài toán Phần này cũng đưa ra những bàn luận và đánh giá chocác phương pháp kể trên vì đó là cơ sở quan trọng cho những nghiêncứu của học viên trong quá trình thực hiện luận văn.

– Chương 3, CƠ SỞ LÝ THUYẾT tổng hợp những vấn đề học thuật

liên quan nhất sẽ áp dụng để giải quyết bài toán, tập trung chủ yếuvào việc làm rõ sự đột phá cũng như ưu điểm và hạn chế của các môhình ngôn ngữ lớn (Large Language Models), kiến trúc Transformer,đồng thời học viên cũng đề cập sự nổi lên của những phương pháp tốiưu tham số hiện đại (Parameter-Efficient Fine-Tuning)

– Chương 4, TẬP DỮ LIỆU giới thiệu hai tập dữ liệu

TypeScript-Instruct 20K và tập dữ liệu trích xuất thủ công từ dự án cá nhân đặc

thù, cùng những phương pháp xử lý, làm giàu hai tập dữ liệu đó.

– Chương 5, MÔ HÌNH SINH MÃ TỰ ĐỘNG giới thiệu hai mô hình

sinh mã tự động - mô hình kiến thức tổng quát và mô hình kiến thức

Trang 25

đặc thù Học viên trình bày các bước tiến hành xây dựng hai mô hình,thí nghiệm sinh mã và đánh giá kết quả cải tiến so với mô hình cơ sở.

– Chương 6, KẾT LUẬN tổng hợp các kết quả đạt được trong quá trình

thực hiện luận văn từ bước nghiên cứu và xây dựng giả thuyết đến triểnkhai thực nghiệm Phần này cũng trình bày những hạn chế và vấn đềtồn đọng, cuối cùng đề xuất các giải pháp cải tiến trong tương lai

Trang 26

Chương 2

Các công trình nghiên cứu liên quan

Trong chương này, học viên trình bày một cách tổng quát về nhữngnghiên cứu liên quan đã và đang được thực hiện, cũng như xu hướng chunghiện nay trong việc giải quyết bài toán Đồng thời đưa ra những bàn luận vàđánh giá cho các phương pháp kể trên vì đó là cơ sở quan trọng cho nhữngnghiên cứu của học viên trong quá trình thực hiện luận văn

2.1Các cách tiếp cận cổ điển

Bài toán sinh mã tự động đã tồn tại trong hơn 50 năm, từ nửa cuối thế kỷtrước [18] và vẫn đang phát triển theo thời gian Cách tiếp cận thời bấy giờ

hầu hết là sử dụng các phương pháp sinh mã dựa trên khuôn mẫu

(template-based), với ý tưởng đưa dữ liệu cụ thể vào những khuôn mẫu được địnhnghĩa trước từ đó tạo ra những đoạn mã mới Các công cụ dựa trên khuônmẫu tuy tương đối đơn giản để triển khai, song chúng lại khá cứng nhắc vàkhó tùy chỉnh Đồng thời, những cách làm vào thời điểm này hầu hết vẫnchưa đáp ứng được các yêu cầu bằng ngôn ngữ tự nhiên của người dùng

Kỹ thuật sinh mã dựa trên khuôn mẫu là kỹ thuật sử dụng các khuônmẫu (template) được định nghĩa sẵn để tạo ra sản phẩm là mã nguồn, đượcgọi là đầu ra (output) Một khuôn mẫu là một biểu diễn trừu tượng và tổngquát của văn bản đầu ra Nó được định nghĩa với một phần tĩnh cố định, sẽđược giữ nguyên ở đầu ra Đồng thời có một phần động được gọi là các đoạnmã giả mà hệ thống cần sinh ra Các khuôn mẫu được thực thi bởi bộ sinhmã (runtime-input) để tính toán phần động và thay thế mã giả bằng nhữngđoạn mã tĩnh trong thời gian chạy Bộ định nghĩa (design-time input) xác

Trang 27

Hình 2.1: Các thành phần của mô hình sinh mã dựa trên khuôn mẫu [19]

định thông tin mà bộ sinh mã bắt buộc phải tuân theo, nhằm hạn chế sinh ranhững đoạn mã không phù hợp Ưu điểm của phương pháp này là xử lý vấnđề khá trực diện và phù hợp với những trường hợp có thể định nghĩa trước,nhưng bên cạnh đó nó cũng gặp phải nhiều nhược điểm:

– Tính linh hoạt bị hạn chế: Các đoạn mã được tạo ra dựa trên những

khuôn mẫu được định nghĩa trước, điều này sẽ hạn chế khả năng tùychỉnh của hệ thống Nếu các khuôn mẫu không bao phủ tất cả các biếnthể hoặc tình huống có thể xảy ra, việc tạo những đoạn mã khác vớimẫu đã định sẵn có thể gặp nhiều khó khăn.

– Phức tạp trong việc định nghĩa mẫu: Việc tạo và duy trì các khuôn

mẫu là một nhiệm vụ không đơn giản, đặc biệt là đối với các dự án cómã nguồn lớn và phức tạp Khi mức độ phức tạp của các khuôn mẫutăng lên, việc hiểu, cập nhật và sửa lỗi cho chúng cũng trở nên khókhăn hơn Độ phức tạp này có thể dẫn đến sai sót trong quá trình thiếtkế và khó khăn trong việc duy trì những đoạn mã sắp được sinh ra.

– Khó khăn trong phát triển: Với tư tưởng "định nghĩa một khuôn,

sinh nhiều đoạn mã" của phương pháp này, sẽ có nhiều đoạn mã tương

Trang 28

tự nhau sinh ra từ một khuôn Điều này có thể dẫn đến nguy cơ mấttính nhất quán nếu ta muốn cập nhật những đoạn mã đã được sinhra từ phương pháp này, vì nó sẽ không còn đồng bộ với các đoạn mãtương tự sinh ra cùng một khuôn Hoặc với trường hợp ta cập nhậtkhuôn mẫu, cũng cần phải cẩn trọng cập nhật những đoạn mã đã đượcsinh ra

Với mục tiêu là sinh mã theo yêu cầu cụ thể của người dùng, có thể thấyphương pháp cổ điển này vẫn còn thiếu nhiều yếu tố cần thiết.

Vào đầu những năm 2000, một số hướng nghiên cứu cải thiện tiếp tụcđược triển khai với mục tiêu giúp hệ thống linh hoạt hơn và cố gắng sinh mãdựa trên truy vấn, song kết quả vẫn không quá tích cực [20] Đa số chúng

đều gặp phải hai vấn đề căn bản chưa được giải quyết, đó là: độ phức tạp

của không gian chương trình và khó khăn trong việc diễn đạt đúng yêucầu của người dùng [21] [22] Nhiều nghiên cứu trong những năm 2010

tiếp tục tập trung giải quyết hai vấn đề trên, có thể kể đến các phương pháp

tìm kiếm mã nguồnnhư phương pháp tìm kiếm có tính xác suất (stochasticsearch) [23] hay phương pháp tìm kiếm suy diễn từ trên xuống (deductive

top-down search) [24] [25] dựa trên truy vấn của người dùng Tuy nhiên,khả năng mở rộng của các phương pháp này vẫn còn hạn chế Ý định củangười dùng có thể được diễn đạt bằng các phương pháp khác nhau: đặc tảcác quy tắc luận lý, ví dụ đầu vào - đầu ra hay mô tả bằng ngôn ngữ tự nhiên.Giải quyết các quy tắc luận lý một cách đầy đủ yêu cầu quá nhiều công sức,trong khi những ví dụ đầu vào - đầu ra thường không đủ để mô tả hoàn diệnvấn đề Có thể nói, khả năng nhận diện và diễn đạt ý định của người dùngchính là chìa khóa cho sự thành công của hệ thống sinh mã tự động mà cácphương pháp tiếp cận cổ điển vẫn chưa tìm ra cách giải quyết

Trang 29

2.2Các cách tiếp cận hiện đại

Trong những năm gần đây, lĩnh vực trí tuệ nhân tạo đã chứng kiến mộtcuộc cách mạng đáng kể trong việc giải quyết bài toán sinh mã nguồn tựđộng Với sự ra đời của kiến trúc Transformer [3.2] và các mô hình ngônngữ lớn [3.1], những phương pháp tiếp cận hiện đại đã mở ra khả năng huấnluyện cho máy móc hiểu và tạo ra mã nguồn theo yêu cầu thực tế và đa dạngtừ người dùng Cuộc cách mạng của trí tuệ nhân tạo đã mang đến nhữngmô hình ngôn ngữ lớn như GPT (Generative Pre-trained Transformer) [26].Những mô hình này được huấn luyện trên một lượng lớn dữ liệu văn bản từInternet, chúng có khả năng học được cấu trúc ngôn ngữ tự nhiên và hiểuđược ngữ cảnh thông qua các phương pháp học không giám sát Hình thànhcác mô hình ngôn ngữ lớn có khả năng sinh ra các đoạn mã nguồn tự độngdựa trên các yêu cầu phức tạp được đưa ra Để sử dụng các mô hình ngônngữ lớn này cho việc sinh mã nguồn, ta thường sử dụng phương pháp tinhchỉnh (fine-tuning) Quá trình tinh chỉnh này thường được thực hiện trên mộttập dữ liệu nhỏ hơn và tập trung vào một số nhiệm vụ cụ thể, như tạo mãnguồn dựa trên yêu cầu người dùng Việc tinh chỉnh mô hình trên các tập dữliệu có không gian nhỏ hơn giúp nó học cách sinh mã nguồn chính xác vàphù hợp với ngữ cảnh sử dụng.

Học viên sẽ giới thiệu qua các công trình nghiên cứu liên quan chính, lànền tảng của những mô hình ngôn ngữ lớn và các phương pháp tinh chỉnhtối ưu tham số sử dụng trong luận văn này Những kiến trúc cụ thể sẽ đượctrình bày ở chương [3] và [5.2]

– Các mô hình ngôn ngữ lớn: Những năm gần đây, các Mô hình Ngôn

ngữ Lớn (LLMs) đã thể hiện những thành tựu đáng kể trên rất nhiềutác vụ khác nhau Các công ty công nghệ lớn đã đạt được những bước

Trang 30

tiến đáng kể trong việc phát triển các LLMs khổng lồ Ví dụ điểnhình như GPT3 & 4 của OpenAI, PaLM 1 & 2 của Google, Chin-chilla và Gopher của DeepMind mà mới đây nhất là Gemini, cũngnhư Claude4 của Anthropic Tuy nhiên, có một điểm mấu chốt quantrọng với những mô hình này, đó là chúng là những mô hình mã nguồnđóng và chỉ có thể truy cập thông qua các API cụ thể, hay thâm chímột số còn giới hạn truy cập ở từng khu vực cụ thể trên thế giới.Từ đó, cộng đồng trí tuệ nhân tạo đã chứng kiến sự ra mắt của nhiềumô hình ngôn ngữ lớn mã nguồn mở, nơi bộ trọng số và kiến trúc củamô hình được công bố công khai EleutherAI đã đóng góp GPT-NeoXvà GPT-J Google đã phát hành UL2 Đại học Tsinghua đã giới thiệuGLM-130B Meta đã phát hành OPT và LLaMA Không thể phủ nhậnsự đóng góp của những mô hình mã nguồn mở này, tuy nhiên chúngthường đem lại hiệu suất khá kém cỏi khi so sánh với những mô hìnhngôn ngữ mã nguồn đóng.

– Các mô hình ngôn ngữ lớn cho mã nguồn: Các nhà nghiên cứu gần

đây đã giới thiệu đến cộng đồng một số lượng đáng kể các mô hìnhngôn ngữ lớn cho các tác vụ liên quan đến mã nguồn, để giải quyếtnhững thách thức trong việc hiểu và tạo ra mã nguồn OpenAI đã côngbố Codex và Code-Davinci, là nền tảng cho ứng dụng Copilot được đasố các lập trình viên sử dụng hiện Google đã đề xuất PaLM-Coder vàAlphaCode Những mô hình này đem lại hiệu suất xuất sắc trên cácbộ công cụ đánh giá như HumanEval [27] và MBPP [28] Tuy nhiên,chúng là những mô hình mã nguồn đóng.

Ngược lại, có một số mô hình cho mã nguồn được công bố công khai.Salesforce đã giới thiệu CodeGen, CodeT5, và CodeT5+ Đại học Ts-inghua đã đóng góp CodeGeeX, và dự án BigCode của công đồng

Trang 31

HuggingFace đã phát triển StarCoder Meta AI vừa cho ra mắt CodeLlama Những mô hình này đã thể hiện những cải tiến đáng kể trongcác tác vụ liên quan đến mã nguồn Tuy nhiên, so với các mô hình mãnguồn đóng, chúng vẫn đang đứng sau một cách đáng kể.

– Các phương pháp tinh chỉnh tối ưu tham số: Đi kèm với những

mô hình ngôn ngữ lớn hiện đại hàng tỉ tham số, các phương pháp tinhchỉnh tối ưu tham số cũng bắt đầu nở rộ Có nhiều lý do quan trọngcho sự cần thiết của những phương pháp này như giúp tiết kiệm đángkể tài nguyên tính toán và bộ nhớ, hay tăng tính linh hoạt của mô hình.Bài báo có tên tạm dịch "Giảm để tăng" [29] so sánh có hệ thống vềcác phương pháp tinh chỉnh hiệu quả tham số, bao gồm hơn 40 bàibáo được công bố từ tháng 2 năm 2019 đến tháng 2 năm 2023 Đây làmột nghiên cứu đáng giá, giúp học viên và người đọc có cái nhìn tổngquan về các phương pháp huấn luyện mô hình ngôn ngữ lớn hiện đại

– Phương pháp tinh chỉnh tối ưu tham số có hướng dẫn: Trong

những đột phá của mảng xử lý ngôn ngữ tự nhiên gần đây, đã xuấthiện một lượng lớn những công bố trong việc xây dựng các mô hìnhcó thể tuân theo hướng dẫn bằng ngôn ngữ tự nhiên Những kiến trúcnày được xây dựng bởi hai thành phần chính: các mô hình ngôn ngữlớn đã được huấn luyện trước (Pretrain-LM) và các đoạn dữ liệu hướngdẫn được viết bởi con người

So với những phương pháp cổ điển mà học viên đã trình bày [2.1], cácphương pháp hiện đại [2.2] rõ ràng mang lại nhiều lợi ích đáng kể Trướcđây, việc sinh mã nguồn tự động thường dựa trên một loạt những khuôn mẫu

Trang 32

và quy tắc cố định, dẫn đến khả năng sinh mã bị hạn chế và không linh hoạttrong việc đáp ứng với vô vàn yêu cầu thực tế và đa dạng từ người dùng.Các phương pháp cổ điển cũng đòi hỏi một quá trình suy luận phức tạp vàcông phu để tìm ra mã nguồn phù hợp Trong khi đó, những mô hình ngônngữ lớn với khả năng học thông qua lượng lớn dữ liệu lại có khả năng hiểungôn ngữ lập trình một cách rất tổng quát, mang lại tính linh hoạt và khảnăng tạo ra mã nguồn chính xác và phù hợp với từng ngữ cảnh Việc nghiêncứu và phát triển những mô hình ngôn ngữ lớn cho việc sinh mã tự động vàcác phương pháp tinh chỉnh tối ưu tham số cho các mô hình đó đang dần trởthành một cuộc đua sôi động Chỉ trong nửa cuối năm 2023, HuggingFaceđã cho ra mắt mô hình ngôn ngữ lớn BigCode [2], Meta công bố Llama 2,tập đoàn Google công bố mô hình PaLM-2 cải tiến và Gemini tích hợp vàoứng dụng Bard cạnh tranh trực tiếp với ChatGPT, Tất cả đều đánh dấu nhữngbước tiến đáng kinh ngạc với kết quả vượt trội trong những tác vụ phổ thôngvà cả lĩnh vực sinh mã nguồn Bên cạnh đó là vô vàn nghiên cứu mới về cáchtối ưu tham số để tiếp tục huấn luyện những mô hình mới với hàng trăm tỉtham số, sử dụng Deepspeed ZeRO-3 để huấn luyện song song trên nhiềuGPU [9], quản lý bộ nhớ với mô hình PagedAttention giúp tốc đố suy đoáncủa mô hình đã tinh chỉnh (inference time) trở nên nhanh gấp 24 lần [10].Có thể khẳng định, đây là một lĩnh vực tiềm năng với những đột phá và cạnhtranh sôi động.

Vì vậy để thực hiện đề tài luận văn này, học viên sẽ sử dụng cách tiếpcận hiện đại với việc kết hợp các phương pháp tinh chỉnh tối ưu tham số mớinhất cho mô hình ngôn ngữ lớn mã nguồn mở trên hai tập dữ liệu chính: tậpdữ liệu 20,000 cặp hướng dẫn cho ngôn ngữ TypeScript mà học viên tự xâydựng, và tập dữ liệu 40 cặp hướng dẫn đặc thù trích xuất từ dự án cá nhâncủa học viên.

Trang 33

Chương 3

Cơ sở lý thuyết

Trong chương này, học viên tổng hợp những vấn đề học thuật liên quannhất sẽ áp dụng để giải quyết bài toán, tập trung chủ yếu vào việc làm rõ sựđột phá cũng như ưu điểm và hạn chế của các mô hình ngôn ngữ lớn, đồngthời học viên cũng đề cập sự nổi lên của những phương pháp tối ưu tham sốhiện đại và lý do lựa chọn chúng

Mô hình ngôn ngữ lớn (Large Language Model - LLM) là một hệ thốngtrí tuệ nhân tạo được huấn luyện để hiểu và xử lý ngôn ngữ tự nhiên Nólà một dạng mô hình học máy sử dụng mạng nơ-ron nhân tạo rất sâu và cókhả năng xử lý lượng lớn dữ liệu ngôn ngữ Một mô hình ngôn ngữ lớn cóthể được huấn luyện trên một tập dữ liệu rất lớn gồm hàng triệu câu văn vàtừ Quá trình huấn luyện bao gồm việc dự đoán từ tiếp theo trong một câudựa trên từ trước đó, để mô hình có thể "học" cách ngữ pháp và cú pháp củangôn ngữ đó Với khả năng tính toán mạnh mẽ và số lượng tham số lớn, môhình này có thể học được các mối quan hệ phức tạp trong ngôn ngữ và tạo racác câu văn tự nhiên Các mô hình ngôn ngữ lớn hiện nay đã đạt được nhữngtiến bộ đáng kể trong các tác vụ xử lý ngôn ngữ tự nhiên, bao gồm dịch máy,tạo tiêu đề, trả lời câu hỏi và sinh văn bản tự động Chúng có thể sinh ra vănbản tự nhiên có chất lượng cao, sát với nội dung và ngữ cảnh được cung cấpcho chúng.

Với một câu chưa hoàn chỉnh, ví dụ: "Cuốn sách đang ở trên", các môhình này sử dụng dữ liệu huấn luyện để tạo ra một phân bố xác suất nhằm

Trang 34

xác định từ tiếp theo có khả năng xuất hiện cao nhất, ví dụ: "bàn" hoặc "kệsách" Các nỗ lực ban đầu để xây dựng các mô hình ngôn ngữ quy mô lớnsử dụng phương pháp N-gram và các kỹ thuật làm mềm đơn giản [30] [31].Một số phương pháp cải tiến hơn sử dụng các loại kiến trúc mạng nơ-ronkhác nhau, chẳng hạn như mạng feedforward [32] và mạng hồi quy [33],cho nhiệm vụ mô hình hóa ngôn ngữ Điều này cũng dẫn đến sự phát triểncủa những phương pháp nhúng từ (word embeddings) và các kỹ thuật liênquan để ánh xạ từ ngữ vào các biểu diễn có ý nghĩa về mặt ngữ nghĩa [34].Kiến trúc Transformer [35], ban đầu được phát triển cho dịch máy, đã gợimở ra những mối quan tâm mới về mô hình ngôn ngữ, dẫn đến sự phát triểncủa phép nhúng từ có bối cảnh (contextualized word embeddings) [36] vàcác mô hình Generative Pre-trained Transformers (GPTs) [37] Trong nhữngnăm gần đây, có một phương pháp chung để thành công trong việc cải thiệnhiệu suất của mô hình, đó là tăng kích thước các tham số và dữ liệu huấnluyện Việc này mang đến những bước nhảy bất ngờ trong khả năng máymóc xử lý ngôn ngữ tự nhiên

Transformer là một kiến trúc mạng nơ-ron dựa trên cơ sở của học sâu(deep learning) được giới thiệu vào năm 2017 bởi Vaswani và các đồngnghiệp tại Google [35] Kiến trúc này đã đạt được thành công nổi bật tronglĩnh vực xử lý ngôn ngữ tự nhiên (NLP) và đã được áp dụng rộng rãi trongnhiều ứng dụng như dịch máy, tạo nội dung tự động, trí tuệ nhân tạo vànhiều lĩnh vực khác Trong quá khứ, các mô hình NLP truyền thống sử dụngcác kiến trúc dựa trên LSTM (Long Short-Term Memory) hoặc GRU (GatedRecurrent Unit) [38] để xử lý dữ liệu tuần tự Tuy nhiên, kiến trúc này gặpmột số hạn chế như khó khăn trong việc tính toán song song và khả năng

Trang 35

ghi nhớ ngữ cảnh không quá tốt.

Transformer được thiết kế để giải quyết những hạn chế này Kiến trúcnày không sử dụng các mạng nơ-ron tuần tự như LSTM hay GRU, mà thayvào đó xây dựng dựa trên một cấu trúc cốt lõi bao gồm multi-head attention(MHA) kết hợp với một mạng nơ-ron fully-connected (FFN), như minh họatrong hình [3.1] Cả hai lớp attention và fully-connected đều sử dụng kết nốiresidual connections nhằm giải quyết vấn đề mất mát thông tin trong quátrình huấn luyện mạng học sâu, và chuẩn hóa theo lớp (layer normalization)để cải thiện khả năng huấn luyện.

Trái tim của Transformer chính là phép tính attention, có thể được môtả:

Hình 3.1: Một khối cơ bản của mô hình Transformer

Trang 36

Att : Rkey× Rseq×key× Rseq×val → Rval (3.1)

Q(x) = x ·WQ+ bk, K(x) = x ·WK+ bq,V (x) = x ·WV + bv, (3.3)

WQ,WK ∈ Rinput×key,WV ∈ Rinput×val (3.4)bQ, bK ∈ Rkey, bV ∈ Rval (3.5)Nhiều biến thể tìm cách tác động lên các ma trận WK, WQ, WV, vì nhữngma trận này cung cấp cơ chế để truyền thông tin từ token này sang tokenkhác và kiểm soát thông tin nào được truyền đi Mặc dù thiết kế cụ thểcủa các mô hình Transformer có thể khác nhau theo quá trình phát triển, vídụ như kết hợp một lớp cross-attention trong mạng seq2seq hoặc sử dụngLayerNorm trước các lớp sublayers (Pre-LN), về bản chất chúng đều chỉ phụthuộc vào cấu trúc cơ bản MHA + FFN và có thể dễ dàng thích nghi với cácbiến thể kiến trúc khác.

Sự ra đời của Transformer đã mang lại một bước tiến vượt bậc trong lĩnhvực xử lý ngôn ngữ tự nhiên và đã tạo nền tảng cho sự phát triển của các môhình ngôn ngữ lớn hiện nay Với sự kết hợp thông minh giữa kiến trúc mạngnơ-ron và các cơ chế attention để tạo ra sự tương tác mạnh mẽ giữa các từtrong câu Điều này cho phép nó hiểu được ngữ cảnh và mối quan hệ giữacác từ một cách toàn diện hơn, và học được các đặc trưng phức tạp và môhình hóa cấu trúc ngữ pháp phức tạp Điều quan trọng là, Transformer cũngđã truyền cảm hứng cho sự phát triển của các mô hình ngôn ngữ lớn như

Trang 37

GPT và BERT (Bidirectional Encoder Representations from Transformers)[39] Với khả năng học tự động từ dữ liệu không gian rộng và đa dạng, cácmô hình này đã đạt được những kết quả ấn tượng trong các tác vụ như dịchmáy, phân loại văn bản, tóm tắt văn bản, và nhiều tác vụ ngôn ngữ khác.

Nhờ vào Transformer, chúng ta đã có một nền tảng mạnh mẽ để xây dựngcác mô hình ngôn ngữ lớn, khám phá ngôn ngữ và tạo ra các ứng dụng thôngminh dựa trên ngôn ngữ một cách hiệu quả Sự thành công của Transformerđánh dấu một cột mốc quan trọng trong lĩnh vực xử lý ngôn ngữ tự nhiên vàtạo ra tiềm năng lớn cho tương lai của công nghệ AI và ngôn ngữ máy Hầuhết các mô hình ngôn ngữ lớn và phương pháp tối ưu tham số được sử dụngtrong luận văn đều tận dụng kiến trúc Transformer này.

Vào tháng 10 năm 2018, mô hình lớn BERT Large [39] đã được huấnluyện với 350 triệu tham số, trở thành mô hình Transformer lớn nhất từtrước đến thời điểm này từng được công bố Lúc đó, kể cả những phần cứnghiện đại nhất cũng gặp khó khăn trong việc tinh chỉnh mô hình này Vấn đề"không đủ bộ nhớ" khi sử dụng mô hình lớn BERT vào thời gian đó như mộtchướng ngại lớn cần phải vượt qua Sau năm năm, các mô hình mới đượcra mắt thậm chí có số lượng tham số lên đến 540 tỷ [40], tăng lên gấp hơn1500 lần Tuy nhiên, dung lượng RAM trên mỗi GPU chỉ tăng lên khôngđến 10 lần (tối đa 80Gb) do chi phí cao của bộ nhớ băng thông Kích thướcmô hình tăng rất nhanh nhanh hơn so với tài nguyên tính toán, làm cho việcđiều chỉnh các mô hình lớn cho những tác vụ nhỏ hơn trở nên bất khả thi vàkhông thực tế cho hầu hết tất cả mọi người.

Học có ngữ cảnh (In-context learning) [37] đã trở thành một tiêu chuẩnmới trong việc truyền dữ liệu huấn luyện cho các mô hình ngôn ngữ quy mô

Trang 38

hàng tỷ trọng số Tuy nhiên, cơ chế ngữ cảnh giới hạn của Transformers lạigiảm nhỏ kích thước tập dữ liệu huấn luyện chỉ còn vài ví dụ Ràng buộcnày, kết hợp với việc không đảm bảo hiệu suất lại đặt ra một thách thức mới.Ngoài ra, việc mở rộng kích thước ngữ cảnh cũng dẫn đến việc tăng đáng kểchi phí tính toán

Hình 3.2: Một số phương pháp tinh chỉnh tối ưu tham số [29]

Các phương pháp tinh chỉnh tối ưu tham số (Parameter-Efficient Tuning) được nghiên cứu nhằm giải quyết những vấn đề này bằng cách chỉhuấn luyện một tập hợp nhỏ các tham số, có thể là một phần của các tham sốmô hình hiện có hoặc một tập hợp các tham số mới được thêm vào mô hìnhgốc ban đầu Các phương pháp này khác nhau về hiệu suất tham số, hiệusuất bộ nhớ, tốc độ huấn luyện, chất lượng đầu ra của mô hình và chi phísuy tính toán bổ sung (nếu có) Trong những năm gần đây, đã có hàng trămbài báo về các phương pháp tinh chỉnh tối ưu tham số được công bố [29] Ởluận văn này, học viên chủ yếu tập trung sử dụng nhóm phương pháp dựatrên việc tái tham số hóa (Reparametrization-based methods)

Trang 39

Fine-3.4Phương pháp tối ưu tham sốLow-Rank Adaptation (LoRA)

Với quan sát rằng các mô hình ngôn ngữ lớn đã được huấn luyện trênmột tập dữ liệu khổng lồ, dẫn đến kết quả mô hình đã hiểu được ngôn ngữmột cách rất phổ quát Điều đó cũng có nghĩa nó có thể được sử dụng tiếpcho nhiều tác vụ khác nhau, ngay cả khi các tác vụ này rất khác so với nhữngtác vụ mà mô hình được huấn luyện ban đầu Và rằng, chúng ta vẫn có thểcó được một kết quả tương tự mô hình lớn ban đầu khi huấn luyện trên cáctập dữ liệu nhỏ hơn chỉ với việc thay đổi một lượng rất nhỏ trọng số Vì vậyý tưởng của phương pháp tái tham số hóa được phát triển bằng cách đóngbăng ma trận trọng số của mô hình gốc và sử dụng các phép biến đổi thấpchiều (low-rank transformation) lên ma trận trọng số, để cho ra một ma trậnmới δW tối giản hơn nhiều so với ma trận ban đầu, nhưng vẫn giữ lại cáctham số đã được huấn luyện trước của mạng Điều này giảm số lượng thamsố có thể được huấn luyện trong khi vẫn cho phép phương pháp tiếp thu trithức từ các ma trận có số chiều lớn ban đầu Nhờ đó, số lượng tham số cầnhuấn luyện được giảm xuống, làm cho quá trình huấn luyện nhanh hơn vàtiết kiệm tài nguyên tính toán Nổi bật hơn cả là phương pháp LoRA (Low-Rank Adaptation) [15] mà học viên sẽ sử dụng trong luận văn này Sử dụngý tưởng chung của việc tái tham số hóa , quá trình cập nhật tham số cho matrận trọng số trong LoRA được phân rã thành tích của hai ma trận thấp hạng.Ma trận chuyển đổi có thể được biểu diễn đơn giản như sau:

WA∈ Rin×r,WB ∈ Rout×r (3.7)

Trang 40

Tất cả các tham số của mô hình được huấn luyện trước đều được giữđóng băng và chỉ có các ma trận WA và WB có khả năng được huấn luyện.Hệ số tỉ lệ (scaling factor) là hằng số và thường bằng 1

r Sau quá trình huấnluyện, chúng có thể được tích hợp vào ma trận gốc W bằng cách cộng matrận WAWB vào ma trận gốc W

Trong Transformers, LoRa thường được ánh xạ lên các ma trận WK vàWV [3.2] trong các multi-head attention Phương pháp này đã được đánhgiá trên các mô hình có đến 175 tỷ tham số, và cho kết quả vượt trội hơnnhững phương pháp tối ưu tham số khác (BitFit, Adapter) Thậm chí nó cònvượt trội hơn cả phương pháp truyền thống (FT) tinh chỉnh tất cả bộ ma trậntrọng số ban đầu, trong khi chỉ sử dụng 2% số lượng tham số Kết quả đượccác học viên của bài báo "LoRA: Low-Rank Adaptation of Large LanguageModels" [15] công bố ở hình bên dưới

Hình 3.3: Bảng so sánh hiệu suất giữa phương pháp tối ưu LoRA và cácphương pháp khác trên mô hình GPT-3 175 tỉ tham số [15]

Ngày đăng: 22/05/2024, 11:11

Tài liệu cùng người dùng

Tài liệu liên quan