1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án generating code of programming languages for automatic software development

18 4 0

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

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

THÔNG TIN TÀI LIỆU

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM ĐỒ ÁN GENERATING CODE OF PROGRAMMING LANGUAGES FOR AUTOMATIC SOFTWARE DEVELOPMENT GV hướng dẫn: Huỳnh Tuấn Anh SV thực hiện: 20521449 - Nguyễn Khánh 20521280 - Nguyễn Hoàng Ngọc Hải Thành phố Hồ Chí Minh, tháng năm 2023 Lời cảm ơn Lời đầu tiên, nhóm xin gửi lời cảm ơn chân thành đến Thầy Huỳnh Tuấn Anh, giảng viên hướng dẫn nhóm mơn Đồ án Trong trình học tập thực đồ án, nhóm nhận quan tâm giúp đỡ, hướng dẫn tận tình, tâm huyết Thầy Quá trình thực Đồ án trình đầy thử thách, địi hỏi phải dành nhiều thời gian, cơng sức để nghiên cứu, tìm tịi xây dựng Vì thế, hội động lực để nhóm rèn luyện, hồn thiện thân kĩ tích lũy suốt q trình thực môn học, từ tiếp thu nhiều kinh nghiệm quý báu cho đường phát triển sau Với phát triển sức mạnh phần cứng thuật toán tối ưu mới, ứng dụng Artificial Intelligence năm gần áp dụng vào nhiều lĩnh vực môi trường khác nhau, kéo theo nhiều vấn đề phức tạp cần giải Đề tài nhóm việc chuyển đổi ngơn ngữ giao tiếp thơng dụng sang ngơn ngữ lập trình xuất nhiều hình dạng, kiểu dáng khác nghiên cứu chuyên sâu nhiều khía cạnh Nhóm mong báo cáo giúp Thầy người đọc có nhìn tổng quan hướng đề tài, thể kiến thức liên quan đến việc giải tốn Do vốn kiến thức lĩnh vực cịn nhiều hạn chế khả tiếp thu giới hạn, đồ án nhóm khơng tránh khỏi có thiếu sót nhầm lẫn Nhóm mong nhận góp ý, chỉnh sửa đến từ Thầy để đồ án nhóm hồn thiện Lời cuối cùng, nhóm xin chân thành cảm ơn Thầy xin kính chúc Thầy nhiều sức khỏe, hạnh phúc thành công đường nghiệp giảng dạy Nguyễn Khánh Nguyễn Hoàng Ngọc Hải Mục lục Mở đầu Tổng quan 2.1 Giải thích tốn 2.2 Bộ liệu huấn luyện (Dataset) 2.3 Các nghiên cứu liên quan 4 Phương hướng tiếp cận 3.1 Tổng quát phương hướng 3.2 Thiết kế liệu đầu vào 3.3 Biểu diễn câu lệnh SQL công việc thành phần 3.4 Xếp hạng cột thành phần 3.5 Huấn luyện mơ hình suy luận kết 3.6 Execution-guided decoding (Giải mã có định hướng thực thi) 7 10 11 Thử nghiệm & Đánh giá 4.1 Thử nghiệm 14 14 Tổng kết 16 Mở đầu Một lượng lớn thông tin ngày lưu trữ sở liệu quan hệ (SQL databases) Những sở liệu tảng tối quan trọng hệ thống thông tin y tế, dân cư, thị trường tài chính, thương mại điện tử, dịch vụ trực tuyến, Một điểm thu hút sở liệu quan hệ người dùng sử dụng ngôn ngữ khai báo để mô tả truy vấn họ muốn thực thay viết tập hợp lời gọi hàm, chi tiết cách thực câu lệnh truy vấn tóm tắt chi tiết thiết kế hệ thống sở liệu đó, tránh phải sửa đổi source code ứng dụng có thay đổi tổ chức sở liệu Tuy nhiên, bất chấp gia tăng nhanh chóng mức độ phổ biến sở liệu quan hệ, khả truy xuất thông tin từ sở liệu hạn chế Điều phần người dùng cần hiểu ngơn ngữ truy vấn có cấu trúc phức tạp nhiều thành phần, việc thành thạo truy vấn SQL mạnh mẽ xem khó khăn Khái niệm việc tương tác với sở liệu thông qua ngôn ngữ tự nhiên người mục tiêu nhắm tới từ lâu dài, với tên gọi chung “Natural Language Interface to Databases” (NLIDBs) “NL-to-SQL” “Textto-SQL” [Androutsopoulos et al., 1995] Mục tiêu giải tốn Xử lý ngôn ngữ tự nhiên (Natural Language Processing – NLP) nhằm phân tích ngữ nghĩa (semantic parsing): biến đổi mô tả truy vấn dạng ngôn ngữ tự nhiên trở thành câu lệnh SQL mà máy tính xử lý Trong năm gần đây, với phát triển mơ hình học sâu (deep learning) mới, nghiên cứu vấn đề có xu hướng nghiêng tiếp cận tốn mơ hình có sẵn Mục tiêu đồ án nằm việc giải thích khía cạnh tốn Text-to-SQL, với áp dụng phương pháp tận dụng sức mạnh mô hình ngơn ngữ (language model) huấn luyện sẵn để giải tốn Source code1 thơng số mơ hình huấn luyện public Github, với thử nghiệm thông số kết thực liệu WikiSQL, liệu bao gồm 80000 mô tả ngôn ngữ tự nhiên câu lệnh SQL tương ứng https://github.com/khanhnguyen02311/HydraNet-WikiSQL-modified Tổng quan 2.1 Giải thích tốn Thông thường, câu truy vấn SQL bao gồm thành phần chính: • Aggregation operator (hàm tổng hợp): để truy xuất thông tin tổng quan từ hàng chọn câu truy vấn Aggregation operator để trống câu truy vấn không yêu cầu thông tin tổng quan hàng • SELECT-clause (cột chọn): xác định cột chọn để truy xuất liệu • FROM-clause (bảng chọn): xác định bảng liệu (table) để truy xuất • WHERE-clause (điều kiện): xác định điều kiện để lọc liệu Ngoài cịn có nhiều loại clause khơng bắt buộc sử dụng câu truy vấn (GROUP BY, ORDER BY, HAVING, LIMIT, ) Những clause thường sử dụng cho yêu cầu truy vấn nâng cao Trong phạm vi toán tại, đầu vào toán liệu table cần truy xuất liệu yêu cầu truy xuất ngôn ngữ tự nhiên, đầu câu lệnh SQL tương ứng để sử dụng table kết yêu cầu 2.2 Bộ liệu huấn luyện (Dataset) WikiSQL liệu tổng hợp bao gồm 80654 mô tả ngôn ngữ tự nhiên & câu truy vấn SQL tương ứng 24241 table schema Các thành phần phân chia ngẫu nhiên thành 56355, 8421 15878 phần tử tương ứng cho train, dev test Mỗi phần tử liệu dataset bao gồm table schema, câu truy vấn SQL câu hỏi ngôn ngữ tự nhiên tương ứng với câu lệnh SQL Mỗi câu lệnh SQL có SELECT-clause với Aggregation operator tương ứng, có từ tới WHERE-clause Hình biểu diễn phần tử dataset với thành phần nêu Các câu truy vấn có độ dài đa dạng trải dài nhiều table schema, từ đặt thách thức cho model việc đáp ứng nhiều câu truy vấn nhiều loại table khác Kích cỡ lớn dataset hỗ trợ tốt việc áp dụng kỹ thuật sử dụng mạng neural học sâu cho toán thu hút nhiều quan tâm tốn Hình 1: Một phần tử ví dụ WikiSQL 2.3 Các nghiên cứu liên quan Trong nghiên cứu trước đó, nhiều phương pháp đưa tốn này, phân loại thành ba hướng chính: • Phiên dịch sequence-to-sequence (Seq2seq): Các mơ hình tiêu biểu: Seq2SQL [Zhong et al., 2017], Coarse-to-Fine [Dong and Lapata, 2018], SeaD [Xu et al., 2023] Các phương pháp đầu cho toán thường dựa theo cấu trúc Một mơ hình Seq2seq mơ hình đưa vào chuỗi phần tử (từ vựng, chữ cái, ) xuất chuỗi phần tử khác Mơ hình Seq2seq bao gồm thành phần chính: encoder (bộ mã hóa) decoder (bộ phiên dịch) Encoder có vai trị trích xuất thơng tin chuỗi liệu đầu vào chuyển đổi dạng vector ẩn gửi tới decoder, từ decoder tiếp thu trả chuỗi liệu đầu tương ứng Khó khăn: Các phương pháp sử dụng Seq2seq thường không đạt hiệu cao thứ tự WHERE-clause khơng có ảnh hưởng câu lệnh SQL, có ảnh hưởng Seq2seq model, việc huấn luyện để xếp thứ tự model thường khó khăn Các nghiên cứu sử dụng Seq2seq có vài phương pháp phụ để giảm thiểu độ phức tạp vấn đề áp dụng Reinforcement Learning (RL) độ cải thiện không cao Nhưng mơ hình mắt gần SeaD [Xu et al., 2023] với việc áp dụng model hiệu áp dụng phương pháp giảm nhiễu cải thiện đáng kể độ xác kết dự đốn • Chia task nhỏ cho phần câu lệnh SQL: Các mơ hình tiêu biểu: TypeSQL [Yu et al., 2018], HydraNet [Lyu et al., 2020] Hướng giải tách việc dự đốn tồn câu truy vấn trở thành dự đốn thành phần câu truy vấn SELECT-column, SELECT-aggregation, WHEREcolumn, WHERE-value, , thành phần xác định model con, giúp giảm tỷ lệ câu lệnh kết bị lỗi cú pháp Khó khăn: Việc tiếp cận giúp tránh vấn đề ảnh hưởng thứ tự Seq2seq model, lại làm yếu mối quan hệ thành phần mối liên kết SELECT-column WHERE-column, WHERE-clause với nhau, Cùng với đó, báo cũ hướng thường sử dụng không gian vector từ vựng (word embedding/word representation) có sẵn huấn luyện trước (pre-train) GloVe, vốn mắc vấn đề model Word2vec thiếu vector cho từ gặp lần đầu (Out-of-Vocabulary) khó học từ gặp • Áp dụng tối ưu pre-trained language model: Các mô hình tiêu biểu: SQLova [Hwang et al., 2019], IE-SQL [Ma et al., 2020], SeaD [Xu et al., 2023] Các nghiên cứu gần thường xuyên sử dụng language model huấn luyện sẵn BERT [Devlin et al., 2019] BART [Lewis et al., 2019], model đạt kết tốt với nhiều tốn NLP khác Thơng thường, việc giải cơng việc xây dựng dựa language model có sẵn này, sau tinh chỉnh (fine-tune) với liệu liên quan tới tốn / cơng việc Thế việc thiết kế cấu trúc cơng việc để ăn khớp với language model tối đa hóa sức mạnh model khơng phải vấn đề đơn giản Các nghiên cứu [Hwang et al., 2019] [Ma et al., 2020] thiết kế liệu đầu vào cho lớp encoder cách nối tất cột table câu hỏi NL lại với nhau; điều giúp mô hình học mối liên kết SELECT-column WHERE-column, mối liên kết WHERE-column điều kiện WHERE Khó khăn: Phương pháp yêu cầu phải giải mã thành column vector riêng cho cột thành phần, nghiên cứu phải áp dụng pooling (giảm chiều) sử dụng layer LSTM để tạo vector đấy, làm tăng độ phức tạp mơ hình Hướng thiết kế decoder thường giống phương pháp chia task nhỏ cho phần câu lệnh SQL có nói tới bên Như thiết kể tổng quan [Hwang et al., 2019] Hình 2, cơng việc thành phần toán cần phải đưa qua model nhỏ để phân tích đưa dự đốn, từ tăng khối lượng cơng việc kích cỡ mơ hình Hình 2: Cấu trúc tổng quan mơ hình SQLova [Hwang et al., 2019] Phương hướng tiếp cận 3.1 Tổng quát phương hướng Nhóm áp dụng cấu trúc mơ hình HydraNet đề xuất [Lyu et al., 2020], mơ hình có kết tốt liệu WikiSQL với điểm mạnh việc tối ưu hợp lý tận dụng sức mạnh language model đại Đối với phương pháp này, mơ hình theo hướng chia task nhỏ cho thành phần, không tách thành nhiều model cho thành phần riêng biệt, mà tối ưu hóa model lớn BERT/RoBERTa Các model kể sử dụng contextualized word representations2 , giúp loại bỏ bất cập cố hữu Word2vec Đối với đầu vào encoder, nhóm nối câu hỏi NL column cần thiết table lại đưa vào BERT/RoBERTa model Sau nhóm tách làm nhiều task bước decoding: xếp hạng SELECT & WHERE column, trích xuất điều kiện, trích xuất khoảng giá trị điều kiện Ở decoder khơng trả câu lệnh SQL nên nhóm áp dụng thêm luật đơn giản để xếp vị trí thành phần tạo câu lệnh hồn chỉnh Phương pháp có hai điểm lợi chính: • Đầu vào toán (một câu hỏi column) khớp với thiết kế BERT/RoBERTa huấn luyện toán Question Answer Pair, từ sức mạnh model toán sử dụng cách tối ưu • Bởi phương pháp mã hóa column, vector [CLS] đầu BERT/RoBERTa bao gồm tất thông tin câu hỏi column tương ứng, “column vector” mà decoder cần, ta khơng cần áp dụng thêm giảm chiều hay layer phức tạp khác, từ đơn giản hóa model cho tốn Trong phần sau, nhóm biểu diễn tốn Text-to-SQL tốn đa cơng việc giải việc áp dụng pre-trained Transformer model Nhóm mơ tả thiết kế liệu đầu vào cho mơ hình, phương pháp biến đổi câu lệnh SQL thành thiết kế này, công việc huấn luyện để trích xuất câu lệnh SQL 3.2 Thiết kế liệu đầu vào Với câu hỏi q cột table tương ứng c1 , c2 , , ck , nhóm tạo cặp câu đầu vào cho cột sau: (Concat(ϕci , tci , ci ), q), với Concat(·) phép ghép chuỗi: ϕci kiểu liệu cột ci ("string", "real", ), tc tên table xét với cột ci thành chuỗi hồn chỉnh Các cặp chuỗi liệu sau tokenize (phân tách thành chuỗi token mà mô hình hiểu được) encode để tạo thành đầu vào cho Transformer model Ví dụ, với mơ hình BERT/RoBERTa mơ hình chính, chuỗi token đầu vào là: https://towardsdatascience.com/deep-contextualized-word-representations-a-new-approach-toword-embeddings-66e0f520654d [CLS], x1 , x2 , , xm , [SEP ], y1 , y2 , , yn , [SEP ] với x1 , x2 , , xm chuỗi token cặp chuỗi liệu lúc trước vừa ghép, y1 , y2 , , yn chuỗi token câu hỏi q, [CLS] [SEP ] token đặc biệt BERT model để tổng hợp nội dung đầu vào làm mốc phân chia phần 3.3 Biểu diễn câu lệnh SQL cơng việc thành phần Trong tốn này, xem câu lệnh SQL khơng có cấu trúc lồng (nested structure), có dạng sau: ” sql ”: { ” select ” : [ ( agg1 , col1 ) , ( agg2 , col2 ) , ] ” from ” : [ table1 , table2 , ] ” where ” : [ ( wherecol1 , op1 , value1 ) , ( wherecol2 , op2 , value2 ) , ] } Chúng ta chia thành phần câu lệnh SQL thành hai loại: Các thành phần có liên hệ với column cụ thể: aggregation operator, FROMtable, WHERE-value (khoảng giá trị điều kiện), Các thành phần toàn cục khơng có liên hệ với column cụ thể: số lượng phần tử SELECT (SELECT_num), số lượng phần tử điều kiện WHERE (WHERE_num) Đối với thành phần loại 1, với cặp column-question (ci , q), kết dự đốn thành phần xét sentence pair classification (bài toán phân lớp từ cặp chuỗi) question answering task (bài toán hỏi đáp) Cụ thể hơn, nhóm biểu diễn chuỗi output embedding mơ sau: h[CLS] , hc1i , , hcmi , h[SEP ] , hq1 , , hqn , h[SEP ] , với hi embedding vector input token đưa vào mơ hình Ở việc phân lớp cho thành phần để dự đốn xét đơn giản Softmax function cho thành phần, với số lượng giá trị hợp lệ thành phần (số lượng phương án hợp lệ) cung cấp sẵn Việc tính giá trị Softmax có sử dụng tích vơ hướng với token [CLS], token tổng hợp tất thơng tin output sau dự đốn Cụ thể: Với aggregation operator aj , xét tỉ lệ lựa chọn: P (aj |ci , q) = sof tmax(W agg [j, :] · h[CLS] ) Trong trình huấn luyện, mơ hình mask out (vơ hiệu) cột khơng liên quan tới SELECT-clause Với condition operator oj (điều kiện WHERE), xét tỉ lệ lựa chọn: P (oj |ci , q) = sof tmax(W op [j, :] · h[CLS] ) Trong q trình huấn luyện, mơ hình mask out cột không liên quan tới WHERE-clause Với khoảng giá trị đầu cuối điều kiện, xét tỉ lệ lựa chọn: P (yj = start|ci , q) = sof tmax(W start · hqj ) P (yj = end|ci , q) = sof tmax(W end · hqj ) Trong trình huấn luyện, giá trị đầu cuối cột không liên quan tới WHERE-clause gán thành Đối với thành phần loại 2, ta xét tỉ lệ chọn thành phần z dạng: P (z|q) = P (z|ci , q)P (ci |q) Ta phát biểu P (z|q) dạng sentence pair classification, P (ci |q) độ tương đồng column ci câu hỏi q Cụ thể: P Đối với SELECT_num ns , xét tỉ lệ P (ns |q) = ci P (ns |ci , q)P (ci |q) P Đối với WHERE_num nw , xét tỉ lệ P (nw |q) = ci P (nw |ci , q)P (ci |q) Phương thức tính tốn độ tương đồng column P (ci |q) trình bày phần 3.4 Xếp hạng cột thành phần Ở nhóm thiết kế tốn Text-to-SQL toán xếp hạng lựa chọn thành phần column, dựa vào điểm xếp hạng thành phần để chọn câu lệnh SQL hoàn chỉnh Với câu hỏi q, nhóm xét Sq cột nằm SELECT-clause, Wq cột nằm WHERE-clause, ta có Rq = Sq ∪ Wq cột nằm câu lệnh SQL (các cột có liên quan câu lệnh) Cuối cùng, nhóm xét column thành phần Cq = {c1 , c2 , , ck } Hiển nhiên ta có: Rq ⊆ Cq Đối với tốn, ta có cơng việc xếp hạng: SELECT-rank: Xếp hạng column ci ∈ Cq dựa vào việc SELECT-clause câu hỏi q có chứa ci hay khơng, hay nói cách khác ci ∈ Sq WHERE-rank: Xếp hạng column ci ∈ Cq dựa vào việc WHERE-clause câu hỏi q có chứa ci hay khơng, hay nói cách khác ci ∈ Wq Relevance-rank (xếp hạng độ liên quan): Xếp hạng column ci ∈ Cq dựa vào việc câu lệnh SQL câu hỏi q có chứa ci hay khơng, hay nói cách khác ci ∈ Rq Ranking score (điểm xếp hạng) công việc thể classification loss sau: P (ci ∈ Sq |q) = sigmoid(wsc · h[CLS] ) cho SELECT-rank P (ci ∈ Wq |q) = sigmoid(wwc · h[CLS] ) cho WHERE-rank P (ci ∈ Rq |q) = sigmoid(wrc · h[CLS] ) cho Relevance-rank Với SELECT-rank P (ci ∈ Sq |q), nhóm xếp hạng chọn cột thành phần có kết tốt để tạo thành SELECT-clause Để xác định xem cần giữ lại column, ta có thể: 1: đặt ngưỡng tối thiểu giữ lại cột có giá trị nằm ngưỡng đó; 2: xác định rõ số lượng cột SELECT SELECT_num biểu diễn phần 3.3: X P (ns |ci , q)P (ci ∈ Rq |q) (1) n ˆ s = arg max P (ns |q) = arg max ns ns ci ∈Cq Trong nhóm chọn hướng tiếp cận số giữ lại n ˆ s column có giá trị lớn để tạo thành SELECT-clause Tương tự, với WHERE-rank, nhóm xếp hạng cột thành phần tỉ lệ P (ci ∈ Wq |q) chọn n ˆ w có giá trị lớn để tạo thành WHERE-clause, với biểu thức: X n ˆ w = arg max P (nw |q) = arg max P (nw |ci , q)P (ci ∈ Rq |q) (2) nw 3.5 nw ci ∈Cq Huấn luyện mơ hình suy luận kết Trong bước huấn luyện, phần tử mẫu (qi , Rqi ), Cqi = {cqi , cqi , , cqi ni } biến đổi thành ni cặp column-question (cqi , qi ), (cqi , qi ), , (cqi ni , qi ) Sau câu lệnh SQL tương ứng (qi , Cqi ) phân tích dùng để gán nhãn cặp column-question cho tất cơng việc giải thích Phần 3.3 3.4 Kết dùng để tối ưu tổng hợp cross-entropy loss cho công việc, tất mẫu column-question tạo từ mẫu ban đầu (qi , Cqi ) Nhóm đảo ngẫu nhiên thứ tự mẫu column-question trình huấn luyện, batch huấn luyện chưa mẫu từ nhiều câu hỏi column khác Trong bước suy luận kết quả, trước hết nhóm trích xuất kết dự đốn cơng việc output mơ hình Sau câu lệnh SQL xây dựng hoàn chỉnh bước sau: Xác định số lượng thuộc tính SELECT số lượng điều kiện WHERE Xác định (các) SELECT-clause Xác định (các) WHERE-clause Xác định (các) column sử dụng Cụ thể bước theo thứ tự: 10 Lấy SELECT_num WHERE_num dự đoán từ biểu thức & 2 Xếp hạng column ci ∈ Cq từ điểm SELECT-rank dự đoán, giữ n ˆs column cao sc ˆ , sc ˆ , , sc ˆ nˆ s Từ SELECT-clause trở thành: SELECT [(agg ˆ , sc ˆ ), (agg ˆ , sc ˆ ), , (agg ˆ nˆ s , sc ˆ nˆ s )] agg ˆ i aggregation operator dự đốn từ sc ˆ i , i = 1, 2, , n ˆs Xếp hạng ci ∈ Cq từ điểm WHERE-rank dự đoán, giữ n ˆ w column cao wc ˆ , wc ˆ , , wc ˆ nˆ w Từ WHERE-clause trở thành: ˆ ), (wc ˆ ), , (wc ˆ nˆ w )] WHERE [(wc ˆ , op ˆ , val ˆ , op ˆ , val ˆ nˆ w , op ˆ nˆ w , val ˆ i condition operator condition value dự đốn từ wc op ˆ i , val ˆ i, i = 1, 2, , n ˆw Xét Tˆ = {tˆ1 , tˆ2 , , tˆnt } phép hợp SELECT-column (sc ˆ , sc ˆ , , sc ˆ nˆ s ) WHERE-column (wc ˆ , wc ˆ , , wc ˆ nˆ w ) Từ FROM-clause trở thành: FROM [tˆ1 , tˆ2 , , tˆnt ] 3.6 Execution-guided decoding (Giải mã có định hướng thực thi) Các language model sử dụng neural network dự đốn câu lệnh SQL dựa thơng tin syntactic (cú pháp, vị trí) semantic (ngữ nghĩa) trích xuất từ liệu đầu vào, từ liên hệ column-value mà mơ hình học từ liệu huấn luyện Thế chưa đủ để đưa dự đoán tốt, mà: Các giá trị column database có quan hệ rời rạc thay đổi theo thời gian mà khơng cần constraint Một mơ hình huấn luyện thíếu liệu database bị sai lệch kết quan hệ column-value cũ trước Model output cho cơng việc dự đốn độc lập, tạo cặp đầu không hợp lệ kết hợp với Ví dụ: cột có dạng chuỗi khơng kèm với condition operator greater-than (VD: Subject > "History"), không kèm với aggregation operator (VD: SELECT MAX(Name)) Dù mơ hình học để giảm thiểu tỉ lệ xuất cặp đầu không hợp lệ, chưa đủ để loại bỏ hồn tồn khả xảy trường hợp Để giải vấn đề kể trên, [Wang et al., 2018] đưa phương pháp Execution-guided decoding (EG) để thực thi câu lệnh SQL thời điểm dự đoán đưa chỉnh sửa database trả lỗi thực thi output rỗng Về tổng quan bản, góc nhìn phương pháp dựa việc câu lệnh SQL dự đoán phần thực thi để đưa phương hướng cho 11 thành phần lại chu trình dự đốn Phương pháp sử dụng góc nhìn để lọc bỏ phần khơng thể cấu thành câu lệnh hồn chỉnh, ví dụ thực thi gặp lỗi cú pháp/lỗi thực thi kết rỗng • Lỗi cú pháp: Một câu lệnh mắc lỗi cú pháp mắc lỗi xếp vị trí sai ngữ nghĩa từ Lỗi thường gặp với câu lệnh truy vấn phức tạp nhiều thành phần, thường gặp mơ hình tự hồi quy (autoregressive model) mơ hình dựa template mơ hình slot-filling (điền thành phần vào chỗ có sẵn) • Lỗi thực thi: Một câu lệnh mắc lỗi thực thi có thành phần bị xác định sai loại liệu Lỗi thường xảy dạng sai lệch hàm aggregation column mục tiêu (VD: SELECT MAX(Name)) sai lệch hai thành phần so sánh (VD: Subject > "History") • Output rỗng: Đối với hai lỗi bên trên, câu lệnh thực thi thành công, nên tạo câu trả lời xác Nhưng xét tất câu lệnh phải trả kết quả, ta xét thêm loại lỗi output rỗng giá trị trả rỗng (VD: so sánh Name = "Hùng" người tên Hùng không xuất database) Lưu ý trường hợp thực tế, việc sử dụng câu lệnh trả kết rỗng chuyện phổ biến, thường để kiểm tra xem có giá trị sai database hay khơng Dựa ý tưởng họ, nhóm áp dụng Execution-guided decoding sau bước dự đốn mơ hình, cấu trúc mô tả kĩ Algorithm 12 Algorithm Pseudo-code Execution-guided decoding cho HydraNet Result: Câu lệnh SQL thực thi 1: Khởi tạo Qex rỗng để chứa câu SQL execution Khởi tạo Qpred rỗng để chứa câu SQL dự đoán 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: Lấy k1 cặp SELECT - aggregation operator tốt từ model (agg ˆ , sc ˆ ), (agg ˆ , sc ˆ ), , (agg ˆ k1 , sc ˆ k1 ) (Lưu ý: cột dự đoán sc ˆ , sc ˆ , , sc ˆ k1 lặp lại) for i=1 to k1 if sc ˆ i không nằm Qex [”select”] then Qex [”select”] = (agg ˆ i , sc ˆ i) Thực thi Qex lưu kết vào biến result if result không rỗng then Thêm (agg ˆ i , sc ˆ i ) vào Qpred [”select”] end if end if if len(Qex [”select”]) = n ˆ s then ▷n ˆ s : SELECT-Rank biểu thức break end if end for ˆ ), (wc ˆ ), , (wc ˆ k) Lấy k2 điều kiện tốt từ model (wc ˆ , op ˆ , val ˆ , op ˆ , val ˆ k2 , op ˆ k2 , val (Lưu ý: cột dự đoán wc ˆ , wc ˆ , , wc ˆ k2 lặp lại) for i=1 to k2 if wc ˆ i không nằm Qex [”where”] then Qex [”select”] = (null, wc ˆ i) ˆ i )] Qex [”where”] = [(wc ˆ i , op ˆ i , val Thực thi Qex lưu kết vào biến result if result không rỗng then ˆ i ) vào Qpred [”where”] Thêm (wc ˆ i , op ˆ i , val end if end if if len(Qex [”where”]) = n ˆ w then ▷n ˆ s : WHERE-Rank biểu thức break end if end for 13 Thử nghiệm & Đánh giá 4.1 Thử nghiệm Nhóm thử nghiệm thiết kế mơ hình liệu WikiSQL ba train, dev test, sau so sánh với kết báo gốc, với phương pháp tiếp cận khác cho toán Bảng biểu diễn thông số hyperparameter mô hình gốc mơ hình nhóm Hyperparameters Base model Dropout rate Learning rate # of epoch Batch size Original paper RoBERTa-Large 0.2 3e-5 256 Our implementation RoBERTa-Base 0.15 3e-5 256 Bảng 1: Các thông số áp dụng cho HydraNet Ở nhóm sử dụng RoBERTa-Base (12 layer encoder, 110M parameters) so với RoBERTa-Large (24 layer encoder, 340M parameters) thơng số gốc báo hạn chế phần cứng, kết đạt RoBERTa-Base thấp khơng đáng kể so với RoBERTa-Large Nhóm chỉnh sửa tỉ lệ dropout số lượng epoch để phù hợp với kích cỡ nhỏ mơ hình Model Seq2SQL TypeSQL Coarse2Fine Coarse2Fine+EG SQLova SQLova+EG HydraNet HydraNet+EG IE-SQL IE-SQL+EG SeaD SeaD+EG (SotA) Our HydraNet Our HydraNet+EG Base model Self-constructed LSTM Self-constructed LSTM Self-constructed LSTM Self-constructed LSTM BERT-Large-Uncased BERT-Large-Uncased RoBERTa-Large RoBERTa-Large BERT-Base-Uncased BERT-Base-Uncased BART-Large BART-Large RoBERTa-Base RoBERTa-Base Dev (lf, ex) 49.5, 60.8 —–, 74.5 72.5, 79.0 76.0, 84.0 81.6, 87.2 84.2, 90.2 83.6, 89.1 86.6, 92.4 84.6, 88.7 87.9, 92.6 84.9, 90.2 87.6, 92.9 83.0, 88.5 86.3, 92.2 Test (lf, ex) 48.3, 59.4 —–, 73.5 71.7, 78.5 75.4, 83.8 80.7, 86.2 83.6, 89.6 83.8, 89.2 86.5, 92.2 84.6, 88.8 87.0, 92.7 84.7, 90.1 87.5, 93.0 82.8, 88.2 85.9, 91.6 Bảng 2: Thông số accuracy model với logical form (lf) execution (ex) Bảng biểu diễn độ xác (accuracy) mơ hình nhóm liệu WikiSQL so với phương pháp khác, sử dụng phương pháp đánh giá kèm WikiSQL logical form (tỉ lệ khớp hoàn toàn câu lệnh nhãn câu lệnh dự đoán được) execution (tỉ lệ giống kết thu chạy câu 14 lệnh database) Các mơ hình có sử dụng kết hợp thêm Execution-guided decoding có thêm kí hiệu EG đằng sau Nhìn tổng quan, mơ hình có sử dụng kết hợp EG có accuracy tốt so với mơ hình chạy khoảng ~5% So sánh với mơ hình HydraNet gốc [Lyu et al., 2020], mơ hình nhóm có accuracy thấp không 1% tất thông số, chứng minh mơ hình cịn khả tối ưu kể với kích cỡ nhỏ So sánh với mơ hình có kết tốt (State-of-the-Art) SeaD [Xu et al., 2023], mơ hình nhóm có accuracy thấp khoảng 2%, kết tương đối ổn mơ hình SeaD sử dụng BART [Lewis et al., 2019], language model dựa BERT GPT, có sử dụng thêm kỹ thuật Denoising self-training (giảm nhiễu) Model SQLova SQLova+EG HydraNet HydraNet+EG IE-SQL IE-SQL+EG SeaD SeaD+EG (SotA) Our HydraNet Our HydraNet+EG SL-col 96.8 96.5 97.6 97.6 97.6 97.6 97.7 97.9 97.5 97.5 SL-arg 90.6 90.4 91.4 91.4 94.7 94.7 91.7 91.8 91.2 91.2 W-num 98.5 97.0 98.4 98.4 98.3 98.3 96.5 98.3 98.0 98.0 W-col 94.3 95.5 95.3 97.2 96.4 97.9 —– —– 94.5 96.9 W-op 97.3 95.8 97.4 97.5 98.7 98.5 97.7 97.9 97.0 97.1 W-val 95.4 95.9 96.1 97.6 96.8 98.3 96.7 98.4 95.6 97.2 Bảng 3: Accuracy mơ hình tốt gần với thành phần tập test Bảng thể số accuracy công việc thành phần tốn test set Tổng quan, mơ hình có sử dụng EG thường có thơng số WHERE-column WHERE-operator tốt hơn, thể việc áp dụng Execution-guided Decoding cần thiết để bảo đảm liên hệ thành phần column Xét thông số mơ hình HydraNet gốc [Lyu et al., 2020] mơ hình nhóm, chênh lệch khơng đáng kể với tất công việc (≤ 0.5%), cho thấy mơ hình có độ linh hoạt cao số lượng parameter huấn luyện 15 Tổng kết Trong báo cáo này, nhóm áp dụng nghiên cứu gần việc tối ưu language model huấn luyện sẵn BERT/RoBERTa toán Text-to-SQL Phương pháp mà nhóm sử dụng xem xét tốn Text-to-SQL toán xếp hạng dựa column Phương pháp nhóm có độ đơn giản cao, tối ưu linh hoạt nhiều kích thước mơ hình khác Nhóm tin mơ hình cịn khả tối ưu với phương pháp thiết kế hợp lý vận dụng thêm thuật toán đại, với nâng cấp thiết kế mơ hình để giải câu lệnh SQL phức tạp (câu lệnh lồng, có sử dụng thành phần ORDER BY / GROUP BY / HAVING / ) 16 Tài liệu [Androutsopoulos et al., 1995] Androutsopoulos, I., Ritchie, G D., and Thanisch, P (1995) Natural language interfaces to databases - an introduction arxiv:cmplg/9503016 [Devlin et al., 2019] Devlin, J., Chang, M.-W., Lee, K., and Toutanova, K (2019) Bert: Pre-training of deep bidirectional transformers for language understanding arXiv:1810.04805 [Dong and Lapata, 2018] Dong, L and Lapata, M (2018) Coarse-to-fine decoding for neural semantic parsing arXiv:1805.04793 [Hwang et al., 2019] Hwang, W., Yim, J., Park, S., and Seo, M (2019) A comprehensive exploration on wikisql with table-aware word contextualization arXiv:1902.01069 [Lewis et al., 2019] Lewis, M., Liu, Y., Goyal, N., Ghazvininejad, M., Mohamed, A., Levy, O., Stoyanov, V., and Zettlemoyer, L (2019) Bart: Denoising sequence-tosequence pre-training for natural language generation, translation, and comprehension arXiv:1910.13461 [Lyu et al., 2020] Lyu, Q., Chakrabarti, K., Hathi, S., Kundu, S., Zhang, J., and Chen, Z (2020) Hybrid ranking network for text-to-sql arXiv:2008.04759 [Ma et al., 2020] Ma, J., Yan, Z., Pang, S., Zhang, Y., and Shen, J (2020) Mention extraction and linking for SQL query generation pages 6936–6942 [Wang et al., 2018] Wang, C., Tatwawadi, K., Brockschmidt, M., Huang, P.-S., Mao, Y., Polozov, O., and Singh, R (2018) Robust text-to-sql generation with executionguided decoding arXiv:1807.03100 [Xu et al., 2023] Xu, K., Wang, Y., Wang, Y., Wen, Z., and Dong, Y (2023) Sead: End-to-end text-to-sql generation with schema-aware denoising arXiv:2105.07911 [Yu et al., 2018] Yu, T., Li, Z., Zhang, Z., Zhang, R., and Radev, D (2018) Typesql: Knowledge-based type-aware neural text-to-sql generation arXiv:1804.09769 [Zhong et al., 2017] Zhong, V., Xiong, C., and Socher, R (2017) Seq2sql: Generating structured queries from natural language using reinforcement learning arXiv:1709.00103 17

Ngày đăng: 04/09/2023, 20:28

Xem thêm:

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

TÀI LIỆU LIÊN QUAN

w