Tải bản đầy đủ (.doc) (56 trang)

Tiểu luận môn công nghệ tri thức HỆ THỐNG TÌM KIẾM ĐỒ THỊ THÔNG MINH TRÊN FACEBOOK

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.27 MB, 56 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
T
NGUYỄN THÀNH ĐỆ
CHUYÊN ĐỀ CÔNG NGHỆ TRI THỨC
Đề Tài:
HỆ THỐNG TÌM KIẾM ĐỒ THỊ THÔNG MINH
TRÊN FACEBOOK
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: CH1101073
Niên Khóa: Khóa 6
KHÓA LUẬN TỐT NGHIỆP THẠC SĨ
Báo cáo chuyên đề Công Nghệ Tri Thức
Thaùng 10 – 2013
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
T
NGUYỄN THÀNH ĐỆ
CHUYÊN ĐỀ CÔNG NGHỆ TRI THỨC
Đề Tài:
HỆ THỐNG TÌM KIẾM ĐỒ THỊ THÔNG MINH
TRÊN FACEBOOK
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: CH1101073
Niên Khóa: Khóa 6
GVPT: GS.TSKH. Hoàng Văn Kiếm
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 2
Báo cáo chuyên đề Công Nghệ Tri Thức
Thaùng 10 – 2013
Mục Lục
CHUYÊN CÔNG NGH TRI TH CĐỀ Ệ Ứ 1


CHUYÊN CÔNG NGH TRI TH CĐỀ Ệ Ứ 2
M c L cụ ụ 3
1.1.Gi i thi u và đ t v n đớ ệ ặ ấ ề 6
1.2.Lý do ch n đ tàiọ ề 8
1.3.M c tiêu c a chuyên đụ ủ ề 8
1.4.Ph m vi nghiên c u và ý ngh a th c t c a chuyên đạ ứ ĩ ự ế ủ ề 8
2.1. Tìm ki m theo chi u sâuế ề 9
2.2. Thu t toán tìm ki m theo chi u r ngậ ế ề ộ 10
3.1. Gi i thi uớ ệ 28
3.2. M c đích và M u tìm ki m Graph Search trên Facebookụ ẫ ế 29
3.2.1. M c đích c a Graph Search trên Facebookụ ủ 29
3.2.2. Mẫu m kiếm Graph Search của Facebook 29
3.3. ánh b ng x p h ng trên FacebookĐ ả ế ạ 30
3.4. Thi t l p riêng t trên công c tìm ki mế ậ ư ụ ế 32
3.5. M t vài m u truy v nộ ẫ ấ 35
3.6. T i u hóa th ng hi u c a b n trên tìm ki m đ th c a Facebookố ư ươ ệ ủ ạ ế ồ ị ủ 44
3.7. C s d li u đ th c a Facebookơ ở ữ ệ ồ ị ủ 48
4.1. K t lu nế ậ 53
4.2. Nh n xétậ 53
TÀI LI U THAM KH OỆ Ả 55
Danh mục các ký hiệu, các chữ viết tắt
API: Application Programing Interface – giao diện lập trình ứng dụng
TF-IDF: Term Frequency Inverse Document Frequency – Thuật toán tìm mức độ phổ
biến của tài liệu
THPT : Trung Học Phổ Thông
TAO:
Danh mục các hình vẽ, đồ thị
Hình 1. Cơ sở dữ liệu Neo4j trang 16
Hình 2. Nút trang 17
Hình 3. Mối quan hệ của nút trang 17

Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 3
Báo cáo chuyên đề Công Nghệ Tri Thức
Hình 4. Quan hệ có hướng và kiểu quan hệ trang 18
Hình 5. Thuộc tính của cơ sở dữ liệu đồ thị trang 19
Hình 6. Đường đi(Paths) trang 20
Hình 7. Ví dụ truy vấn đồ thị trang 21
Hình 8. Kết quả tìm kiếm trang 22
Hình 9. Tìm nới yêu thích trang 23
Hình 10. Tìm người dựa trên sở thích trang 24
Hình 11. Nhóm và danh sách bạn bè trang 28
Hình 12. Dựa vào Tag trang 28
Hình 13. Mẫu tìm kiếm trên Facebook trang 31
Hình 14. Thiết lập tìm kiếm đồ thị trang 36
Hình 15. Thiết lập chó nhóm Basic Info và Work and Education trang 37
Hình 16. Mở rộng của việc tìm kiếm trang 37
Hình 17. Mở rộng của việc tìm kiếm 2 trang 37
Hình 18. Kết quả truy vấn 1 trang 39
Hình 19. Kết quả truy vấn 2 trang 40
Hình 20. Kết quả truy vấn 3 trang 41
Hình 21. Kết quả truy vấn 4 trang 42
Hình 22. Kết quả truy vấn 5 trang 43
Hình 23. Kết quả truy vấn 6 trang 44
Hình 24. Kết quả truy vấn 7 trang 45
Hình 25. Kết quả truy vấn 8 trang 46
Hình 26. Kết quả truy vấn 9 trang 46
Hình 27. Kết quả truy vấn 10 trang 47
Hình 28. Quảng cáo trên Graph Search trang 48
Hình 29. Quảng cáo trên Graph Search 2 trang 51
Hình 30. Mô hình cấu hình TAO của Facebook trang 52
Hình 31. Các mối quan hệ của Nút trang 53

Hình 32. Cấu hình TAO đa vùng trang 55
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 4
Báo cáo chuyên đề Công Nghệ Tri Thức
HỆ THỐNG TÌM KIẾM ĐỒ THỊ THÔNG MINH TRÊN FACEBOOK
MỞ ĐẦU
Tìm kiếm thông tin trên internet là rất hữu ích cho mọi người trong xã hội. Giúp cho
chúng ta có được thông tin một cách nhanh chóng nhất. Internet là kho lưu trữ thông tin
khổng lồ của thế giới. Để có thể tìm kiếm thông tin một cách nhanh chóng mà không làm
khó khăn cho người tìm kiếm. Các nhà Công nghệ thông tin đã cho ra đời hàng loạt các
cổ máy tìm kiếm thông tin rất hiệu quả như Google, Yahoo, Bing, Ask.com… Tuy nhiên,
việc tìm kiếm trên các cổ máy tìm kiếm đó vẫn cho ra những kết quả sai lệch và số lượng
kết quả tìm kiếm là quá lớn. Việc lục lội, tìm kiếm trên đống kết quả đó gây khó khăn
không nhỏ đối với người tìm kiếm thông tin. Như vậy, nhu cầu tìm kiếm thông tin chính
xác của con người là vô cùng cần thiết. Do đó, cổ máy tìm kiếm thông tin ngữ nghĩa đã
ra đời để đáp ứng nhu cầu đó. Một cổ máy tìm kiếm thông tin theo đồ thị, đó là tìm kiếm
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 5
Báo cáo chuyên đề Công Nghệ Tri Thức
thông tin đồ thị Facebook. Hiện nay, tuy tìm kiếm đồ thị của Facebook không thể thay
thế các cổ máy tìm kiếm như Google, Yahoo, Ask.com, Bing… nhưng nó vẫn có tính
hữu quả nhất định trong việc tìm kiếm thông tin theo ngữ nghĩa trên mạng xã hội
Facebook. Nó giúp người dùng có một hướng tìm kiếm mới, đó là tìm kiếm theo ngữ
nghĩa.
Em xin chân thành cảm ơn thầy GS.TSKH. Hoàng Văn Kiếm – Giảng viên chuyên đề
Công nghệ tri thức đã nhiệt tình giảng dạy để truyền đạt những kiến thức vô cùng quý
báu, xin chân thành cám ơn ban cố vấn học tập và ban quản trị chương trình đào tạo
thạc sĩ Công nghệ thông tin qua mạng của Đại Học Quốc Gia TPHCM đã tạo điều kiện
về tài liệu tham khảo để em có thể hoàn thành chuyên đề này.
Em xin chân thành cảm ơn
Nguyễn Thành Đệ
CHƯƠNG 1. TỔNG QUAN

1.1. Giới thiệu và đặt vấn đề
Tìm kiếm ngữ nghĩa là một khái niệm mà đã được biết đến từ lâu trong tin
học, nhưng các ứng dụng của nó đến bây giờ mới thật sự thấy rõ. Mặc dù các hệ
thống tìm kiếm lớn như Google, Yahoo, Bing, Ask.com rất hiệu quả trong việc
giúp người dùng thu thập thông tin như chúng vẫn thực sự chưa hiệu quả với việc
tìm kiếm theo ngữ nghĩa. Ví dụ, chúng ta nhập một đoạn tìm kiếm sau vào google
“bố của thủ tướng Nguyễn Tấn Dũng”, ta nhận được một danh sách kết quả
khoảng 2.810.000 kết quả liên quan đến thông tin tìm kiếm này. Chúng ta cũng
nhận kết quả tương tự khi sử Yahoo, Bing, Ask.com để tìm kiếm cụm từ trên. Như
vậy kết quả này quả thật là thiếu chính xác và không hiệu quả, làm hoang mang
tâm lý người tìm kiếm thống tin, việc thu thập thông tin vô cùng khó khăn.
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 6
Báo cáo chuyên đề Công Nghệ Tri Thức
Tìm kiếm theo ngữ nghĩa giúp cho chúng ta có một kết quả chính xác hơn
rất nhiều. Và kỹ thuật này đã được áp dụng trong Facebook, mà Facebook gọi đó
là Graph Search.
Graph Search là gì? Là một công nghệ của Facebook để tìm kiếm người
và vật mà được kết nối trong mạng xã hội.
Mục đích của Graph Search trên Facebook:
- Tìm người mà có cùng sở thích với bạn
- Khám phá thế giới qua ảnh
- Khám phá nhà hàng,shop, cafes, âm nhạc và nhiều hơn thế nữa
Để thực hiện được việc tìm kiếm theo ngữ nghĩa trên xã hội. Thì chúng ta
phải có một kỹ thuật lưu trữ dữ liệu hợp lý, dữ liệu đó phải có kết nối với nhau và
đảm bảo được hiệu năng và hiệu quả của việc tìm kiếm. Như chúng ta đã biết các
kỹ thuật lưu trư như lưu trữ bằng tập tin, bằng cơ sở dữ liệu quan hệ, bằng cơ sở
dữ liệu không quan hệ(NOSQL), lưu trữ dạng Key-Value[6] và bây giờ là lưu trữ
dạng đồ thị. Việc lưu trữ các dữ liệu có kết nối chỉ hiệu quả nhất khi chúng ta chọn
cơ sở dữ liệu đồ thị để lưu trữ. Và lúc này, các thuật toán đồ thị chúng ta rất dễ
dàng để áp dụng, việc tìm kiếm ngữ nghĩa trên dữ liệu có kết nối có tính hiệu quả

rất cao trên cơ sở dữ liệu đồ thị. Hiệu năng thực hiện các câu truy vấn nhanh hơn
rất nhiều so với các cơ sở dữ liệu khác.
Trong chuyên đề này, em rất tâm đắc với việc trình bày cơ sở dữ liệu đồ thị trên
mạng xã hội và các thuật toán tìm kiếm trên nó cụ thể là cơ sở dữ liệu Neo4j[9].
Sau đó em sẽ trình bày chi tiết về công cụ tìm kiếm đồ thị của Facebook , tối ưu
hóa các trang để tốt cho việc tìm kiếm và công cụ và kỹ thuật quản lý dữ liệu
TAO[4-10] của Facebook.
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 7
Báo cáo chuyên đề Công Nghệ Tri Thức
1.2. Lý do chọn đề tài
Tìm kiếm theo ngữ nghĩa trên các hệ thống tìm kiếm là vô cùng hữu ích cho
chúng ta. Giúp cho chúng ta có một kết quả tìm kiếm nhanh chóng và chính xác,
việc thu thập thông tin được nhanh hơn và chính xác hơn. Em chọn đề tài này là
muốn giới thiệu đến chúng ta một kỹ thuật tìm kiếm như vậy, mặc dù chúng ta đã
biết kỹ thuật này từ lâu trong quá trình học, nhưng lại chưa thấy rõ các ứng dụng
mạnh mẽ của nó vào thế giới internet.
1.3. Mục tiêu của chuyên đề
Mục tiêu của chuyên đề là nghiên cứu cơ sở dữ liệu đồ thị, tìm kiếm đồ thị
và ứng dụng đồ thị. Nghiên cứu hệ thống tìm kiếm đồ thị trên Facebook và cách
sử dụng công cụ tìm kiếm ngữ nghĩa hiệu quả.
1.4. Phạm vi nghiên cứu và ý nghĩa thực tế của chuyên đề
Đề tài giới hạn trong phạm vi của các kỹ thuật tìm kiếm trên đồ thị, cơ sở
dữ liệu Neo4j và phép duyệt đồ thị trên Neo4j[9]. Các kỹ thuật tìm kiếm trên hệ
thống tìm kiếm Facebook, cơ sở quản lý dữ liệu bằng TAO[4-11] của Facebook.
Chuyên đề có ý nghĩa giúp cho các nhà tin học có cái nhìn tổng quát về cơ
sở dữ liệu đồ thị và ứng dụng đồ thị. Hướng dẫn cho chúng ta sử dụng các công cụ
tìm kiếm theo ngữ nghĩa nói chung và hệ thống tìm kiếm đồ thị của Facebook nói
riêng một cách dễ dàng và chính xác. Đề tài này cũng giúp ích cho các doanh
nghiệp, các nhà kinh doanh, các nhà tuyển dụng, các nhà marketing tìm thấy
những lợi ích của mình trên các hệ thống tìm kiếm của mạng xã hội như Facebook

nói riêng và hệ thống tìm kiếm ngữ nghĩa nói chung.
CHƯƠNG 2. CÁC THUẬT TOÁN ĐỒ THỊ VÀ CƠ SỞ DỮ LIỆU ĐỒ THỊ
NEO4J
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 8
Báo cáo chuyên đề Công Nghệ Tri Thức
Trong chương này em sẽ giới thiệu một vài thuật toán tìm kiếm đồ thị[7]
mà em được biết và ứng dụng của thuật toán đồ thị trong cơ sở dữ liệu đồ thị
Neo4j. Mặc dù, Facebook cũng đã công bố các kỹ thuật quản lý dữ liệu đồ thị trên
mạng xã hội của công ty này nhưng Neo4j là một cơ sở dữ liệu tiêu biểu cho cơ sở
dữ liệu đồ thị.
2.1. Tìm kiếm theo chiều sâu
Tư tưởng chính là Giả sử chúng ta đang xét trên đồ thị G(V,E). Từ một đỉnh
u

€V hiện thời nào đó ta sẽ thăm tới đỉnh kề v của u và quá trình được lặp lại đối
với đỉnh v. ở bước tổng quát, giả sử hiện tại đang xét đỉnh u
0
, chúng ta sẽ có hai
khả năng sẽ xảy ra:
- Nếu như tồn tại một đỉnh v
0
kề với u
0
mà chưa được thăm thì đỉnh v
0
đó sẽ trở
thành đỉnh đã thăm và quá trình tìm kiếm lại bắt đầu từ đỉnh v
0
đó.
- Ngược lại, nếu mọi đỉnh kề với u

0
đều đã thăm thì ta sẽ quay trở lại đỉnh mà
trước đó ta đến đỉnh u
0
để tiếp tục quá trình tìm kiếm.
Như vậy, trong quá trình thăm đỉnh bằng thuật toán tìm kiếm theo chiều
sâu, đỉnh được thăm càng muộn càng sớm được duyệt xong (Cơ chế Last In First
Out - Vào sau ra trước). Do đó, ta có thể tổ chức quá trình này bằng một thủ tục
đệ quy như sau:
Procedure DFS(u);
Begin
Visit(u);
Daxet[u]:=True;
For v

Kề(u do
if not Daxet[v] then DFS(v);
End;
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 9
Báo cáo chuyên đề Công Nghệ Tri Thức
Và thủ tục duyệt hệ thống toàn bộ đỉnh của đồ thị sẽ là:
Procedure Find;
Begin
Fillchar(Daxet,SizeOf(Daxet),False);
For u

V do
If not Daxet[u] then DFS(u);
End;
Dễ nhận thấy rằng, mỗi lần gọi DFS(u) thì toàn bộ các đỉnh cùng thành phần liên

thông với u sẽ được viếng thăm. Thủ tục Visit(u) là thao tác trên đỉnh u trong từng
bài toán đặt ra cụ thể.
2.2. Thuật toán tìm kiếm theo chiều rộng
Thuật toán này thực ra là sự cải biến về thứ tự duyệt đỉnh trên đồ thị của
tìm kiếm theo chiều sâu bằng cách thay vì dùng một STACK thì ta lại dùng một
hàng đợi QUEUE để kết nạp đỉnh được thăm. Như vậy, đỉnh được thăm càng sớm
sẽ càng sớm trở thành duyệt xong (cơ chế First In First Out - Vào trước ra trước).
Thủ tục được mô tả dưới đây:
Procedure BFS(u);
Begin
Queue:=Empty
Kết nạp u vào Queue;
Daxet[u]:=True;
While Queue<>Empty do
Begin
Lấy v từ Queue;
Visit(v);
For w

Kề(v) do
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 10
Báo cáo chuyên đề Công Nghệ Tri Thức
If not Daxet[w] then
Begin
Kết nạp w vào Queue;
Daxet[w]:=True;
End;
End;
End;
Ta có thủ tục tìm kiếm theo chiều rộng là:

Procedure Find;
Begin
Fillchar(Daxet,SizeOf(Daxet),False);
For u

V do
If not Daxet[u] then BFS(u);
End;
Tương tự như thuật toán tìm kiếm theo chiều sâu, ở thuật toán này mỗi lần gọi thủ
tục BFS(u) thì mọi đỉnh cùng thành phần liên thông với u sẽ được thăm. Thủ tục
Visit(u) như đã nói ở trên.
Từ hai thuật toán trên, rất nhiều bài toán cơ bản trên đồ thị được giải quyết
rất dễ dàng. Vì khuôn khổ chuyên đề, em xin trình bày một số bài toán kinh điển.
2.3. Thuật toán Dijkstra
Cho một đồ thị có trọng số dương: G = (V, E), ký hiệu trọng số là w.
a, z V. Tìm đường đi ngắn nhất từ a đến z.
Các ký hiệu:
• Với x thuộc V, đặt g(x) = độ dài lộ trình được tìm thấy từ a đến x.
• Open = tập hợp các đỉnh được duyệt tới nhưng chưa xét các đỉnh kế.
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 11
Báo cáo chuyên đề Công Nghệ Tri Thức
• Close = tập các đỉnh đã được duyệt và cũng đã xét các đỉnh kế của nó.
• Pre(x) = đỉnh kế trước x trên lộ trình đến x.
Thuật toán Dijstra:
Bước 1: g(a) = 0; pre(a) = “không có”;
Open = {a}; Close = {};
Bước 2:
While Open ≠ {} do
{
2.1: Chọn một x thuộc Open có g(x) nhỏ nhất.

2.2: Chuyển x từ Open sang Close.
2.3 : if (x là mục tiêu) then
Dừng và kết luận: tìm được lời giải.
2.4: Xét các đỉnh kế y của x, xử lý như sau:
TH1: y là đỉnh mới (không thuộc Open và không
thuộc Close)
g(y) = g(x) + w(x,y);
pre(y) = x;
Lưu lại y trong Open;
TH2: y thuộc Open
If g(x) + w(x,y) < g(y) then
{
g(y) := g(x) + w(x,y);
pre(y) := x;
}
}
2.4. Thuật toán A*
Cho một đồ thị có trọng số dương: G = (V, E), ký hiệu trọng số là w.a, z V.
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 12
Báo cáo chuyên đề Công Nghệ Tri Thức
Tìm đường đi ngắn nhất từ a đến z.
Biết thêm thông tin sau đây: từ mỗi đỉnh x, có có một ước lượng “khoảng cách”
từ x đến mục tiêu. Ký hiệu giá trị này là h(x).
Các ký hiệu:
• Với x thuộc V, đặt g(x) = độ dài lộ trình được tìm thấy từ a đến x,
h(x): như giả thiết,
f(x) = g(x) + h(x)
• Open = tập hợp các đỉnh được duyệt tới nhưng chưa xét các đỉnh kế.
• Close = tập các đỉnh đã được duyệt và cũng đã xét các đỉnh kế của nó.
• Pre(x) = đỉnh kế trước x trên lộ trình đến x.

Thuật toán cải tiến Dijstra: A*.
Bước 1:
g(a) = 0; f(a) = h(a);
pre(a) = “không có”;
Open = {a}; Close = {};
Bước 2:
While Open ≠ {} do
{
2.1: Chọn một x thuộc Open có f(x) nhỏ nhất.
2.2: Chuyển x từ Open sang Close.
2.3 : if (x là mục tiêu) then
Dừng và kết luận: tìm được lời giải.
2.4: Xét các đỉnh kế y của x, xử lý như sau:
TH1: y là đỉnh mới (không thuộc Open và không thuộc
Close)
g(y) = g(x) + w(x,y);
f(y) = g(y) + h(y);
pre(y) = x;
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 13
Báo cáo chuyên đề Công Nghệ Tri Thức
Lưu lại y trong Open;
TH2: y thuộc Open
If g(x) + w(x,y) < g(y) then
{
g(y) := g(x) + w(x,y);
f(y) := g(y) + h(y);
pre(y) := x;
}
}
Ngoài ra, còn có một vài thuật toán nữa như thuật toán PRIM & KRUSKAL

nhưng vì phạm vi của bài chuyên đề nên em chỉ trình bày một vài thuật toán mà
được áp dụng cho phần cơ sở dữ liệu đồ thị ở phần sau.
2.5. Cơ sở dữ liệu đồ thị Neo4j
Mạng xã hội đồ thị của Facebook – Cơ sở dữ liệu nằm bên dưới máy tìm
kiếm đồ thị(Graph Search) đã được công bố. Nó chỉ là một trong những cơ sở dữ
liệu đồ thị(Graph databases) được sử dụng cho các dữ liệu lớn, phức tạp, dữ liệu
được kết nối. Neo4j là một cơ sở dữ liệu khác dẫn đầu về cơ sở dữ liệu đồ thị, mã
nguồn mở và được nhiều hãng sử dụng như Cisco, Adobe, Squidoo, Intuit.
Neo4j không phải là công nghệ mà các nhà phát triển của Facebook dùng
cho sản phẩm của họ, nhưng nó đại diện cho một cơ sở dữ liệu đồ thị mới để xử lý
các dữ liệu kết nối phức tạp hơn cả cơ sở dữ liệu Nosql. Một vài mã nguồn cho cơ
sở dữ liệu đồ thị như InfiniteGraph, InfoGrid, OrientDB, BigData, DEX,
HyperGraphDB, OQGraph and ArangoDB.
Cơ sở dữ liệu đồ thị là một loại của cơ sở dữ liệu NOSQL mà nó có thêm
phần xử lý cho dữ liệu có kết nối. Dữ liệu có kết nối là phổ biến trong mạng xã
hội, mạng lưới logistics(dành cho các gói định tuyến), đồ thị giao dịch tài chính(để
phát hiện gian lận), mạng viễn thông, tối ưu hóa quảng cáo, máy giới thiệu, tin
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 14
Báo cáo chuyên đề Công Nghệ Tri Thức
sinh học, và rất nhiều lĩnh vực khác nữa. Nên việc lựa chọn Cơ sỡ dữ liệu đồ thị
cho các ứng dụng có liên quan đến lĩnh vực trên là hợp lý và mang lại hiểu quả
cao.
2.5.1. Giới thiệu về Cơ sở dữ liệu đồ thị Neo4j
Cơ sở dữ liệu đồ thị Neo4j là một cơ sở dữ liệu mã nguồn mở được phát
triển bởi(Neo4j) dựa trên ý tưởng lý thuyết đồ thị. Nó được thiết kế dựa trên cơ sở
dữ liệu quan hệ. Tối ưu hóa bằng cấu trúc dữ liệu đồ thị thay vì là dữ liệu bảng.
Khi làm việc với Neo4j, cơ sở dữ liệu ứng dụng của bạn sẽ được biểu diễn
bằng đồ thị, như đồ thị dưới đây:
Hình 1. Cơ sở dữ liệu Neo4j
Nền tảng của mô hình đồ thị là nút(nodes) và các mối quan hệ(relationships) của

nút.
- Nút(nodes): Trong Neo4j nút và mối quan hệ của nút có thể chưa thuộc
tính(properties). Những nút đại diện cho thực thể(entities), nhưng còn phụ
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 15
Nút
Nút
Báo cáo chuyên đề Công Nghệ Tri Thức
thuộc vào mối quan hệ cụ thể mà có thể được sử dụng với những mục đích
khác nhau.Ví dụ:
Hình 2. Nút
- Mối quan hệ(relationships):Mối quan hệ giữa các nút là bộ phận quan trọng
của cơ sở dữ liệu đồ thị. Chúng cho phép ta tìm kiếm dựa trên mối quan hệ của
dữ liệu. Cũng giống như nút, mối quan hệ cũng có thuộc tính của thực thể.
Một quan hệ kết nối 2 nút và đảm bảo phải có nút bắt đầu và nút kết thúc. Những
mối quan hệ trực tiếp, chúng có thể được xem như là cung đi ra(outgoing) và cung
đi vào(incoming) của nút. Ví dụ xem hình sau:

Hình 3. Mối quan hệ của nút
Và một nút có thể quan hệ với chính nó:
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 16
Quan hệ đi vào
Quan hệ đi ra
Báo cáo chuyên đề Công Nghệ Tri Thức
Tất cả các mối quan hệ có một kiểu quan hệ(relationship type). Ví dụ sau đây cho
thấy việc follow của một mạng xã hội đơn giản với hai kiểu quan hệ(relationship
type):
Hình 4. Quan hệ có hướng và kiểu quan hệ
Sử dụng quan hệ có hướng và kiểu (type)
What How
người follow Quan hệ follows đi ra, độ sâu 1

Người được follow Quan hệ follows đi vào, độ sâu 1
Người block Quan hệ block đi ra, độ sâu 1
Người được block Quan hệ block đi vào, độ sâu 1
- Thuộc tính(properties): Cả hai nút(nodes) và mối quan hệ(relationship) đều có
thể có thuộc tính(properties). Thuộc tính là khóa-giá trị mà khóa là chuỗi. Giá
trị thuộc tính có thể là giá trị của một kiểu dữ liệu nào đó hoặc có thể làm
mảng của một kiểu dữ liệu nào đó. Ví dụ giá trị string, int[] là giá trị hợp lệ của
thuộc tính. Chú ý rằng NULL không là giá trị hợp lệ của giá trị thuộc tính.
Nulls có thể được thay thế là sự vắng mặt của khóa.
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 17
Báo cáo chuyên đề Công Nghệ Tri Thức
Hình 5. Thuộc tính của cơ sở dữ liệu đồ thị
- Đường đi(Paths): Một đường kết nối có thể qua nhiều nút với việc kết nối qua
các mối quan hệ, thông thường là một truy vấn hay kết quả phép duyệt
Hình 6. Đường đi(Paths).
Đường đi ngắn nhất có độ dài bằng 0, là độ thì có một nút.
2.5.2. Duyệt đồ thị trên Neo4j
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 18
Báo cáo chuyên đề Công Nghệ Tri Thức
Duyệt đồ thị có nghĩa là viến thăm các nút, những mối quan hệ theo một số
luật. Hầu như các trường hợp chỉ là một đồ thị con được viến thăm. Như bạn đã
biết mối quan tâm lớn nhất của đồ thị là nút và mối quan hệ của nút.
Neo4j cung cấp cho chúng ta API mà cho phép chúng ta duyệt đồ thị theo
nhiều phép duyệt khác nhau. Chúng ta có thể duyệt theo chiều rộng, duyệt theo
chiều sâu, A* và Dijkstra.
Neo4j cung cấp một framework cho duyệt đồ thị. Ngoài ra cũng có lựa
chọn khác ở Neo4j cho phép duyệt đồ thị hoặc truy vấn đồ thị bằng ngôn ngữ truy
vấn Cypher và Grelin.
2.5.3. Một vài ví dụ sử dụng truy vấn với Neo4j
Ở phần này em xin trình bày một vài ví dụ để làm rõ các truy vấn đến cơ sở dữ

liệu đồ thị thông qua các API và ngôn ngữ truy vấn Neo4j.
Ví dụ: Ta có một hệ cơ sở dữ liệu trang mạng xã hội(chẳng hạn như facebook),
giờ chúng ta có yêu cầu sau:
Ví dụ 1: Lấy ra những thành viên nhóm của một người dùng(user)
Sử dụng phép duyệt của Framework Java API, cấu truy vấn giống như thế này:
Node jale = getNodeByName( "Jale" );
traverser = jale.traverse(
Traverser.Order.DEPTH_FIRST,
StopEvaluator.END_OF_GRAPH,
ReturnableEvaluator.ALL_BUT_START_NODE,
RoleRels.MEMBER_OF, Direction.OUTGOING,
RoleRels.PART_OF, Direction.OUTGOING );
Kết quả:
Found: ABCTechnicians at depth: 0
Found: Technicians at depth: 1
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 19
Báo cáo chuyên đề Công Nghệ Tri Thức
Found: Users at depth: 2
Sử dung ngôn ngữ truy vấn Cypher của Neo4j, thì ta viết câu truy vấn cho đề bài
trên như sau:
START jale=node(10)
MATCH jale-[:MEMBER_OF]->()-[:PART_OF*0 ]->group
RETURN group.name
Kết quả:
Ví dụ 2: Lấy ra tất cả nhóm
Sử dung ngôn ngữ truy vấn Cypher của Neo4j, ta có thể viết như sau:
START refNode=node(16)
MATCH refNode<-[:ROOT]->()<-[:PART_OF*0 ]-group
RETURN group.name
Kết quả

Ví dụ 3: Lấy tất cả thành viên của tất cả các nhóm
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 20
Báo cáo chuyên đề Công Nghệ Tri Thức
Trong Cypher:
START refNode=node(16)
MATCH refNode<-[:ROOT]->root, p=root<-[PART_OF*0 ]-()<-
[:MEMBER_OF]-user
RETURN user.name, min(length(p))
ORDER BY min(length(p)), user.name
Kết quả:
Ví dụ 4. Cho đồ thị sau:
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 21
Báo cáo chuyên đề Công Nghệ Tri Thức
Hình 7. Ví dụ về truy vấn đồ thị
- Để tìm kiếm bạn của bạn của Joe.
Câu truy vấn như sau:
START joe=node:node_auto_index(name = "Joe")
MATCH joe-[:knows*2 2]-friend_of_friend
WHERE not(joe-[:knows]-friend_of_friend)
RETURN friend_of_friend.name, COUNT(*)
ORDER BY COUNT(*) DESC, friend_of_friend.name
Kết quả trả về như sau:
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 22
Báo cáo chuyên đề Công Nghệ Tri Thức
Hình 8. Kết quả tìm kiếm
- Tìm nơi ưu thích
Ví dụ cho đồ thị sau:
Hình 9. Tìm nơi yêu thích
Tìm kiếm những nơi mà người dùng thích:
 Xác định có ai thích nơi x không.

 Số lượng người thích nơi ấy
Câu truy vấn sẽ như sau:
START place=node:node_auto_index(name = "CoffeeShop1")
MATCH place<-[:favorite]-person-[:favorite]->stuff
RETURN stuff.name, count(*)
ORDER BY count(*) DESC, stuff.name
Kết quả trả về danh sách các nơi được người yêu thích
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 23
Báo cáo chuyên đề Công Nghệ Tri Thức
- Tìm kiếm người dựa trên sở thích
Đồ thị sau:
Hình 10. Tìm người dựa trên sở thích
Tìm kiếm những bạn mới dựa trên danh sách ưu thích của họ như “person”
Câu truy vấn như sau:
START me=node:node_auto_index(name = "Joe")
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 24
Báo cáo chuyên đề Công Nghệ Tri Thức
MATCH me-[:favorite]->stuff<-[:favorite]-person
WHERE NOT(me-[:friend]-person)
RETURN person.name, count(stuff)
ORDER BY count(stuff) DESC
Và đây là kết quả của cấu truy vấn:
- Tìm kiếm người dựa trên nhóm và danh sách bạn bè
Đồ thị sau:
Hệ Thống Tìm Kiếm Đồ Thị Thông Minh Facebook – Nguyễn Thành Đệ – CH1101073 Trang 25

×