Ứng dụng mô hình ngôn ngữ ngữ nghĩa thống kê trong gợi ý mã cho ngôn ngữ c

61 309 0
Ứng dụng mô hình ngôn ngữ ngữ nghĩa thống kê trong gợi ý mã cho ngôn ngữ c

Đ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 HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ VŨ CAO NAM ỨNG DỤNG MÔ HÌNH NGÔN NGỮ NGỮ NGHĨA THỐNG KÊ TRONG GỢI Ý MÃ CHO NGÔN NGỮ C LUẬN VĂN THẠC SĨ NGÀNH CÔNG NGHỆ THÔNG TIN HÀ NỘI - 2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ VŨ CAO NAM ỨNG DỤNG MÔ HÌNH NGÔN NGỮ NGỮ NGHĨA THỐNG KÊ TRONG GỢI Ý MÃ CHO NGÔN NGỮ C Ngành: Công Nghệ Thông Tin Chuyên ngành: Kỹ Thuật Phần Mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ NGÀNH CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: Tiến Sĩ Nguyễn Thị Huyền Châu HÀ NỘI - 2015 LUẬN VĂN THẠC SĨ: 60 48 10 i Lời cảm ơn Để hoàn thành luận văn nhận giúp đỡ tận tình thầy cô trường Đại Học Công Nghệ - Đại Học Quốc Gia Hà Nội, bạn bè đồng nghiệp gia đình Tôi xin gửi lời cảm ơn tới cô giáo TS Nguyễn Thị Huyền Châu tận tình hướng dẫn, truyền đạt cho kiến thức kinh nghiệm thực tiễn quý báu Những kiến thức không giúp thực luận văn mà giúp có hành trang quan trọng tương lai Mặc dù cố gắng hoàn thành luận văn cách tốt nhất, song luận văn không tránh khỏi thiếu sót Tôi mong nhận ý kiến góp ý từ quý thầy cô bạn ii Lời cam đoan Tôi xin cam đoan kết trình bày luận văn trình tự nghiên cứu giúp đỡ giảng viên hướng dẫn Các nội dung nghiên cứu kết đề tài hoàn toàn trung thực Các trích dẫn từ nguồn tài liệu bên liệt kê rõ ràng phần cuối luận văn Hà Nội, 23 tháng 06 năm 2015 Học viên Vũ Cao Nam iii Mục Lục Lời cảm ơn i Lời cam đoan ii Mục Lục iii Danh mục ký hiệu chữ viết tắt vi Bảng thuật ngữ anh việt vii Danh sách bảng viii Danh sách hình vẽ ix Chương Mở Đầu 1.1 Đặt vấn đề 1.2 Mục tiêu phương pháp luận 1.3 Bố cục luận văn Chương Cơ Sở Lý Thuyết 2.1 Tổng quan mô hình ngôn ngữ 2.1.1 Từ tố chuỗi mã từ vựng 2.1.2 Mô hình n-gram từ vựng cho mã nguồn 2.2 Mô hình ngôn ngữ ngữ nghĩa thống kê (SLAMC) 2.2.1 Từ tố chuỗi mã ngữ nghĩa 2.2.2 Mô hình n-gram chủ đề 2.2.2.1 Huấn luyện mô hình n-gram chủ đề 2.2.2.2 Dự đoán với mô hình n-gram chủ đề 2.2.3 Kết hợp cặp giá trị 2.3 Gợi ý mã 2.3.1 Ngữ cảnh gợi ý mã 2.3.2 Dự đoán mã liên quan 10 2.3.2.1 Mở rộng từ tố liên quan 10 2.3.2.2 Kiểm tra phù hợp ngữ cảnh 11 2.3.2.3 Tính điểm liên quan 11 2.3.3 Biến đổi tới biểu mẫu từ vựng 11 Chương Áp Dụng Mô Hình Ngôn Ngữ Ngữ Nghĩa Thống Kê Trong Gợi Ý Mã Cho Ngôn Ngữ C 12 3.1 Biến đổi mô hình SLAMC để ứng dụng cho ngôn ngữ C 12 3.1.1 Bảng nguyên tắc xây dựng nghĩa vị 12 iv 3.1.2 Phạm vi 15 3.2 Cách thức xây dựng chương trình mô 16 3.2.1 Cây cú pháp trừu tượng (AST) 17 3.2.2 Duyệt cú pháp trừu tượng 18 3.2.2.1 Nút lưu trữ thông tin khai báo toàn cục 19 3.2.2.2 Nút lưu trữ thông tin hàm 21 3.2.2.3 Nút lưu trữ thông tin có vấn đề 22 3.2.3 Huấn luyện mô hình n-gram chủ đề kết hợp cặp giá trị 22 3.2.4 Gợi ý mã 23 3.3 Sơ đồ thuật toán 25 3.3.1 Sơ đồ thuật toán mức tổng quan 26 3.3.2 Sơ đồ thuật toán duyệt cú pháp trừu tượng 27 3.3.3 Các sơ đồ thuật toán huấn luyện 28 3.3.3.1 Sơ đồ thuật toán huấn luyện n-gram 28 3.3.3.2 Sơ đồ thuật toán huấn luyện n-gram chủ đề 29 3.3.3.3 Sơ đồ thuật toán huấn luyện cặp giá trị 30 3.3.4 Sơ đồ thuật toán gợi ý mã 31 3.3.4.1 Sơ đồ thuật toán mở rộng từ tố liên quan 32 3.3.4.2 Sơ đồ thuật toán tính điểm liên quan 33 3.3.4.3 Sơ đồ thuật toán kiểm tra phù hợp ngữ cảnh 34 3.3.4.4 Sơ đồ thuật toán biến đổi từ dạng ngữ nghĩa sang từ vựng 35 Chương Thực Nghiệm 37 4.1 Môi trường thực nghiệm 37 4.1.1 Môi trường 37 4.1.2 Chương trình mô sử dụng cho thực nghiệm 38 4.2 Gợi ý mã 38 4.2.1 Kiểm định khả gợi ý chương trình mô 38 4.2.1.1 Mục tiêu 38 4.2.1.2 Thiết kế thực nghiệm 38 4.2.1.3 Kết 40 4.2.2 Tích hợp SLAMC gợi ý mã cho ngôn ngữ C vào Eclipse 43 4.2.2.1 Mục tiêu 43 4.2.2.2 Thiết kế thực nghiệm 43 4.2.2.3 Kết 43 v 4.3 Đánh giá độ xác 44 4.3.1 Phân tích ảnh hưởng yếu tố 44 4.3.1.1 Mục tiêu 44 4.3.1.2 Thiết kế thực nghiệm 44 4.3.1.3 Kết 44 4.3.2 So sánh độ xác 45 4.3.2.1 Mục tiêu 45 4.3.2.2 Thiết kế thực nghiệm 45 4.3.2.3 Kết 45 4.3.3 Huấn luyện chéo 46 4.3.3.1 Mục tiêu 46 4.3.3.2 Thiết kế thực nghiệm 46 4.3.3.3 Kết 46 Chương Kết Luận 48 5.1 Kết đạt 48 5.2 Hướng phát triển tương lai 49 Tài liệu tham khảo 50 vi Danh mục ký hiệu chữ viết tắt Ký hiệu/Chữ viết tắt API AST GUI I/O PPA SLAMC Nội dung/Giải thích Application Program Interface Abstract Syntax Tree Graphical User Interface Input/Output Partial Program Analysis Statistical Semantic Language Model for Source Code vii Bảng thuật ngữ anh việt Tiếng Anh Token Lexical code token Lexeme Lexical code sequence Lexical n-gram Semantic code token Role Sememe Vocabulary Scope Dependency Semantic code sequence Semantic n-gram File Tiếng Việt Từ tố Từ tố mã từ vựng Từ vị Chuỗi mã từ vựng N-gram từ vựng Từ tố mã ngữ nghĩa Vai trò Nghĩa vị Tập từ vựng Phạm vi Tập phụ thuộc Chuỗi mã ngữ nghĩa N-gram ngữ nghĩa Tệp viii Danh sách bảng Bảng Các từ tố mã từ vựng từ đoạn mã “si = arrStudent.size();” Bảng Nguyên tắc xây dựng nghĩa vị 12 Bảng Ví dụ biểu diễn truy cập thuộc tính 15 Bảng 3 Thông tin khối 16 Bảng Các dự án C sử dụng thực nghiệm 37 Bảng Phân tích ảnh hưởng yếu tố cho dự án Bash 45 Bảng Độ xác gợi ý mã 46 Bảng 4 Độ xác huấn luyện chéo 47 36 Hình 3.19 biểu diễn sơ đồ thuật toán biến đổi từ dạng ngữ nghĩa sang từ vựng Đầu vào thuật toán bao gồm hai danh sách, danh sách phần tử phù hợp ngữ cảnh danh sách biến với kiểu liệu tương ứng tệp xem xét gợi ý mã Chương trình tiến hành duyệt phần tử danh sách phần tử phù hợp ngữ cảnh đưa danh sách tất biến phù hợp Sau đó, chương trình kiểm tra phạm vi biến, biến phù hợp lưu trữ vào danh sách gợi ý mã Cuối cùng, danh sách gợi ý mã khác rỗng chương trình in hình 37 Chương Thực Nghiệm Luận văn tiến hành vài thực nghiệm để nghiên cứu xác áp dụng SLAMC gợi ý mã cho ngôn ngữ C với cấu hình khác so sánh với mô hình n-gram từ vựng 4.1 Môi trường thực nghiệm 4.1.1 Môi trường Các thực nghiệm tiến hành máy tính Dell Vostro 3450 Intel Core i3-2310M @ 2.10GHz, 4GB RAM, windows 64 bit Để so sánh, thu thập tập liệu dự án C thực bước giống Eclipse CDT parser phát nhiều tệp có lỗi chưa đầy đủ dự án Trong trình thực thực nghiệm ta loại bỏ tất tệp có lỗi chưa đầy đủ để không làm ảnh hưởng đến trình huấn luyện liệu tính độ xác Tên dự án C, phiên bản, số dòng mã dự án liệt kê bảng 4.1 Bảng Các dự án C sử dụng thực nghiệm STT Tên dự án Phiên Số dòng mã Nguồn CUnit 2.1.3 4545 http://liquidtelecom.dl.sourceforge net/project/cunit/CUnit Log4C 1.2.4 8958 http://liquidtelecom.dl.sourceforge net/project/log4c/log4c GCC 1.42 59186 ftp://208.118.235.20/gnu/gcc Barcode 0.99 13079 ftp://208.118.235.20/gnu/barcode Autogen 4.5.14 20859 ftp://208.118.235.20/gnu/autogen Bash 2.0 68997 ftp://208.118.235.20/gnu/bash Memcached 1.4.24 9703 http://memcached.org/files 38 4.1.2 Chương trình mô sử dụng cho thực nghiệm Chương trình mô xây dựng sử dụng ngôn ngữ Java công cụ Eclipse Do tham khảo mã nguồn áp dụng SLAMC gợi ý mã cho ngôn ngữ Java [8] nên phải xây dựng mô đun chuyển đổi mã nguồn C sang cú pháp trừu tượng, duyệt cú pháp trừu tượng để lấy thông tin cần thiết (các biến, hàm, struct, union, …) giúp cho việc biểu diễn nghĩa vị theo bảng nguyên tắc xây dựng nghĩa vị tính toán khác (xây dựng tập từ vựng, bảng từ điển n-gram, …), gợi ý mã Một số mô đun kế thừa sửa đổi để phù hợp sử dụng gợi ý mã cho ngôn ngữ C huấn luyện n-gram chủ đề, huấn luyện cặp giá trị Các mô đun tiện ích khác xây dựng tiền tố, tính điểm liên quan, … sử dụng lại 4.2 Gợi ý mã 4.2.1 Kiểm định khả gợi ý chương trình mô 4.2.1.1 Mục tiêu Luận văn thực kiểm định với liệu mẫu phục vụ cho việc huấn luyện dự đoán nhằm xác định tính đắn chương trình mô Sau chương trình mô hoàn thành tính toán, luận văn đưa đánh giá dựa kết thu 4.2.1.2 Thiết kế thực nghiệm Để thử nghiệm việc gợi ý mã, luận văn sử dụng mã nguồn dự án Bash GCC cho mục đích huấn luyện Hai dự án hai dự án có số dòng mã lớn dự án mà luận văn sử dụng cho thực nghiệm Tổng số dòng mã hai dự án 128183 Các thực nghiệm sử dụng đoạn mã chưa đầy đủ hình 4.1 4.2 cho mục đích tìm từ tố Hiện tại, luận văn xem xét gợi ý tên biến, thuộc tính struct, union gợi ý đưa giá trị (ví dụ: 5, “test”, …) Trong hình 4.1, đoạn mã chưa đầy đủ biểu thức, chương trình nên đưa gợi ý biến khai báo trước có kiểu liệu phù hợp Trong hình 4.2, đoạn mã chưa đầy đủ vòng lặp for, gợi ý cần thiết biến kiểu int 39 #include #include struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book; union Data2 { int i; float f; char str[20]; } data; typedef unsigned char BYTE; int a = 11; void suggest(){ int b = 6; short c = 4; int t; char ch = 'b'; t= } Hình Đoạn mã chưa đầy đủ sử dụng cho thực nghiệm (1) Hình 4.1 biểu diễn đoạn mã chưa đầy đủ sử dụng cho thực nghiệm gợi ý mã Đoạn mã gồm có khai báo struct (Books), khai báo union (Data2), kiểu liệu định nghĩa (BYTE), biến toàn cục (a) có kiểu liệu int, khai báo hàm suggest với nội dung chưa đầy đủ “t = ” 40 #include #include struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book; union Data2 { int i; float f; char str[20]; } data; typedef unsigned char BYTE; int a = 11; void suggest(){ int b = 6; short c = 4; int t; char ch = 'b'; for(int i = 0; i < } Hình Đoạn mã chưa đầy đủ sử dụng cho thực nghiệm (2) Hình 4.2 biểu diễn đoạn mã chưa đầy đủ “for(int i = 0; i [...]... SLAMC cho ngôn ngữ C C c công vi c cần làm là biến đổi mô hình SLAMC để ứng dụng cho ngôn ngữ C và tìm c ch xây dựng chương trình mô phỏng Chi tiết c c bư c sẽ đư c trình bày trong c c m c tiếp theo 3.1 Biến đổi mô hình SLAMC để ứng dụng cho ngôn ngữ C Để áp dụng SLAMC cho C, luận văn đã tham khảo c ch th c khai báo c c hàm, c c từ khóa, c c biểu th c, c c toán tử, c c kiểu dữ liệu và c c biến theo chuẩn... bố c c của luận văn Chương 2: C sở lý thuyết Trình bày c c khái niệm, định lý, thuật toán c n đư c hiểu rõ để áp dụng mô hình ngôn ngữ ngữ nghĩa thống kê trong gợi ý mã cho ngôn ngữ C Chương 3: Áp dụng mô hình ngôn ngữ ngữ nghĩa thống kê trong gợi ý mã cho ngôn ngữ C Trong phần này luận văn sẽ trình bày c c bư c để c i đặt SLAMC cho ngôn ngữ C Đầu tiên, luận văn sẽ đưa ra bảng nguyên t c xây dựng nghĩa. .. gợi ý trong một danh sách đư c xếp loại 12 Chương 3 Áp Dụng Mô Hình Ngôn Ngữ Ngữ Nghĩa Thống Kê Trong Gợi Ý Mã Cho Ngôn Ngữ C Theo như c c nghiên c u trư c, SLAMC đã đư c áp dụng thành c ng cho ngôn ngữ Java Chính vì vậy, vi c mở rộng áp dụng cho c c ngôn ngữ kh c là một điều c n thiết để c thế đánh giá độ chính x c mà SLAMC đem lại Trong chương này, luận văn sẽ trình bày c c bư c để c thể áp dụng. .. V(q) Cho mỗi nghĩa vị v ϵ V(q), SLAMC tạo ra một từ tố mã ngữ nghĩa tương ứng và đặt từ tố này bên trong tập hợp c c từ tố c thể mở rộng C( q) C c nghĩa vị c a c c biến trong mô hình n-gram chủ đề không c c c từ vị Theo đó, SLAMC suy ra c c từ vị cho c c nghĩa vị c a c c biến sử dụng một c ng nghệ caching Nếu v là một nghĩa vị cho một biến, SLAMC lựa chọn tất c c c từ tố mã ngữ nghĩa tồn tại trong chuỗi... vi cho ngôn ngữ C Bên c nh đó, c ch th c chuyển đổi từ tệp mã nguồn C sang c y c pháp trừu tượng đư c trình bày Tiếp theo, c c công vi c cần cho gợi ý mã đư c chỉ ra như duyệt c y c pháp, huấn luyện mô hình n-gram chủ đề, kết hợp c p giá trị và c ch th c đưa ra danh sách c c gợi ý phù hợp nhất Cuối c ng, c c sơ đồ thuật toán chính trong chương trình mô phỏng đư c đưa ra với m c đích làm rõ hướng c i... vị ngôn ngữ h c đư c trình bày như một chuỗi c a một ho c nhiều c c ký tự c bản, mô hình hóa ngôn ngữ đư c th c thi thông qua vi c tính x c suất c a c c chuỗi Để tính x c suất c a c c chuỗi, một c ch tiếp c n mô hình hóa cho rằng mỗi chuỗi đư c sinh ra bởi một tiến trình c a mô hình tương ứng C c khái niệm c bản sẽ đư c trình bày chi tiết như dưới đây Mô hình ngôn ngữ (Language Model) Một mô hình ngôn. .. đư c tính toán thông qua vi c phân tích dữ liệu trên c c biến 6 Chuỗi mã ngữ nghĩa (Semantic Code Sequence) Một chuỗi mã ngữ nghĩa là một chuỗi c a c c từ tố mã ngữ nghĩa [8] N-gram ngữ nghĩa (Semantic n-gram) Nghĩa vị c a một chuỗi mã ngữ nghĩa c c n, đư c gọi là một n-gram ngữ nghĩa, là chuỗi c a c c nghĩa vị c a c c từ tố tương ứng [8] 2.2.2 Mô hình n-gram chủ đề Dựa vào ý tưởng từ mô hình chủ... danh sách gợi ý mã Ta sẽ đi vào chi tiết c c phần trong c c m c tiếp theo 3.2.1 C y c pháp trừu tượng (AST) C y c pháp trừu tượng là một c y c giới hạn, c nhãn và c hướng Đây là c u tr c cây mà c c nút g c của c y đư c gán nhãn bằng c c toán tử và c c nút lá c a c y là c c toán hạng Tuy vậy, c c lá c ng c khi là c c giá trị NULL ho c là c c biến Trong c c công đoạn c a chương trình dịch, c y AST... 35 Hình 4 1 Đoạn mã chưa đầy đủ sử dụng cho th c nghiệm (1) 39 Hình 4 2 Đoạn mã chưa đầy đủ sử dụng cho th c nghiệm (2) 40 Hình 4 3 Kết quả gợi ý mã cho th c nghiệm (1) 41 Hình 4 4 Kết quả gợi ý mã cho th c nghiệm (2) 42 Hình 4 5 Tích hợp SLAMC trong gợi ý mã cho ngôn ngữ C vào Eclipse 43 1 Chương 1 Mở Đầu 1.1 Đặt vấn đề Thông qua vi c áp dụng mô hình ngôn ngữ thống kê n-gram... vụ c n đư c nghiên c u Nhận thấy ý tưởng này c tính khả thi, dưới sự hướng dẫn c a tiến sĩ Nguyễn Thị Huyền Châu, tôi đã quyết định tìm hiểu áp dụng mô hình ngôn ngữ ngữ nghĩa thống kê trong gợi ý mã cho ngôn ngữ C 1.2 M c tiêu và phương pháp luận Luận văn sẽ xây dựng một chương trình mô phỏng mô hình ngôn ngữ ngữ nghĩa thống kê trong gợi ý mã cho ngôn ngữ C, tích hợp chương trình mô phỏng vào Eclipse ... gợi ý danh sách xếp loại 12 Chương Áp Dụng Mô Hình Ngôn Ngữ Ngữ Nghĩa Thống Kê Trong Gợi Ý Mã Cho Ngôn Ngữ C Theo nghiên c u trư c, SLAMC áp dụng thành c ng cho ngôn ngữ Java Chính vậy, vi c. .. SLAMC để ứng dụng cho ngôn ngữ C tìm c ch xây dựng chương trình mô Chi tiết bư c trình bày m c 3.1 Biến đổi mô hình SLAMC để ứng dụng cho ngôn ngữ C Để áp dụng SLAMC cho C, luận văn tham khảo c ch... kê gợi ý mã cho ngôn ngữ C 1.2 M c tiêu phương pháp luận Luận văn xây dựng chương trình mô mô hình ngôn ngữ ngữ nghĩa thống kê gợi ý mã cho ngôn ngữ C, tích hợp chương trình mô vào Eclipse đánh

Ngày đăng: 05/11/2015, 10:14

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan