Luận văn -Tính toán độ tương tự ngữ nghĩa văn bản dựa vào độ tương tự giữa từ với từ

Độ đo độ tương tự văn bản nếu tính chính xác thì đó sẽ là một độ đo tốt để xác minh việc sao chép tài liệu, hơn nữa nó còn có thể áp dụng cho hệ thống tìm kiếm thông tin, Lí do là hiện nay các nguồn tài liệu trên Internet là quá nhiều, việc nội dung của các loại tin tức bị trùng lặp là điều không thể tránh khỏi.

pdf69 trang | Chia sẻ: lylyngoc | Lượt xem: 3106 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Luận văn -Tính toán độ tương tự ngữ nghĩa văn bản dựa vào độ tương tự giữa từ với từ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
cũng đã được sử dụng trong công trình đã được công bố của tác giả Đinh Điền [2001], tác giả đã sử dụng WFST kèm với mạng Neural để khử nhập nhằng khi tách từ, trong công trình tác giả đã xây dựng hệ thống tách từ gồm tầng WFST để tách từ và xử lý các vấn đề liên quan đến một số đặc thù riêng của ngôn ngữ tiếng Việt như từ láy, tên riêng, ... và tầng mạng Neural dùng để khử nhập nhằng về ngữ nghĩa sau khi đã tách từ (nếu có). Chi tiết về 2 tầng này như sau: 3.4.3.1. Tầng WFST Gồm có 3 bước: o Bước 1: Xây dựng từ điển trọng số: theo mô hình WFST, thao tác phân đoạn từ được xem như là một sự chuyển dịch trạng thái có xác suất.Chúng ta miêu tả từ điển D là một đồ thị biến đổi trạng thái hữu hạn có trọng số. Giả sử:  H là tập các từ chính tả tiếng Việt (còn gọi là “tiếng”). - P là từ loại của từ.  Mỗi cung của D có thể là: - Từ một phần tử của H tới một phần tử của H - Các nhãn trong D biểu diễn một chi phí được ước lượng theo công thức: Cost = -log(f/N) Trong đó: f là tần số của từ, N là kích thước tập mẫu. 28 o Bước 2: Xây dựng các khả năng phân đoạn từ: Để giảm sự bùng nổ tổ hợp khi sinh ra dãy các từ có thể từ một dãy các tiếng trong câu, tác giả đã đề xuất phương pháp kết hợp dùng thêm từ điển để hạn chế sinh ra các bùng nổ tổ hợp, cụ thể là nếu phát hiện thấy một cách phân đoạn từ nào đó không phù hợp ( không có trong từ điển, không phải là tứ láy, không phải là danh từ riêng,…) thì tác giả loại bỏ các nhánh xuất phát từ cách phân đoạn đoạn đó. o Bước 3: Lựa chọn khả năng phân đoạn từ tối ưu: Sau khi có được danh sách các cách phân đoạn từ có thể có của câu, tác giả đã chọn trường hợp phân đoạn từ có trọng số bé nhất. 3.4.3.2. Tầng mạng Neural Mô hình được sử dụng để khử nhập nhằng khi tách từ bằng cách kết hợp so sánh với từ điển. Nhận xét: Mô hình này đạt được độ chính xác trên 97% theo như công bố trong công trình của tác giả, bằng việc sử dụng thêm mạng Neural kết hợp với từ điển để khử các nhập nhằng có thể có khi tách ra các được nhiều từ từ một câu và khi đó tầng mạng Neural sẽ loại bỏ đi các từ không phù hợp bằng cách kết hợp với từ điển. Bên cạnh đó, cũng tương tự như phương pháp TBL điểm quan trọng của mô hình này cần tập ngữ liệu học đầy đủ. 3.4.4. Phương pháp tách tách từ tiếng Việt dựa trên thống kê từ Internet và thuật giải di truyền Phương pháp tách tách từ tiếng Việt dựa trên thống kê từ Internet và thuật giải di truyền – IGATEC (Internet and Genetics Algorithm based Text Categorization for Documents in Vietnamese) do H.Nguyễn đề xuất năm 2005 như một hướng tiếp cận mới trong tách từ với mục đích phân loại văn bản mà không cần dùng đến một từ điển hay tập ngữ liệu học nào. Trong hướng tiếp cận này, tác giả kết hợp giữa thuật toán di truyền với dữ liệu thống kê được lấy từ Internet. Trong tiếp cận của mình, tác giả đã mô tả hệ thống tách từ gồm các thành phần: 3.4.4.1. Online Extractor Thành phần này có tác dụng lấy thông tin về tần số xuất hiện của các từ trong văn bản bằng cách sử dụng một search engine nổi tiếng như Google hay Yahoo chẳng hạn. Sau đó, tác giả sử dụng các công thức dưới đây để tính toán mức độ phụ thuộc lẫn nhau MI (Mutual Information) để làm cơ sở tính fitness cho GA (Genetics Algorithm) engine.  Tính xác suất các từ xuất hiện trên Internet: 29   MAX )w2&w1count()w2&w1p( MAX count(w)wp   Trong đó: MAX = 4 * 109 count(w): số lượng văn bản trên Internet được tìm thấy có chứa từ w hoặc cùng chứa w1 và w2 đối với count(w1&w2).  Tính xác suất độ phụ thuộc của một từ lên một từ khác:  w1p )w2&w1p()w2|w1p(  Thông tin phụ thuộc lẫn nhau MI (Mutual Information) của các từ ghép được cấu tạo bởi n tiếng ( cw = w1w2…wn)      n 1j )wn&.....&w2&w1p(w jp )wn&.....&w2&w1p(MI(cw) 3.4.4.2. GA Engine for Text Segmentation Mỗi cá thể trong quần thể được biểu diễn bởi chuỗi các bit 0,1, trong đó, mỗi bit đại diện cho một tiếng trong văn bản, mỗi nhóm bit cùng loại đại diện cho cho một segment. Ví dụ: Học sinh học sinh học 0 0 1 0 0 Học sinh # học # sinh học w1 w2 w3 Các cá thể trong quần thể được khởi tạo ngẫu nhiên, trong đó mỗi segment được giới hạn trong khoảng 5. GA engine sau đó thực hiện các bước đột biến và lai ghép nhằm mục đích làm tăng giá trị fitness của các cá thể để đạt được cách tách từ tốt nhất có thể. 3.4.5. Nhận xét Sau khi xem xét một số hướng tiếp cận trong tách từ văn bản tiếng Việt, các nghiên cứu đã được công bố đều chỉ ra rằng phương pháp tách từ dựa trên từ mang lại kết quả có độ chính xác khá cao, điều này có được nhờ vào tập huấn luyện lớn, được 30 đánh dấu ranh giới giữa các từ chính xác giúp cho việc học để rút ra các luật để tách từ cho các văn bản khác được tốt đẹp, tuy nhiên chúng ta cũng dễ nhận thấy hiệu suất của phương pháp hoàn toàn phụ thuộc vào tập ngữ liệu huấn luyện. Hướng tiếp cận dựa trên ký tự có ưu điểm là dễ thực hiện , thời gian thực hiện tương đối nhanh , tuy nhiên lại cho kết qủa không chính xác bằng hướng tiếp cận dựa trên từ. Hướng tiếp cận này nói chung phù hợp cho các ứng dụng không cần độ chính xác tuyệt đối trong tách từ văn bản như ứng dụng lọc spam mail , firewall ,…Nhìn chung với hướng tiếp cận này nếu chúng ta có thể cải tiến để nâng cao độ chính xác trong tách từ thì hướng tiếp cận này là hoàn toàn khả thi và có khả năng thay thế hướng tiếp cận tách từ dựa trên từ vì đã không phải xây dựng kho ngữ liệu , một công việc đòi hỏi nhiều công sức, thời gian và sự hỗ trợ của các chuyên gia trong các lĩnh vực khác nhau. 3.5. Độ tương tự văn bản-văn bản Các độ đo độ tương tự văn bản đã được dùng từ rất lâu trong các ứng dụng của xử lý ngôn ngữ tự nhiên và các lĩnh vực liên quan. Một trong những ứng dụng sớm nhất của độ tương tự văn bản có lẽ là mô hình vecto trong tìm kiếm thông tin, ở đó tài liệu có liên quan nhất tới câu truy vấn đầu vào được xác định bằng cách xếp hạng các tài liệu trong tập theo thứ tự ngược của độ tương tự (Salton  Lesk 1971). Độ tương tự văn bản cũng được dùng cho phản hồi liên quan (relevance feedback), phân lớp văn bản (Rochio 1971), và gần đây hơn là cho trích chọn văn bản (Salton et al. 1997), và phương pháp cho việc đánh giá dịch máy tự động (Papineni et al. 2002) hay tóm tắt văn bản (Lin  Hovy 2003). Độ đo độ tương tự văn bản cũng được sử dụng cho việc đánh giá tính chặt chẽ của văn bản (Lapata  Barzilay 2005). Với một số trường hợp, phương pháp tự động tìm độ tương tự giữa hai đoạn văn bản là sử dụng việc so khớp từ đơn giản, và tạo ra một điểm tương tự dựa trên số đơn vị từ vựng xảy ra ở cả hai đoạn văn bản đầu vào. Sự cải tiến với phương pháp đơn giản này là xem xét đến gốc từ (stemming), việc loại bỏ các từ dừng, gán nhãn từ loại (part-of-speech tagging), so khớp tập con dài nhất, cũng như các trọng số và các nhân tố khác. Trong khi thành công với mức độ như vậy, phương pháp độ tương tự từ vựng không thể luôn luôn xác định độ tương tự ngữ nghĩa văn bản. Có một số lượng lớn độ đo độ tương tự ngữ nghĩa giữa từ với từ, sử dụng phương pháp hoặc là dựa trên cơ sở tri thức (knowledge-based), hoặc là dựa trên kho ngữ liệu (corpus-based). Các độ đo này được áp dụng thành công trong công việc xử 31 lý ngôn ngữ như phát hiện từ dùng sai nghĩa (Buddanitsky  Hirst 2001), nhận dạng từ đồng nghĩa. Với độ tương tự ngữ nghĩa dựa trên văn bản, có lẽ hầu hết sử dụng phương pháp xấp xỉ thu được qua việc mở rộng truy vấn, cũng như đã thực hiện trong tìm kiếm thông tin (Voorhees 1993), hay phương pháp phân tích ngữ nghĩa ẩn (Landauer, Foltz  Laham 1998), các phương pháp này đo độ tương tự của các văn bản bằng cách khai thác mối quan hệ giữa các từ một cách tự động qua tập văn bản lớn. Trong bài này, chúng ta xem xét một phương pháp đo độ tương tự ngữ nghĩa văn bản bằng cách khai thác thông tin có thể được tạo ra từ độ tương tự của các từ thành phần. Cho trước 2 đoạn văn bản, chúng ta muốn tự động nhận được một độ đo (score) chỉ tới độ tương tự của chúng ở mức độ ngữ nghĩa, do đó phương pháp so khớp từ truyền thống đã được dùng cho công việc này. Mặc dù chúng ta nhận ra sự thật là một phương pháp toàn diện về độ tương tự ngữ nghĩa văn bản cũng nên tính đến cả cấu trúc văn bản nhưng đầu tiên chúng ta cũng gác lại vấn đề này và thử mô hình độ tương tự ngữ nghĩa văn bản như là hàm của độ tương tự ngữ nghĩa của các từ thành phần. Chúng ta làm bằng cách kết hợp độ tương tự giữa từ với từ và đặc trưng của từ thành một công thức, đây là công cụ tốt cho độ tương tự ngữ nghĩa của hai đoạn văn bản. Trong phần này, ta cũng tính đến cả đặc trưng của từ (idf) để đưa ra trọng số cao hơn cho việc nhận dạng sự phù hợp ngữ nghĩa của 2 từ riêng lẻ và đưa ra trọng số kém hơn cho các khái niệm chung chung. Trong khi đặc trưng của từ cũng được đo cho một vài lĩnh vực bằng độ sâu của chúng trong phân cấp ngữ nghĩa, chúng ta cũng đang tăng cường nhân tố này với độ đo đặc trưng từ trên tập corpus, dựa trên phân phối thông tin đã nghiên cứu từ một tập văn bản lớn. Đặc trưng của một từ được xác định dựa vào tần suất tài liệu đảo ngược (idf), được tính bằng tổng số tài liệu trong tập corpus chia cho tổng số tài liệu chứa từ đó. Cho trước độ tương tự từ-từ và đặc trưng của từ, chúng ta xác định độ tương tự ngữ nghĩa của hai đoạn văn bản T1 và T2 bằng cách sử dụng phương pháp kết hợp độ tương tự ngữ nghĩa của mỗi đoạn văn này đối với đoạn văn kia. Đầu tiên, với mỗi từ w trong đoạn T1, chúng ta cố gắng xác định từ trong đoạn T2 mà có độ tương tự ngữ nghĩa cao nhất (maxSim(w, T2)), theo một trong các độ đo được mô tả dưới đây. Sau đó quá trình tương tự được áp dụng cho xác định từ tương tự nhất trong T1 bắt đầu với những từ trong T2. Độ tương tự từ sau đó được đánh trọng số với đặc trưng từ tương ứng, và được chuẩn hóa với độ dài của mỗi đoạn văn bản. Cuối cùng kết quả được tính bằng công thức trung bình đơn giản: 32     1 2 1 2 2 1 w {T } w {T } 1 2 w {T } w {T } axSim(w,T ) (w) axSim(w,T ) (w) 1( , ) 2 idf(w) idf(w) m idf m idf sim T T                     Độ tương tự là một giá trị giữa 0 và 1. Độ đo là 1 tức hai đoạn văn bản giống hệt nhau, độ đo là 0 tức hai đoạn văn khác nhau hoàn toàn. Chú ý là độ tương tự lớn nhất sẽ được tìm với các lớp từ có cùng từ loại. Chẳng hạn như từ tương tự nhất giữa danh từ “bông hoa” với đoạn văn bản “Có rất nhiều loại hoa màu đỏ ở gần ngôi nhà” sẽ được tìm với “loại hoa” và “ngôi nhà”, và sẽ bị lờ đi với các thể loại từ khác (như “màu đỏ”, “ở gần”,…). Hơn nữa, với những thể loại này (tính từ, trạng từ) độ tương tự ngữ nghĩa không thể đo được, chúng ta sử dụng độ đo dựa vào so khớp từ, hai từ cùng xảy ra ở cả hai văn bản sẽ có maxSim bằng 1. Tuy nhiên, trong khuôn khổ luận văn này, chúng tôi chưa xét đến từ loại của từ. 33 CHƯƠNG IV. TÍNH ĐỘ TƯƠNG TỰ NGỮ NGHĨA VĂN BẢN DỰA VÀO ĐỘ TƯƠNG TỰ GIỮA TỪ VỚI TỪ 3.1. Phát biểu bài toán Bài toán: Tính toán độ tương tự ngữ nghĩa văn bản dựa vào độ tương tự giữa từ với từ. Input:  2 văn bản hoặc 2 URL từ VnExpress.net hoặc DanTri.com.vn  Kho ngữ liệu gồm các file .seg  Tập các từ đồng nghĩa (file SameMeaning.txt) Output:  Độ đo tương tự giữa hai văn bản. 3.2. Giải quyết bài toán Các bước như sau: 3.2.1. Chuẩn bị dữ liệu Bước 1: Từ kho dữ liệu gồm các file .seg, ta tạo ra:  Từ điển Dict, file từ điển này có cấu trúc như sau: (key_word + + ':' + word_total + + list_of_docs) Trong đó key_word dùng làm khóa, cặp ký tự + ':' là dấu hiệu ngăn cách giữa khóa và value, các thành phần còn lại (sau dấu ':') là value.  Từ điển này được thể hiện bằng một danh sách gồm các cặp (key, value):  Key: danh sách các từ khóa (key_word).  Value: Gồm số lần xuất hiện của từ đó và danh sách các file .seg có chứa từ đó (cách nhau bằng dấu chấm phảy). Lấy các thành phần này ra thì cần qua thao tác bóc tách. Một phần của từ điển Dict như sau: 34 Hình 4: Một phần của từ điển Dict Như vậy sau mỗi từ khóa sẽ đến một dấu tab, đến dấu hai chấm rồi đến tổng số lần xuất hiện của từ đó trong tất cả các file tài liệu, tiếp đến lại là một dấu tab và cuối cùng là danh sách các file tài liệu có chứa từ đó.  Danh sách các file đã xử lý (lưu vào tệp processed_files.txt). Mục đích tạo ra file này là để lấy tổng số các tài liệu mà dữ liệu đã được phân tích xử lý để đưa vào từ điển Dict, phục vụ cho việc tính độ tương tự trong phần sau. Lưu lại danh sách này cũng để xác định xem nếu có một file mới đưa vào để phân tích thì kiểm tra xem file đó đã được xử lý hay chưa. Hình 5: Danh sách một số file trong kho ngữ liệu đã xử lý 35 Bước 2: Dựa vào từ điển Dict.txt, ta trích xuất ra tất cả các từ ghép và lưu vào từ điển CompoundWords, theo đó CompoundWords là bao gồm tất cả các từ ghép xuất hiện trong kho dữ liệu .seg. Hình 6: Một phần của từ điển các từ ghép Bước 3: Kết hợp từ điển CompoundWords và SameMeaning ta được từ điển CompoundDict (dùng để tách văn bản thành các từ độc lập). Từ điển này có cấu trúc gồm 2 phần:  Key: danh sách các từ khóa  Value: các số nguyên, giá trị này dùng để xác định các từ đồng nghĩa. Các từ có cùng giá trị Value thì tương tự nhau về nghĩa. Một phần của từ điển CompoundDict như sau: Hình 7: Một phần từ điển CompoundDict 36 3.2.2. Tách từ: Tách văn bản thành các từ ghép và danh từ riêng Từ ghép là một tổ hợp từ 2 từ trở lên mang đầy đủ ý nghĩa (thường là tổ hợp 2 đến 4 từ). Nếu tách các từ trong một từ ghép ra thì sẽ thành những từ có ý nghĩa khác hẳn. VD: “công nghệ thông tin”, “ngôn ngữ tự nhiên”, “siêu văn bản”, “tin học”,.... Danh từ riêng là những từ ghép mà các chữ cái đầu viết hoa. 3.2.2.1. Tách từ ghép trong văn bản Giả sử một từ ghép gồm tối đa 4 từ đơn  Đầu vào: Văn bản sText dạng chuẩn (chưa tách từ)  Đầu ra: Văn bản sOutText (đã tách thành các từ ghép)  Ý tưởng: Xét từng tổ hợp từ từ 4 đến 2 từ, so sánh các tổ hợp này với các từ ghép trong từ điển CompoundDict. Nếu nó xuất hiện trong từ điển thì nó là từ ghép, ngược lại, nó không là từ ghép. Cách làm như sau:  Thêm một dấu cách vào cuối văn bản sText để xét trường hợp cuối đoạn có dấu chấm câu. Khi đó ngắt câu sẽ dùng chung qui luật với các đoạn khác. sText += " ";  Ngắt văn bản sText ra thành các đoạn căn cứ vào các dấu chấm câu: Thay dấu "? " bằng dấu " ?\n " sText = sText.replace("? ", " ?\n "); Thay dấu ": " bằng dấu " :\n " sText = sText.replace(": ", " :\n "); Thay dấu "! " bằng dấu " !\n " sText = sText.replace("! ", " !\n "); Thay dấu ", " bằng dấu " , " sText = sText.replace(", ", " , "); Thay dấu "; " bằng dấu " ; " sText = sText.replace("; ", " ; "); Xóa bỏ dấu "\"" sText = sText.replace("\"", ""); 37 Xóa bỏ dấu "' " sText = sText.replace("' ", ""); Thay hai dấu cách bằng một dấu cách: sText = sText.replace(" ", " ");  Tiến hành ngắt đoạn  Tiếp theo, xét từng đoạn văn một: Tách đoạn văn thành mảng các từ phân cách nhau bởi dấu cách. - Xét từ đầu tiên của đoạn: + Trường hợp 1: Nếu kí tự đầu tiên của từ là kí tự đặc biệt (vd dấu câu như '?', ':',...) hoặc nó không phải là chữ cái thì bỏ qua. Ở đây các trường hợp sau không được xem là từ hợp lệ: “?Anh”, “123Em”, “$Usd”,... + Trường hợp 2: Từ đầu tiên là một từ hợp lệ (ví dụ từ “xã”), lần lượt lấy các từ tiếp theo để xét các tổ hợp từ 4 đến 2 từ: Ví dụ: Xét tổ hợp từ “xã_hội_chủ_nghĩa”: Nếu là từ ghép (tức nằm trong từ điển CompoundDict) thì thêm nó vào danh sách văn bản đầu ra sOutText và thêm dấu cách. Nếu không là từ ghép thì xét tiếp đến tổ hợp “xã_hội_chủ”, nếu vẫn không là từ ghép thì xét tổ hợp cuối cùng là “xã_hội”. - Tiếp theo ta nhảy đến xét từ ở vị trí kế tiếp, cứ tiếp tục làm như trên cho tới cuối đoạn văn. - Nếu vẫn còn từ chưa thêm vào biến sOutText (trường hợp còn từ cuối cùng) thì ta cứ thế thêm vào.  Mã nguồn của module này như sau: private static String splitKeywords(String sText) { StringBuffer sOutText = new StringBuffer(); sText += " "; sText = sText.replace(". ", " .\n "); sText = sText.replace("? ", " ?\n "); sText = sText.replace(": ", " :\n "); sText = sText.replace("! ", " !\n "); sText = sText.replace(", ", " , "); sText = sText.replace("; ", " ; "); sText = sText.replace("\"", ""); sText = sText.replace("' ", ""); sText = sText.replace(" ", " "); 38 String[] sParagraphArr = sText.split("\n"); for(String sParaItem: sParagraphArr) { String currWord[] = sParaItem.split(" "); int i = 0; while (i < currWord.length - 1) { if (currWord[i].length() <= 0) { i++; continue; } boolean isAppened = false; int t = MAX_TOTAL_WORDS_IN_A_COMPOUNDWORD - 1; char ch = currWord[i].charAt(0); //Ký tự đầu của word if (".,;?:!".indexOf(ch)>= 0 || !Character.isLetter(ch)) { t = 0; } else { while (t > 0) { StringBuffer strTemp = new StringBuffer(); strTemp.append(currWord[i]); for (int j = i + 1; j < i + 1 + t && j < currWord.length; j++) { strTemp.append("_" + currWord[j]); } String tmpWord = strTemp.toString().toLowerCase().trim(); if (WordDict.CompoundDict.containsKey(tmpWord)) { sOutText.append(strTemp + " "); isAppened = true; //đánh dấu là đã thêm vào chuỗi output break; } else { //Nếu ko phải là 1 từ ghép -> xét đến tổ hợp ngắn //hơn bằng cách giảm biến đếm đi 1. t--; } } } if (t == 0) { if (!isAppened) { sOutText.append(currWord[i] + " "); } } i += t + 1; } if (i < currWord.length) { sOutText.append(currWord[i] + " "); } sOutText.append("\n"); } return sOutText.toString(); } 39 3.2.2.2. Tách danh từ riêng trong văn bản  Đầu vào: văn bản sText là văn bản đã tách từ ghép.  Đầu ra: văn bản sOutText tách thành văn bản đã đoán nhận các danh từ riêng. - Danh từ riêng: là các từ không đứng ở đầu câu gồm ít nhất 2 từ mà chữ cái đầu viết hoa. - Dùng một vector để lưu danh sách các danh từ riêng (tên riêng) đã tìm được. - Hàm (phương thức) IsName để kiểm tra xem một từ có phải là danh từ riêng (tên riêng) hay không (tức kiểm tra xem chữ cái đầu của từ đó có viết hoa không, đồng thời nó không phải là từ ghép đã đoán nhận).  Cách tách như sau:  Bước 1: Ngắt văn bản thành các câu phân cách nhau bởi dấu xuống dòng hoặc dấu chấm câu.  Bước 2: Ngắt mỗi câu thành mảng các từ đơn.  Bước 3: Với mỗi câu văn bản:  Bỏ qua các từ viết hoa liền nhau ở đầu câu.  Xét từng từ một, nếu thấy từ dạng tên riêng mà không đứng ở đầu câu thì lưu lại vào biến tạm aName. Khi có 2 từ liền nhau trở lên được lưu vào biến tạm, đồng thời từ tiếp theo không phải là dạng tên riêng, thì ta thêm aName vào danh sách danh từ riêng (lưu vào vector).  Mỗi lần lưu một danh từ riêng vào vector xong, ta xóa rỗng biến tạm để chuẩn bị xét đến từ tiếp theo.  Cứ tiếp tục làm như vậy cho đến khi hết câu văn.  Bước 4: Xét ngược lại các trường hợp danh từ đứng ở đầu câu. Nếu một danh từ riêng đã được xác định ở chỗ khác trong câu thì khi đó, nếu nó xuất hiện ở đầu câu (trường hợp đã bỏ qua khi xét ở trên) thì nó cũng là danh từ riêng.  Với mỗi từ trong danh sách tên riêng, ta thay dấu cách phân cách từ bằng dấu gạch dưới và lưu vào biến realName.  Với mỗi câu văn bản, ta thay tất cả những tên riêng aName bằng tên riêng realName (ví dụ thay hết các từ dạng “Nguyễn Văn A” thành dạng “Nguyễn_Văn_A”). 40  Tiếp tục như trên cho tới khi hết thay thế hết tất cả các từ trong tất cả các câu văn. Hạn chế: Đối với các tên riêng chỉ xuất hiện ở đầu câu mà không xuất hiện ở những vị trí khác thì chương trình chưa phát hiện ra. Ví dụ:  Văn bản 1: Chủ tịch Hồ Chí Minh vĩ đại sống mãi trong sự nghiệp của chúng ta.  Văn bản 2: Hồ Chí Minh muôn năm. Hồ Chí Minh là một danh nhân văn hóa thế giới. Khi tính độ tương tự, hai văn bản trên được tách từ như sau:  Văn bản 1: Chủ_tịch Hồ_Chí_Minh vĩ_đại sống mãi trong sự_nghiệp của chúng_ta.  Văn bản 2: Hồ Chí Minh muôn năm. Hồ Chí Minh là một danh_nhân văn_hóa thế_giới. Ở ví dụ trên, mặc dù từ Hồ Chí Minh xuất hiện 2 lần trong văn bản 2 nhưng vì đứng ở đầu câu nên nó vẫn không được nhận biết là tên riêng.  Mã nguồn của module này như sau: private static String splitNameWords(String sText) { StringBuffer sOutText = new StringBuffer(); Vector vNameList = new Vector(); String[] sParagraphArr = sText.split("\n"); for(String sParaItem: sParagraphArr) { String strWordArr[] = sParaItem.split(" "); boolean isFirstPositionOfParagraph = true; StringBuffer aName = new StringBuffer(); for (int i = 0; i < strWordArr.length; i++) { String currWord = strWordArr[i]; if (isFirstPositionOfParagraph) { if (!isName(currWord)) { isFirstPositionOfParagraph = false; } } else { boolean hasName = false; if (isName(currWord)) { aName.append(currWord + " "); hasName = true; } if (!hasName || i == strWordArr.length - 1) { if (aName.length() > 0) { if (aName.toString().trim().indexOf(' ') > 0) { vNameList.addElement(aName.toString().trim()); } 41 aName.delete(0, aName.length()); } } } } } //Xét ngược lại các trường hợp danh từ đứng ở đầu câu. for(String sParaItem: sParagraphArr) { sParaItem = " " + sParaItem + " "; for (String aName: vNameList) { String realName = aName.replace(' ', '_'); sParaItem = sParaItem.replace(" " + aName + " ", " " + realName + " "); } sOutText.append(sParaItem.trim() + "\n"); } return sOutText.toString(); } 3.2.3. Tính toán độ tương tự văn bản  Đầu vào: Hai văn bản đã tách từ.  Đầu ra: Độ tương tự giữa hai văn bản. Độ tương tự giữa hai văn bản được tính theo công thức: Bước 1: Tính toán giá trị idf của một từ Idf của một từ được tính bằng tổng số toàn bộ tài liệu trong tập corpus chia cho tổng số tài liệu chứa từ đó. Bước 2: Tính độ tương tự lớn nhất của một từ so với một văn bản Để dễ tính toán, ta biểu diễn văn bản dưới dạng mảng các từ (từ ghép + danh từ riêng) riêng lẻ. Sau đó, ta xét các trường hợp như sau:  Nếu có 2 từ giống hệt nhau thì trả lại giá trị 1.  Nếu có 2 từ giống nhau nhưng khác nhau ở chữ hoa chữ thường thì trả lại giá trị 0.98.  Nếu có 2 từ khác nhau nhưng là từ đồng nghĩa thì trả lại giá trị 0.98.  Nếu không có từ nào khớp thì trả lại giá trị 0.     1 2 1 2 2 1 w {T } w {T } 1 2 w {T } w {T } axSim(w,T ) (w) axSim(w,T ) (w) 1( , ) 2 idf(w) idf(w) m idf m idf sim T T                     42 Bước 3: Tính toán độ tương tự giữa hai văn bản: dựa vào các tính toán từ bước 2 và theo công thức đã nêu ở trên.  Mã nguồn của module này như sau: public class Processor { /* * Tính toán IDF của 1 từ * Giá trị mặc định là 1 (khi là từ mới - chưa xuất hiện trong tài liệu nào) */ public static double getIDF(String word) { int total_doc = FileProcessor.VProcessedFiles.size(); String sValue = WordDict.HashDict.get(word); if (total_doc == 0 || sValue == null || sValue.length() == 0) return 1; int total_appear = sValue.split(";").length; if (total_appear == 0) return 1; double result = total_doc / total_appear; return result; } /* * Tính độ tương tự lớn nhất của 1 từ so với 1 văn bản (dưới dạng mảng các từ) * word: từ dùng để so khớp. * sWordArr: nội dung văn bản đã tách ra thành mảng các String riêng lẻ */ public static double getMaxSim(String word, String[] sWordArr) { double maxValue = 0; word = word.trim(); //loại bỏ các ký tự thừa ở đầu và cuối if (word.length() == 0) return 0; Integer value1 = WordDict.CompoundDict.get(word); for (String currWord: sWordArr) { currWord = currWord.trim(); 43 if (currWord.length() <= 0) continue; if (currWord.equals(word)) { maxValue = 1; break; } else if (currWord.equalsIgnoreCase(word)) { if (maxValue < 0.98) maxValue = 0.98; } else { Integer value2 = WordDict.CompoundDict.get(currWord); if (value1!= null && value2!=null && value1.intValue() == value2.intValue()) { if (maxValue < 0.98) { maxValue = 0.98; } } } } return maxValue; } /* * Tính toán độ tương tự giữa 2 văn bản * Đầu vào: 2 văn bản s1 + s2 */ public static double getSim(String s1, String s2) { String sArr1[] = s1.split(" "); String sArr2[] = s2.split(" "); double total_maxsim1 = 0; double total_idf1 = 0; 44 for (int i = 0; i < sArr1.length; i++) { String word = sArr1[i]; double word_idf = getIDF(word); total_idf1 += word_idf; total_maxsim1 += getMaxSim(word, sArr2) * word_idf; } double sim1 = 0; if (total_idf1 != 0) { sim1 = total_maxsim1 / total_idf1; } double total_maxsim2 = 0; double total_idf2 = 0; for (int i = 0; i < sArr2.length; i++) { String word = sArr2[i]; double word_idf = getIDF(word); total_idf2 += word_idf; total_maxsim2 += getMaxSim(word, sArr1) * word_idf; } double sim2 = 0; if (total_idf2 != 0) { sim2 = total_maxsim2 / total_idf2; } return (sim1 + sim2)/2; } } 3.3. Xây dựng hệ thống Giao diện chính của bài toán như sau: 45 Hình 8: Giao diện chính của hệ thống 3.3.1. Nhập trực tiếp 2 văn bản Trong tab đầu tiên là tính độ tương tự 2 văn bản, ta có thể gõ trực tiếp nội dung của hai văn bản. Sau đó nhấn nút “Tính độ tương tự” ta sẽ được kết quả cần tìm.  Ví dụ trước khi nhấn nút: Hình 9: Giao diện cho phép nhập trực tiếp hai văn bản  Sau khi nhấn nút tính, văn bản được tách từ và ta có kết quả độ tương tự giữa hai văn bản Sim(text1, text2) (là một số nằm trong khoảng [0,1]). 46 Hình 10: Giao diện kết quả độ tương tự sau khi nhập hai văn bản  Khi nhấn nút “Reset”, văn bản được thiết lập lại trạng thái lúc đầu khi người dùng nhập vào (tức văn bản khi chưa tách từ).  Khi nhấn nút “Văn bản khác”, hai văn bản được chọn ngẫu nhiên trong phần mã nguồn, giúp ta có thể test nhanh chương trình.  Khi nhấn nút “Xóa”, hệ thống cho phép người dùng nhập vào hai văn bản mới. 3.3.2. Nhập 2 văn bản từ file Để tính độ tương tự giữa hai file văn bản lưu trong máy tính, ta chọn tab thứ hai trong phần giao diện chính: “Độ tương tự 2 files”. Giao diện của lựa chọn này như sau: Hình 11: Giao diện nhập hai văn bản từ file  Đầu tiên, muốn chọn hai file văn bản nào, ta nháy vào nút “…”, sau đó chọn đường dẫn tới file cần nhập. 47  Sau đó, ta nháy vào nút “Lấy nội dung các file”, toàn bộ nội dung của hai file này sẽ được hiển thị trong phần Text 1 và Text 2.  Cuối cùng nhấn nút “Tính độ tương tự” để xem kết quả Sim(text1, text2). Hình 12: Giao diện kết quả sau khi nhập hai văn bản từ file 3.3.3. Lấy nội dung 2 văn bản từ URL Phần này có sử dụng mã nguồn mở từ một dự án nghiên cứu khác, trong mã nguồn mở này có sử dụng thư viện phân tích nội dung HTML của dự án VietSpider (file VSHTMLParser.jar). Địa chỉ gốc của tiện ích phân tích và bóc tách nội dung một số trang tin tức Việt Nam: Đây là một project mã nguồn mở, tuy đơn giản nhưng nó có đủ các tính năng để cài đặt phục vụ test chương trình. Bộ phân tích nội dung HTML (HTMLParser) lấy từ dự án phần mềm miễn phí VietSpider tại địa chỉ: VietSpider là bộ phần mềm khai thác, tổng hợp thông tin từ Internet, ở đây chỉ sử dụng một file thư viện trong bộ phần mềm này. Giao diện của lựa chọn này như sau: 48 Hình 13: Giao diện tính độ tương tự nội dung của hai trang Web  Đầu tiên, ta nhập địa chỉ của hai trang web vào URL 1 và URL 2.  Nhấn nút “Xử lý lấy nội dung” để lấy ra nội dung văn bản của hai trang web này. Khi đó, toàn bộ nội dung của chúng sẽ được hiển thị lần lượt tại Text 1 và Text 2.  Nhấn nút “Tính độ tương tự” để tìm kết quả Sim(text1, text2).  Muốn lấy nội dung của hai trang web khác, nhấn vào nút “Xét URL khác”.  Nhấn nút “Thoát” để ra khỏi hệ thống. 3.4. Kết quả thử nghiệm và đánh giá 3.4.1. Một số ví dụ cụ thể Độ tương tự ngữ nghĩa văn bản được minh họa bởi một số ví dụ sau:  Ví dụ 1: Văn bản 1 (Text 1): Một cơn giông bão dữ dội chỉ còn cách Trường Sa khoảng năm bảy km. Đừng chần chờ chống bão. Văn bản 2 (Text 2): Truyện thơ là những truyện kể bằng thơ, biểu hiện cảm nghĩ bằng ngôn ngữ giàu hình ảnh, cảm xúc, chứa đựng vấn đề xã hội. Có sư kết hợp yếu tố tự sự và trữ tình, dung lượng lớn, mang tính chất cố sự của truyện kể dân gian, biểu hiện dưới hình thức thơ ca với màu sắc trữ tình đậm. 49  Độ tương tự giữa hai văn bản: Sim(Text1, Text2) = 0.0016756471374935402 Về mặt thực tế, văn bản 1 nói về tin tức dự báo thời tiết, còn văn bản 2 nói về đặc điểm của truyện thơ. Hai nội dung này hoàn toàn khác nhau, không có từ nào trùng nhau và không có bất cứ mối liên hệ nào về mặt ý nghĩa. Còn theo thực nghiệm trên máy, chúng ta có độ tương tự giữa hai văn bản trên là 0.0016756471374935402. Độ đo này tương đối hợp lý vì hai văn bản trên khác nhau hoàn toàn.  Ví dụ 2: Văn bản 1 (Text 1): Nhận án chung thân, ông Sĩ còn bị điều tra “bỏ túi” 2 triệu USD Dù ông Sĩ một mực cho rằng không nhận hối lộ từ PCI nhưng tòa vẫn khẳng định có đủ căn cứ buộc tội nên tuyên phạt mức án chung thân. Tòa còn kiến nghị tiếp tục điều tra về cáo buộc nhận hơn 2 triệu USD trước đó của ông này. Theo HĐXX, hồ sơ vụ án đã thể hiện, để được trúng thầu gói thầu “Tư vấn thiết kế”, “Tư vấn giám sát” và được ưu ái những điều kiện có lợi, các quan chức PCI đã nhiều lần hối lộ ông Sĩ. Ngoài ra, tòa buộc ông Sĩ phải nộp lại 262.000 USD phạm tội. Do ông Sĩ đang phải chịu mức án 6 năm tù về tội “lợi chức vụ quyền hạn trong khi thi hành công vụ” nên HĐXX gộp chung hai bản án, buộc ông Sĩ phải nhận mức án chung thân cho cả hội tội. Cơ quan xét xử cũng kiến nghị cơ quan điều tra và VKSND Tối cao tiếp tục làm rõ hành vi nhận 6 lần tiền trước đó (hơn 2 triệu USD) từ phía PCI. Văn bản 2 (Text 2): Đề nghị ông Sĩ tù chung thân Đến phút cuối, ông Huỳnh Ngọc Sĩ vẫn cho rằng mình không có tội, mong HĐXX xem xét, làm rõ, đánh giá từng chi tiết để minh oan. Tiếp tục phiên tòa sơ thẩm xét xử ông Huỳnh Ngọc Sĩ, nguyên phó giám đốc Sở GTVT kiêm giám đốc Ban Quản lý dự án đại lộ Đông Tây và môi trường nước TPHCM (gọi tắt là BQLDA), về tội nhận hối lộ, ngày 16-10, VKSND TPHCM được ủy quyền của VKSND Tối cao thực hành quyền công tố tại tòa nhận định trong quá trình điều tra và tại phiên tòa, bị cáo Sĩ không thừa nhận việc nhận tiền của các quan chức Công ty Tư vấn Quốc tế Thái Bình Dương (PCI) và làm trái quy định Nhà nước. Tuy nhiên, căn cứ hồ sơ vụ án, tài liệu, chứng cứ thu thập được và lời khai nhận của 50 các quan chức PCI..., đã đủ cơ sở kết luận ông Sĩ đã nhận 262.000 USD và làm theo yêu cầu của người đưa hối lộ. Vị công tố đề nghị tù chung thân đối với bị cáo Sĩ.  Hai văn bản trên về mặt nội dung không hoàn toàn giống nhau nhưng có một số từ bị lặp lại ở cả hai văn bản (các từ in đậm). Theo thực nghiệm trên máy ta có độ tương tự giữa hai văn bản: Sim(Text1, Text2) = 0.36826248198851375  Ví dụ 3: Văn bản 1: Huỳnh Ngọc Sĩ: “Cáo trạng hoàn toàn không đúng” Ra trước vành móng ngựa, bị cáo Huỳnh Ngọc Sĩ đã phản đối toàn bộ nội dung bản cáo trạng của Viện Kiểm sát nhân dân tối cao truy tố bị cáo nhận hối lộ. Bước vào phần thẩm vấn, khi Chủ tọa phiên tòa vừa hỏi Huỳnh Ngọc Sĩ, cáo trạng truy tố đúng hay sai? Bị cáo Sĩ đã phản ứng gay gắt: "Tôi phản bác hoàn toàn nội dung cáo trạng truy tố tôi nhận hối lộ. Việc đưa nhận hối lộ chỉ là lời khai của các cá nhân PCI; không có nhân chứng, chứng cứ trực tiếp”. Bị cáo Sĩ cũng khẳng định: “Bốn vấn đề mà cáo trạng nêu tôi làm lợi cho PCI là hoàn toàn không đúng, quy kết tội cho tôi”. Văn bản 2: Huỳnh Ngọc Sĩ: “Tôi không nhận hối lộ” (Dân trí) - “Việc PCI rút tiền từ ngân hàng Tokyo chi nhánh TPHCM, đem tiền từ Nhật qua và trả lương… không đồng nghĩa là tiền hối lộ. Tôi hoàn toàn không nhận tiền hối hộ”, bị cáo Huỳnh Ngọc Sĩ liên tục “phản pháo” HĐXX. Huỳnh Ngọc Sĩ nói: “Lời khai như thế là không đúng. Tôi không tiếp ai tại phòng làm việc riêng hay thương lượng với ai tại khách sạn cả”. Suốt phiên tòa, bị cáo Sĩ đều không thừa nhận mình đã nhận “bôi trơn” số tiền 262.000 USD. Sĩ khai mình không hề biết đến ông Takasu Kunio, nguyên giám đốc điều hành PCI (người được xác định đã đưa tiền hối lộ cho ông Sĩ). Bị cáo Sĩ vẫn giữ nguyên quan điểm: “Không chính xác. Không đúng sự thật. Không nhận…”. Để làm rõ sự việc, cơ quan điều tra cho các quan chức PCI nhận dạng thì họ nhận đúng hình và vẽ đúng sơ đồ phòng làm việc của ông Sĩ. Bị cáo Sĩ quả quyết: “Việc PCI rút tiền từ ngân hàng Tokyo chi nhánh TPHCM, đem tiền từ Nhật qua và trả lương… không đồng nghĩa là tiền hối lộ. Tôi hoàn toàn không nhận tiền hối hộ”.  Độ tương tự giữa hai văn bản: Sim(Text1, Text2) = 0.5206761702244165 51 Hai văn bản trên có số từ ngữ bị lặp lại không nhiều nhưng về mặt ý nghĩa chúng cũng có điểm tương đồng. Độ tương tự của chúng là 0.5206761702244165 cũng phản ánh được phần nào nội dung đó.  Ví dụ 4 Văn bản 1 (Text 1): Bán chung cư Văn Phú Victoria-Hà Nội LH: 0943212996 Dự án nằm giữa khu đô thị Văn Phú, quận Hà Đông, TP.Hà Nội, được tư vấn thiết kế và giám sát bởi các công ty Nhật Bản với phong cách độc đáo, hiện đại. Khu vực: Q. Hà Đông, Hà Nội . Tổng diện tích: 94,1 ha Khởi công: 2009 Dự kiến hoàn thành: 2012 Trạng thái dự án: Đang thi công Chủ đầu tư: Công ty cổ phần đầu tư Văn Phú-invest + Căn hộ 95,3m2: 01 Phòng khách, 01 bếp, 01 Phòng ăn, 02 Phòng ngủ, 02 phòng WC. + Căn hộ 116,2 m2: 01 Phòng khách, 01 Phòng bếp, 01 Phòng ăn, 02 Phòng ngủ, 02 Phòng WC. + Căn hộ 117m2: 01 Phòng khách, 01 bếp, 01 Phòng ăn. 03 Phòng ngủ, 02 Phòng WC. Hiện nay tôi đang có các căn tầng 23, 24 với đủ loại S trên. Giá bán cực kỳ hợp lí. Văn bản 2 (Text 2): Bán căn hộ chung cư dự án văn phú victoria- diện tích 95m2 giá 19.7tr DỰ ÁN VĂN PHÚ VICTORIA Dự án nằm giữa khu đô thị Văn Phú, quận Hà Đông, TP.Hà Nội, được tư vấn thiết kế và giám sát bởi các công ty Nhật Bản với phong cách độc đáo, hiện đại. Khu vực: Q. Hà Đông, Hà Nội Loại hình: Chung cư/Căn hộ cao cấp Tổng diện tích: 94,1 ha Khởi công: 2009 52 Dự kiến hoàn thành: 2012 Trạng thái dự án: Đang thi công Chủ đầu tư: Công ty cổ phần đầu tư Văn Phú-invest + Căn hộ 95,3m2: 01 Phòng khách, 01 bếp, 01 Phòng ăn, 02 Phòng ngủ, 02 phòng WC. + Căn hộ 116,2 m2: 01 Phòng khách, 01 Phòng bếp, 01 Phòng ăn, 02 Phòng ngủ, 02 Phòng WC. + Căn hộ 117m2: 01 Phòng khách, 01 bếp, 01 Phòng ăn. 03 Phòng ngủ, 02 Phòng WC.  Độ tương tự giữa hai văn bản: Sim(Text1, Text2) = 0.81338799771947 Hai văn bản trên có khá nhiều từ giống nhau, chúng chỉ khác nhau ở một số chỗ: dòng đầu tiên và dòng cuối cùng trong cả hai văn bản. Các từ ngữ trong câu cuối cùng của văn bản 1 (các từ in nghiêng) không xuất hiện trong văn bản 2. Và độ tương tự tính được theo công thức là 0.81338799771947. Tuy nhiên, ở đây ta cũng cần chú ý đến những trường hợp văn bản là các tài liệu có cùng cấu trúc, cùng khuôn dạng nhất định. Chắc chắn chúng sẽ có nhiều từ giống nhau nhưng về mặt nội dung lại khác nhau, chẳng hạn: Văn bản 1 (Text 1): Khu vực: Đan Phượng, Hà Nội . Tổng diện tích: 80 ha Khởi công: 2007 Dự kiến hoàn thành: 2010 Trạng thái dự án: Đã thi công xong Chủ đầu tư: Công ty TNHH Sơn Hà + Căn hộ 70 m2: 01 Phòng khách, 01 bếp, 02 Phòng ngủ, 01 phòng WC. + Căn hộ 80 m2: 01 Phòng khách, 01 Phòng bếp, 01 Phòng ăn, 02 Phòng ngủ, 01 Phòng WC. Văn bản 2 (Text 2): Khu vực: Hà Đông, Hà Nội . Tổng diện tích: 99 ha Khởi công: 2010 53 Dự kiến hoàn thành: 2012 Trạng thái dự án: Đang thi công Chủ đầu tư: Công ty xây dựng Hà Nhung Căn hộ 100 m2: 01 Phòng khách, 01 Phòng bếp, 01 Phòng ăn, 02 Phòng ngủ, 02 Phòng WC  Độ tương tự giữa hai văn bản: Sim(Text1, Text2) = 0.9442956354090183 Như vậy độ đo này chưa được chính xác bởi vì hai văn bản có nhiều từ giống nhau nhưng trên thực tế lại khác nhau.  Ví dụ 5: Văn bản 1: Lúc 12h55 hôm nay (giờ Hà Nội), tại lễ khai mạc Đại hội Toán học thế giới tổ chức ở Hyderabad, Ấn Độ, bà Pratibha Patil - Tổng thống Ấn Độ đã trao huy chương Fields - giải thưởng cao quý nhất trong lĩnh vực toán học cho GS Ngô Bảo Châu. Văn bản 2: Tại Hyderabad, Ấn Độ, Tổng thống Ấn Độ, bà Pratibha Patil trao huy chương Fields - giải thưởng toán học cao quý nhất thế giới – cho giáo sư Ngô Bảo Châu lúc 12:55 hôm nay (giờ Hà Nội).  Hai văn bản trên khá giống nhau, chúng chỉ khác nhau về thứ tự xuất hiện của các từ trong câu và có một số từ (in nghiêng) xuất hiện trong văn bản 1 mà không có trong văn bản 2. Theo thực nghiệm trên máy: Độ tương tự giữa hai văn bản: Sim(Text1, Text2) = 0.9256739306748865  Ví dụ 6: Văn bản 1 (Text 1): Sáng 28/8, máy bay chở giáo sư Ngô Bảo Châu, người vừa giành giải thưởng Fields dự kiến hạ cánh xuống sân bay Nội Bài. Các hoạt động chào mừng, đón tiếp trọng thị đang được Chính phủ và các bộ gấp rút chuẩn bị. Văn bản 2 (Text 2): Sáng 28/8, phi cơ chở giáo sư Ngô Bảo Châu, người vừa đoạt giải thưởng Fields dự định hạ cánh xuống phi trường Nội Bài. Các hoạt động chào mừng, tiếp đón trọng thị đang được Chính phủ và các bộ gấp rút chuẩn bị. Độ tương tự giữa hai văn bản: Sim(Text1, Text2) = 0.996660325250488 54 Trong ví dụ này, hai văn bản chỉ khác nhau duy nhất hai cặp từ:  Cặp thứ nhất: Văn bản 1 dùng từ “máy bay” còn văn bản 2 dùng từ “phi cơ”.  Cặp thứ hai: Văn bản 1 dùng từ “ đón tiếp” còn văn bản 2 dùng từ “tiếp đón”. Tuy nhiên, đây lại là các cặp từ đồng nghĩa trong tập từ đồng nghĩa “Same Meaning”. Do vậy độ tương tự của chúng là 0.996660325250488 3.4.2. Kết quả thử nghiệm 3.4.2.1. Cách tiến hành Để đánh giá độ tương tự của các tài liệu, chúng tôi sử dụng 2 phương pháp:  Phương pháp 1: Con người đánh giá Tập các tài liệu sẽ được giao cho một nhóm gồm 5 người ở 5 địa điểm khác nhau. Họ có nhiệm vụ đọc nội dung và đánh giá độ tương tự của hai tài liệu bất kỳ dựa trên cảm tính của mình.  Phương pháp 2: Thực nghiệm trên máy. 3.4.2.2. Kết quả thử nghiệm Chúng tôi tiến hành thử nghiệm dựa trên hai tập dữ liệu: tập các văn bản là các tin tức trên Internet và tập các tin rao vặt trên Internet.  Tập dữ liệu 1: Tập gồm 20 văn bản gồm các tin tức trên một số trang Web: Địa chỉ của các tài liệu này như sau: File Địa chỉ 1 cao/11186417/218/ 2 3 toan-bo-noi-dung-cao-trang.htm 4 5 6 Ngoc-Sy-nhan-hoi-lo-tien-ti.html 7 trang-hoan-toan-khong-dung/201010/115255.datviet 55 8 1341775005/ong_si_lien_tiep_khang_dinh_khong_nhan_hoi_lo_t u_pci.html 9 nhan-hoi-lo.htm 10 chung-than.htm 11 12 13 14 dien-de-ket-an-toi/11186642/218/ 15 16 voi-de-nghi-tu-chung-than-cua-vks.htm 17 si-bi-de-nghi-tu-chung-than.htm 18 tu-chung-than.htm 19 cao-trang.htm 20 con-bi-dieu-tra-bo-tui-2-trieu-USD/11186794/218/ Bảng 4: Địa chỉ của 20 tin tức trên một số trang Web Chẳng hạn ta có kết quả đánh giá độ tương tự ngữ nghĩa của hai file nào đó trong tổng số các tài liệu có địa chỉ được nêu ở trên như sau: File 1 File 2 Người đánh giá Thực nghiệm trên máy 13 15 0.4 0.21854826011617284 2 4 0.4 0.24008952428716562 13 17 0.3 0.29548872180126395 3 8 0.2 0.3297415587214319 6 8 0.4 0.364800386307795 4 7 0.5 0.39024157344076293 1 7 0.4 0.4247928748969288 1 6 0.5 0.4621222286840157 56 13 19 0.6 0.500689564972599 10 19 0.6 0.5501094543011812 10 15 0.7 0.5768032097459137 3 9 0.7 0.5912167395883572 15 16 0.7 0.6367496647525064 4 5 0.8 0.6504860662096876 15 18 0.6 0.6749330889903177 3 7 0.6 0.702918830317079 6 7 0.6 0.7650383060856087 16 18 0.9 0.863923370318344 1 2 0.9 0.9279451135471808 13 20 0.9 0.9523695076604557 11 14 1.0 0.9706441434356016 Bảng 5: Một số kết quả độ tương tự của hai file bất kỳ Kết quả độ tương tự của 20 tin tức trên như sau: Độ tương tự Người đánh giá Thực nghiệm trên máy 0.0-0.3 7,1% 8% 0.3-0.5 50% 56% 0.5-0.7 32,5% 30% 0.7-0.8 4% 2% 0.8-1.0 6,4% 4% Bảng 6: Kết quả đánh giá 20 tin tức do người và máy thực hiện  Tập gồm 30 tin rao vặt trên một số trang web: File Đường dẫn 30 cccc-du-a-n-van-phu-victoria.html 31 mat-san-chung-cu-victoria-van-phu-gia-hop-ly-d.html 32 chung-cu-van-phu-victoria-ha-dong.html 33 can-ho-chung-cu-victoria-van-phu-du-an-van-phu.html 34 can-ho-chung-cu-du-an-van-phu-victoria-dien-ti.html 35 57 phu-victoria-chung-cu-van-phu-victoria-can-ho-.html 36 mat-san-chung-cu-victoria-van-phu-gia-hop-ly-d.html 37 chcc-van-phu-toa-v1-gia-hap-dan.html 38 ban-mot-so-can-ho-chung-cu-van-phu-gia-chi-19-.html 39 ban-mot-so-can-ho-chung-cu-van-phu-victoria.html 40 san-victoria-van-phu-pm-gap-de-co-xuat-vip.html 41 san-victoria-van-phu-pm-gap-de-co-xuat-vip.html 42 san-victoria-van-phu-pm-som-de-co-suat-vip.html 43 chung-cu-van-phu.html 44 chcc-the-van-phu-victoria-dt-95-112-114-116m2.html 45 chcc-the-van-phu-victoria-dt-95-112-114-116m2.html 46 chcc-the-van-phu-victoria-dt-95-112-114-116m2.html 47 the-van-phu-victoria-dt-95-112-114-116m2.html 48 ban-chcc-cao-cap-van-phu-victoria.html 49 can-ho-toa-v1-tang-25-van-phu-victoria-gia-hap.html 31.2 chung-cu-victoria-van-phu-gia-hop-ly-de-dau-tu.html 31.3 Victoria-Van-Phu-gia-hop-ly-de-dau-tu/ 31.4 Victoria-Van-Phu-gia-hop-ly-de-dau-tu-.aspx 58 31.1 mat-san-chung-cu-victoria-van-phu-gia-dau-tu-hop-ly.html 45.2 san/426918-chung-cu-victoria-van-phu-ban-chung-cu-victoria- van-phu-gia-tan-goc.html 31.5 hop-ly-de-dau-tu_nhadat_453099.html 45.4 phu-victoria-hop-dong-mua-ban-ky-truc-tiep-voi-chu-dau-tu-van- phu.html 31.6 can-ho-chung-cu-van-phu-victoria-mat-duong-le-trong-tan-ha- dong.html 34.2 LH-0943212996_ct_315_329_49304.html 45.5 dong-ha-noi_239487.html Bảng 7 : Địa chỉ của 30 tin rao vặt trên các trang Web Chẳng hạn, ta có kết quả đánh giá độ tương tự ngữ nghĩa của hai file nào đó trong tổng số các tài liệu có địa chỉ được nêu ở trên như sau: File 1 File 2 Người đánh giá Thực nghiệm trên máy 30 31 0.2 0.1803928043669246 30 32 0.3 0.22729548824950685 32 45 0.4 0.30131825570777804 31 35 0.5 0.39584680154364466 32 41 0.4 0.35723495843515396 35 40 0.5 0.41281163798540266 33 49 0.5 0.4068277476149962 35 44 0.5 0.46324307697851314 31 31.1 0.7 0.5434409876505986 31 32 0.7 0.5648842497068653 31 49 0.7 0.5986671401506345 31.2 31.4 0.8 0.7218152893172625 34 34.2 0.8 0.730738545382498 31 31.3 0.8 0.7524554191092057 59 31.4 31.5 0.7 0.7678131794193516 31 31.5 0.7 0.7709166198966455 45.2 45.5 0.9 0.816320701810267 45 45.5 0.8 0.8269217971769109 31 31.2 0.8 0.8363616108745437 31 36 0.9 0.8442095726950841 31 31.4 0.9 0.8820081596174592 47 48 0.9 0.9136847762796279 46 48 0.9 0.9305040433572069 31.2 31.5 0.9 0.9513246926537497 31.3 31.5 0.9 0.9763033925759392 41 42 0.9 0.9747493335469556 40 42 0.9 0.9747493335469556 40 41 1.0 1.0 45 46 1.0 1.0 Bảng 8: Một số kết quả độ tương tự của hai tin rao vặt bất kỳ Kết quả độ tương tự của 30 tin rao vặt trên như sau: Độ tương tự Người đánh giá Thực nghiệm trên máy 0.0-0.3 52,3% 49,6% 0.3-0.5 30% 34,6% 0.5-0.7 4,4% 3,8% 0.7-0.8 3,1% 3,8% 0.8-1.0 10,2% 8,2% Bảng 9: Kết quả đánh giá 30 tin rao vặt do người và máy thực hiện 3.4.3. Đánh giá Sau khi tiến hành thử nghiệm chương trình trên một số ví dụ cụ thể, chúng tôi có một số nhận xét sau:  Trường hợp 1: Độ tương tự là rất lớn, hai văn bản giống nhau tương đối nhiều.  Trường hợp 2: Độ tương tự là cực nhỏ, hai văn bản khác nhau hoàn toàn.  Trường hợp 3: Hai văn bản có độ tương tự tương đối thấp, phần lớn sẽ khác nhau.  Trường hợp 4: Độ tương tự cũng rất lớn nếu hai văn bản không hoàn toàn giống nhau nhưng có nhiều cặp từ tương đồng với nhau về nghĩa. 60 Chương trình chạy có hiệu quả hơn với những cặp văn bản hoặc là giống nhau nhiều, hoặc là khác nhau nhiều. Tuy nhiên, vẫn còn nhiều trường hợp chương trình cho kết quả không được chính xác, chẳng hạn:  Trường hợp 1: Xét hai đoạn văn ngắn sau:  Văn bản 1(Text 1): Nó bảo sao cậu không đến?  Văn bản 2 (Text 2): Nó đến sao cậu không bảo?  Kết quả: Sim(text1,text2) = 1.0 Hai văn bản trên có các từ giống nhau hoàn toàn nhưng thứ tự từ bị đảo lộn. Ở văn bản thứ nhất, động từ chính là “bảo”, còn ở văn bản thứ hai, động từ chính là “đến”. Xét về mặt ý nghĩa của ngôn ngữ tiếng Việt, hai văn bản này khác nhau nhưng chương trình vẫn cho độ tương tự bằng 1.0. Đây chính là điều luận văn chưa làm được. Chương trình tính được độ tương tự giữa hai văn bản, tuy nhiên lại chưa xét đến cấu trúc của từ, câu, từ loại của từ,…  Trường hợp 2: Xét hai đoạn văn ngắn sau:  Văn bản 1(Text 1): Tôi sở hữu một loài gia cầm.  Văn bản 2 (Text 2): Tôi có một con gà.  Kết quả: Sim(text1, text2) = 0.1297 Hai văn bản trên có mối quan hệ với nhau, đó là quan hệ giữa cái cụ thể và cái trừu tượng. Xét về mặt phương pháp, chương trình hoàn toàn có thể tính được độ tương đồng giữa hai văn bản này dựa vào mối quan hệ giữa từ “sở hữu” với từ “có”, giữa từ “gia cầm” với từ “con gà”. Tuy nhiên, kết quả thu được lại khá thấp: Sim(text1, text2) = 0.1297. Nguyên nhân là do các cặp từ này chưa có trong tập từ đồng nghĩa “Same Meaning”. 61 KẾT LUẬN Độ đo độ tương tự văn bản nếu tính chính xác thì đó sẽ là một độ đo tốt để xác minh việc sao chép tài liệu, hơn nữa nó còn có thể áp dụng cho hệ thống tìm kiếm thông tin,…Lí do là hiện nay các nguồn tài liệu trên Internet là quá nhiều, việc nội dung của các loại tin tức bị trùng lặp là điều không thể tránh khỏi. Trong luận văn này, tôi đã nghiên cứu, tìm hiều một bài toán cụ thể trong thực tế là tính toán độ tương tự ngữ nghĩa văn bản dựa vào độ tương tự giữa từ với từ. Luận văn đã đạt được những yêu cầu ban đầu đề ra trong việc nghiên cứu, tìm hiều về bài toán. Những nội dung công việc đã đạt được:  Tìm hiều về khái niệm độ tương tự, độ tương tự về mặt ngữ nghĩa.  Nghiên cứu các phương pháp tách từ trong văn bản, cài đặt thành công việc tách từ dựa vào từ điển có sẵn.  Tìm hiều các cách tính độ tương tự giữa từ với từ (dựa trên cơ sở tri thức và dựa trên kho ngữ liệu).  Trên cơ sở tính toán độ tương tự từ-từ, luận văn đã xây dựng được hệ thống tính độ tương tự giữa hai tệp văn bản và nội dung của hai trang web trên các site VnExpress.net, Dantri.com Mặc dù về cơ bản ứng dụng đã đạt được yêu cầu và đã tìm hiểu được các vấn đề ban đầu đặt ra của luận văn nhưng do thời gian có hạn nên hệ thống chỉ dừng lại ở việc tính độ tương tự văn bản dựa trên độ tương tự từ-từ đơn giản mà chưa xét đến từ loại của từ, thứ tự từ trong câu. Hơn nữa, tập các từ trong kho ngữ liệu còn hạn chế, số lượng các từ đồng nghĩa còn ít,… Hệ thống xây dựng được ở đây có thể được sử dụng trong việc học tập, nghiên cứu cho sinh viên cũng như các giáo viên có nhu cầu. 62 HƯỚNG PHÁT TRIỂN  Chương trình được xây dựng vận hành tương đối tốt nhưng còn nhiều hạn chế, cần tiếp tục hiệu chỉnh để chương trình chạy tốt hơn.  Tiếng Việt khá phong phú nên cần xây dựng kho ngữ liệu và tập từ đồng nghĩa lớn hơn.  Một số vấn đề kỹ thuật về phân tích cú pháp, gán nhãn từ loại hay thứ tự từ trong câu,… cần được nghiên cứu, hoàn thiện để nâng cao kết quả tính toán. 63 TÀI LIỆU THAM KHẢO Tiếng Việt 1. Nguyễn Thanh Hùng, Hướng tiếp cận mới trong việc tách từ để phân loại văn bản tiếng Việt sử dụng giải thuật di truyền và thống kê trên Internet. 2. Trần Cao Đệ, Đo độ tương tự ngữ nghĩa tiềm ẩn để phát hiện việc sao chép tài liệu 3. Đỗ Phúc, Đỗ Hoàng Cường, Nguyễn Tri Tuấn, Huỳnh Thụy Bảo Trân, Nguyễn Văn Khiết, Nguyễn Việt Hoàng, Nguyễn Việt Thành, Phạm Phú Hội, Dương Ngọc Long Nam, Nguyễn Phước Thanh Hải, Phát triển một hệ thống S.E hỗ trợ tìm kiếm thông tin, thuộc lãnh vực CNTT trên Internet qua từ khóa bằng tiếng Việt. Tiếng Anh 4. Rada Mihalcea, Courtey Corley, Carlo Strapparava, Corpus-based and Knowledge- based Measures of Text Semantic Similarity, in Proceedings of the American Association for Artificial Intelligence (AAAI 2006), Boston, July 2006. 5. Michael Mohler and Rada Mihalcea, Text-to-text Semantic Similarity for Automatic Short Answer Grading, in Proceedings of the European Chapter of the Association for Computational Linguistics (EACL 2009), Athens, Greece, March 2009. 6. Rada Mihalcea, Word Sense Disambiguation, Encyclopedia of Machine Learning, Springer, 2007. 7. Ravi Sinha and Rada Mihalcea, Unsupervised Graph-based Word Sense Disambiguation Using Measures of Word Semantic Similarity, in Proceedings of the IEEE Internation Conference on Semantic Computing (ICSC 2007), Irvine, CA, September 2007. 8. Courtney Corley, Andras Csomai and Rada Mihalcea, A knowledge-based Approach to Text-to-Text Similarity, book chapter in Current Issues in Linguistic Theory: Recent Advances in Natural Language Processing, Editors Nicolas Nicoloev and Ruslan Mitkov, John Benjamins Publishers, 2006. 9. Courtney Corley and Rada Mihalcea, Measures of Text Semantic Similarity, in Proceedings of the ACL workshop on Empirical Modeling of Semantic Equivalence, An Arbor, MI, June 2005. 10. Lei Shi and Rada Mihalcea, An Algorithm for Open Text Semantic Parsing, in Proceedings of the ROMAND 2004 workshop on “Robust Methods in Analysis of Natural language Data”, Geneva, Switzerland, August 2004. 64 11. Dekang Lin, An Information-Theoretic Definition of Similarity. 12. Peter D.Turney, Mining The Web for Synonyms: PMI-IR versus LSA on TOEFL. Internet 13. 14. 15. 16. 17. 18. 19. 20.

Các file đính kèm theo tài liệu này:

  • pdfLUẬN VĂN-TÍNH TOÁN ĐỘ TƯƠNG TỰ NGỮ NGHĨA VĂN BẢN DỰA VÀO ĐỘ TƯƠNG TỰ GIỮA TỪ VỚI TỪ.pdf