2.2.4.1. Khái quát về phát hiện trùng lặp gần nhau
Nội dung web được cung cấp bởi nhiều nguồn khác nhau do cùng một thông tin có thể được đưa lên nhiều lần trên nhiều trang web, nhiều tài liệu thu được từ
web có thể giống nhau hoàn toàn hoặc một phần lớn. Ta cần lựa chọn một cách hiệu quả để phát hiện và loại bỏ các tài liệu giống nhau để tránh xử lý lặp lặp lại trong các bước sau này. Đây chính là bài toán phát hiện trùng lặp gần nhau của các tài liệu.
Cơ sở của cách tiếp cận được sử dụng ở đây là một cơ chế cho việc phát hiện khi hai tài liệu là “xấp xỉ giống nhau”, có nghĩa là phát hiện khi chúng có cùng nội dung ngoại trừ các sửa đổi nhưđịnh dạng, sửa chữa nhỏ… Tương tự, cách tiếp cận này có thể khám phá tài liệu là “xấp xỉđược chứa” trong các tài liệu khác.
Vấn đề trùng lặp xuất hiện theo hai cách: Thứ nhất, đó là các tài liệu mà
được tìm tại nhiều nơi trong nhiều định dạng giống nhau. Ví dụ như:
• Các tài liệu trực tuyến trên các mục phổ biến.
• Các văn bản pháp luật.
Thứ hai, đó là các tài liệu mà được tìm thấy hầu hết giống hệt nhau bởi vì chúng:
• Các phiên bản khác nhau của cùng một tài liệu.
• Cùng một tài liệu với các định dạng khác nhau.
• Cùng một tài liệu với các các trang web liên kết khác nhau.
• Được kết hợp với các nguồn tài liệu khác để hình thành tài liệu lớn hơn.
29
• Tách thành các tài liệu nhỏ hơn.
2.2.4.2. Sự giống nhau và chứa nhau của các tài liệu
Theo A.Z.Broder (1997) [34] độ đo giống nhau (resemblance) của hai tài liệu A và B là một số trong khoảng (0,1), khi độ đo giống nhau gần 1có nghĩa là hai tài liệu là “xấp xỉ giống nhau”. Tương tự, độ đo chứa nhau (containment) của A
trong B là số trong khoảng (0,1), khi gần 1 thì có nghĩa rằng A là “xấp xỉ chứa ” trong B. Mỗi tài liệu (D) được coi như một dãy tuần tự các từ, bắt đầu bằng mỗi từ, tài liệu được phân tích thành các chuỗi con của các từ liền kề nhau được chuẩn hóa7, mỗi chuỗi con đó gọi là ván lợp (shingle). Gọi S(D,w) là tập tất cả các shingle có kích thước w (w-shingle) được chứa trong D. Ví dụ, 4-shingle của “ a, rose, is, a, rose, is, a, rose ” là một tập { (a, rose, is, a), (rose, is, a, rose), (is, a, rose, is)}
Khi đó, độđo sự giống nhau r của hai tài liệu A và Bđược định nghĩa [34]:
) , ( ) , ( ) , ( ) , ( ) , ( w B S w A S w B S w A S B A r ∪ ∩ = (2.1) Với |A| là kích thước của tập A
Độđo chứa nhau c của A trong Bđược định nghĩa [34]:
) , ( ) , ( ) , ( ) , ( w A S w B S w A S B A c ∩ = (2.2)
Do độ đo sự giống nhau là một số trong khoảng (0,1), và nó luôn luôn đúng với r(A,A)=1, nghĩa là một tài liệu là giống chính nó 100%. Tương tự như vậy, độ đo chứa nhau là một số trong (0,1) và nếu A ⊆B thì c(A,B)=1.
Chú ý rằng sự giống nhau là không có tính bắc cầu, ví dụ phiên bản liên tiếp của tài liệu cũng có thể “xấp xỉ giống nhau”, nhưng phiên bản 100 có thể khá khác với phiên bản 1.
Sự không giống nhau được định nghĩa [34]: ) , ( 1 ) , (AB r AB d = − (2.3)
30
2.2.4.3. Thuật toán
1. Lấy mọi tài liệu cần được xử lý.
2. Tính toán các bản phác thảo cho mỗi tài liệu.
3. So sánh các phác thảo cho mỗi cặp tài liệu để xem nếu chúng vượt quá ngưỡng của sự giống nhau thì hai tài liệu đó là giống nhau.
Thuật toán này là khá đơn giản, không thực tế. Độ lớn của dữ liệu đầu vào áp
đặt nhiều hạn chế thiết kế về cấu trúc dữ liệu và thuật toán. A. Z. Broder [34] chỉ ra rằng một bít mỗi tài liệu trong một cấu trúc dữ liệu yêu cầu 4 MB. Kích thước một bản phác thảo 800 bytes trong mỗi tài liệu yêu cầu 24 GB. Điều này là không khả
thi.
Bởi thế, Broder đã cải tiến sử dụng một cách tiếp cận duy nhất, đơn giản cho xử lý rất nhiều dữ liệu là phân chia, tính toán, hợp nhất. Chia dữ liệu thành các mảnh, tính toán mỗi mảnh tách biệt và sau đó hợp nhất các kết quả. Kích thước của mỗi mảnh là m mà tính toán có thể được thực hiện hoàn toàn trong bộ nhớ. Hợp nhất các kết quả là đơn giản, nhưng tiêu tốn thời gian xử lý do yêu cầu vào/ra. Mỗi lần hoàn thành việc hợp nhất là tuyến tính, với độ phức tạp tính toán là O(log(n/m)), vì thếđộ phức tạp tính toán của toàn bộ tiến trình là O(n log(n/m)).
Thuật toán phát hiện trùng lặp gần nhau của Broder được thực hiện qua 4 bước:
Bước 1.Tính một bản phác thảo cho mỗi tài liệu. Bước này là tuyến tính theo tổng độ dài của tài liệu.
Bước 2.Tạo một danh sách tất cả các shingle và các tài liệu chứa các shingle
đó, được sắp xếp theo giá trị shingle. Để làm được điều này, các bản phác thảo cho mỗi tài liệu là được mở rộng thành một danh sách cặp đôi của <shingle, document ID>, sắp xếp danh sách này sử dụng cách tiếp cận chia, sắp xếp, hợp nhất như phác thảo ở trên.
Bước 3.Tạo ra một danh sách tất cả các cặp đôi tài liệu mà chung một số
31
Broder lấy các tệp đã được sắp xếp theo cặp đôi <shingle, ID> và mở rộng nó thành một danh sách bộ ba của <ID, ID, số lượng của các shingle chung> bằng cách lấy mỗi shingle mà xuất hiện trong nhiều tài liệu và tạo ra các tập bộ ba đầy đủ của <ID,ID,1> cho shingle. Sau đó áp dụng thủ tục chia, sắp xếp, hợp nhất (thêm số đếm cho phù hợp với cặp ID-ID) để tạo ra một tập tin duy nhất của tất cả bộ ba <ID,ID,count> được sắp xếp bởi ID của tài liệu đầu tiên. Pha này yêu cầu số lượng lớn không gian đĩa bởi vì mở rộng ban đầu của bộ ba ID tài liệu là bình phương của số shingle chung của các tài liệu và khởi tạo bộ ba với sốđếm là 1.
Bước 4.Tạo ra cụm đầy đủ bằng cách xem xét mỗi bộ ba <ID, ID, count> và quyết định nếu cặp tài liệu vượt qua ngưỡng, một ngưỡng nào đó cho sự giống nhau. Nếu vượt qua, chúng ta xác định được hai tài liệu giống nhau và loại bỏ
chúng.
Trong luận án, sử dụng công cụ modul Text::DeDuper [122] viết bằng Perl
để phát hiện tài liệu gần trùng lặp nhau. Modul này sử dụng độ đo độ giống nhau như đề xuất của Broder và cộng sự (1997)[34] để phát hiện các tài liệu tương tự
nhau dựa vào văn bản trong đó, gần đây công cụ này đã được A.Kilgarriff [25, 27] sử dụng trong việc xây dựng kho ngữ liệu. Đây là nhiệm vụ cần nhiều bộ nhớ, cần sinh mô hình n-gram (n = 5) cho mỗi tài liệu và đo độ tương tự (ngưỡng = 0.2) giữa 2 tài liệu dựa trên số n-gram giao nhau của chúng. Do kích thước bộ nhớ trong là hạn chế và chỉ có thể chứa một số hữu hạn các tệp nên việc phát hiện trùng lặp được thực hiện bằng cách tiếp cận dùng cửa sổ trượt. Trước tiên, tất cả các tệp sẽ được sắp xếp theo kích cỡ và lưu tên tệp vào một danh sách. Mỗi lần lặp, DeDuper xác
định được một số cố định (500) các tệp không trùng nhau trong danh sách (duyệt tuần tự trên các tệp đã được sắp xếp theo kích cỡ) mà mô hình n-gram của chúng có thể vừa với bộ nhớ. Với tất cả các tệp còn lại trong danh sách, so sánh từng tệp với các n-gram của các tệp không trùng lặp trên để xác định chúng có trùng lặp hay không, nếu có thì loại bỏ. Quá trình này được lặp cho tới khi tất cả các tệp được xử
32