Với việc phát triển thành công một ứng dụng nhỏ dựa trên nền tảng WAVE có chức
năng thu thập thông tin về các blog Yahoo!360, sau đó tiến hành tạo dựng mạng tri
thức trong WAVE tương ứng với các thông tin về đối tượng và quan hệ giữa các đối
tượng thu thập được, cộng với những kết quảthực nghiệm tương đối khả quan về hiệu
năng của hệ thống, tôi tin tưởng rằng đây sẽ là cơ sở cho việc phát triển các ứng dụng
lớn hơn nhằm hỗ trợ tối đa cho việc phân tích, định hình thông tin đang tồn tại trên các
mạng xã hội hiện nay.
78 trang |
Chia sẻ: lylyngoc | Lượt xem: 2596 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Luận văn Phân tích mạng xã hội bằng công nghệ WAVE - phân tích quan hệ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Rule
m1. OR_PARALLEL (m2, m3. m4). m5 Æ
m1. OR_PARALLEL((m2, m4), (m3. m4)) .m5 Æ
24
m1. OR_PARALLEL((m2. m4, m4, m4), ( m3. m4, m4, m4) ). m5
2.8.3 Wave và mô hình lập trình tuần tự
Việc cho phép phát triển không gian, xử lý song song và tự động trong môi trường
phân tán, Wave có thể dễ dàng mô hình hóa một số chương trình xử lý tuần tự. Giống
các chương trình bình thương, truyền thống ở cùng một máy tính, Wave phải ở cùng
một điểm trong không gian và chỉ có duy nhất một luồng được xử lý. Chúng ta sẽ bàn
về vấn đề này thông qua các ví dụ ở dưới đây.
Ví dụ 1
s1. s2. s3. s4
Ví dụ 2
SEQUENCE (s1, s2, s3, s4)
Hai ví dụ trên được thể hiện ở Hình 2 6
Hình 2 6: Xử lý tuần tự không Rule và có Rule
Ngoài ra có thể ví dụ ở Hình 2 7
s1. SQ ((s2. s3), s4)
và
SQ (s1, (s2. SQ (s3, s4)))
25
Hình 2 7: Wave xử lý tuần tự có Rule
• Biều thức If-else
Biểu thức điều kiện “If- else” trong mô hình lập trình tuần tự có cú pháp như sau:
If (e) s1 else s2
Mệnh đề s1 thực hiện và trả về kết quả đúng thì mệnh đề s2 sẽ được thực thi.
Ở Hình 2 8: OR_SEQUENTIAL (( e. s1), s2)
và OR_ SEQUENTIAL (AND_SEQUENTIAL ( (e. DONE
! ) , s1). s2)
Hình 2 8: Một số trường hợp với mệnh đề if-else
26
Hình 2 9: Một số trường hợp với mệnh đề if-else
• Lựa chọn nhiều nhánh
o If – else với filter
Hình 2 10: else-if với filter
27
o Else – if parallel
Hình 2 11: else-if parallel
o Else – if với Rule
Hình 2 12: else-if với Rule
28
o Switch
Hình 2 13: Switch
• Vòng lặp
o while ( e ) s
o do s while ( e )
o For (e1 ; e2 ; e3) s
29
Hình 2 14: Câu lệnh lặp sử dụng Repetition
Hình 2 15: Câu lệnh lặp sử dụng Recursion
30
CHƯƠNG 3: XÂY DỰNG MẠNG TRI THỨC CHO MẠNG XÃ HỘI
Về cơ bản, một mạng xã hội sẽ cho phép người dùng tạo ra cho mình một “profile”
[19] (tạm hiểu là một trang thông tin cá nhân). Ở trang cá nhân đó, người dùng có khả
năng tùy chỉnh về giao diện, các bài viết, các thành phần theo sở thích cá nhân. Họ
cũng có thể đăng tải hình ảnh đại diện (tiếng Anh: avatar), hoặc tạo ra những album
ảnh cá nhân để chia sẻ cùng mọi người. Một cơ chế quan trọng nữa của mỗi mạng xã
hội là bạn bè – friends. Cơ chế kết bạn trong các mạng xã hội thường là khi muốn kết
bạn với ai đó, người dùng phải được người kia chấp nhận lời mời. Một vài mạng xã
hội có một cơ chế khác là Favorites (tạm hiểu: các thông tin ưa thích) giúp cho họ có
thể theo dõi một số hoạt động của người khác mà không cần phải có quan hệ bạn bè
với người kia. Do vậy các mạng xã hội cũng phải cung cấp thêm các tính năng cơ bản
cho việc xác định quyền hạn đối với người xem, bạn bè. Cơ chế này đơn giản nhất là
cho phép hay không cho phép những người chưa có kết nối bạn bè xem các thông tin
có trên trang cá nhân, hay chặn một số người ác ý xuất hiện trên mạng xã hội.
Đó là cấu trúc cơ bản của một mạng xã hội, ngoài ra các mạng xã hội có thể cung cấp
thêm các tính năng khác giúp làm cho người dùng thấy thoải mái nhất khi tham gia.
Phổ biến trong các tính năng kiểu như vậy là khả năng tham gia mạng xã hội sử dụng
OpenID [23], hay chia sẻ các video clips từ các mạng xã hội khác (Youtube, Flickr
…), và rất mới mẻ nhưng cũng không kém phần quan trọng là khả năng truy cập cho
các thiết bị di động. Số lượng người sử dụng các thiết bị di động hỗ trợ khả năng duyệt
web ngày càng tăng làm cho việc quan tâm tới khả năng tương thích với các thiết bị di
động vốn hạn chế hơn về tính năng trở nên cần thiết hơn bao giờ hết.
3.1 Mạng xã hội Yahoo!360 [9]
Các mạng xã hội ở Việt Nam cũng đang ở giai đoạn phát triển khá mạnh. Các nhà
cung cấp dịch vụ đang đẩy mạnh việc tạo ra những mạng xã hội của riêng mình, mang
phong cách thuần Việt hơn, hướng đến lớp người dùng trong nước. Tuy vậy có một
dịch vụ đã phát triển được khá lâu và hiện vẫn đang là mạng xã hội có số lượng người
dùng lớn nhất Việt Nam, đó là Yahoo!360.
Ra đời vào năm 2005 và mau chóng trở thành một trào lưu trong cộng đồng sử dụng
Internet Việt Nam, Yahoo!360 đã trở thành một ngôi nhà thứ hai, một ngôi nhà ảo cho
cộng đồng mạng. Với các tính năng giúp chia sẻ thông tin khá thú vị, đồng thời rất dễ
sử dụng, Yahoo!360 giúp cho mọi người đều có thể đến với thế giới mạng xã hội một
cách dễ dàng, từ giới trẻ năng động, cho tới các bậc phụ huynh … Cùng với đó, cơ chế
31
liên lạc rất mở rộng của Yahoo!360 cũng giúp cho mạng xã hội này thu hút thêm được
một số lượng đông đảo những nhà nghiên cứu lịch sử, chính trị, những ca sĩ, diễn viên
nhằm mở rộng quan hệ với công chúng. Mạng xã hội này từ đó đã trở thành một sân
chơi chung dành cho rất nhiều lớp người Việt đến từ nhiều ngành nghề khác nhau.
Cũng như các mạng xã hội khác, Yahoo!360 được tạo thành từ một mạng các cá thể
được liên kết với nhau như một đồ thị vô hướng. Như vậy, như đã đề cập ở trên, các
công cụ tìm kiếm hiện nay chưa thể làm việc với quan hệ đồ thị dạng này của các
mạng xã hội, cho nên đây sẽ là một lĩnh vực cần và còn được khai thác trong nay mai.
Chương trình dựa trên nền WAVE trong khóa luận này sẽ nắm phần nào nhiệm vụ
khai thác này.
Từng trang cá nhân trong Yahoo!360 được phát triển như một trang thông tin cho một
cá nhân (hay một nhóm người, tùy vào mục đích sử dụng). Trong đó có các thành phần
cơ bản như blog (nhật ký ảo), friend list (danh sách bạn bè), blast, list (danh sách sở
thích), comment (bình luận), tag …
Blog là thành phần chính trong một trang cá nhân Yahoo!360. Đây là nơi cho người
dùng viết lên những suy nghĩ, cảm xúc … về mọi thứ diễn ra xung quanh, nên nó còn
được gọi là nhật ký ảo. Mỗi một bài viết như vậy còn được gọi là một entry. Bạn bè
của người viết sẽ vào xem những bài viết như vậy, để lại những lời bình luận, đánh giá
nếu muốn.
Friend list chính là điểm cấu thành mạng xã hội Yahoo!360. Friend list chỉ ra mối
quan hệ giữa các cá thể trong mạng xã hội Yahoo!360, ở đây là mối quan hệ bạn bè.
Nhờ có danh sách bạn bè này mà ta có thể biết được tất cả bạn bè của một người. Việc
thăm danh sách bạn bè của một người để tìm ra bạn bè của người đó, rồi cứ tiếp tục
thăm dần dần tới những người bạn đó để lại tiếp tục tìm ra bạn bè của họ sẽ giúp ta lan
tỏa dần trong đồ thị mạng xã hội Yahoo!360. Việc này không khác gì với việc làm sao
để thăm tất cả các nút trong một đồ thị vô hướng, vấn đề chỉ còn là thuật toán và cách
thức tiến hành việc thăm sao cho công sức bỏ ra là nhỏ nhất.
Blast cũng là một thành phần khá thú vị trong Yahoo!360. Blast có thể là một lời giới
thiệu, mẩu tin nhỏ, một đường siêu liên kết, hay đơn giản là suy nghĩ trong đầu người
viết tại thời điểm đó. Blast được đặt ở vị trí đầu của trang cá nhân Yahoo!360, điều
này giúp cho blast trở thành thứ được để ý đầu tiên khi ghé thăm một trang cá nhân.
Nếu một trang cá nhân Yahoo!360 được ví như một cuốn nhật ký, một cuốn sách thì
32
có lẽ blast sẽ đóng vai trò như lời mở đầu, lời đề tựa cho cuốn nhật ký, cho cuốn sách
đó.
Một thành phần khác trong Yahoo!360 cũng rất thu hút đối với những người tham gia
mạng xã hội này là hệ thống các comment hay còn gọi là bình luận. Với hệ thống này,
những người tham gia có thể trao đổi những dòng tin ngắn với nhau, về một chủ để
nào đó, về vấn đề trong bài viết của người viết … Với hệ thống này, những người bạn
có thể thể hiện sự quan tâm đến nhau, nhờ đó duy trì mối quan hệ bạn bè.
Ngoài ra Yahoo!360 còn có các thành phần khác nhằm giúp người dùng tìm ra những
người có cùng sở thích với mình như Lists. Hay Tag cloud giúp tạo ra các từ khóa
(tiếng Anh: keyword) nhằm hệ thống hóa các bài viết mà người dùng đã soạn.
Những thành phần này có thể được minh họa ở ảnh chụp màn hình, Hình 3 1 dưới đây
Hình 3 1: Các thành phần trong một trang cá nhân Yahoo!360
Với những đặc điểm như trên, Yahoo!360 đã và đang là dịch vụ mạng xã hội được sử
dụng nhiều nhất, và có người dùng gắn bó nhất tại Việt Nam. Điều đó lý giải được tại
sao người dùng Việt Nam quyết bám trụ lại mạng xã hội này, thậm chí có những động
thái yêu cầu nhà cung cấp tiếp tục duy trì và phát triển dịch vụ này khi gần đây có
nhiều thông tin cho rằng mạng xã hội Yahoo!360 chuẩn bị đóng cửa. Do vậy, trên thực
tế, việc phân tích và tìm kiếm thông tin trên mạng xã hội này là rất đáng giá.
33
3.2 Xây dựng mạng tri thức cho mạng xã hội Yahoo!360
Để thực hiện được những bài toán đặt ra trên cơ sở quan hệ đồ thị của WAVE, cần
phải tạo ra được một đồ thị quan hệ trong WAVE, hay còn gọi là một KN – Mạng tri
thức. Đối với các bài toán phân tích mạng xã hội, cần phải thực thi việc tạo ra KN
tương ứng với đồ thị quan hệ trong mạng xã hội đó. Tức là mỗi cá thể (mỗi cá nhân
hiện diện trên mạng xã hội) sẽ tương ứng với một nút trong KN, quan hệ giữa các cá
thể là đường liên kết giữa các nút trong KN.
3.2.1 Thu thập thông tin cho mạng tri thức
Việc đầu tiên cần làm là phải lấy ra được một hệ thống các nút tương ứng với các cá
thể trong mạng xã hội. Và để làm việc này sẽ có từng bộ Web Crawler – Parser tương
ứng với từng dạng mạng xã hội khác nhau.
Bộ Web Crawler – Parser đơn giản là một phương thức trong Java dùng để lấy về toàn
bộ mã HTML của liên kết (URL [18]) được chỉ định, mà ở đây là đường dẫn tới danh
sách bạn bè (tiếng Anh: Friend List) của một cá thể nào đó trên mạng xã hội. Sau khi
lấy được nội dung dạng mã HTML lưu trữ như một xâu ký tự trong Java, bộ Phân tích
cú pháp (tiếng Anh: Parser) làm việc và lấy ra các friend có xuất hiện trong mã HTML
thu được. Thực ra bộ phân tích cú pháp ở đây không hoàn toàn đúng nghĩa là một bộ
phân tích cú pháp, nó không có luật cú pháp, cũng không sinh ra tập từ tố … Bộ phân
tích ở đây chỉ làm nhiệm vụ lợi dụng việc tồn tại những ký tự tạo nên một định danh
cho mỗi cá nhân trên mạng xã hội trong mã HTML của danh sách bạn bè, cộng với
việc có một số mã HTML với các thuộc tính nhất định nằm trước và sau định danh đó,
từ đó tìm kiếm vị trí các định danh đó, lấy ra và lưu trữ tại Cơ sở dữ liệu.
Như vậy, về mặt bản chất bộ Web crawler và Parser yêu cầu hai điều kiện:
- Danh sách bạn bè của một cá thể trong mạng xã hội phải có thể được
hiển thị và lấy về dưới dạng mã HTML.
- Mã HTML thu về phải có những quy tắc nhất định để xác định vị trí của
các định danh tương ứng với từng cá thể trong mạng xã hội.
Đây là cách thức xử lý trong thời điểm hiện tại, rõ ràng vẫn bộc lộ nhiều điểm hạn chế
nhất định:
- Việc phải lấy toàn bộ mã HTML của trang web danh sách bạn bè của
mạng xã hội là tương đối lãng phí đường truyền, bởi trong một trang web có thể
còn có nhiều thành phần hơn là chỉ có mã HTML (vd: JavaScript, CSS …),
34
ngoài ra còn có ảnh … trong khi cái cần thu được chỉ là một vài đoạn mã
HTML đơn giản.
- Việc phân tích mã HTML dựa vào các đặc điểm nhất định để lấy ra vị trí
xuất hiện các định danh có thể bị ảnh hưởng nếu trong mã HTML đó xuất hiện
các đặc điểm nhưng do người dùng tạo ra. Việc này sẽ có thể làm sai lệch kết
quả thu được.
Cụ thể với mạng xã hội Yahoo!360, dựa vào một vài đặc điểm của mạng này giúp thỏa
mãn các điều kiện kể trên, chương trình có thể xây dựng nên KN tương ứng với mạng.
Đầu tiên đó là việc mỗi cá nhân, mỗi blog trong mạng xã hội Yahoo!360 đều được
mang một giá trị duy nhất, như một “khóa” chỉ ra đích danh cá nhân đó trong toàn
mạng xã hội. Đó là một chuỗi ký tự được sinh ngẫu nhiên bởi Yahoo, dạng
“4CpxgpElc6f19oY.sVNubnV5cw”. Định danh này cũng được sử dụng luôn trong
đường dẫn URL của mỗi blog, như một cách để giấu đi định danh thật (tên tài khoản
Yahoo) thường ở dạng text thông thường.
Với mỗi blog, trang đầu tiên được hiển thị sẽ có URL dạng:
Hình 3 2: Cấu trúc của đường liên kết tới dịch vụ Yahoo!360
Theo Hình 3 2, định danh cho mỗi blog là không đổi với các đường dẫn tồn tại trong
blog đó, còn có các thành phần có thể thay đổi tùy vào thành phần muốn được hiển thị,
hay các tùy chọn hiển thị thêm vào. Ví dụ như trên hình minh họa, thành phần
“profile” có thể được thay thế bằng “blog” nếu muốn xem danh sách các bài viết của
blog này, hay thay bằng “friends” khi muốn xem danh sách bạn bè của chủ blog.
35
Ngoài ra có tùy chọn hiển thị như “cs=0” dùng khi muốn trình duyệt bỏ qua không
hiển thị theme của blog, hay nếu đang ở thành phần xem blog bài viết thì có tùy chọn
“list=1” để đặt chế độ xem các bài viết dạng danh sách (tiếng Anh: list) (tiết kiệm
băng thông do chỉ phải nạp trang với danh sách tiêu đề các bài viết chứ không nạp toàn
bộ nội dung của các bài viết).
Nhờ vào tính chất như vậy, bộ Web Crawler – Parser đối với Yahoo!360 làm nhiệm vụ
thu thập các định danh người dùng của từng blog để tạo ra KN bằng cách bắt đầu từ
một định danh nào đó (coi như một giá trị khởi tạo). Tiếp đó tiến hành lấy mã HTML
của danh sách bạn bè của blog với định danh đó bằng cách thay thế định danh có được
vào chuỗi URL với thành phần hiển thị được chỉ định là “friends”.
Có được mã HTML, bộ Parser hoạt động, lọc ra các định danh có trong mã HTML đó
và tiếp tục quá trình lấy mã HTML của các định danh mới thu được.
Với phương pháp như vậy, dần dần từ một blog, sử dụng phương thức lan tỏa theo
chiều rộng, chương trình sẽ thu được hầu như toàn bộ các định danh của các blog tồn
tại trên hệ thống Yahoo!360.
Với thử nghiệm hiện tại là mạng xã hội Yahoo!360, cách thức crawl web và phân tích
mã HTML như nêu trên vẫn có thể áp dụng mà không phát sinh lỗi. Tuy nhiên về phát
triển sau này, chương trình sẽ có thể sử dụng những bộ Web Crawler – Parser, có thể
tích hợp Cơ sở dữ liệu hỗ trợ tìm kiếm Full-text được phát triển riêng như Nutch [22].
Bởi còn cần có một cơ chế ở mức phát triển cao hơn của hệ thống này, thực hiện việc
lấy và lưu trữ nội dung của mỗi trang web cá nhân (gọi tắt là blog) thu được như các
bài viết, comment …
3.2.2 Tạo dựng mạng tri thức
Sau khi đã thu thập được một tập hợp các định danh của các blog trên mạng xã hội
Yahoo!360 cùng với mối quan hệ bạn bè của từng định danh đó, cần tạo dựng mạng tri
thức ứng với mạng xã hội này.
Khi Wave Interpreter được khởi tạo, nó sẽ tạo ra một mạng tri thức (KN) “rỗng”, tức
là chưa tồn tại một nút nào trên đó. Như vậy, để tạo ra mạng tri thức với các nút tương
ứng với các định danh thu được ở trên, chương trình chỉ cần gửi truy vấn cho WI, đề
nghị WI tạo ra những nút cũng như liên kết như đã xác định.
Câu truy vấn có dạng:
36
CR(@#`blogID_1’ . `friend’#`blogID_2’ , `friend’#`blogID_3’ ,
`friend’#`blogID_4’)
Với câu truy vấn này, WI sẽ hiểu rằng phải tạo ra trên KN một nút với định danh là
“blogID_1”, sau đó tạo ra các nút với định danh lần lượt là “blogID_2”, “blogID_3”
và “blogID_4”. Đồng thời WI cũng hiểu rằng sẽ phải tạo ra các liên kết mang tên
“friend” từ nút “blogID_1” tới 3 nút còn lại.
Như vậy, với câu truy vấn tương đối đơn giản, một mạng tri thức nhỏ đã được tạo ra
với 4 nút có liên kết với nhau theo kiểu “friend”, hay nói cách khác, một phần nhỏ của
mạng xã hội Yahoo!360 đã được tạo ra, quan hệ bạn bè cũng đã được xác định trong
đó.
Thêm một cơ chế nữa của WI đó là khi WI nhận được một truy vấn tạo nút với định
danh giống với nút đã được tạo ra trước đó thì truy vấn đó được bỏ qua, không có sự
thay đổi nào tới mạng tri thức đã được tạo.
Do vậy, cứ tiếp tục với các nút khác thu thập được, chương trình chỉ cần gửi cho WI
những câu truy vấn dạng trên thì dần dần mạng tri thức gần như hoàn chỉnh so với
mạng xã hội Yahoo!360 sẽ được tạo ra với đầy đủ các mối quan hệ như trong mạng
Yahoo!360.
3.2.3 Lưu trữ
Về cơ bản, quá trình thu thập thông tin hay tạo dựng mạng tri thức đều không nhất
thiết phải cần đến một hệ cơ sở dữ liệu hoàn chỉnh bởi các thông tin hoàn toàn có thể
lưu tạm thời ra file. Tuy nhiên khi lưu trữ thông tin theo cách này, có thể gặp một số
vấn đề sau:
• Phải tự xây dựng các bộ đọc dữ liệu từ file cũng như thống nhất quy
cách ghi dữ liệu ra file
• Có thể bị xung đột khi tiến trình đọc ghi cùng truy xuất file
• Truy xuất file thường chậm
Ngoài ra có một bài toán đặt ra cho quá trình thu thập thông tin blog đó là làm sao để
sau khi tắt chương trình (vì một lý do nào đó như lỗi, cần khởi động lại máy, sự cố mất
điện …) thì khi bật lên trở lại, chương trình có thể tiếp tục quá trình thu thập thông tin
từ vị trí trước khi xảy ra sự cố. Đối với bài toán cho mạng Yahoo!360, cần quan tâm
tới hai thông số thu thập về: “blogID” và “friends” của blogID đó. Một cách đơn giản
đó là đọc ra những bản ghi nào trong cơ sở dữ liệu mà chưa có friend nào (có giá trị
rỗng), những bản ghi đó sẽ là những bản ghi cần phải sử dụng để tiếp tục thu thập
37
thông tin về bạn bè. Tuy nhiên cách này cũng không hề đơn giản nếu cơ sở dữ liệu
được đặt trên một file.
Hơn thế nữa, về mở rộng sau này của hệ thống là thu thập, lưu trữ thông tin về toàn bộ
các thành phần cần thiết trong một blog (bài viết, bình luận …), cho nên việc sử dụng
một cơ sở dữ liệu khi ấy là việc bắt buộc. Có nhiều dạng cơ sở dữ liệu có thể sử dụng
cho trường hợp này, nhưng tùy vào mục đích mở rộng mà cso thể lựa chọn loại phù
hợp. Nếu cần lưu trữ phân tán, hiệu năng cao, tìm kiếm theo từ khóa có thể sử dụng
BerkerlyDB [36]. Nếu cần lưu trữ phân tán, tìm kiếm dạng Full-text search thì lại có
thể sử dụng Solr [21] (hiệu năng vừa phải), Tokyo Cabinet [24] (hiệu năng khá cao).
Nhưng với khả năng của WAVE, việc tìm kiếm full-text có thể gửi thông qua WAVE
tới các máy trong mạng, từ đó việc tìm kiếm không còn mang tính chất phân tán đối
với cơ sở dữ liệu nữa thì có thể sử dụng một hệ cơ sở dữ liệu không phân tán nhưng
cung cấp tìm kiếm full-text search. Với lý do đó cộng với lượng dữ liệu thử nghiệm ở
mức trung bình, chưa lớn, hệ thống được mô tả trong khóa luận này sẽ sử dụng một hệ
cơ sở dữ liệu quan hệ quen thuộc: MySQL [35].
Với bài toán đối với mạng xã hội Yahoo!360, cơ sở dữ liệu trong MySQL hiện được
thiết kế với một bảng duy nhất gồm các trường và thông số như Hình 3 3
Hình 3 3: Cấu trúc Cơ sở dữ liệu MySQL
Như vậy, bài toán khôi phục sau sự cố ở trên có thể được giải quyết bằng cách lấy ra
từ cơ sở dữ liệu những bản ghi có trường “friends” là rỗng. Việc này hoàn toàn đơn
giản trong cơ sở dữ liệu MySQL chỉ với một câu truy vấn:
SELECT `blogID` FROM `blog_list` WHERE `friends`=’’;
38
3.2.4 Filter
Vì chương trình được thực hiện dựa trên nền tảng WAVE, và lợi dụng khả năng của
mạng ngang hàng để xử lý nên đòi hỏi việc lấy và lưu trữ thông tin về mỗi blog cần
phải có một cơ chế phân tải. Cơ chế này tạm gọi là Filter.
Trong WAVE, các nút được hình thành dưới dạng một mạng tri thức, KN. Tuy nhiên
các nút đó vẫn phải được quản lý hay nói cách khác phải thuộc về một máy tính nào đó
tham gia vào mạng xử lý thông tin WAVE. Mạng thật ở đây là mạng giữa các máy
tham gia WAVE, mạng ảo là mạng tri thức. Một nút trên mạng thật, hay một máy tính,
có thể nắm giữ nhiều nút trên mạng tri thức. Như vậy, việc phân tán tải trên WAVE
mang ý nghĩa phân tán các nút trên mạng tri thức lên các máy trên mạng thật.
Về cơ chế phân tán, bộ thông dịch ngôn ngữ WAVE – Wave Interpreter (viết tắt: WI)
tự nó đã hỗ trợ khả năng phân tán các nút trên mạng tri thức vào các máy trong mạng
thật. WI có cơ chế truyền thông riêng để gửi các yêu cầu tạo nút tới các máy khác, WI
ở các máy khác lúc đó sẽ có trách nhiệm phải hoàn tất yêu cầu được gửi. WI truyền
thông giữa các máy tính thông qua một định danh xác định duy nhất máy tính đó trên
toàn mạng, trong giới hạn của khóa luận này, định danh đó được lấy chính là địa chỉ IP
của máy. Tuy nhiên đây là bước làm sau khi đã xác định được nút nào trên mạng tri
thức sẽ được quản lý tại máy nào trên mạng thật. Điều này WI không làm, do vậy
chương trình muốn thực hiện được những quyết định kiểu này phải sử dụng tới Filter.
Filter phải làm một cách nào đó để thông báo cho WI biết định danh của máy tính sẽ
quản lý nút của mạng tri thức.
Filter trong bài toán xây dựng mạng xã hội Yahoo!360 sẽ làm nhiệm vụ quyết định
xem một định danh của một blog thu thập được sẽ cần được thuộc về máy nào trong
một tập hợp các máy đang tham gia vào mạng WAVE. Nói cách khác, Filter sẽ như
một hàm của blogID, dạng:
F(blogID) = IP_ADDRESS
Tức là với đầu vào là một định danh blog, blogID nào đó, Filter sẽ phải trả lại một giá
trị là địa chỉ IP của máy sẽ có trách nhiệm quản lý nút tương ứng với định danh blog
đó cho chương trình, từ đó chương trình sẽ gửi yêu cầu tạo nút và địa chỉ IP máy
tương ứng cho WI. Việc còn lại là tạo nút trên mạng tri thức lúc này do WI đảm trách.
Như vậy Filter là một thành phần hoàn toàn độc lập với thành phần thu thập thông tin
và thành phần tạo dựng mạng tri thức. Có nghĩa là Filter có thể được thiết kế riêng mà
39
không cần quan tâm đến hai thành phần kia, chỉ cần thỏa mãn đầu vào và đầu ra theo
đúng yêu cầu.
Cũng có thể thấy Filter với khả năng như vậy, sẽ không chỉ đóng vai trò phân tải cho
hệ thống, mà còn có thể được lập trình để cung cấp khả năng cân bằng tải. Cân bằng
tải trong một mô hình xử lý phân tán là rất quan trọng, bởi việc cung cấp tính năng xử
lý phân tán là nhằm giảm bớt xử lý cho một máy tính, nếu phân tán không hiệu quả để
cho một vài máy tính phải xử lý một số lượng công việc nhiều hơn hẳn so với các máy
còn lại thì việc phân tán không còn ý nghĩa.
Tuy nhiên cân bằng tải là một lĩnh vực tương đối khó, bao gồm nhiều tiêu chí khác
nhau như cân bằng lưu trữ, cân bằng băng thông … Trong giới hạn của khóa luận này,
Filter được lập trình sẽ cố gắng ở mức cân bằng lưu trữ cho các máy, có thể giải quyết
phần nào việc phân tán băng thông cho phía máy khách.
Filter được thiết kế cho khóa luận làm việc theo cơ chế gần giống một mạng Chord,
nhưng ở mức rất đơn giản. Filter sẽ có một danh sách các máy tính có mặt trong mạng
(do giới hạn của khóa luận, danh sách này sẽ được cố định mỗi lần khởi chạy hệ thống,
và phải giống nhau ở mọi máy tham gia mạng WAVE), nó tạo ra các mã băm (tiếng
Anh: hash) sử dụng thuật toán MD5 [33] cho các máy ấy và sắp xếp theo thứ tự từ nhỏ
tới lớn (theo thuật toán so sánh xâu ký tự trong Java). Tiếp đó khi nhận được một định
danh “blogID”, Filter cũng sẽ băm định danh này với cùng thuật toán MD5, tạo một
vòng lặp để so sánh (xâu ký tự) với tất cả giá trị trong danh sách các máy tính. Khi kết
quả so sánh trả về nhỏ hơn 0 (mã băm của “blogID” đưa vào nhỏ hơn mã băm của
máy tính đang xét), theo cách làm việc của Chord, blog có định danh “blogID” sẽ
được phân cho máy đang xét. Tức là Filter khi đó sẽ trả về cho hệ thống IP của máy
đang xét.
40
3.3 Sơ đồ hoạt động các thành phần trong chương trình
3.3.1 Thành phần thu thập thông tin blog
Hình 3 4: Sơ đồ hoạt động thành phần thu thập thông tin blog
Sơ đồ trên Hình 3 4 mô tả chi tiết hoạt động của thành phần thu thập thông tin blog
được nói trong mục 3.2.1. Có một vài chi tiết cần lưu ý so với những mô tả ở mục
3.2.1. Đó là sự xuất hiện của “Configuration file”, “Wave Interpreter” và “Bộ tiếp
nhận yêu cầu”. Như đã nói, hệ thống được thiết kế với khả năng có thể xử lý, lưu trữ
phân tán, và 3 thành phần kể trên là những thành phần hỗ trợ cho khả năng đó.
Bởi vì việc thu thập thông tin này sẽ do nhiều máy đảm trách, được phân chia công
việc rõ ràng thông qua Filter nên là các máy cần phải biết được mình có thể bắt đầu
41
công việc từ đâu. File cấu hình (Configuration file) được dùng để chỉ ra những blogID
khởi đầu cho quá trình thu thập thông tin về các blog trên mạng xã hội Yahoo!360.
Trong một tập hợp các máy tham gia vào quá trình xử lý và thu thập thông tin, có thể
chỉ cần có một máy có những điểm khởi đầu này, các máy còn lại có thể lặp đi lặp lại
việc đọc ra từ cơ sở dữ liệu đặt tại máy đó xem có bản ghi nào chưa được thu thập
thông tin (bạn bè) hay không. Nếu có thì máy đó làm việc như bình thường với các
quy trình có thể nhìn thấy trên sơ đồ, còn không nó tiếp tục chờ cho tới khi nhận được
yêu cầu từ máy khác.
Yêu cầu từ máy khác xuất hiện khi có một máy nhận được một blogID, thông qua
Filter nó nhận thấy blogID đó thuộc quyền “quản lý” (việc phân chia quyền hạn quản
lý được dành cho Filter) của một máy khác, do vậy nó sẽ thông qua Wave Interpreter
để gửi tới máy kia blogID vừa nhận được. Thực ra lúc đó Wave Interpreter sẽ gọi lệnh
chạy hệ thống (System Call), gọi ra một class (được tạo dựng sẵn trên các máy, gọi là
Bộ tiếp nhận yêu cầu) trên máy đầu xa, dùng để đưa bản ghi blogID vào cơ sở dữ liệu
của máy đầu xa. Do vậy sau khi tiếp tục thực hiện vòng lặp đọc trong cơ sở dữ liệu,
máy đầu xa nhận thấy nó có một blogID chưa được lấy danh sách bạn bè. Máy đầu xa
lúc này tiến hành lấy bạn bè của blogID này, và nếu gặp một blogID không thuộc
quyền quản lý của mình, nó lại gửi đến máy khác qua những quy trình vừa được trình
bày.
42
3.3.2 Thành phần tạo dựng Mạng tri thức
Hình 3 5: Sơ đồ hoạt động thành phần tạo dựng mạng tri thức
Trong sơ đồ trên Hình 3 5, cũng chỉ có một điểm lưu ý so với trình bày ở mục 3.2.2 là
Wave Interpreter. Cũng giống như ở thành phần thu thập thông tin blog, ở đây Wave
Interpreter đóng vai trò là người trung gian, luân chuyển thông tin để phân tán xử lý
cho toàn bộ các máy tham gia trên mạng. Ở việc tạo dựng mạng tri thức, thông qua
Filter, các đoạn mã wave sẽ được tạo ra, chứa các thông tin về tên nút cần được tạo, và
nơi mà nút ấy sẽ được tạo, trong trường hợp này là địa chỉ IP (do Filter trả về) của máy
nào đó trong mạng. Một mã wave có dạng
CR(@#`blogID`$$`ip_add_1’. `friend’#`blogID_f1’$$`ip_add_2’)
Câu lệnh này sẽ tạo ra một nút với tên “blogID” tại máy có địa chỉ ip là “ip_add_1”,
sau đó tạo ra một nút khác với quan hệ là bạn bè của nút vừa tạo, tên là “blogID_f1”,
tại máy có địa chỉ ip là “ip_add_2”.
Những câu lệnh dạng này khi được gửi tới WI sẽ được WI tự động thực hiện giao tiếp
với các WI tại máy đầu xa, gửi thông tin về nút cần tạo tới WI tại máy đầu xa. Khi ấy
WI tại máy đầu xa sẽ tiến hành tạo nút được gửi. Tương tự như vậy, WI tại máy đầu xa
cũng có thể gửi tới máy đang xét những nút cần thiết. Từ đó mạng tri thức được tạo
thành sẽ là một mạng tri thức tổng hợp từ các máy nằm phân tán.
43
CHƯƠNG 4: BÀI TOÁN PHÂN TÍCH QUAN HỆ
4.1 Tạo lập mạng tri thức từ cơ sở dữ liệu không đồng nhất
Tạo lập và xử lý một mạng tri thức có thể được thực hiện phân tán trên nhiều máy tính
trên mạng, do vậy WAVE được tạo ra để có thể sử dụng rất hiệu quả trong việc tạo
lập, quản lý các cơ sở dữ liệu lớn nằm phân tán.
Để chứng minh khả năng khả năng này của WAVE, có thể xét một hệ cơ sở dữ liệu
không đồng nhất lưu trữ thông tin về một trung tâm nghiên cứu, thí nghiệm như sau:
Hình 4 1: Cấu trúc cơ bản của một cơ sở dữ liệu không đồng nhất
Như Hình 4 1 ta có một cơ sở dữ liệu không đồng nhất, nhưng có mối quan hệ liên
quan. Hệ cơ sở dữ liệ không đồng nhất này sẽ cho thấy thông tin về những blogger
trong mạng xã hội, họ có thể đến từ nhiều quốc gia khác nhau, có những mối quan tâm
tới các chủ đề khác nhau và làm những công việc khác nhau … Cấu trúc của hệ cơ sở
dữ liệu này được biểu diễn dưới dạng mạng tri thức, trong đó mỗi đối tượng dữ liệu,
hay một bản ghi được coi là một nút riêng lẻ, và mối quan hệ giữa những đối tượng dữ
liệu đó được biểu diễn như những liên kết hai chiều hay một chiều, tùy thuộc vào loại
quan hệ giữa chúng là hai hay một chiều.
Hệ cơ sở dữ liệu không đồng nhất này được hình thành từ bốn hệ cơ sở dữ liệu nhỏ có
thể nằm riêng rẽ tại các máy là WORLD database, TOPICS database, OCCUPATION
database và BLOGGER database, mỗi cơ sở dữ liệu có một cấu trúc xác định riêng.
- WORLD Database (WDB): Hệ cơ sở dữ liệu này biểu diễn hệ thống
quốc gia, vùng lãnh thổ, thành phố nhằm xác định nơi cư trú của những thành
viên trong mạng xã hội.
44
Hình 4 2: WORLD database
WDB có bốn lớp, đầu tiên là “WORLD”, là gốc của CSDL. Lớp tiếp theo biểu diễn
các lục địa (tiếng Anh: continents). Lớp tiếp theo là các quốc gia, và lớp cuối cùng là
các thành phố, sẽ là những nơi sinh sống của các blogger. Các node ở các lớp liền kề
sẽ được liên kết với node ở lớp trên bằng một liên kết “isa” (is a) một chiều như trong
Hình 4 2.
Đoạn mã WAVE để tạo lập cấu trúc cơ sở dữ liệu này trong mạng tri thức có thể được
viết dạng “breadth-first” như sau:
CREATE (
DIRECT # world.
( +isa # europe. ( +isa # germany. +isa # berlin, +isa # bonn),
( +isa # uk. +isa # guildford, +isa # london)
),
( +isa # asia. +isa # vietnam. +isa # hanoi, +isa # hcm )
)
- TOPICS Database (TDB): Cơ sở dữ liệu này mô tả các chủ để mà các
blogger quan tâm
45
Hình 4 3: TOPICS database
Nhìn vào Hình 4 3, cấu trúc của TOPICS database gần giống như của WORLD
database với bốn lớp. Trong đó các lớp bên dưới thể hiện các topic như là topic con
của các topic ở lớp trên. Và cũng như WORLD database, các nút lớp dưới có liên kết
một chiều với các nút lớp trên với tên liên kết là “isa”.
Đoạn mã WAVE xây dựng mạng tri thức dựa trên cơ sở dữ liệu trên có dạng:
CREATE (
DIRECT # topics.
( +isa # it. +isa # software,
( +isa # network. +isa # cisco, +isa # microsoft ),
),
( +isa # politics. +isa # capitalism, +isa # socialism )
)
- OCCUPATION Database (ODB): Cơ sở dữ liệu này mô tả các công
việc mà các blogger đang làm, sắp xếp theo từng lĩnh vực cụ thể
46
Hình 4 4: OCCUPATION database
Như trong Hình 4 4, cơ sở dữ liệu này có ba lớp, lớp đầu tiên có nút
“OCCUPATION” đóng vai trò là gốc, nút này có các nút con là các lĩnh vực nghề
nghiệp như nghệ thuật (ART), công nghệ thông tin (IT – Information Technology).
Lớp thứ ba là các công việc cụ thể trong từng lĩnh vực, ví dụ như trong công nghệ
thông tin có các công việc dạng như thiết kế (DESIGNER), lập trình viên (CODER),
quản trị viên (ADMINISTRATOR) …
Để tạo lập mạng tri thức chứa các thành phần của cơ sở dữ liệu trên, có thể sử dụng
đoạn mã WAVE như sau:
CREATE (
DIRECT # occupation.
( +isa # art. +isa # singer, +isa # writer ),
( +isa # oit. +isa # designer, +isa # coder, +isa # administrator )
)
- BLOGGER Database (BDB): Mô tả các blogger trong mạng xã hội và
mối quan hệ bạn bè giữa họ. Ở mạng xã hội, quan hệ bạn bè là quan hệ hai
chiều, do đó các liên kết sẽ không có mũi tên chỉ hướng.
47
Hình 4 5: BLOGGER database
Đoạn mã WAVE tạo lập mạng tri thức dựa trên cơ sở dữ liệu blogger này được thực
thi dưới dạng “depth-first” như sau:
CREATE (
DIRECT # james. friends # peter. friends # anna. friends # ngoc.
friends # michael.
friends # james, friends # anna,
( friends # thai.
friends # james,
( friends # olga. friends # peter, friends # james )
)
)
Và đây là sự kết hợp của các Cơ sở dữ liệu phân tán trên thành một hệ cơ sở dữ liệu
chung không đồng nhất
48
Hình 4 6: Cơ sở dữ liệu tổng hợp
Cơ sở dữ liệu này sẽ đưa ra cái nhìn tổng quan về các nhân viên trong trung tâm. Ví dụ
như ta sẽ thấy “JAMES” hay quan tâm tới chủ đề chính trị, cụ thể là về “Tư bản chủ
nghĩa”, tuy thế anh này lại là một Lập trình viên (coder), và đến từ thành phố
“BERLIN” của “GERMANY”.
Và với các đoạn mã WAVE như ở các phần trên, trên lý thuyết các cơ sở dữ liệu hợp
thành cơ sở dữ liệu tổng hợp này đã được tạo ra. Do vậy để cho ra một mạng tri thức
tổng hợp của cơ sở dữ liệu tổng hợp này, cần phải thực hiện việc lập các liên kết giữa
các cơ sở dữ liệu con. Đoạn mã WAVE thực hiện việc này được trình bày ở dưới:
49
CREATE (
( DIRECT # james.
works # coder, lives # london, concerns # capitalism
),
( DIRECT # thai.
works # administrator, lives # hanoi, concerns # software
),
( DIRECT # olga.
works # singer, lives # berlin, concerns # cisco
),
( DIRECT # peter.
works # designer, lives # guildford, concerns # cisco
),
( DIRECT # anna.
works # singer, lives # bonn, concerns # capitalism
),
( DIRECT # ngoc.
works # administrator, lives # hcm, concerns # socialism
),
( DIRECT # michael.
works # writer, lives # london, concerns # microsoft
)
)
4.2 Các bài toán quan hệ
Với mạng tri thức được tạo thành, có thể thực hiện các mẫu truy vấn để giải quyết rất
nhiều các bài toán có thể kể ra sau đây
• Tìm các chủ đề con, trực tiếp thuộc chủ đề IT.
- Mã Wave:
Freturn = CONTENT.
DIRECT # it. +isa # ALL. Ftransit = CONTENT.
DIRECT # Freturn. TERMINAL = Ftransit
- Kết quả: SOFTWARE; NETWORK
50
• Vùng lãnh thổ nào gần nhất trong đó có hai thành phố Bonn và
London
- Mã Wave:
Freturn = CONTENT.
DIRECT # bonn, DIRECT # london.
REPEAT (
OR_SEQUENTIAL (
( SQ ( Ncounter + 1. Ncounter == 2 ) .
Ftransit = CONTENT. DIRECT # Freturn.
TERMINAL = Ftransit. DONE !
),
- isa # ALL
)
)
- Kết quả: EUROPE
• Liệt kê những blogger đến từ Việt Nam và quan tâm tới chủ đề “Xã
hội chủ nghĩa”
- Mã Wave:
Freturn = CONTENT.
DIRECT # vietnam, DIRECT # socialism. Fcolor = CONTENT.
REPEAT (
+isa # ALL,
( lives; concerns # ALL.
SQ (
Fcolor /~ Ncolors. Ncolors & Fcolor.
Ncolors :: NONE > 2. Ftransit = CONTENT.
DIRECT # Freturn. TERMINAL = Ftransit
) . DONE !
)
)
- Kết quả: NGOC
51
• Liệt kê những người bạn của Thái đến từ cùng một thành phố, tên
thành phố là gì?
- Mã Wave:
Freturn = CONTENT.
DIRECT # thai. friends # ALL. Fcollect = CONTENT.
lives # ALL. Fcity = CONTENT. ##. Fcollect & CONTENT.
lives # thai. Fcollect & Fcity.
DIRECT # Freturn. TERMINAL = Fcollect
- Kết quả: JAMES; MICHAEL – LONDON
• Liệt kê những người dùng có mối quan tâm tới chủ đề “Network”
- Mã Wave:
DIRECT # network.
AS(
(#.Fcollect=C.#P.Ncollect&Fcollect),
(T=Ncollect)
)
- Kết quả: OLGA; PETER; MICHAEL
• Có điểm chung nào về chủ đề quan tâm giữa những người làm nghệ
thuật (OCCUPATION = ART) và những người làm IT (OCCUPATION = IT)
không?
- Mã Wave:
Freturn = CONTENT.
DIRECT # art.
isa # ALL. ANY # ALL.
concerns# ALL. Ftransit = CONTENT. ANY # ALL.
works # ALL. isa # it.
DIRECT # Freturn. T=Fc
- Kết quả: CISCO; CAPITALISM
52
4.3 Mở rộng hệ thống
Như đã nói, việc sử dụng công nghệ Wave vào phân tích quan hệ có một đặc điểm nổi
trội so với các cách thức phân tích quan hệ truyền thống (ma trận kề) đó là khả năng
mở rộng đối tượng, thuộc tính, quan hệ rất cao.
Giả sử mạng tri thức được trình bày tại mục 4.2 đã tồn tại, nhưng người dùng mới
muốn tạo thêm một vài thuộc tính cho các bản ghi về blogger như giới tính, tuổi, tổng
số bài viết … Việc này trong Wave có thể được thực hiện rất dễ dàng bằng cách thêm
vào những cơ sở dữ liệu tương ứng với các thuộc tính đó, sau đó tạo thêm trên mạng
tri thức những nút thể hiện các bản ghi cơ sở dữ liệu, thiết lập quan hệ (một chiều) từ
các nút chủ thể blogger tới các nút thuộc tính này.
Việc tạo ra trên mạng tri thức các nút tương ứng với các cơ sở dữ liệu mới được định
nghĩa không có khác biệt so với việc tạo ra các cơ sở dữ liệu được nói tại mục 4.2
(WDB, TDB, ODB, BDB). Sau công đoạn này, việc thêm vào các liên kết quan hệ cho
các nút thể hiện blogger có thể tiến hành với những đoạn mã Wave kiểu như sau:
CR(
( DIRECT # THAI. Gender # male, age # 22, entries # 10 ),
( DIRECT # NGOC. Gender # male, age # 25, entries # 7 ),
( DIRECT # ANNA. Gender # female, age #20, entries #20 )
)
Sau bước này, các bài toán quan hệ có thể được mở rộng dưới dạng tìm kiếm thuộc
tính. Ví dụ như tìm “blogger nữ trẻ nhất?”, “tìm blogger nam có tầm tuổi 20-30 có
số lượng entry nhiều hơn 20?” …
Như vậy chứng tỏ được khả năng mở rộng cao của hệ thống phân tích dựa trên nền
tảng Wave, chỉ cần thêm vào một vài thay đổi là có thể thực hiện nhiều phân tích mở
rộng cần thiết.
53
CHƯƠNG 5: BÀI TOÁN PHÂN TÍCH ĐẶC ĐIỂM
5.1 Bài toán tìm kiếm theo mẫu
Trong mạng xã hội, giữa các node, ngoài quan hệ là bạn bình thường, chúng ta có thể
thiết lập những quan hệ phức tạp hơn và thực hiện tìm kiếm theo các mẫu cho trước.
Một số ít các node sẽ có thuộc tính nghề nghiệp (job) nhận các giá trị như nhà báo
(journalist) hay ca sĩ (singer).
- Tìm tất cả các node có đường nối trực tiếp tới hai node cho trước (bạn chung
của hai node bất kỳ cho trước) – Hình 5 1.
- Cho trước hai node A và B, tìm tất cả các node có đường nối trực tiếp với node
A và nối với node B qua một node trung gian (tìm tất cả các node có khoảng cách với
A là 1, khoảng cách với B là 2) – Hình 5 2.
Hình 5 1
Bạn chung của node D và E là hai node C và B
54
Hình 5 2
A và C là hai node có khoảng với D là và khoảng cách với G là 2
5.2 Bài toán Tìm Đường đi ngắn nhất
5.2.1 Thuật toán
- Từ node nguồn tìm một cây đường đi ngắn nhất (shortest-path tree) tới tất cả các
node khác trong đồ thị.
- Sau khi tìm được cây đường đi ngắn nhất, tới node đích, lần vết ngược trở về node
bắt đầu để tìm ra dãy đường đi ngắn nhất giữa hai node.
Chúng ta tìm cây đường đi ngắn nhất bằng cách loang theo chiều rộng. Ở mỗi node, có
một biến cục bộ để đánh dấu tình trạng của node là đã được thăm hay chưa được thăm.
Thuật toán bắt đầu bằng việc nhảy tới node nguồn, từ nút nguồn di chuyển tới tất cả
các node có đường nối trực tiếp với node nguồn, kiểm tra nếu biến cục bộ lưu tình
trạng của node đang ở trạng thái chưa được thăm thì gán giá trị của biến cục bộ đó
bằng địa chỉ của node mà chuỗi wave vừa từ đó di chuyển tới node hiện tại. Lặp lại
việc di chuyển tới tất cả các node có đường nối trực tiếp với node đang đứng. Trong
WAVE có lệnh “##” di chuyển sang các nút lân cận trừ node mà từ đó đã tới nó. Do
55
vậy chuỗi WAVE sẽ di chuyển sang các node có đường nối trực tiếp với các node
hàng xóm của node nguồn nhưng không di chuyển trở về node nguồn. Loang cho tới
khi thăm xong toàn bộ đồ thị.
Sau khi đã tạo được cây đường đi ngắn nhất. Nhảy tới node đích, di chuyển ngược về
node khởi đầu dựa vào biến cục bộ lưu tình trạng tại mỗi node và lưu đường đi vào
một biến toàn cục.
Đồ thị minh họa thuật toán:Giả sử ta cần tìm đường đi ngắn nhất giữa node A và node
H
.
Hình 5 3
Phần 1: Tìm cây đường đi ngắn nhất (loang theo chiều rộng):
Đặt chuỗi WAVE vào node A. Di chuyển tới các node hàng xóm của A là B, C, D – mũi
tên màu da cam. Chuỗi WAVE tách thành ba nhánh tại ba node B, C, D.
56
Hình 5 4
Từ các node B, C, D di chuyển tới các node có đường nối trực tiếp với B, C, D – mũi
tên màu xanh biển. Do có ba nhánh WAVE nên chuỗi WAVE sẽ di chuyển tới các node
B, C, D, E, F, G. Ở các node B, C, D, biến Nback đã có giá trị. Nên chuỗi WAVE sẽ bị
dừng. Còn ở ba node E, F, G biến Nback vẫn có giá trị NONE – node chưa được thăm
nên chuỗi WAVE sẽ tiếp tục lan tỏa. Từ E, F, G chuỗi WAVE lại tiếp tục lan tỏa tới hai
node chưa được thăm là H và I. Ở hai node H và I, chuỗi WAVE dừng do không tìm
thấy node nào chưa thăm.
Hình 5 5
57
Phần 2: Lần vết tìm chuỗi đường đi giữa hai node:
Hình 5 6
Nhảy tới node đích là node H. Gán biến Fpath=C – với C là nội dung (tên) của node
H. Di chuyển tới node G - chứa trong biến Nback của nod H. Gán Fpath:0=C (tức tên
của node G). Di chuyển tiếp tới node B – chứa trong biến Nback của node G. Fpath
giờ đang là [H,G] sẽ được gán Fpath:0=C và sẽ chứa các giá trị [H,G,B]. Tiếp tục di
chuyển tới node A – chứa trong biến Nback của node B và gán Fpath:0=C. Fpath giờ
sẽ chứa [H,G,B,A]. Di chuyển tiếp tới node chứa trong biến Nback của node A, nhưng
58
node `stop’ không tồn tại nên vòng lặp trong chuỗi WAVE sẽ dừng. Và ta có đường đi
ngắn nhất giữa hai node A và H chứa trong biến Fpath=[H,G,B,A]
5.2.2 Cài đặt
Giả mã:
B1: Nhảy tới node khởi đầu. Nback=`stop'.
B2: Nhảy tới tất cả các bạn bè của node đang đứng. Nếu Nback==NONE, gán
Nback=P. Nếu Nback /= NONE, không làm gì cả.
B3: Nếu còn Nback==NONE, Lặp lại bước 2. Nếu không sang bước 4.
B4: Nhảy tới node đích. Fpath=Tên node.
B5: Nhảy tới nút trước nút hiện tại. Gán Fpath:0=Tên node. Lặp lại bước 5 tới khi nào
không thể nhảy tới nút trước nó (khi Nback=`stop')
B6: In ra đường đi ngắn nhất (nếu có).
Lưu đồ thuật toán:
Bước 1: Tìm cây đường đi ngắn nhất
59
Hình 5 7
Bước 2: Lần ngược tìm đường nối giữa node đích và node nguồn
60
Hình 5 8
61
Wave code:
SQ(
(@#`blogsource'.Nback=`stop'.
RP(##.(Nback==NONE.Nback=P))),
(@#`blogdesti'.Fpath=C.RP(#Nback.Fpath:0=C).T=Fpath)
)
5.3 Bài toán tìm Đường kính
Định nghĩa đường kính của một đồ thị: Đường đi ngắn nhất giữa hai node trong đồ
thị được gọi là khoảng cách giữa hai node đó. Khoảng cách dài nhất giữa hai node
trong đồ thị gọi là đường kính của đồ thị.
Với đồ thị trong hình 9, khoảng cách giữa node D và node H chính là đường kính của
đồ thị với độ dài đường kính là 3.
Hình 5 9
Thuật toán tìm đường kính: Bài toán tìm đường kính của đồ thị có thể coi là một bài
toán mở rộng của bài toán tìm cây đường đi ngắn nhất. Ta tìm đường đi ngắn nhất giữa
tất cả các cặp node trong đồ thị, và đường kính tương ứng sẽ là đường dài nhất trong
số những đường ngắn nhất. Để giải quyết bài toán một cách hiệu quả, ta đặt chuỗi
62
wave vào tất cả các node trong đồ thị và tìm kiếm cây đường đi ngắn nhất của tất cả
các node một cách song song. Độ dài đường đi ngắn nhất từ tất cả các node khác trong
đồ thị tới node hiện tại được lưu tại một biến cục bộ tại node hiện tại, biến này có dạng
vector, với mỗi phần tử là một khoảng cách tới một node trong đồ thị. Để xác định
chính xác khoảng cách nào ứng với node nào từ node hiện tại, ta sử dụng một biến cục
bộ khác lưu địa chỉ của node đi kèm biến lưu khoảng cách. Biến này cũng có dạng
vector với các phần tử là tên của các node trong đồ thị, các phần tử trong vector
khoảng cách và vector tên node được xếp một cách tương ứng nhau.
Ví dụ với node hiện tại là node A:
Biến vector Ndistance lưu khoảng cách:
1 1 1 2 2 2 3 4
Biến vector Nsource lưu tên các phần tử ứng với khoảng cách lưu tại biến Ndistance:
B C D E F G H I
Sau khi thực một cách song song hiện thuật toán tìm cây đường đi ngắn nhất tại tất cả
các node, chúng ta nhận được ở biến Ndistance ở mỗi node khoảng cách từ node đó tới
tất cả các node còn lại trong đồ thị. Khoảng cách lớn nhất trong những khoảng cách
này (tính ở tất cả các node) – gọi là đường kính – được tìm qua hay bước: Đầu tiên tìm
khoảng cách lớn nhất cục bộ trong các phần tử của vector Ndistace tại mỗi node, sau
đó tìm khoảng cách lớn nhất toàn cục là giá trị lớn nhất của các khoảng cách cục bộ.
63
Hình 5 10
Chương trình wave sử dụng để thực hiện việc tìm đường kính của đồ thị:
Flocal_max=
{REPEAT(
Next=Ndistance:1. Next/=NONE. Ndistance:1=NONE.
(Next>Nmax. Nmax=Next. DONE!), STAY
)
}.
SEQUENCE(
(DIRECT#ALL.Fsource=CONTENT. Flength=0.
REPEAT(
(
Findex = Nsources:: Fsource.
OR_SEQUENCE(
(Findex==NONE. Nsources & Fsource.
Ndistances & Flength
),
(Flength<Ndistances:Findex.
Ndistances:Findex=Flength
)
)
64
).ANY#ALL. Flength+1
)
),
(DIRECT#ALL. ^Flocal_max. Ftransit=Nmax.
DIRECT#PREDECESSOR.
(Ftransit>Nmax. Nmax = Ftransit)
),
TERMINAL=Nmax
)
Việc lan tỏa để tìm cây đường đi ngắn nhất trên một phạm vi lớn (hàng trăm nghìn tới
hàng triệu node) là tương đối lâu, hơn nữa với đồ thị có hàng trăm nghìn node thì số
lượng phần tử trong hai vector Ndistances và Nsources cũng sẽ lên tới hàng trăm
nghìn, và cũng như để tránh việc mỗi lần tìm đường kính ta lại phải tìm kiếm cây
đường đi ngắn nhất của toàn bộ mạng. Chúng ta sẽ cải tiến thuật toán tìm đường kính,
thay vì mỗi lần tìm đường kính lại thực hiện thuật toán tìm kiếm cây đường đi ngắn
nhất trên toàn bộ node của đồ thị, ta làm việc này một lần duy nhất và lưu khoảng cách
lớn nhất của mỗi node tới các node khác trong đồ thị vào cơ sở dữ liệu.
Hình 5 11
65
Để đi tìm đường kính của một đồ thị có n node. Chúng ta phải đi tìm khoảng cách giữa
tất cả các node với nhau. Gọi D(i,j) là khoảng cách giữa node i với node j (i khác j, i,j
trong khoảng từ 1 tới n). Giá trị lớn nhất Max(D(i,j)) chính là đường kính cần tìm.
Đồng thời, cần xác định hai node i, j và chuỗi các node nối hai node i và j.
Chuẩn bị dữ liệu (phân tích dữ liệu thô): Ở mỗi node của đồ thị, thực hiện thuật
toán tìm cây đường đi ngắn nhất. Thuật toán tìm cây đường đi ngắn nhất chính là thuật
toán loang theo chiều rộng. Mỗi lần loang rộng, ta tăng biến Fd đếm khoảng cách từ
node nguồn tới node hiện tại. Sau khi loang xong toàn bộ độ thị, biến Fd chứa giá trị là
khoảnh cách từ node nguồn tới node xa nhất trong đồ thị. Ta đưa lưu Fd vào cơ sở dữ
liệu. Việc tìm Fd và đưa vào cơ sở dữ liệu được thực hiện gần như song song trên các
node. Đoạn mã wave thực hiện việc tìm khoảng cách lớn nhất từ một node tới các
node còn lại trong đồ thị và đưa khoảng cách tìm được vào cơ sở dữ liệu:
@#`blogID'.Nd=0.Fd=0.
SQ(
(RP(#.Nd==NONE.Fd+1.Nd=Fd.Nb=P).@#`"+blogID+"'.Nmax=Fd),
T=Nmax.Fa=1;1;Ft=`blogID'.Ft&Nmax.Fa&Ft.Fa?getRequestedBlog
).@#.Nd=NONE
Fa chứa hai tham số là blogID và giá trị của Nmax, lớp getRequestedBlog sẽ thực
hiện việc đưa giá trị biến Nmax vào cơ sở dữ.
Sau khi tìm được khoảng cách xa nhất cho tất cả các node của đồ thị và lưu vào cơ sở
dữ liệu. Việc tìm kiếm và phân tích sẽ trở nên thuận tiện hơn rất nhiều.
Tìm đường kính của đồ thị từ các dữ liệu đã lưu trong cơ sở dữ liệu: đường kính
chính là giá trị lớn nhất của DMax được lưu trong cơ sở dữ liệu. Truy vấn cơ sơ dữ
liệu lấy ra blogID và khoảng cách Dmax lớn nhất. Thực thi đoạn mã WAVE sau đây
để tìm ra chuỗi các node tạo thành đường kính của đồ thị:
@#`"+blogID+"'.Nd=0.Fd=0.Nb=`stop'.
SQ(
(RP(#.Nd==NONE.Fd+1.Nd=Fd.Nb=P.Fdes=C).
@#`"+blogID+"'.Nd=Fd.Nde=Fdes),
@#Ndes.Fpath=C.RP(#Nb.Fpath:0=C).@#`"+blogID+"'.Np=Fpath
)
66
5.4 Bài toán tìm Tâm và Bán kính
Một khái niệm quan trọng khác trong đồ thị là tâm của đồ thị. Tâm của đồ thị là một
node mà khoảng cách lớn nhất từ node đó tới một node khác bất kì trong đồ thị là nhỏ
nhất. Bán kính là độ dài khoảng cách từ tâm tới node xa nhất trong đồ thị.
Hình 5 12
Ví dụ như với đồ thị Hình 5 12 tâm của đồ thị là B và bán kính của đồ thị là khoảng
cách từ B tới node xa nhất là 2. A không thể là tâm vì khoảng cách từ A tới node xa
nhất – node H - là 3, lớn hơn khoảng cách từ B tới H
Thuật toán: Để tìm node có khoảng cách tới một node bất kì trong đồ thị là ngắn nhất
so với các node khác, với tất cả các node trong đồ thị, ta tìm khoảng cách xa nhất từ
node đó tới các node còn lại trong đồ thị. Trong các khoảng cách tìm được, node nào
có khoảng cách ngắn nhất chính là tâm của đồ thị.
Ta có thể sử dụng kết quả tìm cây đường đi ngắn nhất của bài toán tìm đường kính
trong đồ ở phần 5.3, bán kính cần tìm chính là giá Dmax nhỏ nhất được lưu trong cơ
sở dữ liệu.
67
CHƯƠNG 6: KẾT QUẢ
6.1 Kết quả thực nghiệm
Chương trình được chạy thử trên một vài điều kiện thử nghiệm khác nhau được trình
bày trong các bảng sau.
Thời gian cần thiết để thu thập thông tin về khoảng 20.000 blog khác nhau
Số máy Số nút Thời gian vận hành Điều kiện thiết bị
1 20.503 27’45’’ ADSL 4Mbps
Thời gian cần thiết để tạo lập Mạng tri (3 lần test)
Số máy Số nút Filter
Cách thức tạo
chuỗi WAVE
Thời gian
vận hành
1 20.411 HashCode Short 44s
2 20.411 HashCode Short 55s
4 20.503 HashCode Long 26s
2 20.503 HashCode Long 29s
6.2 Kết luận
Khóa luận tốt nghiệp đã trình bày tổng quan về công nghệ WAVE và ứng dụng của
công nghệ này vào các bài toán phân tích mạng xã hội Yahoo!360.
Với việc phát triển thành công một ứng dụng nhỏ dựa trên nền tảng WAVE có chức
năng thu thập thông tin về các blog Yahoo!360, sau đó tiến hành tạo dựng mạng tri
thức trong WAVE tương ứng với các thông tin về đối tượng và quan hệ giữa các đối
tượng thu thập được, cộng với những kết quả thực nghiệm tương đối khả quan về hiệu
năng của hệ thống, tôi tin tưởng rằng đây sẽ là cơ sở cho việc phát triển các ứng dụng
lớn hơn nhằm hỗ trợ tối đa cho việc phân tích, định hình thông tin đang tồn tại trên các
mạng xã hội hiện nay. Từ đó giúp giải quyết rất nhiều các bài toán nghiên cứu ứng
68
dụng đang được đưa ra để phân tích về các hoạt động của con người dựa trên việc mô
phỏng hoạt động ấy trên mạng xã hội.
69
TÀI LIỆU THAM KHẢO
TÀI LIỆU TIẾNG ANH
[1] Borst, P.M., H.-T Goetz, P. S. Sapaty, and W. Xorn, “Paralled Knowledge
Processing in Open Networks,” Proc. International Conference and Exhibition
“High-Performance Computing in Networks” (HPCN Europe ‘94), Munich,
Germany, April 1994.
[2] Corbin M. J., and P. S. Sapaty, “Distributed Object-Based Simulation in
Wave,” J. Simul. Pract. Theory, Vol. 3, No.3, pp. 157-181, 1995.
[3] Livatharas, C., “Integration of Heterogeneous Databases Using WAVE,” M.Sc.
Project Report, Department of Electrical Engineering, University of Surrey.
Surrey, England, August 1995.
[4] Peter Sapaty, “Mobile Processing in Distributed and Open Environments”,
Wiley-Interscience, 1998.
[5] Sapaty, P.S., “The Wave-0 Language as a Framework of Navigational
Structures for Knowledge Bases Using Semantic Networks,” Proc. USSR
Academy of Sciences: Technical Cybernetics, No. 5, 1986 (in Russian).
[6] Tan, H. K. V., “Distributed Dynamic 3D Virtual Reality,” M. Sc Telematics
Diploma Project (based on WAVE), Department of Electrical Engineering,
University of Surrey, Surrey, England, 1997.
[7] Varbanov, S. and P. S. Sapaty, “An Information System Based on the Wave
Navigation Techniques,” Abstr. International Conference, AIMSA’86, Varna,
Bulgaria, 1986.
[8] Vuong, S., and I. Ivanov, “Mobile Intelligent Agent Systems: WAVE vs.
JAVA,” Proc., etaCOM’96, Portland, Oreg., May 1996.
TRANG WEB THAM KHẢO
[9]
[10]
[11]
[12]
[13]
70
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
BB%93_th%E1%BB%8B
[27]
[28]
[29]
[30]
[31]
[32]
[33]
[34]
[35]
[36]
[37]
sap-xung-hung-xung-ba.htm
[38]
[39]
[40]
Các file đính kèm theo tài liệu này:
- LUẬN VĂN-PHÂN TÍCH MẠNG XÃ HỘI BẰNG CÔNG NGHỆ WAVE - PHÂN TÍCH QUAN HỆ.pdf