Trong bài toán sinh ra câu lệnh truy vấn từ ngôn ngữ tự nhiên bằng tiếng Anh, nghiên cứu của Zefeng Cai, Xiangyu Li và cộng sự đã phát triển phương pháp tiền huấn luyện có hướng dẫn bởi
Độ đo ROUGE - 0:52 22222223 221221221211211 21121111 crtree 19 2.2 Phương pháp chuyên đổi mô tả truy vấn bằng ngôn ngữ tự nhiên tiếng Việt
ROUGE (Recall-Oriented Understudy for Gisting Evaluation) là một công cụ đánh giá tự động chất lượng tóm tắt, so sánh với các bản tóm tắt lý tưởng do con người tạo ra Nó sử dụng các biện pháp như đếm n-gram, chuỗi từ và cặp từ để xác định mức độ trùng lặp giữa tóm tắt do máy tính tạo ra và các tóm tắt chuẩn.
Vi độ đo ROUGE có nhiều biến thé, bài toán chỉ sử dụng một biến thé là ROUGE-N dé đánh giá, cụ thé là ROUGE-2.
Dsereferencesugramnescount(gramn) Trong do: e references: Các ban tóm tat cân được so sánh ¢ gram: Don vi từ e n: Sô lượng cân được so sánh
Lý do chọn ROUGE-2 làm độ đo đánh giá kết quả cho bài toán là vì các phan tử phổ biến trong ERD thường là các từ có từ 2 tiếng trở lên, như ví dụ thực thể sinh viên với các thuộc tính mã sinh viên, họ tên và giới tính.
2.2 Phương pháp chuyển đối mô tả truy van bằng ngôn ngữ tự nhiên tiếng Việt sang ngôn ngữ truy van dữ liệu (Structured Query Language — SQL)
2.2.1 Giới thiệu về ngôn ngữ truy vấn dữ liệu (Structured Query Language —
Structured Query Language (SQL) is the standard language used for managing and querying relational databases (RDBMS) It enables users to efficiently retrieve information from databases.
2.2.1.2 Các thành phần cơ bản của SQL a) Câu lệnh SELECT
Câu lệnh SELECT là câu lệnh chính dé truy van dữ liệu trong SQL Đây là cú pháp tổng quát của câu lệnh SELECT:
1 SELECT [DISTINCT] danh sách các cột | hàm
2 FROM danh sách các bảng (quan hệ)
4 [GROUP BY danh_sách_cột_gom_ nhóm]
5 [HAVING điều kiện_trên_ nhóm]
6 [ORDER BY cột1 ASC | DESC, cột2 ASC | DESC, ]
Trong SQL, câu lệnh SELECT được sử dụng để chỉ định các cột cần truy vấn Để loại bỏ các bản ghi trùng lặp trong kết quả, bạn có thể sử dụng từ khóa DISTINCT Ngoài ra, phần FROM cho phép bạn chỉ định bảng mà dữ liệu sẽ được truy vấn từ đó.
Trong SQL, có một số thành phần chính giúp thực hiện truy vấn hiệu quả Đầu tiên, điều kiện lọc các hàng được đặt bằng câu lệnh WHERE Tiếp theo, GROUP BY được sử dụng để gom nhóm các hàng dựa trên một hoặc nhiều cột Để lọc các nhóm đã được tạo ra, ta sử dụng HAVING kết hợp với GROUP BY Cuối cùng, ORDER BY giúp sắp xếp kết quả theo một hoặc nhiều cột nhất định.
Danh sách các cột: e Tên các cột (thuộc tính) cần được hiên thị ở kết quả. e_ Các cột cách nhau bởi dấu ‘,’
Danh sách các bảng bao gồm tên các bảng được phân cách bởi dấu °,° và điều kiện được xác định bởi biểu thức Boolean để chọn dòng Các phép toán so sánh cũng được sử dụng trong quá trình này.
This article discusses various SQL operators and expressions essential for database queries Key operators include comparison symbols such as =, >, =, (SELECT AVG(salary) FROM employees); e) Các phép toán tập hop
Các phép toán tập hợp trong SQL giúp kết hợp kết quả từ hai hoặc nhiều truy vấn Phép toán UNION kết hợp kết quả và loại bỏ các hàng trùng lặp, trong khi UNION ALL cũng kết hợp kết quả nhưng không loại bỏ các hàng trùng lặp Ngoài ra, INTERSECT trả về các hàng xuất hiện trong cả hai truy vấn.
22 e EXCEPT (hoặc MINUS, tùy vào hệ quản tri cơ sở dữ liệu): Phép toán
EXCEPT (trong SQL Server) hoặc MINUS (trong Oracle) trả về các hàng từ truy vấn đầu tiên mà không có trong truy vấn thứ hai.
Vi dụ: sử dụng phép UNION
3 SELECT city FROM Suppliers; f) Ham gom nhóm va tinh toán
Trong SQL, hàm gom nhóm được sử dụng để thực hiện các phép tính trên tập hợp dữ liệu và trả về giá trị duy nhất Chúng thường kết hợp với mệnh đề GROUP BY để nhóm các hàng có giá trị tương tự trong một hoặc nhiều cột Một số hàm gom nhóm phổ biến bao gồm: COUNT() để đếm số lượng hàng, SUM() để tính tổng các giá trị, AVG() để tính giá trị trung bình, MIN() để tìm giá trị nhỏ nhất, và MAX() để tìm giá trị lớn nhất.
Ví dụ: dùng hàm gom nhóm và tính toán có sử dụng mệnh đề GROUP BY
1 SELECT Country, AVG(Price) AS AveragePrice,
2.2.2 Mô hình T5 (Text-to-Text Transfer Transformer)
T5 (Text-to-Text Transfer Transformer) là một kiến trúc dựa trên Transformer, sử dụng phương pháp chuyển đổi văn bản thành văn bản Mọi nhiệm vụ như dịch thuật, trả lời câu hỏi và phân loại đều được xem là cung cấp văn bản, với mô hình làm đầu vào và được huấn luyện để tạo ra một số văn bản mục tiêu So với BERT, T5 mang đến những cải tiến đáng kể trong khả năng xử lý ngôn ngữ tự nhiên.
23 hình Transformer đặc biệt đã được huấn luyện có giám sát trên một lượng lớn dữ liệu văn bản không có giám sát, giúp học biểu diễn ngôn ngữ phong phú cho các ứng dụng xử lý ngôn ngữ tự nhiên (NLP) T5 có những thay đổi so với BERT, bao gồm việc thêm causal decoder vào kiến trúc hai chiều và thay thế nhiệm vụ điền vào chỗ trống bằng sự kết hợp của các nhiệm vụ đào tạo trước đó.
"translate English to German: That is good."
"cola sentence: The course is jumping well." "Das ist gut."
"§tsb sentence1: The rhino grazed on the grass sentence2: A rhino is grazing in a field."
"six people hospitalized after a storm in attala county."
"summarize: state authorities dispatched emergency crews tuesday to survey the damage after an onslaught of severe weather in mississippi."
Phương pháp chuyển đổi văn bản sang văn bản thống nhất T5 (Text-to-Text Transfer Transformer) cho phép thực hiện nhiều tác vụ như dịch ngôn ngữ, trả lời câu hỏi và phân loại bằng cách sử dụng cùng một kiến trúc mô hình Mỗi tác vụ được biểu thị qua đầu vào là văn bản, và mô hình được huấn luyện để sinh ra các đầu ra văn bản tương ứng Cách tiếp cận này chuẩn hóa việc sử dụng hàm mất mát, siêu tham số và quy trình huấn luyện cho nhiều tác vụ xử lý ngôn ngữ tự nhiên đa dạng.
Mô hình TS sử dụng kiến trúc transformer encoder-decoder [24] để xử lý các tác vụ
NLP Encoder nhận đâu vào là văn bản nguồn và mã hóa thành một biêu diễn nội tại.
Sau đó, decoder sử dụng biểu diễn này dé tạo ra đầu ra tương ứng.
Masked Mult-Head Attention an, ‘Attention 4
T5 đã thực hiện một số sửa đổi quan trọng so với kiến trúc encoder-decoder transformer Đầu tiên, LayerNorm được áp dụng ngay trước mỗi phép biến đổi attention và feed-forward, nằm bên ngoài đường dư thừa, giúp ổn định quá trình huấn luyện và cải thiện hiệu suất của mô hình Thứ hai, T5 không sử dụng additive bias trong LayerNorm mà chỉ dùng tham số scale, từ đó đơn giản hóa tính toán và tối ưu hóa hiệu quả Cuối cùng, T5 áp dụng phương pháp nhúng vị trí đơn giản, trong đó một giá trị scalar được cộng vào logits tương ứng để tính trọng số attention, giữ cho thông tin vị trí quan trọng trong các nhiệm vụ mô hình hóa chuỗi.
Phương pháp đánh giá mô hình . 5555 S+s*+*s+s++eseexeeresss 26 1 Exact Macth .- G1 HH HH TH ng HH nu re 26 2 BERT SCOF€ 2G TT HH HH nh 27 3 BLEU ScOre - - - G111 1H ng ng He 28
Exact Match (EM) là một chỉ số đánh giá mức độ chính xác của các chuỗi dự đoán so với chuỗi tham chiếu Điểm số EM sẽ là 1 nếu chuỗi dự đoán khớp hoàn toàn với chuỗi tham chiếu, trong khi đó, nếu không khớp, điểm số sẽ là 0.
1 Dự đoán "select * from khachhang" sẽ có điểm EM là 0 nếu chuỗi tham chiếu là "select * from khach".
Dự đoán "select makh from khachhang" sẽ đạt điểm EM bằng 1 nếu chuỗi tham chiếu cũng là "select makh from khachhang" Điểm EM của một tập dự đoán được tính bằng tổng điểm EM của các chuỗi trong tập chia cho tổng số dự đoán.
Điểm EM của một tập dự đoán, ví dụ như {Ví dụ 1, Ví dụ 2}, được xác định là 0.5 Để tính toán độ đo này, cả truy vấn SQL dự đoán và truy vấn SQL tham chiếu đều được phân tích thành các cấu trúc dữ liệu chuẩn hóa, trong đó chứa các mệnh đề SQL.
So sánh các tập hợp thành phần trong SQL là một quá trình quan trọng, trong đó mỗi truy vấn SQL tạo ra một tập hợp các thành phần được ký hiệu là 9 cho truy vấn dự đoán và y cho truy vấn tham chiếu Mỗi thành phần bao gồm một mệnh đề SQL k và giá trị tương ứng v Việc tính điểm cho các truy vấn này giúp đánh giá hiệu quả và độ chính xác của các kết quả trả về.
ScoreŒ,y) = lo niếu 9 # y e Tính EM: EM được tinh bằng cách lay tổng số điểm của tat cả các mẫu, chia cho tổng số mẫu
EM = NỒ, Score(Pn, Yn) n=1
= ¥, và y„ lần lượt là các tập hợp thành phan của truy van SQL dự đoán và truy vấn SQL tham chiếu. Ưu điểm: Rat trực quan và dễ hiéu.
Nhược điểm của quy định này là tính nghiêm ngặt, có thể dẫn đến sự không công bằng trong một số tình huống, đặc biệt khi chỉ có những sai sót nhỏ mà không ảnh hưởng đến ý nghĩa tổng thể của câu SQL.
BERT Score đánh giá độ tương đồng giữa các token trong câu tham chiếu và câu ứng viên thông qua phương pháp ghép nối tham lam Cụ thể, mỗi token trong câu ứng viên được ghép với token tương tự nhất trong câu tham chiếu để tính Recall, trong khi mỗi token trong câu tham chiếu được ghép với token tương tự nhất trong câu ứng viên để tính Precision Cuối cùng, điểm FI được tính bằng cách kết hợp Precision và Recall.
Dưới đây là công thức tính điểm Recall, Precision và F1 cho một câu tham chiếu x va câu ứng viên £
Gia sử ta có một câu tham chiếu x với các token x1, x2, , xn và một câu ứng viên X với các token y1, y2, , ym Chúng ta áp dụng phương pháp ghép nối tham lam để xác định các cặp token có điểm tương đồng cosine cao nhất giữa hai câu.
Trong đó e(x;) và e(£,) là các embedding cua token x; va token Ê; va cosine e( x;), (2) là điểm tương đồng cosine giữa hai embedding này [27]
BERT Score là một chỉ số đánh giá sự tương đồng ngữ nghĩa giữa các câu bằng cách sử dụng vector ngữ nghĩa từ mô hình BERT Chỉ số này có khả năng phát hiện những khác biệt nhỏ về cú pháp mà không làm thay đổi ngữ nghĩa tổng thể của câu.
BERT Score là công cụ phù hợp để đánh giá các bài toán text-to-SQL nhờ vào khả năng so sánh các câu lệnh SQL dự đoán và tham chiếu dựa trên ngữ nghĩa, vượt trội hơn so với phương pháp so sánh chính xác từ ngữ như Exact Match.
The BLEU (Bilingual Evaluation Understudy) Score is a crucial metric used for evaluating machine translation tasks It assesses the quality of translations by comparing them to reference translations.
Trong bài viết này, chúng tôi phân tích 28 n-gram, là chuỗi liên tục của n phần tử từ các câu dịch máy và so sánh với các câu dịch tham khảo do con người thực hiện Điểm BLEU, một chỉ số đánh giá chất lượng dịch, dao động từ 0 đến 1, với 1 thể hiện sự khớp hoàn hảo với bản dịch tham khảo Thông thường, điểm BLEU có xu hướng giảm khi độ dài câu tăng lên, tuy nhiên điều này có thể thay đổi tùy thuộc vào mô hình dịch được sử dụng.
Biểu thức toán học của BLEU Score được cho như sau:
BLEU Score = BP x exp() (w¡ xIn(P,))) N i=1
Brevity Penalty (ô BP) là hình phạt nhằm điều chỉnh độ ngắn gọn của bản dịch Trọng số (ô _w) được sử dụng cho độ chính xác n-gram của bậc i, thường có giá trị bằng nhau cho tất cả các bậc Điểm độ chính xác n-gram được sửa đổi (P;) phản ánh tỷ lệ n-gram trong bản dịch máy khớp chính xác với các n-gram trong bản dịch tham khảo, chia cho tổng số n-gram trong bản dịch máy Số lượng n-gram tối đa cần xem xét thường là 4.
_ Count Clip(marches;, max — ref — count;)
Ô Count Clip là một hàm dùng để cắt số lượng n-gram khớp (marches) theo số lượng tối đa của n-gram trong tất cả các bản dịch tham khảo (max — ref — count).
Số lượng n-gram khớp chính xác giữa bản dịch máy và bất kỳ bản dịch tham khảo nào được gọi là 29 e matches e max-ref-count thể hiện số lần xuất hiện tối đa của n-gram cụ thể ở bậc 1 trong bất kỳ bản dịch tham khảo nào Ô candidate-n-grams đại diện cho tổng số n-gram ở bậc i có trong bản dịch máy.
Chỉ số phạt độ ngắn (Brevity Penalty - BP):
Chỉ số phạt độ ngăn phạt các bản dịch ngắn hơn so với các bản dịch tham khảo Biểu thức toán học cho Brevity Penalty được cho như sau:
Trong do: e 7 là độ dài của ban dich máy. ô c1ad6 dài trung bỡnh của cỏc bản dịch tham khảo.
BLEU Score là một công cụ hữu ích cho bài toán Text-to-SQL, vì nó đánh giá sự tương đồng cú pháp giữa truy vấn SQL được sinh ra và truy vấn mục tiêu thông qua việc so sánh các n-gram Việc này giúp xác định độ chính xác về mặt cú pháp của truy vấn SQL Hơn nữa, BLEU Score có thể được tính toán tự động, giúp tiết kiệm thời gian và công sức cho người dùng.
CHUONG 3 PHAN TICH VÀ THỰC NGHIỆM
3.1 Bai toan 1: Text to ERD
3.1.1 M6 hinh paraphrase va rule-based
3.1.1.1 Quy trình xây dựng hệ thống rule-based
PHAN TÍCH VÀ THUC NGHIỆM . . -cc++cc+crerrceee 31 3.1 Bài toán 1: Text to EIRÌD HT TH ng ng ngư 31 3.1.1 Mô hình paraphrase va rule-based - - ô+ ôô++<x+ssesseeseerss 31 3.1.1.1 Quy trình xây dựng hệ thống rule-based - 2-2 2 2 s+‡ 31 3.1.1.2 Thu thập và tiền xử lý đữ liệu . ¿- 2 x+zz+zx+zxzrserxeee 33 3.1.1.3 Quy trình xây dựng mô hình paraphrase ‹- ôô++sôô+ss+ 34 3.1.1.4 Kết qua của mô hình paraphrase . - 2-2 2 +2 z+£z+£zzzzzxeez 38 3.1.2 Mô hình ERD elements tagging va heuristics rules
Quy trình xây dựng hệ thống heuristics rules
Heuristics rules được xây dựng dựa trên kinh nghiệm, do đó, việc phát triển hệ thống heuristics rules để nhận diện các phần tử trong ERD cần trải qua quá trình phân tích và xác định Từ những kiến thức và kinh nghiệm thu được khi nhận diện phần tử ERD trong câu, có thể hình thành một hệ thống heuristics rules hữu ích.
Cách các phần tử ERD hiện diện trong câu
Thông tin rút ra được e Câu có một [E] (xuất hiện lần đầu tiên).
Thực thể đầu tiên (entity 1) nhận giá trị từ token đầu tiên Trong câu có hai thực thể [E], thực thể thứ hai (entity 2) được gán giá trị từ token thứ hai xuất hiện Nếu câu có nhiều hơn hai thực thể [E], thực thể thứ hai (entity 2) sẽ nhận giá trị từ token cuối cùng có tag [E] Nếu không có thực thể [E] nào tồn tại, không thực hiện thêm bước nào vì không có thực thể hợp lệ Cuối cùng, trong câu có một thực thể [E], một khóa chính [PK] và một hoặc nhiều thực thể bổ sung [AE].
Token được gán nhãn [E] là thực thé.
Token được gan nhãn [PK] là khóa chính của thực thê.
Các token được gán nhãn [AE] là thuộc tính bình thường của thực thê.
Thực thé [E]I hoặc [E]2 chưa có trong danh sách các thực thê.
Thêm thực thể mới vào danh sách các thực thé.
Bat kỳ token nào chứa “duy_ nhất” hoặc “chỉ có”.
Xác định mối kết hợp 1-1 giữa hai thực thé.
Bat ky token nào chứa “duy_nhat” hoặc “chỉ_có”. entity_1 giông entity_ 2.
Thực thê có mối kết hợp tự liên kết với chính nó.
Câu có [O], [E], [M], [E] theo đúng thứ tự.
Câu theo sau có [O], [E], [O], [E] theo đúng thứ tự.
Xác định mối kết hợp I-n giữa hai thực thé.
Câu (câu thứ nhất) có [O], [E], [M],
[E] theo đúng thứ tự và có [R].
Câu theo sau (câu thứ hai) có [O],
[E], [M], [E] theo đúng thứ tự. entity_1 của câu thứ nhất giống entity_2 của câu thứ hai. entity_2 của câu thứ nhất giống entity_1 của câu thứ hai.
Câu (câu thứ nhất) có [O], [E], [M1],
[E] theo đúng thứ tự và có [R].
Câu theo sau câu thứ nhất (câu thứ han) có [O], [E], [M], [E] theo đúng thứ tự.
In the sequence of sentences, the third sentence contains [ER] along with one or more [AR] The entity in the first sentence matches entity_2 in the second sentence, while entity_2 in the first sentence corresponds to entity_1 in the second sentence.
Xác định mối kết hợp n-n giữa hai thực thể.
Token được gan nhãn [R] là tên mối kết hợp (cũng là tên bảng trung gian) giữa hai thực thẻ.
Xác định môi kết hợp n-n giữa hai thực thể.
Token được gán nhãn [ER] là tên mối kết hợp (cũng là tên bảng trung gian) giữa hai thực thê.
Các token được gan nhãn [AR] là thuộc tính bình thường của bảng trung gian.
Bảng 3.6 Hệ thống heuristics rules
Quy trình xây dựng mô hình ERD elements tagging
Bước đầu tiên là nhập các thư viện cần thiết và thiết lập SEED để đảm bảo khả năng tái lập của các quá trình ngẫu nhiên, nhằm đạt được kết quả huấn luyện nhất quán Đồng thời, khởi tạo tokenizer từ BERT đa ngôn ngữ cũng là một phần quan trọng trong quá trình này.
In this article, we explore the integration of PyTorch and Transformers for natural language processing tasks, utilizing libraries such as torch, torch.nn, and torch.optim We implement BERT through the BertTokenizer and BertModel to enhance text processing capabilities Additionally, we leverage JSON for data handling and numpy for numerical operations, while incorporating time and random modules for performance optimization and randomization in our experiments.
Python c:\Users\20520\AppData\Local \Programs\python\Python312\Lib\site-packages\tqdm\auto.py:21: TqdmWarning: IProgress not found Please update jupyter and ip from autonotebook import tqdm as notebook _tqdm
Fandom seed (SEED) np random seed (SEED) torch.manual_seed(SEED) torch.backends.cudnn.deterministic = True
Python tokenizer = BertTokenizer from_pretrained( ‘bert-base-multilingual-cased')
Hình 3.9 Nhập các thư viện cân thiết, đặt SEED
Bước 2: Đặt các token đặc biệt bao gồm token bắt đầu (CLS), token padding (PAD) và token không xác định (UNK) Chuyển đổi các token này thành chỉ số và xác định độ dài đầu vào tối đa Các token được khởi tạo như sau: init_token = tokenizer.cls_token, pad_token = tokenizer.pad_token, unk_token = tokenizer.unk_token.
To initialize the tokenizer, the indices for the initial, padding, and unknown tokens are obtained using `tokenizer.convert_tokens_to_ids()` The indices for these tokens are stored in the variables `init_token_idx`, `pad_token_idx`, and `unk_token_idx` Finally, the values of these indices are printed to the console.
# Get the maximum input length max_input_length = tokenizer.model_max_length print (max_input_length)
Hinh 3.10 Lay các token đặc biệt
Bước 3: Định nghĩa hàm cắt và chuyển đổi token thành ID và ham cắt token đến độ dài tối đa.
To efficiently process tokens, the function `cut_and_convert_to_id` trims the input tokens to a specified maximum length and converts them into their corresponding IDs using a tokenizer Similarly, the `cut_to_max_length` function ensures that tokens do not exceed the defined maximum length by simply slicing the list Both functions are essential for managing input data effectively in natural language processing tasks.
Hình 3.11 Hàm cắt và chuyển đổi token thành ID và ham cắt token đến độ dài tối da
Step 4: Initialize preprocessors using 'functools.partial' to define text fields and labels, as well as to establish field pairs The text preprocessor is created with 'functools.partial' for the function 'cut_and_convert_to_id', incorporating the tokenizer and maximum input length Similarly, the tag preprocessor is defined with 'functools.partial' for 'cut_to_max_length', also utilizing the maximum input length.
TEXT = data.Field(use_vocab = False, lower = True, preprocessing = text_preprocessor, init_token = init_token_idx, pad_token = pad_token_idx, unk_token = unk_token_idx)
UD_TAGS = data.Field(unk_token = None, init_token = ‘', preprocessing = tag_preprocessor)
Python fields = (( “text”, TEXT), (“udtags”, UD_TAGS))
Hình 3.12 Khởi tao preprocessors sử dung ‘functools.partial’, các trường van bản và nhãn và Định nghĩa các cap trường (fields)
Bước 5: Định nghĩa hàm xử lý dữ liệu và tải tập dữ liệu từ file JSON và xử lý tập dữ liệu.
To efficiently process a dataset, a custom function is defined that utilizes a tokenizer and a specified maximum input length The function iterates through each sentence in the data, extracting words and their corresponding tags It ensures that both tokens and tags are truncated to fit within the defined maximum input length, maintaining the integrity of the dataset while adhering to processing constraints This approach allows for streamlined data preparation for further analysis or model training.
#tokens = [tokenizer.cls token] + tokens # Add [CLS] token to start
#tags = [''] + tags # Add padding token to start token_ids = tokenizer convert_tokens_to_ids(tokens) processed_data.append((token_ids, tags)) return processed_data
# Load dataset from JSON file with open(‘processed_data2.json’, 'r', encoding='utf-8') as f: dataset = json load(f)
Python processed_data = process_dataset(dataset, tokenizer, max_input_length)
Hình 3.13 Dinh nghĩa hàm xử lý dữ liệu và tải tập dữ liệu từ file JSON va xử lý tập đữ liệu.
Bước 6: Tạo các example với đúng kiểu dữ liệu và xây dựng từ vựng cho trường
# Create examples with correct data types examples = [] for text_ids, tags in processed data:
# Convert IDs back to tokens for TEXT field text_tokens = tokenizer.convert_ids_to_tokens(text_ids)
# Ensure tags are strings tags = [str(tag) for tag in tags] examples append(data.Example.fromlist([text_tokens, tags], fields))
Python bx dataset = data.Dataset(examples, fields)
UD_TAGS build_vocab(dataset) print (UD_TAGS vocab stoi)
Python defaultdict(None, {*': @, '': 1, ‘AE’: 2, 'E': 3, 'PK': 4, 'O': 5, 'F': 6, "RẺ: 7, 'M': 8, ‘AR’: 9, 'ER': 10, ‘Khi': 11, 'có thể: 12, 'e': 13, "¡`
# Define sort_key to avoid TypeError def sort_key(ex): return len(ex.text)
Hình 3.14 Tao các example với đúng kiểu dữ liệu
Bước 7: Chia tập dữ liệu thành tập train, validation, va test.
46 train data, valid data, test data = dataset.split(split_ratio=[0.7, 0.15, 0.15], stratifiedse)
1 Python print(vars(train_data.examples[40]))
Hình 3.15 Chia tập đữ liệu thành tập train, validation, và test
Bước 8: Khởi tạo iterator cho từng tập dữ liệu và định nghĩa mô hình BERTPoSTagger.
#device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') device = torch.device( 'cpu') train_iterator, valid_iterator, test_iterator = data.BucketIterator.splits(
(train_data, valid_data, test_data), batch_sizeTCH_SIZE, deviceice, sort_key=sort key, # Add this line sort within batch=True # Enable sorting within each batch
#sort_key=lambda x: len(x.text), # Sort by the length of the text field
The BERTPoSTagger class, which inherits from nn.Module, initializes with parameters for BERT, output dimension, and dropout rate In the constructor, it sets up the BERT model and defines a linear layer to map the embedding dimension, derived from BERT's hidden size, to the specified output dimension Additionally, a dropout layer is included to enhance model generalization The forward method processes input text through these layers to produce output results.
#text = [sent len, batch size] text = text.permute(1, @)
#text = [batch size, sent len] embedded = self.dropout(se1f.bert(text)[8])
#embedded = [batch size, seq len, emb dim] embedded = embedded.permute(1, 0, 2)
#embedded = [sent len, batch size, emb dim] predictions = self.fc(self.dropout (embedded) )
#predictions = [sent len, batch size, output dim] return predictions
Hình 3.17 Định nghĩa mô hình BERTPoSTagger
Bước 9: Khởi tạo mô hình BERT, đặt các thông số cho mô hình và đếm số lượng tham sô của mô hình.
47 bert = BertModel.from_pretrained( 'bert-base-multi1ingual-cased' )
QUTPUT_DIM = len(UD_TAGS.vocab.itos)
DROPOUT)| def count_parameters (model) : return sum(p.numel() for p in model.parameters() if p.requires_grad) print(f'The model has {count_parameters(model):,} trainable parameters’)
The model has 177,871,127 trainable parameters
Hinh 3.18 Khoi tao mé hinh BERT
Bước 10: Khởi tao optimizer, khởi tao ham loss và chuyên mô hình va criterion sang thiét bi (device)
LEARNING_RATE = 5e-5 optimizer = optim.Adam(model.parameters(), 1r = LEARNING_RATE)
TAG_PAD_IDX = UD_TAGS.vocab.stoi[UD_TAGS.pad_token] criterion = nn.CrossEntropyLoss(ignore_index = TAG_PAD_IDX) model = model.to(device) criterion = criterion.to(device)
Hinh 3.19 Khoi tao optimizer, khoi tao ham loss Bước 11: Dinh nghĩa ham tính độ chính xác def categorical_accuracy(preds, y, tag pad_idx):
The accuracy of returns per batch is calculated by determining the proportion of correct predictions, such that if you achieve 8 out of 10 correct, the return value is 9.8 instead of a maximum of 8 This is done by identifying the index of the highest probability predictions using `max_preds = preds.argmax(dim=1, keepdim=True)` Non-padding elements are selected with `(y != tag_pad_idx).nonzero()`, and the correct predictions are evaluated with `correct = max_preds[non_pad_elements].squeeze(1).eq(y[non_pad_elements])` Finally, the accuracy is computed as the sum of correct predictions divided by the total number of non-padding elements, represented as `return correct.sum() / torch.FloatTensor([y[non_pad_elements].shape[0]]).to(device)`.
Hình 3.20 Định nghĩa hàm tính độ chính xác
Step 12: Define the training function The function `train` takes in the model, iterator, optimizer, criterion, and tag padding index It initializes variables for epoch loss and accuracy, then sets the model to training mode For each batch in the iterator, it retrieves the text and tags, and resets the optimizer's gradients.
#text = [sent len, batch size] predictions = model (text)
#predictions - [sent len, batch size, output dim]
#tags = [sent len, batch size] predictions = predictions.view(-1, predictions shape[-1]) tags = tags.view(-1)
#predictions = [sent len * batch size, output dim]
In the training process, the loss is calculated using the criterion function with predictions and tags, while the categorical accuracy is assessed with the same inputs, considering the tag padding index The loss is then backpropagated, and the optimizer updates the model parameters accordingly As the epoch progresses, the cumulative loss and accuracy are recorded, ultimately returning the average loss and accuracy per iteration at the end of the epoch.
Hinh 3.21 Dinh nghia ham train Bước 13: Dinh nghĩa ham evaluate va ham do thoi gian thực thi.
The function `evaluate` computes the loss and accuracy of a model over a given dataset iterator, using a specified criterion and ignoring padding indices for tags It initializes epoch loss and accuracy to zero, sets the model to evaluation mode, and processes each batch without gradient calculations For each batch, it retrieves the text and tags, makes predictions, reshapes them, and calculates the loss and accuracy The cumulative loss and accuracy are updated, and the function returns the average loss and accuracy across the iterator Additionally, the `epoch_time` function calculates the elapsed time between the start and end of an epoch, converting it into minutes and seconds for easy interpretation.
Hình 3.22 Định nghĩa ham evaluate và ham do thời gian thực thi
Bước 14: Huấn luyện mô hình và xem kết quả hiển thị.
In this code snippet, we set the number of epochs to 10 and initialize the best validation loss to infinity For each epoch, we record the start time, then train the model using the training iterator, optimizer, and criterion, while also calculating the training loss and accuracy After training, we evaluate the model on the validation set to obtain the validation loss and accuracy, and then record the end time We compute the epoch's duration and check if the current validation loss is better than the best recorded loss; if so, we update the best validation loss and save the model's state Finally, we print the epoch number, duration, training loss, training accuracy, validation loss, and validation accuracy for monitoring the model's performance.
Hình 3.23 Huấn luyện mô hình
We strongly recommend passing in an `attention mask` since your input ids may be padded See https://huggingface.co/docs/transformers Epoch: @1 | Epoch Time: 1m 25s
Output is truncated View as a scrollable element or open in a text editor Adjust cell output settings
Hình 3.24 Xem kết quả hiển thị2
Step 15 involves evaluating the model on the test set First, load the model's state dictionary using `model.load_state_dict(torch.load('tut2-model.pt'))` Then, calculate the test loss and accuracy by calling the `evaluate` function with the model, test iterator, criterion, and TAG_PAD_IDX Finally, display the results with the formatted output: `Test Loss: {test_loss:.3f} | Test Acc: {test_acc*100:.2f}%`.
Hình 3.25 Danh giá mô hình trên tập test
Bước 16: Sau đó xuất ra file model và lưu lại dưới dạng file.pt dé dùng cho việc triển khai ứng dụng.
Kết quả của mô hình ERD elements tagging
Chọn một đề tài và tải mô hình ERD để gán nhãn các yếu tố, nhằm quản lý tình hình viết giáo trình trong trường ĐHCNTT Mỗi giáo trình sẽ có một mã loại duy nhất, được đặt tên để phân biệt với các loại giáo trình khác.
Tác giả cần cung cấp thông tin duy nhất bao gồm họ tên, ngày tháng năm sinh, quê quán và chuyên ngành Mỗi tác giả có thể viết nhiều giáo trình khác nhau, và các giáo trình này có thể được đồng tác giả Thông tin cần thiết bao gồm tên giáo trình, chủ đề, số trang và năm xuất bản của từng giáo trình.
# Tách đoạn script thành từng câu sentences = ne.split(r'\.\s*", script.strip()) sentences = [sentence for sentence in sentences if sentence] # Loại bỏ các câu rỗng
# Placeholder cho kết quả a11 tokens = [] a11 tags = [] all_unks = []
The application of the tag_sentence function processes each sentence, yielding tokens, tags, and unknowns The results are then aggregated into lists for further analysis.
# In ra các từ không nhận diện được print("Unknoun tokens:", a11_ unks)
# In kết quả gộp chung print("Pred Tag\tToken\n”) for token, tag in zip(all_tokens, a11 tags): print (#"{tag}\t\t{token}") v 00
Hình 3.26 Code xử lý dé và load mô hình ERD elements tagging
AE đề của loại giáo trình
Hình 3.27 Kết quả gán nhấn
Utilize the complete results of ERD elements tagging and execute code heuristics rules to observe the generated PlantUML code Export the results using the command export_ex > puml > rule-based-solution > tŸ This will lead to the output of the rule-based solution in PlantUML format.
3 entity "loai giao trinh” as loai giao trinh { Ẹ
5 + ten_loai_giao_trinh ® loai_giao_trinh
9 entity "giao trinh" as giao trinh (
10 * ma_giao_trinh © chu_de
16 entity "tac gia" as tac gia { ® =
18 + am - gia ® giao_trinh _ mu: - 19 + ngay, thang_nam_ sinh In nữa nà | ® ma tac gia
20 + que_quan Seer © ho_ten_tac_gia
2 + chuyen_nganh e ten_giao_ trinh —_———
3 o so_trang @ ity “viet” i © nam_xuat_ban que, quan
P at viet" as viet { \_xuat_Í © chuyen_nganh
27 loại giao trinh |o |{ giao _trinh
Hình 3.28 Kết quả mã PlantUML được sinh ra.
Xem xét với kết quả chính xác khi người dùng tự giải.
IỀ De _004-expert-solution.puml 1 X ứ m lai export > puml > solution > @ De_004-expert-solution.puml > {} De_004-expert-solut
3 entity "loai giao trinh" as loai giao trinh {
; ) + chu de | (loại giao trinh
9 entity "giao trinh" as giao trinh { © ten_loai_giao_trinh
10 * ma_giao_trinh| © chu_de
15 16 entity "tac gia" as tac gia { (giao tịnh -
17 * ma tac gia © ma giao trinh ® ma dao gia -
18 + ho ten tac gia © ten_ giao trình oho_ten tacgia
19 + ngay_thang_nam_sinh © so_trang © que_quan
20 + que_quan elpen ete ben © chuyen_nganh
27 loai giao trinh |o |{ giao trinh
Hình 3.29 Kết quả chính xác khi người dùng tự giảise
3.1.3 Đánh giá mô hình paraphrase và ERD elements tagging e Sử dụng đánh giá của chuyên gia:
Công thức đánh giá: oe „ Số phần tử ERD máy sinh ra từ câu văn paraphrase tự động Độ chính xác = ———————cx_-rs— nan
Số phần tử ERD do người dùng tự giải o Kêt quả đánh giá đôi với một đê:
Hình 3.30 Kết quả đánh giá mô hình paraphrase cua chuyên gia đối với một dé
* ma_khach_hang, + ten_khach_hang orrect with the machine's number of elements
Hình 3.31 Kết quả đánh giá mô hình ERD elements tagging e Su dụng độ đo ROUGE-2: o Load độ do: import evaluate rouge = evaluate load('rouge ` )
Hình 3.32 Load độ do ROUGE
53 o Gan biến cho kết quả máy tự sinh: predictions = [""" entity "khach hang" as khach hang {
* ma khach_ hang + hoten_khach_ hang
+ sũ dien_ thoai entity "nha_xe" as nha xe {
H nha_xe |n |{ xe khach hang |o |{ dat_cho xe |o |{ dat cho endum1”""]
Hình 3.33 Gán biến cho kết quả mã PlantUML do máy tự sinh
54 o Gan biến cho kết quả người dùng tự giải: expert_solution = ["""@startuml entity "khach hang” as khach hang {
* ma khach hang + ho tenkhach hang + so dien thoai entity "nha xe” as nha xe {
* ma nha xe + ten nha xe + dia chỉ cntity.7xe”‹as xe {
+ so luong cho entity “loai_xe" as loai xe {
*-ma_ loai + ten loai entity “goi dat cho” as goi dat cho {
+ thoi gian dat cho nha xe |o |{ xe loai xe |o |{ xe khach hang |o |{ goi dat cho xe |o |{ goi dat cho
Hình 3.34 Gan biến cho kết quả mã PlantUML do người dùng tự giải
55 o Inra kết quả đánh giá độ đo ROUGE-2 đối với một đề:
= Mô hình paraphrase results = rouge.compute(predictions=machine_solution, references=expert_solution, use_aggregatorse} print(results[ `rouge2' ]}
Hình 3.35 Kết quả đánh giá mô hình paraphrase độ do ROUGE-2 doi với một dé
=" Mô hình ERD elements tagging results = rouge.compute(predictions=machine_solution, references=expert_solution, use_aggregatorse) print(results[ 'rouge2" ]) w 0.0s
Hình 3.36 Kết quả đánh giá mô hình ERD elements tagging Đánh giá 2 mô hình trên toàn bộ dữ liệu
Mô hình Đánh gia của chuyên gia ROUGE-2
Mo hình ERD 70.671% 78.048% elements tagging
Bang 3.7 Bang kết quả đánh giá 2 mô hình trên toàn bộ dữ liệu Nhận xét về hiệu suất của các mô hình: e M6 hình Paraphrase o Đánh giá của chuyên gia: 84.369%
Mô hình paraphrase đã nhận được đánh giá cao từ các chuyên gia nhờ khả năng tạo ra các câu đồng nghĩa chính xác và phù hợp với ngữ cảnh Tỷ lệ 84.369% cho thấy đây là một kết quả ấn tượng, đặc biệt trong lĩnh vực xử lý ngôn ngữ tự nhiên, chứng minh rằng mô hình đã nắm bắt hiệu quả ngữ nghĩa và ngữ pháp của câu đầu vào.
Điểm số ROUGE-2 cao (89.308%) cho thấy mô hình có khả năng tạo ra các câu paraphrase với nhiều bigram tương đồng với câu tham chiếu, phản ánh khả năng duy trì cấu trúc và nội dung của câu gốc Điều này chứng tỏ sự chính xác trong việc tạo ra các biến thể câu, với đánh giá từ chuyên gia đạt 70.671%.
Mô hình tagging các yếu tố ERD đã đạt được 70.671% đánh giá từ các chuyên gia, cho thấy hiệu suất tốt trong việc xác định và gắn thẻ các thành phần ERD từ văn bản tự nhiên Tuy nhiên, vẫn còn khoảng cách so với mô hình paraphrase, cho thấy việc nhận diện các phần tử ERD phức tạp hơn và yêu cầu độ chính xác cao hơn Chỉ số ROUGE-2 đạt 78.048%.
Mô hình đạt điểm số ROUGE-2 là 78.048%, cho thấy khả năng tái tạo bigram từ văn bản gốc tương đối tốt, nhưng không bằng mô hình paraphrase Điều này chỉ ra rằng việc gắn thẻ các thành phần ERD gặp khó khăn trong việc duy trì cấu trúc ngữ nghĩa của câu gốc Mô hình paraphrase không chỉ nhận được đánh giá cao từ chuyên gia mà còn có điểm số ROUGE-2 rất ấn tượng, chứng tỏ khả năng mạnh mẽ trong việc tạo ra các câu đồng nghĩa chính xác và hợp lý Mặc dù mô hình gắn thẻ các phần tử ERD có hiệu suất tốt, vẫn còn khoảng cách so với mô hình paraphrase, phản ánh độ phức tạp cao hơn trong việc nhận diện và gắn thẻ các phần tử từ văn bản tự nhiên.
Kết quả cho thấy cả hai mô hình đều có tiềm năng ứng dụng cao; tuy nhiên, cần có sự cải tiến hơn nữa đối với mô hình gán thẻ ERD để đạt được hiệu suất tương đương hoặc cao hơn so với mô hình paraphrase.
3.2 Bài toán 2: Text to SQL
3.2.1 Thu thập và tiền xử lý dữ liệu
Để thu thập dữ liệu cho môn Cơ sở dữ liệu (IT004), chúng tôi đã lấy các đề thi thực hành từ khoa Hệ Thống Thông Tin, Đại học Công Nghệ Thông Tin (UIT), nhằm tạo nguồn tài liệu cho các câu hỏi truy vấn và câu SQL Các đề thi này chứa nhiều câu hỏi yêu cầu sinh viên thực hiện các truy vấn từ đơn giản đến phức tạp, phù hợp để huấn luyện mô hình Phương pháp trích xuất bao gồm việc đọc và phân tích các đề thi để xác định các câu hỏi và yêu cầu cụ thể, chẳng hạn như tìm kiếm thông tin và thống kê dữ liệu Mỗi đề thi thường có nhiều câu hỏi liên quan đến các phương thức truy vấn SQL khác nhau Dựa trên hơn 3 năm học tập và kinh nghiệm về cơ sở dữ liệu, sinh viên đã đề xuất thêm hơn 800 dòng dữ liệu mới, bao gồm các câu hỏi và truy vấn phát triển từ các đề thi đã thu thập.
Mục đích của việc mở rộng bộ dữ liệu dé dam là nhằm tăng cường độ phong phú và đa dạng, đồng thời đáp ứng đầy đủ các loại truy vấn và yêu cầu có thể xuất hiện trong các ứng dụng thực tế của cơ sở dữ liệu Bộ dữ liệu được xây dựng với cấu trúc gồm hai cột chính.
= Cột "question": Chứa câu hỏi truy van bằng tiếng Việt.
= Cột "query": Chứa câu truy van SQL tương ứng. o Lưu trữ và quản lý: Dữ liệu được tô chức va lưu trữ trong các tệp tin
CSV hoặc cơ sở dit liệu dé dé dàng quản lý và sử dung cho các bước tiên xử lý và huân luyện mô hình.
Kết quả thu thập dữ liệu: Thu được tap dataset lưu đưới dang CSV với hon 1050 dong dữ liệu.
Trích xuất mẫu nhỏ từ dataset như sau: question query
Tìm tác giả (MaTG, SoDT) của những quyển SELECT IG.MaTG, Holen, SoDT FROM TACGIA TG, PH
Tìm tác giả (MalG, en,SoDT) của nhữn = SELECT TG.MalG, HoTen, SoDT, TenSach FROM ((TA
Hình 3.37 Mẫu nhỏ từ dataset text-to-sql
Trước khi tiến hành huấn luyện mô hình, việc xử lý dữ liệu là rất quan trọng Cần chuẩn hóa và làm sạch dữ liệu bằng cách loại bỏ dấu câu không cần thiết, các câu hỏi không hợp lệ, sửa lỗi chính tả và xử lý các biến thể ngôn ngữ để đảm bảo chất lượng dữ liệu.
Chia dữ liệu ngẫu nhiên thành hai phần là một bước quan trọng trong quá trình huấn luyện mô hình, với tỷ lệ 80% cho tập huấn luyện và 20% cho tập kiểm tra Tập huấn luyện được sử dụng để xây dựng mô hình, trong khi tập kiểm tra giúp đánh giá hiệu suất của mô hình sau khi huấn luyện.
3.2.2 Quy trình xây dựng mô hình T5
Step 1: Import the necessary libraries and read the training dataset, which consists of pairs of questions and their corresponding SQL commands The essential libraries to import include NumPy, Pandas, and the T5 model components from the Transformers library, along with DataLoader and Dataset from PyTorch.
# Doc dữ liệu từ tap train df2 = pd.read_csv(‘Data/train.csv') # Đảm bảo đường dẫn đúng
# Tạo danh sách câu hỏi và câu lệnh sQL questions = df2[ 'question' ].tolist() sql_queries = df2[ ‘query'].tolist()
Hình 3.38 Import thư viện, doc và tạo danh sách câu hỏi va lệnh sql
Bước 2: Sử dụng T5Tokenizer từ thư viện transformers đê mã hóa các câu hỏi và câu lệnh SQL thành dạng số hóa phù hợp cho mô hình T5ForConditionalGeneration.
The T5 tokenizer, initialized with T5Tokenizer.from_pretrained("t5-base"), allows for efficient processing of text inputs By utilizing the tokenizer's batch_encode_plus method, both questions and SQL queries can be tokenized with options for padding, truncation, and returning tensors in PyTorch format This enables streamlined handling of multiple inputs for various natural language processing tasks.
Bước 3: Tạo DataLoader cho tập train: Tao Dataset tùy chỉnh và DataLoader dé cung cấp dữ liệu cho quá trình huấn luyện.
Thu thập và tiền xử lý đữ Hi@U oe eeccccccsecssessesssessecssessecsecsseeseesesseeses 58 3.2.2 Quy trình xây dung mô hình T5 .- - ô+ ++ssx+++ssesseeeeeess 60 3.2.3 Kết quả mô hình T5 -¿2+E++E++EE£EEtEEEEEEEECEEEerkerkrrrkrrkee 63 3.2.4 Đánh giá và tối ưu hóa mô hình -¿- ¿+¿+++++zx++zxeze- 67 3.2.4.1 Dự đoán trên tập test và hậu xử lý -+ccsSSsseerseeeeese 67 3.2.4.2 Sử dụng độ đo Exact Mafch c- 5c sck+x + *sksiksrsserskee 69 3.2.4.3 Sử dụng độ đo BERT S€OF€ SG 3S * 3s vreirrrrrrrrrrres 69 3.2.4.4 Sử dụng độ đo BLEU SCOTG - c5 33113 SErrsrrseeerrse 71 3.2.4.5 Kết luận tổng quát - 2-22 2 ©+£+E+EE£EEE+EEtEEtEEEvrkerkerreerkeee 72
Thu thập dữ liệu cho đề thi thực hành môn Cơ sở dữ liệu (IT004) được thực hiện từ nguồn tài liệu chính là khoa Hệ Thống Thông Tin, Đại học Công Nghệ Thông Tin (UIT), nhằm thu thập các câu hỏi truy vấn và câu SQL tương ứng Các đề thi này chứa nhiều câu hỏi yêu cầu sinh viên thực hiện các truy vấn cơ sở dữ liệu từ đơn giản đến phức tạp, phục vụ cho việc huấn luyện mô hình Phương pháp trích xuất câu hỏi và câu SQL bao gồm việc đọc và phân tích các đề thi để xác định các phần chứa câu hỏi, thường kèm theo yêu cầu cụ thể như tìm kiếm thông tin, thống kê dữ liệu, và tính toán kết quả Mỗi đề thi thường có nhiều câu hỏi liên quan đến các phương thức truy vấn SQL khác nhau Ngoài ra, dựa trên kiến thức và kinh nghiệm học tập trong hơn 3 năm, sinh viên đã đề xuất thêm hơn 800 dòng dữ liệu mới, bao gồm phát triển các câu hỏi và câu truy vấn từ các đề thi thực hành đã thu thập.
Mục đích của việc mở rộng bộ dữ liệu dé dam là nhằm bảo đảm độ phong phú và đa dạng, đồng thời cung cấp đầy đủ các loại truy vấn và yêu cầu có thể xuất hiện trong các ứng dụng thực tế của cơ sở dữ liệu Bộ dữ liệu được xây dựng với cấu trúc gồm hai cột chính.
= Cột "question": Chứa câu hỏi truy van bằng tiếng Việt.
= Cột "query": Chứa câu truy van SQL tương ứng. o Lưu trữ và quản lý: Dữ liệu được tô chức va lưu trữ trong các tệp tin
CSV hoặc cơ sở dit liệu dé dé dàng quản lý và sử dung cho các bước tiên xử lý và huân luyện mô hình.
Kết quả thu thập dữ liệu: Thu được tap dataset lưu đưới dang CSV với hon 1050 dong dữ liệu.
Trích xuất mẫu nhỏ từ dataset như sau: question query
Tìm tác giả (MaTG, SoDT) của những quyển SELECT IG.MaTG, Holen, SoDT FROM TACGIA TG, PH
Tìm tác giả (MalG, en,SoDT) của nhữn = SELECT TG.MalG, HoTen, SoDT, TenSach FROM ((TA
Hình 3.37 Mẫu nhỏ từ dataset text-to-sql
Xử lý dữ liệu là bước quan trọng trong việc chuẩn bị cho huấn luyện mô hình Trước khi sử dụng, cần phải làm sạch và chuẩn hóa dữ liệu bằng cách loại bỏ dấu câu không cần thiết, các câu hỏi không hợp lệ, sửa lỗi chính tả và xử lý các biến thể ngôn ngữ để đảm bảo chất lượng dữ liệu.
Chia dữ liệu thành hai phần: tập huấn luyện và tập kiểm tra, với tỷ lệ 80% cho tập huấn luyện và 20% cho tập kiểm tra.
3.2.2 Quy trình xây dựng mô hình T5
Step 1: Import the necessary libraries and read the training data, which consists of pairs of questions and their corresponding SQL commands Utilize libraries such as NumPy, Pandas, and Transformers, specifically T5Tokenizer and T5ForConditionalGeneration, along with the Adam optimizer and DataLoader from PyTorch to prepare the dataset for processing.
# Doc dữ liệu từ tap train df2 = pd.read_csv(‘Data/train.csv') # Đảm bảo đường dẫn đúng
# Tạo danh sách câu hỏi và câu lệnh sQL questions = df2[ 'question' ].tolist() sql_queries = df2[ ‘query'].tolist()
Hình 3.38 Import thư viện, doc và tạo danh sách câu hỏi va lệnh sql
Bước 2: Sử dụng T5Tokenizer từ thư viện transformers đê mã hóa các câu hỏi và câu lệnh SQL thành dạng số hóa phù hợp cho mô hình T5ForConditionalGeneration.
The T5 tokenizer can be initialized using `T5Tokenizer.from_pretrained("t5-base")` To process input questions, use `tokenizer.batch_encode_plus()` with parameters for padding, truncation, and returning tensors in PyTorch format Similarly, SQL queries can be tokenized using the same method to obtain tokenized outputs.
Bước 3: Tạo DataLoader cho tập train: Tao Dataset tùy chỉnh và DataLoader dé cung cấp dữ liệu cho quá trình huấn luyện.
The SQLOnlineDataset class is a custom dataset designed for SQL, initialized with tokenized inputs and outputs It stores input IDs and attention masks from the tokenized inputs, while also holding the labels and decoder attention masks from the tokenized outputs.
(variable) input_ids: Any def _ len (self): return len(self.input_ids) def _ getitem (self, idx): return {
‘input_ids': self.input_ids[idx], 'attention_mask": self.attention_mask[ idx], 'labels': self.1abels[ idx],
'decoder_attention_mask": self.decoder_attention_mask[1dx ]
# Tạo DataLoader cho tập train train dataset = SQLOnlineDataset(tokenized_inputs, tokenized_outputs) train_loader = DataLoader(train_dataset, batch_size=4, shuffle=True)
Mô hình T5 đã được khởi tạo và sử dụng optimizer AdamW để tiến hành huấn luyện Quy trình huấn luyện được cấu hình để xử lý từng batch trong DataLoader, đồng thời thực hiện lan truyền ngược nhằm cập nhật các tham số của mô hình.
# Cấu hình optimizer optimizer = AdamW(model.parameters(), lr>-5)
To train the model, set the number of epochs to 10 and iterate through each epoch For each batch in the training loader, transfer the input IDs, attention mask, labels, and decoder attention mask to the appropriate device Reset the optimizer's gradients before passing the input data to the model The model processes the input IDs along with the attention and decoder attention masks, returning the results in a structured format.
) loss = outputs.loss 1oss.backward() optimizer step() print(f'Epoch: {epoch+1}, Loss: {loss.item()}')
Hình 3.41 Cau hình và huấn luyện mô hình TS
Bước 5: Lưu mô hình và tokenizer sau khi huân luyện đê sử dụng lại sau này cho việc đánh giá mô hình trên tập test và dự đoán.
# Lưu m6 hình va tokenizer model.save_pretrained( 'model/vietnamese/vietnamese t5 model") tokenizer.save_pretrained( 'model/vietnamese/vietnamese t5 tokenizer’)
+ Code) + Markdown torch.save(model.state_dict(), ‘model/vietnamese/vietnamese_model.pt' )
Hình 3.42 Lưu mô hình va tokenizer sau khi huấn luyện 3.2.3 Kết quả mô hình T5 Áp dụng mô hình để generate câu hỏi mới thành câu lệnh SQL.
Sau đây, lay ngẫu nhiên vài câu hỏi trong tập test, không nằm trong dữ liệu đã được train, để kiểm thử model.
Ta sử dụng lược đồ sau, lấy từ kho đề thi thực hành môn Cơ Sở Dữ Liệu - IT004:
Cho cơ sở dữ liệu như sau :
SINHVIEN (MASV, HOTEN,NAMSINH, MACN)
Tân từ : Mỗi sinh viên có một mã số duy nhất dé phân biệt, một họ tên, va thuộc một chuyên nganh duy nhất.
Tân từ : Mỗi chuyên ngành có một mã số duy nhất đê phân biệt và một tên.
DANGKY (MASV MA MON, NAMHOC, HOCKY)
Tân từ : Một bộ của DANG KY thê hiện việc một sinh viên có đăng ký một môn học trong học kỳ của một năm học.
MON (MA MON, TENMON, SOTINCHI)
Tân từ|: Mỗi môn học có một mã số duy nhất dé phân biệt, một tên và một số tin chi
Hình 3.43 Mẫu dé thi thực hành môn IT004
Vi dụ 1: e Input: “Liệt kê tên va năm sinh của sinh viên có mã số 'SV01””
In this experiment, a new question is posed: "List the names and birth years of the student with ID 'SVA1'." The input is encoded using a tokenizer, and the model generates a SQL query based on this input The generated SQL query is then decoded and printed alongside the original question, showcasing the model's ability to translate natural language queries into structured SQL commands.
Hình 3.44 Ví du I - input mô hình T5 e Kết quả mô hình dự đoán:
SELECT HOTEN, NAMSINH FROM SINHVIEN WHERE MASV = ‘SV@1'
In a recent experiment, a new question was posed: "List the names and student IDs of students with the code 'SVỉ@1'." To process this query, the input was encoded using a tokenizer, and then the model generated a corresponding SQL query The generated SQL query was decoded and displayed, showcasing the connection between the input question and the resulting database query This process highlights the effectiveness of using AI models for generating SQL queries based on natural language inputs.
Question: Liệt kờ tờn va năm sinh của sinh viờn cú mó số 'SVỉ1
Generated SQL query: SELECT HOTEN, NAMSINH FROM SINHVIEN WHERE MASV = 'SVỉ1';
Hình 3.45 Ví du 1 — output do mô hình T5 dự đoán
Trong ví dụ 1, câu hỏi yêu cầu thực hiện truy vấn trên một bảng duy nhất, do đó, đầu vào khá đơn giản Kết quả của mô hình dự đoán câu SQL trong trường hợp này có vẻ chính xác và hợp lý.
Thử một câu truy van phức tạp trên nhiều bảng, ta xem model dự đoán ra kết quả như thê nào.
Ví dụ 2: e Input: “Liệt kê tên các môn học mà sinh viên có mã 'SVO1' chưa đăng ký”
In this experiment, we formulated a new question: "List the subjects that the student with ID 'SV@1' has not registered for." We then encoded this question using the tokenizer, preparing it for processing by the model The model generated an SQL query based on the input, which was decoded from the outputs Finally, we printed the generated SQL query to retrieve the desired information about the student's unregistered subjects.
Hình 3.46 Ví dụ 2 - input mô hình 15 e Kết quả mô hình dự đoán:
SELECT TENMON FROM MON WHERE MAMON NOT IN (SELECT MAMON FROM DANGKY WHERE MASV = 'SVô1')
The experiment involved generating a SQL query based on a new question: "List the subjects that students with 'SV1' have not registered for." Using a tokenizer, the question was encoded into input IDs for the model The model then generated the SQL query with specified parameters, including a maximum length and the use of beam search for optimization Finally, the generated SQL query was decoded from the output and printed alongside the original question.
Question: Liệt kê tên các môn học mà sinh viên có mã 'SV@1' chưa đăng ký
Generated SQL query: SELECT TENMON FROM MON WHERE MAMON NOT IN (SELECT MAMON FROM DANGKY WHERE MASV = 'SVỉ1');
Hình 3.47 Ví dụ 2 — output do mô hình T5 dự đoán
Nhận xét: ở ví dụ 2, câu SQL được model dự đoán đã đúng về logic theo CSDL được cho.
Tiếp tục với một câu truy vấn phức tạp hơn.
Ví dụ 3: e Input: “Liệt kê tên các sinh viên đăng ký ít tín chỉ nhất trong học ky 1 năm
In this experiment, we pose a new question: "List the names of students who registered for the fewest credits in the first semester of the academic year 2823." We encode this question using a tokenizer and generate an SQL query through a model, specifying parameters such as maximum length and beam search Finally, we decode the generated output to obtain the SQL query and print both the original question and the resulting SQL query.
Hình 3.48 Ví dụ 3 - input mô hình T5 e Kết quả mô hình dự đoán:
SELECT SV.HOTEN FROM SINHVIEN SV JOIN DANGKY DK
ON SV.MASV = DK.MASV JOIN MON M ON DK.MAMON = M.MAMON WHERE DK.NAMHOC = 2023 AND DK.HOCKY = 1
GROUP BY SV.HOTENORDER BY SUM(M.SOTINCHI) DESC
THIET KE HE THONG VÀ TRIEN KHAI UNG DỤNG
Thiết kế hệ thong wo.ccecceccesccsccscssessessessessessessessessessessessessessessessessessesssseaesseseees 75 1 Thiết kế thành phần chức năng ¿ ¿+2 ++cs++cx++zx+zzez 75 2 Thiết kế thành phan xử lý 2 22+ ++E++E+E+EzEzrerrerreee 78 4.2 Triển khai ứng dụng + 2 5£+S£+SE£EE2EE£EEEEEEEEEEEEEEEEE121.21EEErEerrkrei 79 4.2.1 Phuong thức gọi API sử dụng HttpClient trong C#
4.1.1 Thiết kế thành phần chức năng
“TexttoERD > Sinh mã PlantUML > © SinhảnhERD > © Sinh câu lệnh DBL > © Sinh câu truy vấn SQL >
— < te ” - va — Ke 7s mA = Bs ~ ~
\ ~ ` 5 ~ ẹ TS ` ‘ ae xế ôextendằ ~~ ôextendằ ` ôincludeằ — /ôincludeằ —— ~ ôincludeằ _7 ôincludeằ ° , k“ „
_ —x+ ~~ Mk gg 4 Nhập đoạn văn mỏ tả CSDL ` Nhấn nút [Generate] > Nhấn nút [Generate query]
_ ae %extendằ â Text to SQL