Độ đ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.
69 trang |
Chia sẻ: lylyngoc | Lượt xem: 3206 | Lượt tải: 4
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:
- 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Ừ.pdf