Nghiên cứu phát triển một số kỹ thuật tách từ tiếng việt

174 2 0
Nghiên cứu phát triển một số kỹ thuật tách từ tiếng việt

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ QUỐC PHÒNG HỌC VIỆN KỸ THUẬT QUÂN SỰ TRẦN NGỌC ANH NGHIÊN CỨU PHÁT TRIỂN MỘT SỐ KỸ THUẬT TÁCH TỪ TIẾNG VIỆT Tai Lieu Chat Luong LUẬN ÁN TIẾN SĨ TOÁN HỌC HÀ NỘI – NĂM 2016 BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ QUỐC PHÒNG HỌC VIỆN KỸ THUẬT QUÂN SỰ TRẦN NGỌC ANH NGHIÊN CỨU PHÁT TRIỂN MỘT SỐ KỸ THUẬT TÁCH TỪ TIẾNG VIỆT Chuyên ngành : Cơ sở toán học cho tin học Mã số : 62.46.01.10 LUẬN ÁN TIẾN SĨ TOÁN HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS Đào Thanh Tĩnh PGS TS Nguyễn Phương Thái HÀ NỘI – NĂM 2016 - ii - LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu riêng tơi Các kết viết chung với tác giả khác đồng ý đồng tác giả trước đưa vào luận án Các số liệu, kết nghiên cứu luận án trung thực chưa công bố cơng trình khác Tác giả luận án Trần Ngọc Anh - iii - LỜI CẢM ƠN Trước hết, tác giả xin chân thành cảm ơn hai thầy hướng dẫn, PGS TS Đào Thanh Tĩnh PGS TS Nguyễn Phương Thái, định hướng, tận tình hướng dẫn, giúp đỡ tác giả suốt thời gian nghiên cứu, đóng góp nhiều ý kiến khoa học cho luận án Tác giả xin bày tỏ lời cảm ơn chân thành đến tập thể Bộ môn Hệ thống thơng tin, Khoa Cơng nghệ Thơng tin Phịng Sau đại học, Học viện Kỹ thuật Quân sự; tác giả xin chân thành cảm ơn đến tập thể cán Trung tâm 2, Cục Công nghệ Thông tin, Bộ Tổng Tham mưu; xin cảm ơn tập thể Khoa Công nghệ Thông tin, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội tạo điều kiện thuận lợi cho tác giả hồn thành luận án Tác giả xin cảm ơn hỗ trợ Đề tài Đại học Quốc gia Hà Nội (mã số QG.12.49) Đề tài Quốc gia (mã số KC.01.20/11-15) trình nghiên cứu, thực luận án Tác giả xin bày tỏ lời cảm ơn đến GS TSKH Phạm Thế Long, PGS TS Lương Chi Mai, PGS TS Lê Thanh Hương, PGS TS Lê Anh Cường, PGS TS Bùi Thu Lâm, PGS.TS Nguyễn Xn Hồi, PGS.TS Ngơ Thành Long, TS Nguyễn Thị Minh Huyền, TS Hoa Tất Thắng, TS Nguyễn Văn Vinh TS Lê Hải Sơn có nhiều ý kiến đóng góp q báu giúp tác giả hồn thiện thảo luận án Tác giả xin bày tỏ lời cảm ơn đến chuyên gia: TS Lê Hồng Phương (với VnTokenizer), TS Nguyễn Cẩm Tú (với JvnSegmenter), KS Lưu Tuấn Anh (với DongDu), TS Nguyễn Chí Thành TS Trần Văn An hỗ trợ tác giả thực trình huấn luyện lại chạy thử nghiệm tách từ hệ thống Tác giả xin bày tỏ lời cảm ơn đến chuyên gia ngôn ngữ học: TS Nguyễn Thị Trung Thành TS Trương Thị Thu Hà nhiệt tình giúp đỡ tác giả số vấn đề liên quan đến ngôn ngữ học trình nghiên cứu Tác giả gửi lời cảm ơn người anh em, người đồng đội giúp đỡ, ủng hộ động viên tác giả kể từ bắt đầu nghiên cứu đến Cuối cùng, tác giả bày tỏ lòng biết ơn sâu sắc cha mẹ người thân gia đình, đặc biệt hai mẹ Giang Nguyên Khánh Linh chia sẻ ủng hộ tác giả suốt thời gian thực luận án - iv - MỤC LỤC Trang DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT vii DANH MỤC CÁC BẢNG ix DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ xi DANH MỤC CÁC THUẬT TOÁN xii MỞ ĐẦU Chương TỔNG QUAN VỀ BÀI TOÁN TÁCH TỪ TIẾNG VIỆT 1.1 BÀI TOÁN TÁCH TỪ TIẾNG VIỆT .4 1.1.1 Phát biểu toán tách từ tiếng Việt 1.1.2 Đặc trưng đơn vị từ vựng tiếng Việt 1.1.3 Những vấn đề khó tách từ tiếng Việt 1.1.4 Phương pháp đánh giá kết tách từ tiếng Việt .10 1.2 NHỮNG TIẾP CẬN TRÊN THẾ GIỚI VÀ TRONG NƯỚC 10 1.2.1 Những tiếp cận giới 11 1.2.2 Những tiếp cận nước 14 1.2.3 Những kết đạt tách từ tiếng Việt 16 1.2.4 Những tồn nghiên cứu tách từ tiếng Việt 17 1.3 ĐỀ XUẤT HƯỚNG GIẢI QUYẾT .20 1.3.1 Xác định tài nguyên cho toán tách từ tiếng Việt 20 1.3.2 Thống kê chất lượng kho ngữ liệu mẫu tiếng Việt .21 1.3.3 Chọn mơ hình tích hợp cho tách từ tiếng Việt 24 Chương TÁCH TỪ VÀ NHẬN DIỆN THỰC THỂ VĂN BẢN TIẾNG VIỆT 26 2.1 THUẬT TOÁN TÁCH TỪ TIẾNG VIỆT .26 2.1.1 Thuật toán tách từ tiếng Việt VWS 26 2.1.2 Các thuật toán dùng chung tách từ 26 2.1.3 Thử nghiệm thuật toán so khớp cực đại cải tiến AMM 32 2.2 NHẬN DIỆN THỰC THỂ VÀ KHỬ NHẬP NHẰNG TÊN RIÊNG 33 2.2.1 Bài toán nhận diện thực thể văn 33 2.2.2 Nhận diện thực thể văn tiếng Việt 34 2.2.3 Nhận diện khử nhập nhằng ranh giới tên riêng tiếng Việt 38 2.2.4 Kết thử nghiệm 44 Chương NHẬN DIỆN TỪ LÁY VÀ TỪ GHÉP ĐẲNG LẬP TIẾNG VIỆT 46 3.1 NHẬN DIỆN TỪ GHÉP BẰNG HỌC KHÔNG GIÁM SÁT 46 -v- 3.1.1 Chọn độ dài từ ghép tiếng Việt cho học không giám sát 46 3.1.2 Một số độ đo thống kê nhận diện từ ghép có âm tiết tiếng Việt 46 3.1.3 Giải pháp nhận diện từ ghép có âm tiết tiếng Việt dựa vào đỉnh nhọn 50 3.1.4 Kết thử nghiệm 51 3.2 NHẬN DIỆN TỪ LÁY TIẾNG VIỆT 54 3.2.1 Các đặc điểm cấu tạo từ láy tiếng Việt 55 3.2.2 Nhận diện xây dựng từ điển từ láy đôi tiếng Việt 56 3.2.3 Nhận diện từ láy ba, từ láy tư tiếng Việt 58 3.2.4 Kết thử nghiệm 60 3.3 NHẬN DIỆN TỪ GHÉP ĐẲNG LẬP TIẾNG VIỆT .61 3.3.1 Các đặc trưng cấu tạo từ ghép đẳng lập tiếng Việt .61 3.3.2 Nhận diện xây dựng từ điển từ ghép song tiết đẳng lập tiếng Việt 63 3.3.3 Nhận diện tổ hợp từ, thành ngữ có hay âm tiết 69 3.3.4 Kết thử nghiệm 71 Chương KHỬ NHẬP NHẰNG RANH GIỚI TỪ TIẾNG VIỆT 73 4.1 NHẬP NHẰNG RANH GIỚI TỪ TIẾNG VIỆT 73 4.1.1 Khái niệm phân loại nhập nhằng ranh giới từ tiếng Việt .73 4.1.2 Thống kê giải pháp khử nhập nhằng ranh giới từ .74 4.1.3 Tạo ngữ liệu nhập nhằng cho huấn luyện thử nghiệm 76 4.2 KHỬ NHẬP NHẰNG RANH GIỚI TỪ BẰNG TỪ ĐIỂN 77 4.2.1 Phương pháp khử nhập nhằng CA từ điển (VWS5.1) 77 4.2.2 Kết thử nghiệm 79 4.3 KHỬ NHẬP NHẰNG BẰNG ĐỘ PHỨC TẠP VĂN BẢN 80 4.3.1 Độ phức tạp văn theo xác suất bigram mức từ 80 4.3.2 Độ phức tạp văn mơ hình Markov ẩn gán nhãn từ loại 81 4.3.3 Độ phức tạp văn bigram mức từ gán nhãn từ loại 82 4.3.4 Kết thử nghiệm 84 4.4 KHỬ NHẬP NHẰNG BẰNG MÔ HÌNH ĐIỂM SỐ .87 4.4.1 Mơ hình điểm số khử nhập nhằng chồng lấp OA theo ngữ cảnh 88 4.4.2 Mơ hình điểm số khử nhập nhằng ghép tách CA theo ngữ cảnh 90 4.4.3 Kết thử nghiệm 92 Chương THỬ NGHIỆM VÀ ĐÁNH GIÁ 95 5.1 THỬ NGHIỆM TÁCH TỪ TIẾNG VIỆT .95 5.1.1 Mô tả bước thuật toán tách từ tiếng Việt 96 5.1.2 Các nhóm giải pháp dùng cho thử nghiệm tách từ tiếng Việt 97 5.1.3 Thử nghiệm tách từ đánh giá 97 - vi - 5.2 SO SÁNH VỚI MỘT SỐ CÔNG CỤ TÁCH TỪ TIẾNG VIỆT 102 5.2.1 Giới thiệu số công cụ tách từ 102 5.2.2 Kết thử nghiệm tách từ, đánh giá so sánh 104 5.3 KIỂM LỖI CHÍNH TẢ VĂN BẢN TIẾNG VIỆT 107 5.3.1 Giới thiệu tốn kiểm lỗi tả tiếng Việt 107 5.3.2 Kiểm lỗi cách dùng từ cụm từ mơ hình ngram mức âm tiết 109 5.3.3 Kiểm lỗi tả mơ hình tách từ gán nhãn từ loại 113 KẾT LUẬN 117 DANH MỤC CƠNG TRÌNH CỦA TÁC GIẢ .119 TÀI LIỆU THAM KHẢO 120 PHỤ LỤC .129 A CÁC THUẬT TOÁN HỖ TRỢ .129 A1 Thuật tốn tìm số từ chung dài hai dãy từ 129 A2 Thuật toán chuyển mã unicode 129 A3 Thuật tốn sửa lỗi tả dấu tiếng Việt tự động 131 A4 Thuật toán xây dựng từ điển automat tối thiểu 132 B MINH HOẠ KẾT QUẢ THỐNG KÊ TỪ CÁC TÀI NGUYÊN 139 B1 Minh hoạ số lỗi kho ngữ liệu VietTreeBank 139 B2 Thống kê sửa lỗi tả kho ngữ liệu mẫu tiếng Việt .141 B3 Thống kê kí tự đặc biệt kho ngữ liệu 141 B4 Thống kê phân loại thực thể độ dài thực thể kho ngữ liệu 142 B5 Danh sách từ tố tên riêng, tên riêng đặc biệt tên họ người Việt 143 C PHÉP ĐO ĐỘ TƯƠNG TỰ NGỮ NGHĨA DÙNG TỪ ĐIỂN VCL 147 C1 Độ tương tự dựa vào so khớp chuỗi xấp xỉ theo khoảng cách 148 C2 Độ tương tự dựa vào phép đo đồng xuất 148 C3 Độ tương tự theo vector (Vector Space Model) 149 D MỘT SỐ THUẬT TOÁN SO KHỚP CỰC ĐẠI 150 D1 So khớp cực đại MM (Maximum Matching) .150 D2 So khớp cực đại có cửa sổ 152 E THUẬT TOÁN NHẬN DIỆN VÀ KHỬ NHẬP NHẰNG TÊN RIÊNG .153 E1 Thuật toán nhận diện tên riêng, nhận diện số phân số chữ 153 E2 Các thuật toán khử nhập nhằng tên riêng 155 F THUẬT TỐN TÌM THAM SỐ HỌC TỐI ƯU 158 F1 Thuật toán di truyền GA cực đại hoá kỳ vọng EM 158 F2 Thuật toán EM đoạn .161 - vii - DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT Kí hiệu ACO AM/AMM BM/BMM CA CC/TGĐL CRF DFA EM ER FM/FMM FSM GA HMM LCS MEM MI MinDFA MM NE NER NLP NW OA Pb Pk PN POS PP PSO Pu RW SC/TGCP Mô tả Tối ưu đàn kiến (Ant Colony Optimization) So khớp cực đại cải tiến (Advanced Maximum Matching) So khớp cực đại lùi (Backward Maximum Matching) Nhập nhằng ghép-tách (Combinated Ambiguity) Từ ghép đẳng lập (Coordinated Compound) Trường ngẫu nhiên có điều kiện (Conditional Random Field) Automat [hữu hạn tiền định] (Determine Finite Automata) Thuật toán cực đại hoá kỳ vọng (Expectation Maximization) Nhận diện thực thể văn (Entity Recognition) So khớp cực đại tiến (Forward Maximum Matching) Máy trạng thái hữu hạn (Finite State Machine) Giải thuật di truyền (Genetic Algorithms) Mơ hình Markov ẩn (Hidden Markov Model) Dãy chung dài (Longest Common Substring) Mơ hình Entropy cực đại (Maximum Entropy Model) Độ thông tin tương hỗ (Mutual Information) Automat tối thiểu (Minimal Determine Finite Automata) So khớp cực đại (Maximum Matching) Thực thể có tên (Named Entity) Nhận diện thực thể có tên (Named Entity Recognition) Xử lý ngơn ngữ tự nhiên (Natural Language Processing) Từ (New Word) Nhập nhằng chồng lấp (Overlaping Ambiguity) Xác suất bigram (bigram Probability) Xác suất bigram có điều kiện (conditional bigram Probability) Tên riêng (Private/Proper Name)/Nhận diện tên riêng Từ loại (Part-Of-Speech) Độ phức tạp văn (Perplexity) Tối ưu bầy đàn (Particle Swarm Optimization) Xác suất unigram (unigram Probability) Từ láy (Reduplicative Word) Từ ghép phụ (Subordinated Compound) - viii - Sim SP731 SP732 SP733 SP73POS VCL VFD VLP VSD VWS Độ tương tự (Similarity) Kho ngữ liệu tách từ, gồm 1.542.673 từ, 68.000 câu (10 MB) Kho ngữ liệu tách từ, gán nhãn từ loại, 221.221 từ, 10.000 câu Kho ngữ liệu tách từ, gán nhãn từ loại cú pháp, 10.000 câu Kho ngữ liệu tách từ, gán nhãn từ loại, 20.000 câu Từ điển từ vựng tiếng Việt (Vietrnamese Computation Lexicon) Từ điển tên họ người Việt (Vietnamese Family Dictionary) Xử lý ngôn ngữ tiếng Việt (Vietnamese Language Processing) Từ điển âm tiết tiếng Việt (Vietnamese Syllable Dictionary) Tách từ tiếng Việt (Vietnamese Word Segmenation) Các kí hiệu cho phép đo đánh giá độ xác tách từ dùng luận án: Kí hiệu Nm Nt Nđ R P F1 Mô tả Số lượng đơn vị từ kho mẫu Số lượng đơn vị từ tách Số lượng đơn vị từ tách (dùng LCS để xác định, Phụ lục A1) Độ đo hồi tưởng (Recall) : R = Nđ/Nm Độ đo xác (Precision) : P = Nđ/Nt Độ đo F1-score : F1 = 2RP/(R+P) - ix - DANH MỤC CÁC BẢNG Bảng 1.1 Thống kê độ dài từ kho ngữ liệu mẫu (đã sửa lỗi) 17 Bảng 1.2 Tách từ theo dấu cách dấu câu kho ngữ liệu mẫu (đã sửa lỗi) 18 Bảng 1.3 Kết thử nghiệm [29], PN nhận diện tên riêng 19 Bảng 1.4 Thống kê phân loại đơn vị từ kho ngữ liệu mẫu 22 Bảng 1.5 Thống kê tỉ lệ từ theo độ dài tối đa kho ngữ liệu mẫu 23 Bảng 1.6 Thống kê độ phủ từ - từ điển kho ngữ liệu tiếng Việt 23 Bảng 2.1 Thử nghiệm tách từ với mơ hình FMM, BMM AMM 32 Bảng 2.2 Mô tả trường hợp nhập nhằng tên riêng với tên riêng 41 Bảng 2.3 Kết nhận diện & khử nhập nhằng tên riêng kho SP731 44 Bảng 2.4 Kết tách từ có nhận diện thực thể với FMM, BMM AMM 44 Bảng 3.1 Nhận diện từ ghép có âm tiết dựa theo chọn đỉnh nhọn 52 Bảng 3.2 Nhận diện từ ghép có âm tiết theo đỉnh nhọn vượt ngưỡng 52 Bảng 3.3 Nhận diện từ ghép có âm tiết theo đỉnh nhọn unigram ngưỡng 53 Bảng 3.4 Nhận diện từ ghép có âm tiết với đỉnh nhọn vượt max unigram 53 Bảng 3.5 Nhận diện từ ghép với đỉnh nhọn vượt max unigram có tham số  53 Bảng 3.6 Minh hoạ nhận diện từ láy ba từ láy tư 60 Bảng 3.7 Thử nghiệm tách từ với mô-đun ER, AM, RW 61 Bảng 3.8 Mô tả thông tin từ điển VCL hai từ "cha" "mẹ" 65 Bảng 3.9 Một số thông tin từ điển VCL hai từ "dút dát" "an tâm" 65 Bảng 3.10 Minh hoạ phần cặp từ đồng nghĩa (4.958 cặp) 68 Bảng 3.11 Minh hoạ phần cặp từ đối nghĩa (762 cặp) 69 Bảng 3.12 Minh hoạ độ đo tương tự cặp từ (SimDice > 0,5: 14.452 cặp) 69 Bảng 3.13 Minh hoạ dùng MI (từ internet) để xác định TGĐL (4.718 cặp) 69 Bảng 3.14 Kết phát danh sách từ ghép song tiết đẳng lập 69 Bảng 3.15 Minh hoạ nhận diện tổ hợp từ có 3-4 âm tiết (TGĐL) 70 Bảng 3.16 Tách từ với mô-đun ER, AM CC 71 Bảng 4.1 Thống kê nhập nhằng OA CA kho ngữ liệu 74 Bảng 4.2 Tỉ lệ gây lỗi nhập nhằng kho ngữ liệu 74 Bảng 4.3 Minh hoạ nhập nhằng chồng lấp OA kho ngữ liệu 75 Bảng 4.4 Minh hoạ nhập nhằng ghép-tách CA kho ngữ liệu 75 Bảng 4.5 Phân chia ngữ liệu VietTreeBank cho huấn luyện thử nghiệm 77 Bảng 4.6 Minh hoạ nhập nhằng CA với quán từ đầu/cuối cụm từ 78 Bảng 4.7 Tỉ lệ khử nhập nhằng với từ điển quán từ BE 79 Bảng 4.8 Kết tách từ FM, BM, AM với mô-đun ER BE 79 - 147 - C PHÉP ĐO ĐỘ TƯƠNG TỰ NGỮ NGHĨA DÙNG TỪ ĐIỂN VCL Độ tương tự ngữ nghĩa (semantic similarity) từ, câu, hay văn đóng vai trị ngày quan trọng nghiên cứu xử lý ngôn ngữ tự nhiên Đối với tiếng Anh, có nhiều nghiên cứu thực dựa kho ngữ liệu (Corpus), ngữ nghĩa (Semantic Tree) mạng từ (WordNet) Tuy nhiên tiếng Việt mẻ, đặc biệt ngữ nghĩa mạng từ tiếng Việt chưa xây dựng xong Do vậy, tiếp cận dựa định nghĩa từ từ điển VCL mẻ cần có nghiên cứu thử nghiệm Vấn đề làm để đo tương tự (sự giống nhau, hay tương đồng) hai từ, hai câu, hai văn Độ tương tự đại lượng phản ánh cường độ mối quan hệ hai đối tượng hai đặc trưng (ở hai từ, hai câu hai văn bản) giá trị đoạn [-1,1] [0,1] Ta coi độ tương tự hàm tính điểm (score function) Hiện có hai phương pháp điển hình để đo độ tương tự hai từ, hai câu hai văn phương pháp thống kê phương pháp xử lý ngôn ngữ tự nhiên Với phương pháp thống kê, có số phương pháp sử dụng độ đo dựa vào tần suất xuất từ câu, bật phương pháp sử dụng độ tương tự Cosin Phương pháp xử lý nhanh, tốn chi phí nhiên chưa đảm bảo độ xác cao mặt ngữ nghĩa Cịn phương pháp sử dụng xử lý ngôn ngữ tự nhiên, số cách tiếp cận đặc trưng đưa sử dụng phân tích cấu trúc ngữ pháp, sử dụng mạng ngữ nghĩa từ, sử dụng Wordnet Phương pháp xử lý ngôn ngữ tự nhiên xử lý chậm hơn, tốn nhiều chi phí nhiên xét mặt ngữ nghĩa cho kết cao so với phương pháp thống kê Hiện nay, từ điển VCL (Vietnamese Computational Lexicon) [10] (dùng cho xử lý ngơn ngữ tiếng Việt máy tính) có 41.734 mục nghĩa với 31.158 từ khác nhau, gồm nhiều thông tin cú pháp ngữ nghĩa như: từ loại, tiểu từ loại, lớp ngữ nghĩa, đồng nghĩa, trái nghĩa, định nghĩa từ, Đây sở để tác giả luận án đưa phương pháp đo độ tương tự ngữ nghĩa hai từ dựa định nghĩa Và tiếp cận việc đo độ tương tự ngữ nghĩa hai từ tiếng Việt mà không dùng thống kê, không dùng mạng từ WordNet, không dùng ngữ nghĩa nghiên cứu khác tiếp cận Về mặt chất, đo độ tương tự ngữ nghĩa hai từ thông qua hai định nghĩa từ điển, đo độ tương tự hai văn Trong nghiên cứu trình bày tóm tắt số cách đo độ tương tự ngữ nghĩa hai văn - 148 - C1 Độ tương tự dựa vào so khớp chuỗi xấp xỉ theo khoảng cách Dùng số thuật toán so khớp chuỗi xấp xỉ Cho văn X, Y dãy từ tiếng Việt: X = {x1, x2, x3, , xn} Y = {y1, y2, y3, , ym}, với | X | = n; | Y | = m; Ta áp dụng số cơng thức tính khoảng cách văn X, Y sở âm tiết để tính độ tương tự chúng a Độ tương tự dựa vào khoảng cách hiệu chỉnh ED (Edit Distance) max(| X |, | Y |)  ED ( X , Y ) Sim ED ( X , Y )  (C.1) max(| X |, | Y |) Ví dụ: x = "con chó cắn mèo" => X = (con, chó, cắn, con, mèo) y = "con mèo cắn chuột" => Y = (con, mèo, cắn, con, chuột) Áp dụng cơng thức (C.1) để tính, ta có: ED(X,Y) = 2, vậy: SimED ( X , Y )  52  0.6 b Độ tương tự dựa vào LCS (Longest Common Subsequence) | LCS ( X , Y ) | Sim LCS ( X , Y )  | X |  |Y | (C.2) Với X = (con, chó, cắn, con, mèo) Y = (con, mèo, cắn, con, chuột) Ta có: LCS(X,Y) = (con, cắn, con), nên | LCS(X,Y) | = 3, vậy: 23 SimLCS ( X , Y )   0.6 55 Tương tự áp dụng với độ đo khoảng cách lại như: HD (Hamming Distance), DLD (Damerau–Levenshtein Distance) Ngồi ra, dùng độ đo khoảng cách JW (Jaro–Winkler distance), khoảng cách Trigram (Trigram Distance), hay Ratcliff/Obershelp để tính độ tương tự hai văn C2 Độ tương tự dựa vào phép đo đồng xuất Biểu diễn văn X, Y theo hai dãy từ: X = {x1, x2, x3, , xn} Y = {y1, y2, y3, , ym} Ta có: | X | = n; | Y | = m; | X  Y | = số từ đồng xuất X Y |XY|=|X|+|Y||XY| a Độ tương tự Dice hai văn X Y Sim Dice ( X , Y )  | X Y | | X |  |Y | (C.3) - 149 - b Độ tương tự Jaccard hai văn X Y Sim Jaccard ( X , Y )  | X Y | | X Y | (C.4) Ví dụ: x = "con chó cắn mèo" y = "con mèo cắn chuột" Ta có: | X | = 5; | Y | = 5; | X  Y | = 4; | X  Y | = Do vậy: S Dice ( X , Y )   S Jaccard ( X , Y )  | X Y |    0.8 | X |  |Y | 10 | X Y |   0.67 | X Y | C3 Độ tương tự theo vector (Vector Space Model) Văn biểu diễn chuẩn hoá độ dài theo dạng vector sau:   x = {x1, x2, x3, , xm} y = {y1, y2, y3, , ym} a Độ tương tự Cosin (theo vector tần suất xuất hiện) m  x y   x y  k 1 k k SimCos ( X , Y )  cos( x , y )     m m | x |.| y | k 1 xk2 k 1 y k2 Ví dụ: x = "con chó cắn mèo" y = "con mèo cắn chuột" => Cx = (con, chó, cắn, mèo) => Cy = (con, mèo, cắn, chuột) Gọi Cxy = Cx  Cy = (con, chó, cắn, mèo, chuột) dãy từ chung Sau xếp lại, ta có: Cxy = (cắn, chó, chuột, con, mèo) Theo tần suất xuất hiện, thì:  x = (1, 1, 0, 2, 1) X = (cắn:1, chó:1, chuột:0, con:2, mèo:1)  y = (1, 0, 1, 2, 1) Y = (cắn:1, chó:0, chuột:1, con:2, mèo:1) SimCos ( X , Y )  (C.5) 1   1 (1     1) (1     1)   0.86 Hình C3.1 Minh hoạ vector giá trị Cosin (Rich) - 150 - b Độ tương tự theo vector thứ tự từ (Word-Order) Dùng cho câu có từ giống nhau, khác thứ tự xếp   || rX  rY || SimOrder ( X , Y )    (C.6)  || rX  rY ||  Ví dụ: x = "con chó cắn mèo" => rX  (1, 2, 3, 4, 5) y = "con mèo cắn chó"   r X  rY  (0,  3, 0, 0, 3) Từ ta có:   rX  rY  (2, 7, 6, 8, 7) SimOrder ( X , Y )   =>  (3)    2    82   rY  (1, 5, 3, 4, 2)  1 18    0.7 10 202 D MỘT SỐ THUẬT TOÁN SO KHỚP CỰC ĐẠI D1 So khớp cực đại MM (Maximum Matching) D1.1 So khớp cực đại tiến FMM Thực so khớp cực đại với hướng tiến từ trái sang phải theo thứ tự âm tiết dãy vào Có hai tiếp cận, qt tồn dãy vào so sánh với từ điển, hai chọn cửa sổ âm tiết để so sánh với từ điển Tiếp cận thứ hai, giới hạn kích thước cửa sổ âm tiết, làm cho thuật toán nhanh hơn, nhiên bỏ sót số từ có kích thước dài cửa sổ âm tiết Thuật toán D1.1 So khớp cực đại tiến với toàn dãy vào FMM + Đầu vào n âm tiết: S = a1 a2 a3 an-1 an + Đầu m từ: S = w1 w2 w3 wm (từ ghép nối "_") 01 Function FMM(string S, State MinDFA) { 02 a  SplitToArray(S," "); /* tách âm tiết */ 03 n  count(a); i  1; 04 Repeat 05 w  a[i]; 06 q[i]  w; 07 k  i; 08 for j  k + to n { 09 w  w + " " + a[j]; 10 if (InDict(w.ToLower, MinDFA)) { /* dùng MinDFA */ 11 q(i)  w.replace(" ","_"); /* từ dài */ 12 i  j; 13 } 14 } - 151 15 16 17 18 19 20 21 22 23 24 25 } i  i + 1; Until i > n; i  1; outS  ""; Repeat va SplitToArray(q[i],"_");/*độ phức tạp = count(va)*/ outS  outS + " " + q[i]; i  i + count(va); Until (i > n); return outS.Trim; Dãy vào gồm có n âm tiết Dòng 02, hàm SplitToArray(S," ") tách dãy vào S thành âm tiết, cần thời gian O(n) Từ dòng 04 đến 16, gồm hai vòng lặp lồng duyệt n âm tiết, cần thời gian tối đa O(n2) Từ dòng 19 đến dòng 23 xuất kết tách từ, cần thời gian tối đa O(n) Như vậy, độ phức tạp chung thuật tốn D1.1 O(n2) Nếu sử dụng tìm kiếm nhị phân từ điển có N từ (tại dịng 10) tốn thêm hệ số thời gian O(log2N), đó, độ phức tạp thuật tốn O(n2log2N) D1.2 So khớp cực đại lùi BMM Ngược lại với FMM, phương pháp BMM thực so khớp cực đại theo hướng lùi từ phải qua trái theo thứ tự âm tiết dãy vào Tương tự FMM, BMM có hai tiếp cận quét toàn hay dựa vào cửa sổ âm tiết để so sánh với từ điển, có ưu nhược điểm tương tự với FMM Thuật toán D1.2 So khớp cực đại lùi với toàn dãy vào BMM + Đầu vào n âm tiết: S = a1 a2 a3 an-1 an + Đầu m từ: S = w1 w2 w3 wm (từ ghép nối "_") 01 Function BMM(string S, State MinDFA) { 02 a  SplitToArray(S," "); /* tách âm tiết */ 03 n  count(a); i  n; /* từ phải qua trái: n => */ 04 Repeat 05 w  a[i]; 06 q[i]  w; k  i; 07 for j  k - downto { 08 w  a[j] + " " + w; 09 if (InDict(w.ToLower, MinDFA)) /* dùng MinDFA */ 10 q(i)  w.replace(" ","_"); /* từ dài */ 11 i  j; 12 } 13 i  i - 1; 14 Until i < 1; 15 i  n; - 152 16 17 18 19 20 21 22 23 } outS  ""; Repeat va SplitToArray(q[i],"_");/*độ phức tạp = count(va)*/ outS  q[i] + " " + outS; i  i - count(va); Until (i < 1); return outS.Trim; Tương tự thuật toán D1.1, thuật toán D1.2 có độ phức tạp O(n2), với n số lượng âm tiết dãy vào D2 So khớp cực đại có cửa sổ D2.1 So khớp cực đại tiến có cửa sổ WFMM Thuật tốn D2.1 So khớp cực đại tiến với cửa sổ âm tiết WFMM + Đầu vào n âm tiết: S = a1 a2 a3 an-1 an + Đầu m từ: S = w1 w2 w3 wm (từ ghép nối "_") 01 Function WFMM(string S, State MinDFA) { 02 a  SplitToArray(S," "); /* tách âm tiết */ 03 n  count(a); i  1; /* từ trái qua phải: => n */ 04 Repeat 05 w  a[i]; q[i]  w; 06 k  i; winsize  if((k+3 n; 15 i  1; 16 outS  ""; 17 Repeat 18 va SplitToArray(q[i],"_");/*độ phức tạp = count(va)*/ 19 outS  outS + " " + q[i]; 20 i  i + count(va); 21 Until (i > n); 22 return outS; 23 } Độ phức tạp thuật toán D2.1 O(n), n số âm tiết dãy vào D2.2 So khớp cực đại lùi có cửa sổ WBMM Thuật toán D2.2 So khớp cực đại lùi với cửa sổ âm tiết WBMM + Đầu vào n âm tiết: S = a1 a2 a3 an-1 an + Đầu m từ: S = w1 w2 w3 wm (từ ghép nối "_") - 153 01 Function WBMM(string S, State MinDFA) { 02 a  SplitToArray(S," "); /* tách âm tiết */ 03 n  count(a); i  n; /* từ phải qua trái: n => */ 04 Repeat 05 w  a[i]; q[i]  w; 06 k  i; winsize  if((k-3>1),k-3,1);/*cửa số âm tiết*/ 07 for j  k - downto winsize { 08 w  a[j] + " " + w; 09 if (InDict(w.ToLower, MinDFA)) /* dùng MinDFA */ 10 q(i)  w.replace(" ","_"); /* từ dài */ 11 i  j; 12 } 13 i  i - 1; 14 Until i < 1; 15 i  n; 16 outS  ""; 17 Repeat 18 va SplitToArray(q[i],"_");/*độ phức tạp = count(va)*/ 19 outS  q[i] + " " + outS; 20 i  i - count(va); 21 Until (i < 1); 22 return outS; 23 } Tương tự thuật toán D2.1, việc chọn cửa sổ âm tiết cố định làm cho thuật tốn D2.2 có độ phức tạp O(n), với n số lượng âm tiết dãy vào E THUẬT TOÁN NHẬN DIỆN VÀ KHỬ NHẬP NHẰNG TÊN RIÊNG E1 Thuật toán nhận diện tên riêng, nhận diện số phân số chữ E1.1 Thuật toán nhận diện thực thể tên riêng + Đầu vào dãy âm tiết: S = w[1] w[2] w[3] w[i] w[n] + Đầu outS có tên riêng nối dấu "_" + Ý tưởng: dãy từ âm tiết trở lên Proper tên riêng 01 TenRieng  ""; 02 for i  to n { 03 if isProper(w[i]) { 04 if (TenRieng == "") { 05 TenRieng  w[i]; 06 id  i; 07 }else 08 TenRieng  TenRieng + "_" + w[i]; 09 }else { 10 if (TenRieng != "") { - 154 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 w[id]  TenRieng; for j  id + to i – w[j]  ""; TenRieng  ""; } } } if (TenRieng != "") { w[id]  TenRieng; for j  id + to i – w[j]  ""; } outS  w[1]; for i  to n { if (w[i] != "") outS  outS + " " + w[i]; } Độ phức tạp thuật toán O(n), với n số âm tiết dãy vào E1.2 Thuật toán nhận diện dãy số phân số chữ + Đầu vào dãy âm tiết: S = w[1] w[2] w[3] w[i] w[n] + Đầu outS có dãy số, phân số chữ nối dấu "_" 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 for i  to n - { if (i ≤ n - 2) && isNumStr(w[i],w[i+1],w[i+2]) { w[i]  w[i] + "_" + w[i+1] + "_" + w[i+2]; w[i+1]  ""; w[i+2]  ""; i  i + 2; } elseif isNumStr(w[i],w[i+1]) { w[i]  w[i] + "_" + w[i+1] + "_" + w[i+2]; w[i+1]  ""; i  i + 1; } } for i  to n – { if isFracStr(w[i],w[i+1],w[i+2]) { w[i]  w[i] + "_" + w[i+1] + "_" + w[i+2]; w[i+1]  ""; w[i+2]  ""; i  i + 2; } } outS  w[1]; - 155 23 for i  to n { 24 if (w[i] != "") 25 outS  outS + " " + w[i]; 26 } Độ phức tạp thuật toán O(n), với n số âm tiết dãy vào E2 Các thuật toán khử nhập nhằng tên riêng E2.1 Thuật toán nhận diện tên riêng, khử nhập nhằng từ tiền tố + Đầu vào dãy âm tiết: S = a[1] a[2] a[3] a[i] a[n] + Đầu outS có tên riêng nối dấu "_" 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 TenRieng  ""; for i  to n { if isProper(a[i]) { if (TenRieng == "") { TenRieng  a[i]; id  i; }else TenRieng  TenRieng + "_" + a[i]; }else { if (TenRieng != "") { a[id]  TenRieng; if (a[id]  ListSpecialPN) { v  SplitToArray(a[id],"_"); if count(v) ≥ 2) && (v[1]  ListPrePN) { a[id]  v[1] + " " + v[2]; /* tách */ for j  to count(v) { a[id]  a[id] + "_" + v[j]; } } } for j  id + to i – { a[j]  ""; } TenRieng  ""; } } } if (TenRieng != "") { a[id]  TenRieng; if (a[id]  ListSpecialPN) { v  SplitToArray(a[id],"_"); if count(v) ≥ 2) && (v[1]  ListPrePN) { a[id]  v[1] + " " + v[2]; /* tách */ for j  to count(v) { - 156 35 36 37 38 39 40 41 42 43 44 45 46 47 a[id]  a[id] + "_" + v[j]; } } } for j  id + to i – { a[j]  ""; } } outS  a[1]; for i  to n { if (a[i] != "") outS  outS + " " + a[i]; } Độ phức tạp thuật toán O(n), n số âm tiết dãy vào E2.2 Khử nhập nhằng tên riêng với từ hậu tố sau tách từ + Đầu vào, S ban đầu gồm n âm tiết: a[1], a[2], a[3], a[n] S qua tách từ (m đơn vị): w[1], w[2], w[3], , w[m] + Đầu ra: outS, sửa lỗi w[i], w[i+1] bị nhập nhằng tên riêng với từ hậu tố 01 for i = to m – { 02 ww  (w[i] & "_" & w[i+1]).replace("_"," "); 03 if WordToIndex(lower(ww),MinDFA) ≥ { 04 w[i]  ww; w[i+1]  ""; 05 i  i + 1; 06 }else { 07 pw  SplitToArray(w[i],"_"); 08 ww  w[i+1].replace("_"," "); 09 jpos  0; 10 for j  to count(pw) { 11 ww  pw[count(pw)-j+1] + " " + ww; 12 if (WordToIndex(lower(ww),MinDFA) ≥ 0) { 13 jpos  j; 14 wpos  ww; 15 } 16 } 17 if (jpos > 0) { 18 w[i+1]  wpos.replace(" ","_"); 19 w[i]  pw[1]; 20 for j  to count(pw) – jpos { 21 w[i]  w[i] + "_" + pw[j]; 22 } 23 } 24 } 25 } - 157 26 outS  w[1]; 27 for i  to n { 28 if (w[i] != "") 29 outS  outS + " " + w[i]; 30 } Trong đó: + WordToIndex(w, MinDFA) = -1: từ w khơng có từ điển + WordToIndex(w, MinDFA) ≥ 0: mã từ w từ điển + SplitToArray(w,"_"): tách dãy w dấu "_" mảng đơn vị Độ phức tạp SplitToArray O(1), WordToIndex O(1) (xem thuật toán A4.4, Phụ lục A4) Vịng lặp ngồi (dịng 01) duyệt số từ câu (m), đó, có hai vịng lặp (dịng 10 20) khơng lồng nhau, vịng duyệt số âm tiết từ (w[i]) Do vậy, thuật tốn duyệt tồn số âm tiết câu, nên độ phức tạp thuật toán O(n), với n số âm tiết dãy vào E2.3 Khử nhập nhằng tên riêng với từ hậu tố trước tách từ + Đầu vào, S ban đầu gồm n âm tiết: a[1], a[2], a[3], a[n] S qua thuật toán 3.3 (m đơn vị): w[1], w[2], w[3], , w[m] + Đầu ra: outS, sửa lỗi w[i], w[i+1] bị nhập nhằng tên riêng với từ hậu tố 01 for i = to m – { 02 if ("_"  w[i]) { /* tên riêng */ 03 swi  0; 04 if ("_"  w[i+1]) { 05 sw[1]  w[i+1]; swi  swi + 1; 06 if ("_"  w[i+2]) { 07 sw[2]  w[i+2]; swi  swi + 1; 08 if ("_"  w[i+3]) { 09 sw[3]  w[i+3]; swi  swi + 1; 10 } 11 } 12 } 13 if (swi > 0) { 14 pw  SplitToArray(w[i],"_"); 15 jpos  0; kpos  0; 16 w1  pw[count(pw)]; j  1; 17 Repeat 18 w2  sw[1]; k  1; 19 ww  w1 + " " + w2; 20 Repeat 21 if (WordToIndex(lower(ww),MinDFA) ≥ 0) { 22 kpos  k; jpos  j; 23 wpos  ww; prew  w1; 24 } 25 k  k + 1; 26 if (k swi) or (count(ww) > 4); j  j + 1; if (j count(pw)) or (count(w1) > 3); if (wpos != "") { w[i+1]  wpos.Replace(" ", "_"); for k  to kpos { w[i+k]  ""; } if (count(prew) == count(pw)) { w[i]  ""; }else { w[i]  pw[1]; for j  to count(pw) – jpos { w[i]  w[i] + "_" + pw[j]; } } i  i + kpos; } } } } outS  w[1]; for i  to n { if (w[i] != "") outS  outS + " " + w[i]; } Ta biết độ phức tạp hàm SplitToArray O(1), độ phức tạp hàm WordToIndex O(1) (xem thuật toán A4.4, Phụ lục A4) Vịng lặp ngồi (dịng 01) duyệt số đơn vị âm tiết/tên riêng câu (m), đó, hai vịng lặp lồng (dịng 17 20) sử dụng tối đa 3x4=12 lần duyệt âm tiết có tên riêng dãy hậu tố, hai vòng lặp (dòng 37 44) duyệt lại từ w[i] theo âm tiết Vì vậy, thuật tốn có độ phức tạp O(n), với n số âm tiết dãy vào F THUẬT TỐN TÌM THAM SỐ HỌC TỐI ƯU F1 Thuật toán di truyền GA cực đại hoá kỳ vọng EM F1.1 Thuật toán cực đại kỳ vọng EM (Expectation Maximization): EM thuật toán lặp tổng quát cho việc ước lượng tham số hợp lý cực đại MLE (Maximum-Likelihood Estimation) số biến ngẫu nhiên có liên quan - 159 - khơng quan sát khơng đầy đủ Sự hội tụ thuật tốn ln phụ thuộc vào giá trị ban đầu (xem Hình F1.1) Hình F1.1 Sự hội tụ thuật toán EM đến giá trị cực đại cục (EM), vector tham số khởi tạo giá trị ngẫu nhiên ban đầu (0) - Ưu điểm: thuật toán thực leo đồi hội tụ nhanh - Nhược điểm: điểm tối ưu thường cực trị cục (Hình F1.1) F1.2 Thuật tốn di truyền GA (Genetic Algorithm): Một thuật tốn tìm kiếm heuristic thích nghi với tên gọi thuật toán di truyền GA, đưa dựa ý tưởng tiến hóa chọn lọc tự nhiên di truyền dựa nhiễm sắc thể (chromosomes) Về bản, số tập tham số ngẫu nhiên áp dụng cho thuật tốn giá trị tối ưu tính tốn cho thuật toán Các tập tốt pha trộn với nhau, sử dụng kết hợp với phép chọn lọc (selection), lai ghép (crossover) đột biến (mutate) Và tập áp dụng với thuật toán thu giá trị tham số tối ưu cha mẹ 0,45 0,19 0,78 0,32 0,21 0,89 0,17 0,6 0,41 0,33 0,45 0,19 0,78 0,41 0,33 Hình F1.2 Lai ghép nhiễm sắc thể hai cá thể cha mẹ để tạo - Ưu điểm: thuật tốn tìm giá trị lân cận tối ưu toàn cục - Nhược điểm: tốc độ hội tụ chậm thực phép chọn, lai ghép đột biến - 160 - Hình F1.3 Sơ đồ giải thuật di truyền GA F1.3 Thuật toán kết hợp GA-EM Giải thuật di truyền dựa học thuyết chọn lọc tự nhiên (học thuyết tiến hoá) cho phép đạt điểm lân cận cực trị toàn cục Tuy nhiên, điểm xuất phát trình tìm kiếm nằm vùng cực trị tồn cục thuật tốn EM lại cho phép đạt kết tốt Vì vậy, số tốn, kết hợp thuật tốn EM với giải thuật di truyền GA [146] để đạt kết mong muốn Thuật toán kết hợp GA-EM sau: Bước Khởi tạo tập ngẫu nhiên 0; Bước Thực EM với 0 hội tụ đến EM; Bước Thực GA để tìm GA cho: L(GA) ≥ L(EM); Bước Thực EM với GA hội tụ đến GAEM ; Bước Nếu | EM – GAEM | >  Đặt EM = GAEM.; Quay lại Bước ; Bước Xuất GAEM Hình F1.4 Minh hoạ bước lặp thực thuật toán kết hợp GA-EM - 161 - F2 Thuật toán EM đoạn Tham số  có miền xác định [L R], giả sử đồ thị hàm mục tiêu F theo tham số  có dạng mơ tả hình F2.1 Ý tưởng thực hiện: chia [L R] thành n đoạn Với đoạn con, thực chọn ngẫu nhiên giá trị tham số khởi tạo sử dụng thuật tốn EM để tìm điểm tối ưu Như vậy, tồn n đoạn con, tìm tham số tối ưu toàn cục dễ dàng so với thuật tốn kết hợp GA-EM Hình F2.1 Minh hoạ phương pháp trung điểm tìm điểm tối ưu tồn cục Khi dùng phương pháp để xác định tham số  mà cụ thể P0, Png hay , hàm mục tiêu L() gồm phần: o Phần 1: thực tách từ độ đo thống kê có tham số ; o Phần 2: thực đánh giá độ xác F1score: L() = F1score;

Ngày đăng: 04/10/2023, 15:24

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