Các thuật toán quan trọng trong bài toán “Phát hiện cộng đồng”

Một phần của tài liệu Nghiên cứu bài toán phân tích mạng xã hội (Trang 48 - 58)

CHƯƠNG 2 : BÀI TỐN PHÂN TÍCH MẠNG XÃ HỘI

2.3. Bài toán phát hiện cộng đồng trong mạng xã hội

2.3.3. Các thuật toán quan trọng trong bài toán “Phát hiện cộng đồng”

Thuật toán Leiden là thuật toán được phát triển từ thuật toán Louvain. Đây là thuật toán được xây dựng dựa trên phương pháp tối ưu modularity. Việc tối ưu modularity này giúp ta có thể xác định được cộng đồng được phân chia tốt nhất trong mạng.

2.3.3.1. Modularity

Modularity là một thước đo trong mạng hoặc đồ thị. Chỉ số này dùng để đo độ mạnh của việc phân chia mạng thành các cộng đồng khác nhau.

Mạng có chỉ số modularity cao được hiểu là kết nối giữa các nút trong cộng đồng dày đặc đồng thời kết nối giữa các cộng đồng khác nhau sẽ thưa thớt. Modularity thường được sử dụng trong các phương pháp tối ưu hóa để phát hiện cấu trúc cộng đồng trong mạng. Giá trị của modularity cho đồ thị khơng có trọng số và vơ hướng nằm trong phạm vi [-1, 1] [40].

38 Có nhiều phương pháp phổ biến tính modularity [49]. Trong đó, bảo tồn bậc của mỗi đỉnh được xem xét nhiều nhất.

Ví dụ, ta xét mạng G (V, E) với n nút và m cạnh. Ta thêm một biến

cộng đồng s để mạng thành hai cộng đồng.

Khi đó, nếu nút v thuộc cộng đồng 1 thì sv = 1; nếu nút v thuộc cộng đồng 2 thì sv = -1.

Ma trận kề trong mạng được kí hiệu là A và biểu diễn như sau: Avw =

0 nếu khơng có cạnh giữa hai nút v và w; Avw = 1 nếu có cạnh giữa hai nút.

Ta xét trường hợp đơn giản nhất trên mạng vô hướng Avw = Awv. Modularity Q được định nghĩa là phần nhỏ của các cạnh trong nhóm 1 hoặc nhóm 2 trừ đi số cạnh dự kiến trong nhóm 1 và nhóm 2 cho đồ thị ngẫu nhiên có cùng phân bố bậc của nút như mạng đã cho.

Cơng thức tính modularity tổng qt như sau:

ij , ( , ) 1 2 2 i j i i j j k k Q m c A m   c =  −     Trong đó:

Aij biểu diễn trọng số của hai đỉnh i và j

ij

i j

k = A là tổng trọng số của các cạnh được gắn với đỉnh i

hay gọi là bậc của i

i

c là cộng đồng của đỉnh i

δ(u, v) bằng 1 nếu u = v và bằng 0 nếu trường hợp còn lại m là số cạnh trong mạng

39

Hình 2.10. Hình ảnh ví dụ tính tốn mơ đun mạng

Theo định nghĩa ma trận kề trước đó, ma trên kề của ví dụ mạng theo hình 15 như sau: Bảng 2.1. Ma trận kề của đồ thị 1 2 3 4 5 1 0 1 1 0 0 2 1 0 0 0 1 3 1 0 0 1 0 4 0 0 1 0 1 5 0 1 0 1 0

Ta xét 2 phân vùng như sau:

Phân vùng 1 gồm các nút 1, 3, 4. Phân vùng 2 gồm các nút 2, 5. Số liên kết trong đồ thị là m =5.

ki, kj là bậc của các nút tương ứng

d(x, y) = 1 nếu chúng cùng một phân vùng và bằng 0 trong trường

hợp còn lại.

40 1 2*2 2*2 2*2 2*2 2*2 [ 0 *1 1 *0 0 *1 0 *0 1 *1] 2*5 2*5 2*5 2*5 2*5 2*5 Q=  −  + −  + −  + −  + −                       

Tính trên tồn bộ ma trận kề, ta được:

1 2 2 4 7*(0 ) 6*(1 ) 0.08 10 5 5 50 Q=  − + − = =    

Modularity là hàm được dùng để so sánh các phân vùng với nhau, đồng thời cũng là một hàm mục tiêu để tối ưu.

Tuy nhiên, trên thực tế, việc tối ưu modularity một cách chính xác rất khó và vì vậy, những thuật tốn xấp xỉ là cần thiết khi xử lý mạng lớn.

2.3.3.2. Thuật toán Louvain

a. Thuật tốn Louvain cho mạng vơ hướng

Thuật toán Louvain là một thuật tốn tối đa hóa modularity theo phương pháp tham lam và được biết đến là một trong những thuật toán phát hiện cộng đồng nhanh nhất và hiệu quả nhất.

Như đã nói ở phần trên, trên mạng lớn, Clauset và cộng sự [41] đã đưa ra phương pháp tính xấp xỉ nhanh để tối ưu hóa modularity. Phương pháp này giúp hợp nhất những cộng đồng thường xuyên để tối ưu hóa modularity.

Theo Vincent D. Blondel và cộng sự [42], phương pháp này có khuyết điểm

là tạo ra giá trị thấp hơn đáng kể so với những phương pháp khác, ví dụ như ủ mơ phỏng (simulated annealing). Ngồi ra, phương pháp đề xuất này có xu hướng tạo ra các siêu cộng đồng chứa phần lớn các nút trong mạng.

Do đó, Blondel và cộng sự [42] đã đề xuất thuật toán Louvain nhằm

khắc phục những vấn đề trên.

Thuật toán Louvain được chia làm hai giai đoạn lặp đi lặp lại.

Đầu tiên, ta chỉ định cộng đồng cho mỗi nút mạng. Sau đó, với mỗi nút i, ta xem xét các lân cận j của i và đánh giá tính modularity bằng cách xóa i khỏi cộng đồng của nó và thêm vào cộng đồng của j. Đỉnh i sẽ xác định

41 trong cộng đồng với độ đo thông tin thay đổi tốt hơn. Trường hợp độ đo thông tin không thay đổi tốt hơn, i vẫn thuộc vào cộng đồng ban đầu.

Qúa trình này được áp dụng tuần tự và liên tục cho tất cả các nút cho đến khi tham số modularity đạt cực đại.

Cơng thức tính ∆Q là độ lợi của modularity như sau:

∆ 2 2 2 , 2 2 2 2 2 i in i in k tot k in tot ki Q m m m m m  +  +             = −  − −  −                    Trong đó

in là tổng trọng số các liên kết tới nút trong C

ki là tổng các liên kết tới i hay gọi là bậc của i ki,in là tổng các liên kết từ i đến các nút trong C m là tổng tất cả các liên kết trong mạng

Thực tế, công thức trên được viết lại bởi E. Lefebvre [31], một trong những tác giả như sau:

∆ 2 . 2 2 C i i tot d d Q m m = − Trong đó: C i d là bậc của nút i trong cộng đồng C tot  là tổng số cạnh trong C i d là bậc của i mlà số cạnh trong G

Giai đoạn thứ hai của thuật toán là xây dựng một mạng mới với các nút trong cộng đồng sau khi được tìm thấy ở giai đoạn 1. Các cạnh nội bộ của cộng đồng được thu gọn thành một nút khổng lồ duy nhất và trọng số là tổng trọng số của tất cả các cạnh của cộng đồng nội bộ trong cộng đồng. Nhiều cạnh giữa hai cộng đồng được thu gọn thành một cạnh duy nhất và trọng số là tổng các cạnh giữa chúng.

42

Hình 2.11. Hình ảnh mơ tả cho hai giai đoạn của thuật tốn. Đầu tiên tối ưu hóa mơ đun và các cộng đồng được tìm thấy được tổng hợp thành một mạng

Lưu ý, thuật toán này phụ thuộc vào thứ tự các nút được xem xét. Theo tác giả, thứ tự khơng ảnh hưởng tới kết quả thuật tốn nhiều nhưng ảnh hưởng lớn tới thời gian chạy của thuật tốn.

b. Thuật tốn Louvain cho mạng có hướng

Ban đầu, thuật toán Louvain được xây dựng cho đồ thị khơng hướng.

Sau đó, Leicht và Newman [43] đã điều chỉnh khái niệm modularity cho đồ

thị có hướng. Cụ thể như sau: nếu hai đỉnh u và v có bậc vào nhỏ và bậc ra lớn, thì có một cung từ v đến u nên được coi là trọng hơn so với cung từ u

đến v. Khi đó, định nghĩa modularity mạng có hướng của một phân vùng của mạng có hướng có thể dễ dàng xây dựng như sau:

, 1 ( , ) in out i j d ij i j i j d d Q A c c mm  =  −       Trong đó:

Aij đại diện cho cung giữa i và j in

i

d (hoặc out j

d ) là viết tắt của bậc vào hoặc bậc ra Hàm ∆Q được viết lại như sau:

43 ∆ 2 . in . out out in C i i i d tot d tot d Q m m  +    = −       Trong đó in tot  (hoặc out tot

 ) là số cung vào (ra) xảy đến trong cộng

đồng C [33].

Các nút sẽ được ghép vào cộng đồng mới nếu độ đo thông tin sau khi ghép lớn hơn độ đo thông tin ban đầu.

c. Nhược điểm của thuật toán Louvain

Thuật toán Louvain là thuật toán với ý tưởng đơn giản để phát hiện cộng đồng. Tuy nhiên, nó có một điểm yếu đó là nó có thể mang lại những cộng đồng liên thơng yếu tùy ý. Thậm chí, trường hợp xấu nhất, cộng đồng có thể bị ngắt kết nối.

Trong thuật tốn Louvain, việc di chuyển một nút đóng vai trị là cầu nối giữa hai thành phần trong một cộng đồng sang một cộng đồng mới có thể ngắt kết nối cộng đồng cũ. Điều này sẽ không thành vấn đề nếu cộng đồng cũ đang bị chia tách.

Các bước thực hiện của thuật toán Louvain cụ thể như hình 23. Trong hình 23a, thuật tốn Louvain bắt đầu từ việc gán mỗi nút thành một cộng đồng riêng của nó. Bước hai thuật tốn di chuyển các nút riêng lẻ từ cộng đồng này sang cộng đồng khác để phân vùng (hình 23b). Trong hình 23c, dựa trên phân vùng này, một mạng tổng hợp được tạo ra. Thuật tốn Louvain sau đó di chuyển các nút riêng lẻ trong mạng tổng hợp trong hình 23d. Các bước này được lặp lại cho đến khi chất lượng không thể tăng thêm nữa.

Nhưng theo Traag và cộng sự [44], điều này sẽ không xảy ra. Các nút khác trong cộng đồng cũ cho phép nó duy trì như một cộng đồng duy nhất do các kết nối giữa chúng mạnh mẽ.

44

Hình 2.12. Chi tiết thuật tốn Louvain[44]

Đầu tiên, ta tìm hiểu về cộng đồng liên thông yếu. Theo nghiên cứu của VA.Tragg và cộng sự [44] dựa trên thực nghiệm, tác giả thấy rằng với thuật toán Louvain, rất nhiều cộng đồng được tìm thấy là cộng đồng liên thơng yếu, thậm chí là khơng liên thơng. Điều này thường xun xảy ra trong thực tế. Và ngay cả khi lặp lại thuật toán, điều này xảy ra trầm trọng hơn.

Ở hình 24, cạnh dày hơn biểu diễn những liên kết mạnh, còn cạnh mỏng là những liên kết yếu. Khi chạy Louvain, cấu trúc cộng đồng được thể hiện trong hình 24 (a). Các nút 0 tối nút 6 đều nằm cùng một cộng đồng. Các nút 1 tới nút 6 chỉ kết nối trong cộng đồng này trong khi nút 0 kết nối với cộng đồng khác nữa. Thuật tốn tiếp tục di chuyển các phần cịn lại trong mạng.

45 Khi các yếu tố hội tụ đầy đủ để nút 0 có thể di chuyển sang cộng đồng mới, ta có như hình 24(b). Trong tình huống này, các nút 2,3,5,6 chỉ có kết nối nội bộ. Do đó, nút này được chỉ định tối ưu cho cộng đồng hiện tại của chúng. Mặt khác, nút 0 di chuyển thì nút 1 và 4 khơng chỉ kết nối nội bộ mà kết nối với cộng đồng bên ngoài. Tuy nhiên, tùy thuộc vào độ mạnh tương đối của các kết nối khác nhau, những nút vẫn có thể được chỉ định được tối ưu với một cộng đồng nào khác. Trong trường hợp này, nút 1 tới nút 6 đều được chỉ định tối ưu trên phân vùng đã cho, nhưng thực tế chúng lại không phải thành phần liên thông. Rõ ràng sẽ tốt hơn nếu ta chia cộng đồng ra. Nút 1, 2, 3 là một cộng đồng, nút 4, 5, 6 là một cộng đồng khác. Nhưng thuật tốn Louvain khơng xem xét trường hợp này, nó chỉ xem xét các di chuyển của từng nút riêng lẻ. Và khi khơng cịn nút nào có thể di chuyển được nữa, thuật toán sẽ tổng hợp nút lại. Cộng đồng không liên thông sẽ được tổng hợp lại thành một nút và khơng có khả năng chia tách nữa. Do đó, cộng đồng sẽ là cộng đồng khơng liên thơng trừ khi nó được hợp nhất với một cộng đồng khác làm cầu nối.

Một vấn đề khác được tác giả đề cập tới là giới hạn độ phân giải của modularity có thể khiến các cộng đồng nhỏ hơn được nhóm lại thành những cộng đồng lớn hơn. Điều đó có thể làm ẩn những cộng đồng nhỏ có thể chứa cấu trúc quan trọng.

2.3.3.3. Thuật toán Leiden

Thuật toán Leiden V.A.Traag và cộng sự [44] đưa ra để khắc phục những nhược điểm của thuật tốn Louvain và tính tốn để đầu ra là những cộng đồng liên thơng mạnh.

Thuật tốn vẫn sử dụng các tham số đầu vào của thuật tốn Louvain là tính tốn độ lợi của modularity. Khác với thuật toán Louvain, một mạng tổng hợp được tạo dựa trên phân vùng P từ giai đoạn di chuyển cục bộ, thuật toán Leiden sử dụng thêm một pha cố gắng tinh chỉnh các phân vùng đã phát hiện ra. Ý tưởng của pha tinh chỉnh này là xác định một phân vùng Prefined là

46 phân vùng tái cấu trúc của P. Cộng đồng P có thể chia thành nhiều cộng đồng con Prefined. Mạng tổng hợp được tạo trên các phân vùng Prefined.

Thuật toán Leiden đã giúp khắc phục điểm yếu chính của thuật tốn Louvain là tránh việc đưa ra các cộng đồng nhỏ mất tính liên thơng. Bằng cách tinh chỉnh sau các bước di chuyển các nút riêng lẻ từ cộng đồng này sang cộng đồng khác để tìm một phân vùng, thuật toán Leiden đảm bảo rằng các cụm được kết nối tốt. Hơn nữa, thuật toán đảm bảo nhiều hơn thế: nếu chúng ta chạy thuật toán lặp đi lặp lại, cuối cùng chúng ta sẽ thu được các cụm là tập hợp con tối ưu. Điều này có nghĩa là không thể cải thiện chất lượng của các cụm bằng cách di chuyển một hoặc nhiều nút từ cụm này sang cụm khác. Đây là một thuộc tính mạnh của thuật tốn Leiden, nó cho phép tìm thấy khơng q xa so với mức tối ưu. Cuối cùng, thay vì liên tục kiểm tra tất cả các nút trong mạng xem chúng có thể được chuyển đến một cụm khác hay khơng, như được thực hiện trong thuật tốn Louvain, thuật toán Leiden chỉ thực hiện việc kiểm tra này đối với cái gọi là các nút không ổn định. Kết quả là, thuật tốn Leiden khơng chỉ tìm ra các cụm có chất lượng cao hơn so với thuật tốn Louvain mà nó cịn làm như vậy trong thời gian ngắn hơn nhiều.

47 So sánh hai hình 23 và hình 25, thuật tốn Louvain chỉ bao gồm 2 giai đoạn: giai đoạn di chuyển cục bộ và giai đoạn tổng hợp. Thuật tốn Leiden thì bao gồm ba giai đoạn: giai đoạn di chuyển cục bộ, giai đoạn tinh chỉnh và giai đoạn tổng hợp.

Thuật toán Leiden giống thuật toán Louvain bắt đầu từ việc gán mỗi nút cho một cộng đồng. Sau đó, thuật tốn di chuyển riêng lẻ từ cộng đồng này sang cộng đồng khác sao cho độ lợi modularity tăng lên. Bước tiếp theo là giai đoạn tinh chỉnh được thực hiện trong mỗi cộng đồng ta thu được từ bước trên. Ta sẽ di chuyển các nút trong giai cộng đồng này sao cho độ lợi modularity tăng lên. Kết quả của pha tinh chỉnh này, ta có thể thu được nhiều cộng đồng từ một phân vùng trước đó. Pha tổng hợp sẽ được tổng hợp từ những cộng đồng thu được sau pha tinh chỉnh.

Như vậy, đầu ra của thuật toán Leiden đảm bảo các cộng đồng đều được phân tách và các cộng đồng đều liên thông. Mỗi nút trong mỗi nhóm đều được chỉ định là tối ưu cục bộ. Tất cả cộng đồng đều là phân vùng dày đặc và các cộng đồng đều là tập con tối ưu.

Một phần của tài liệu Nghiên cứu bài toán phân tích mạng xã hội (Trang 48 - 58)

Tải bản đầy đủ (PDF)

(86 trang)