5.2.1. Xử lý dữ liệu
Để thực hiện phân tích cú pháp tiếng Việt, ta đưa dữ liệu Viet Treebank vào huấn luyện. Dữ liệu là có khoảng 10000 câu, chia làm hai tập là tập huấn luyện (hơn 9500 câu) và tập kiểm tra (hơn 500 câu). Một điểm cần lưu ý đó là trong tập dữ liệu có một số câu chứa dấu gạch. Có một số loại như dấu gạch ngang (‘—‘ tiếng Anh là dash, các dấu này có độ dài khác nhau) và dấu gạch nối (‘-‘, hyphen) và dấu trừ (‘-‘, minus sign). Các loại dấu dash có mã ký tự nằm ngoài bảng ASCII (American Standard for Information Interchange), còn dấu hyphen trùng với dấu trừ cùng một mã ASCII. Trong bộ phân tích cú pháp của Bikel ký tự ‘-‘ được sử dụng để phân tách giữa nhãn cụm từ và nhãn chức năng ví dụ như N-H, NP-SUB… Một hướng giải quyết việc này là chỉnh sửa mã nguồn, nhưng do thời gian hạn chế, nên giải pháp ở đây là sử dụng một text editor thay thế các nhãn ‘-‘ bằng một nhãn mới không có trong bộ nhãn của Viet Treebank, trong trường hợp này là sử dụng nhãn CCO. Nhược điểm của việc đưa thêm nhãn này vào là có thể làm mất đi chức năng ngữ pháp của ‘-‘, cũng cần phải miêu tả chức năng ngữ pháp dấu ‘-‘ trong Treebank. Ở đây, dấu ‘-‘ có thể hành xử như một liên từ ví dụ: (NP (NP (N-H hố) (N bom) ) (CCO -) (NP-LOC (N-H nơi) (SBAR (S (NP-SUB (P-H tui) ) (VP (R đã) (V-H gửi) (R lại) (NP-DOB (NP (M một) (Nc-H
58
con) (N mắt) ) (C và) (NP (M hai) (N-H cánh_tay) ))))))) (câu không có chức năng ngữ pháp: “hố bom - nơi tôi đã gửi lại một con mắt và hai cánh tay).
Tập dữ liệu có khoảng hơn 9500 câu, sau khi thực hiện huấn luyện và kiểm tra trên tập này, thay đổi số lượng câu bằng cách lấy ngẫu nhiên một số lượng câu nhất định so với dữ liệu ban đầu
Bảng 10: Sô lượng câu để huấn luyện
Tỷ lệ Số câu 100% 9633 80% 7706 70% 6743 60% 5779 5.2.2. Cấu hình để thực hiện:
- Tất cả các thuộc tính cần cài đặt giá trị được lưu ở trong tập tin default- settings.properties nằm trong thư mực danbikel/parser. Tập tin này chứa các thuộc tính mặc định của bộ phân tích cú pháp, để sử dụng cho tiếng Việt, cần thay đổi thông số, với sự thay đổi của một số thuộc tính có thể làm thay đổi mô hình xác suất có được sau khi huấn luyện. Tập tin này được lớp lớp danbikel.parser.Settings đọc để đưa vào các giá trịn tĩnh, được gọi trong quá trình huấn luyện hay phân tích câu. Thuộc tính được chia làm các loại sau:
+ Thông tin chung: dùng để mô tả gói ngôn ngữ, encoding sử dụng cho luồng đọc và ghi dữ liệu (InputStreamReader, và OutputStreamWriter), định nghĩa một số lớp Factory, có nhiệm vụ khởi tạo các đối tượng ví dụ như SubcatBagFactory có nhiệm vụ khởi tạo một đối tượng SubcatBag.
+ Parser: miêu tả lớp Decoder và DecoderServer, trong bộ phân tích cú pháp của Bikel, Decoder có nhiệm vụ cung cấp giá trị và thực hiện việc phân tích câu.
+ Model: cung cấp các phương thức đặc tả cho cấu trúc xác suất, các phương thức phục vụ đối tượng ProbabilityStructure.
+ Thuộc tính cho mô hình: các giá trị thuộc tính cho mô hình xác suất, các thuộc tính này được sử dụng trong quá trình tính toán xác suất của các đối số, nhu đã trình bày trong mô tả của bộ phân tích cú pháp. Trong phần thuộc tính này, giá trị của thuộc
59
tính parser.model.precomputeProbabilities là true thì sẽ loại bỏ thuộc tinh parser.modelCollection.writeCanonicalEvents, ngăn không cho lớp danbikel.parser.ModelCollections, thực hiện phương thức ghi thông tin xác suất ra tập tin hoặc đầu ra.
+ Thuộc tính cho HeadFinder: các thuộc tính trợ giúp cho lớp HeadFinder trong việc sử dụng các luật.
+ Thuộc tính cho Trainning: trong nhóm này, thuộc tính parser.training.addGapInfo, có giá trị mặc định là false, tức là ta chỉ sử dụng mô hình 2 của Collins, khi thuộc tính nhận giá trị true, ta đưa thêm thông tin gap vào trong mô hình xác suất, bây giờ mô hình ta sử dụng là mô hình 3 của Collins. Hai thuộc tính còn lại chỉ hỗ trợ trong việc sử dụng một số tính chất của Collin, hỗ trợ việc giả lập lại kết quả của Collins.
+ Thuộc tính cho Trainer: lớp danbikel.parser.Trainer có nhiệm vụ đọc tập dữ liệu thực hiện việc tính toán đưa ra mô hình xác suất. Trong nhóm thuộc tính này có một số thuộc tính như parser.trainner.outputHeadToParentMap,… có tác dụng đưa ra thông tin về Head hay thuộc tính parser.trainer.outSubcatMaps đưa ra thông tin về Subcatergorization frame, các giá trị của thuộc tính parser.trainer.numPrevMode, parser.trainer.numPrevWord là giá trị hậu tố, nhằm xác định mô hình xác suất được sử dụng. Ngoài ra, bộ phân tích còn sử dụng thuộc tính parser.trainer.globalModelStruceNumber hỗ trợ hai thuộc tính trên. Việc kết hợp giữa giá trị của thuộc tính này và tên chuẩn tạo ra tên lớp trong gói danbikel.parser.ms. Các lớp trong danbikel.parser.ms cung cấp đặc tả về cấu trúc.
+ Thuộc tính cho CKYChart: Bikel sử dụng thuật toán CKY (Cook – Young – Kasami) để thực hiện việc phân tích cú pháp. Lớp miêu tả các item được định nghĩa giá trị của thuộc tính parser.chart.itemClass. thuộc tính còn lại có tác dụng tăng độ rộng beam lên bằng cách thêm 3 vào số mũ khi tính toán, với điều kiện là nhãn gốc đang xét là NP hay NP-A.
+ Thuộc tính cho Decoder: Cung cấp thuộc tính cho lớp Decoder có tác dụng khi thực hiện phân tích cú pháp. Một số thuộc tính như parser.decoder.kBest tác dụng hỗ trợ quá trình phân tích. Thuộc tính này dược Collins đề nghị, bởi vì không có hai chart item nào tương đương trong quá trình thực hiện bằng quy hoạch động. Một số phương thức xác định thông tin được đưa ra đầu ra chuẩn như parser.decoder.- outputHeadLexicalizedLabels.
60
+ Thuộc tính đặc tả dữ liệu cho gói ngôn ngữ: cung cấp thông tin liên quan đến hai tập tin head-rules.lisp và training-metadata.lisp.
+ Thuộc tính cho SwitchBoard: các giá trị hỗ trợ cho SwitchBoard, cung cấp các giá trị để có thể thực hiện việc phân tích qua mạng sử dụng RMI. Các thuộc tính cung cấp các tập tin chứa quyền dành cho người dùng RMI, thời gian kết nối, các giá trị dành cho khách và chủ.
+ Thuộc tính cho cấu trúc mô hình: giá trị của các thuộc tính xác định kích thước bộ đệm các lớp mô hình sử dụng.
- Để tạo ra tập tin cấu hình riêng cho đối với ngôn ngữ ta chỉ cần sửa các giá trị trong tập tin này cho phù hợp. Đối với tiếng Việt, ta thay một số thuộc tính như: parser.language=vietnamese, parser.language.package=danbikel.parser.vietnamese – thuộc tính xác định gói ngôn ngữ được đưa vào, giá trị thuộc tính trùng với tên của gói ngôn ngữ đưa vào ở đây là danbikel.parser.vietnamese, thông tin về encoding – mã hóa ký tự được sử dụng để thông tin cho luồng đọc và ghi biết được encoding của tập tin, đối với tiếng Việt ta sử dụng là UTF-8, v.v…
- Để thực hiện việc huấn luyện, tôi chọn một số giá trị làm mô hình chuẩn, các mô hình khác đều dựa vào mô hình chuẩn này, thực hiện thay đổi một số giá trị trong mô hình chuẩn để xây dựng mô hình mới. Sau đó, thực hiện việc huấn luyện và kiểm tra để so sánh sự thay đổi so với mô hình chuẩn. Các thuộc tính trong mô hình chuẩn được đưa trong bảng ở phần phụ lục. Trong quá trình thực hiện luận văn, tôi thực hiện phân tích chú pháp các trường hợp sau:
+ mô hình cơ sơ
+ mô hình 3: thay đổi thuộc tính danbikel.training.addGapInformation từ false thành true)
+ Loại bỏ việc hành động sửa nhãn NPBase: đây là một bước tiền xử lý đối với dữ liệu đầu vào. Thực hiện cấu hình này với mục tiêu so sánh xem việc làm này có đem lại kết quả hay không?
+ Thay đổi giá trị của prunceFactory từ 5 thành 3. Đây là thuộc tính quy định độ rộng của beam trong quá trình Decoder. Mục đích, của việc đưa ra thay đổi này là muốn đánh giá độ ảnh hưởng của thừa số này trong việc tính toán xác suất đối với dữ liệu tiếng Việt.
61
+ Thay đổi giá trị threshold thành 4. Threshold có ý nghĩa với những từ có tần suất xuất hiện nhỏ hơn threshold sẽ được gán thành nhãn +unknow+, để có một giá trị threshold tốt cần thực hiện việc thống kê dữ liệu. Trong luận văn này, threshold được chọn giá trị là 4 để đánh giá xem sự thay đổi có ảnh hưởng nhiều tới mô hình phân tích hay không. Một điều dễ hiểu là nếu threshold quá lớn thì mô hình càng kém chính xác.
Ngoài ra, thực hiện việc phân tích cú pháp đối với một trường hợp đó là giữ nguyên tập tin cấu hình nhưng loại bỏ một số luật trong tập tin training-metadata.lisp. Việc loại bỏ các luật liên quan đến argument, nhằm tác dụng tiếp cận với mô hình 1 của Collins. Trong mô hình 1 của Collin, không có sự phụ thuộc vào subcategorization frame như mô hình 2.
Để thực hiện độ đánh giá về độ phủ của dữ liệu thực hiện việc huấn luyện và kiêm tra trên một số tập dữ liệu:
5.2.3. Huấn luyện
- Sử dụng phương lớp Trainer để thực hiện việc huấn luyện mô hình. Để thực hiện được việc huấn luyện cần đưa vào các tham số sau:
+ Tập tin cấu hình: chứa giá trị thuộc tính trong mô hình + Tập tin chứa các câu cần huấn luyện
+ Tập tin đầu ra chứa các sự kiện trong quá trình huấn luyện
+ Tập tin dẫn xuất chứ tất cả thông tin liên quan đến quá trình huấn luyện như cấu hình, xác suất, v.v…
Việc huấn luyện diễn ra dựa vào dữ liệu đầu vào, nếu dữ liệu đầu vào là tập các tập tin chứa sự kiện sẽ được huấn luyện khác với trường hợp đưa vào một tập tin dẫn xuất cũng như khác với việc huấn luyện mới hoàn toàn. Việc huấn luyện mới hoàn toàn được xây dựng trong phương thức train. Việc huấn luyện trải qua bốn pha. Trong pha đầu tiên (Phase 0), Dữ liệu được đọc từ tập tin chứa các cây dùng để huấn luyện sẽ được chuyển sang dạng cây, thực hiện việc tiền xử lý cây bằng cách gọi lớp Training trong gói ngôn ngữ đã được đưa vào trước đó. Sau khi thực hiện việc tiền xử lý cây, thực hiện việc tìm kiếm thành phàn trung tâm của câu. Chuyển sang pha thứ hai (Phase 1), nhiệm vụ của pha này là xây dựng tập từ điển, và tính toán xác suất của những từ trong tập từ điển đó. Pha thứ ba (Phase 2), bộ phân tích cú pháp thực hiện việc sàng lọc những từ có tần số xuất hiện thấp được loại bỏ. Cuối cùng (Phase 3), nhiệm vụ đầu tiên trong pha này được thực hiện đó là thu thập các thông tin đã thống
62
kê. Sau quá trình thu thập các ước lượng xác suất, đưa các thông tin xác suất vào trong các mô hình đã được khởi tạo từ trước.
5.2.4. Phân tích cú pháp
- Sử dụng lớp danbikel.parser.Parser để thực hiện việc phân tích câu. - Các đối số cần đưa vào để thực thi là:
+ Tập tin cấu hình
+ Tập tin dẫn xuất chứa các mô hình + Tập tin kiểm tra
- Đối với tập tin kiểm tra: Hệ thống cần phải phân tích cú pháp các câu trong tập tin này để đưa ra cây cú pháp. Trong tập tin, câu được viết một trong ba dạng sau:
Dạng 1: ( (<word> ( <tag> + ))+ ): câu chứa các từ đã được gán nhãn. Một từ có thể được gán nhiều nhãn. Một ví dụ là: ( (Bán (V)) (thuốc (N)) (giá (N)) (cao (A)) )
Dạng 2: ( (<word>)+ ) : câu chứa các từ chưa được gán nhãn
Dạng 3: câu được đưa vào ở dạng cây cú pháp, trong trường hợp này, theo như tài liệu của Bikel, bộ phân tích cú pháp sẽ dựa vào những phụ thuộc để thực hiện việc phân tích.
- Dữ liệu ban đầu trước khi kiểm tra là một tập tin chứa các cây cú pháp chuẩn. Sử dụng các phương thức trong lớp có sẵn của Bikel, thực hiện lập trình một chương trình nhỏ với mục tiêu sinh ra tập tin chứa các câu theo dạng 1 từ tập tin này. Cũng có thể thực hiện việc đánh giá với câu chưa được gán nhã. Chúng ta chỉ cần thay đổi tham số của chương trình này là có thể đưa ra được tập dữ liệu không gán nhãn phục vụ cho việc kiểm tra.
5.2.5. Đánh giá kết quả:
- Để đánh giá được độ chính xác của bộ phân tích cú pháp ta sử dụng thành phần trong cú pháp. Cây cú pháp được đưa thành dạng tập các mục gọi là bracket, bracket bao gồm 3 thành phần chính là nhãn trong cây cú pháp, vị trí đầu tiên của từ nằm trong nhãn đó, vị trí kết thúc của từ trong nhãn đó. Ví dụ như câu sau:
(S (NP (NP tôi)) (VP (V ăn) (NP (N kem)) (PP (E bằng) (NP (N thìa)) ))) sử được viết lại là
63
Việc đánh giá độ chính xác được xác định thông qua việc so sánh các bracket với nhau. Hai bracket gọi là giống nhau nếu các thành phần trong đó giống hệt nhau. Với định nghĩa này ta có hai đại lượng để so sánh là recall và precision:
Như vây, nếu hai tỷ lệ này càng cao thì phân tích càng chuẩn.
5.3. Kết quả đạt được:
- Tập dữ liệu sử dụng bao gồm 10000 câu trong đó có hơn 9000 câu để huấn luyện và 500 câu để kiểm
- Thực hiện thay đổi một số thuộc tính, dựa vào một tập các thuộc tính mặc định, để đánh giá độ hiệu quả. Các cấu hình để chạy là:
+ Mô hình cơ bản
+ Mô hình cơ bản nhưng trainning-metadata được thay đổi + Mô hình 3 – đưa thêm thông tin gap vào
+ Không đưa bước tiền xử lý sửa nhãn baseNP vào + Thay đổi thừa số pruncFactory
+ Thay đổi giá trị của threshold, trong mô hình cơ bản nhận giá trị là 3, ở đây đánh giá với giá trị là 4.
Kết quả ta có bảng đánh giá như sau:
Bảng 11: Bảng so sánh kết quả đối với xâu dài không quá 40 từ
Độ dài ≤ 40 Các mô hình Recall Precision CBs 0 CB ≤ 2 CBs F Mô hình cơ bản 75.72 82.05 1.30 62.88 81.12 38.29 Mô hình cơ bản không có tham số 57.56 67.26 2.23 43.35 67.17 37.92
64
Mô hình 3 75.72 82.05 1.30 62.88 81.12 38.29 Loại bỏ baseNP 74.21 82.83 1.24 63.52 80.69 37.57 pruncFactory = 3.5 74.65 81.89 1.30 63.09 80.69 37.69 threshold = 4 75.51 81.85 1.30 62.23 81.33 38.27
Bảng 12: Bảng so sánh kết quả đối với xâu dài không quá 100 từ
Độ dài ≤ 100 Các mô hình Recall Precision CBs 0 CB ≤ 2 CBs F Mô hình cơ bản 74.77 79.72 1.88 57.14 75.00 37.71 Mô hình cơ bản không có tham số 55.27 64.08 3.11 38.35 59.96 37.15 Mô hình 3 74.76 79.73 1.87 57.13 75.01 37.72 Loại bỏ baseNP 73.05 80.79 1.75 58.46 75.19 36.83 pruncFactory = 3.5 73.25 79.52 1.88 57.89 74.62 36.91 threshold = 4 74.52 79.49 1.90 56.58 75.19 37.69
Qua bảng kết quả này ta có thể nhận thấy, áp dụng tính chất của tiếng Việt vào bộ phân tích cú pháp cũng đạt được độ chính xác nhất đinh. Ở đây ta, thấy được tỷ lệ recall và percision khá cao khoảng 70% đến 80%. Tuy nhiên, độ chính xác của nhãn chưa được cao chỉ khoảng 30%.
Ta nhận thấy việc loại bỏ các tham số đi làm giảm độ chính xác các mô hình, việc loại bỏ tham số này tức là ta đã loại các luật sinh ra subcategorization frame trong bộ phân tích cú pháp. Ngoài ra, ta nhận thấy không có sự khác nhau nhiều giữa việc thêm thông tin gap (mô hình 3 của Collins [11]) so với mô hình 2 của Collins [11]).
65
Ngoài ra kết quả cũng thử nghiệm một số tham số trong quá trình xử lý của bộ phân tích cú pháp của Bikel’s, cũng chưa tăng được độ chính xác lên.
Ngoài việc thực hiện huấn luyện trên 9000 câu, tôi còn thực hiện huấn luyện theo số lượng câu thay đổi như Bảng 10. Sau đây là kết quả của việc kiêm tra
Bảng 13: Kết quả thực nghiệm với tập huấn luyện lớn dần lên với câu dười 40 từ
Độ dài ≤ 40 Số lượng câu Recall Precision CBs 0 CB ≤ 2 CBs F 60% 67.24 73.67 1.90 54.08 71.89 37.42 70% 68.19 74.24 1.86 51.72 73.61 37.58 80% 70.65 76.65 1.75 56.65 75.54 37.64 100% 75.72 82.05 1.30 62.88 81.12 38.29
Bảng 14: Kết quả thực nghiệm với tập huấn luyện lớn dần lên với câu dười 100 từ
Độ dài ≤ 100 Số lượng câu Recall Precision CBs 0 CB ≤ 2 CBs F