5. Nội dung nghiên cứu
1.3.3. Ngôn ngữ truy vấn Cyper
Cypher là một ngôn ngữ truy vấn cơ sở dữ liệu đồ thị, với ngôn ngữ này chúng ta có thể tương tác như là truy vấn, cập nhập hay là quản trị một cách hiệu quả với cơ sở dữ liệu đồ thị. Ngôn ngữ này được thiết kế giúp cho developer cũng như là các chuyên gia có thể thuận tiện khi làm việc với Neo4j. Cypher vốn được thiết kế đơn giản, tuy nhiên nó rất mạnh mẽ. [[11]]
Cypher được lấy cảm hứng từ rất nhiều các cách tiếp cận khác nhau, một số các từ khóa như là WHERE, ORDER BY được lấy cảm hứng từ ngôn ngữ SQL, trong khi đó pattern matching thì lại được mượn từ SPARQL. Ngoài ra một vài ngữ nghĩa thì lại được mượn từ các ngôn ngữ khác như là Haskell và Python. Cấu trúc của Cypher được xây dựng dựa trên ngôn ngữ Tiếng Anh với ngữ nghĩa thuận tiện cho người thao tác với ngôn ngữ, điều này giúp cho việc viết và đọc các câu query cũng dễ dàng hơn. Dưới đây là một số câu truy vấn được tìm hiểu để xử lý trong khuôn khổ của luận văn này.
MATCH VÀ RETURN.
MATCH (mẫu) [WHERE <điều kiện>] RETURN kq
Trong đó:
- MATCH: là những gì tìm kiếm một nút, mối quan hệ, nhãn, … tồn tại trong cơ sở dữ liệu. MATCH hoạt động khá giống SELECT trong SQL. Chúng ta có thể tìm thấy tất cả các nhãn nút trong cơ sở dữ liệu, tìm kiếm một nút cụ thể, tìm tất cả các nút có mối quan hệ cụ thể, tìm kiếm các mẫu nút và mối quan hệ, v.v. bằng cách sử dụng MATCH.
+ WHERE: cung cấp các tiêu chí để lọc các mẫu kết quả phù hợp
- RETURN: Mệnh đề này quy định việc các nút, các mối quan hệ và các thuộc tính trong dữ liệu được nối nên được trả về như thế nào cho client.
Ví dụ: Cho nhãn HocSinh có 1 nút với thuộc tính {name: "Lam"} MATCH (s: HocSinh {name: "Lam"}) RETURN s CREATE.
Dùng để tạo nút:
CREATE (tên:Nhãn {thuộc tính: giá trị,…}), …
Ví dụ: Tạo thêm một node có nhãn Hocsinh với thuộc tính {name: "Vy"}
CREATE (s: Hocsinh {name: "Vy"}) RETURN s
Lưu ý: lệnh RETURN là không bắt buộc. Nút vừa tạo nsẽ đứng độc lập và chưa có mối quan hệ.
Để thiết lập mối quan hệ cho nó, ta phải sử dụng MATCH để tránh lặp lại nút đã tạo.
Ví dụ:
MATCH (lam: HocSinh {name: “Lam”}) MATCH (vy: HocSinh {name: “Vy”})
CREATE (lam)-[rel:IS_FRIEND_WITH]->(vy)
Lưu ý: Nếu không có 2 lệnh MATCH như trên, Cypher sẽ tự động tạo các nút mới mà không kiểm tra xem nó đã tồn tại trong csdl hay chưa.
Cập nhật dữ liệu.
Sử dụng MATCH ... SET để cập nhật thuộc tính cho đối tượng (nút, quan hệ):
- Xác định đối tượng: MATCH …
- Set giá trị cho các thuộc tính: SET dt.thuocTinh = giaTri Ví dụ: Thêm thuộc tính birthday cho HocSinh Lam
MATCH (h: HocSinh {name: “Lam”}) SET h.birthday = date(“2004-03-01”) MERGE:
Lệnh MERGE có tác dụng tìm dữ liệu, nếu không có thì tạo đối tượng, nếu có thì xác định được đối tượng theo các giá trị.
Thường dùng lệnh MERGE để tạo các đối tượng để tránh trùng lặp. MERGE cho nút:
MERGE (nút: Nhãn {các thuộc tính}) Ví dụ: Chèn HocSinh Vy vào CSDL bằng MERGE
MERGE (vy: HocSinh {name: “Vy”}) RETURN vy
Nút vy đã tồn tại trong Csdl trước đó, nên câu lệnh trên sẽ không tạo thêm nút vy mới mà chỉ trả về nút vy đã có.
MERGE trên 1 mối quan hệ: Sử dụng tương tự như Create. Nếu mối quan hệ chưa được thiết lập, MERGE sẽ thực hiện tạo mới toàn bộ (mặc dù nút đã tồn tại).
Ví dụ: Thực hiện tạo mối quan hệ bạn bè giữa Lam và Vy MATCH (l: HocSinh {name: “Lam”})
MATCH (v: HocSinh {name: “Vy”}) MERGE (l)-[r: IS_FRIEND_WITH]->(v) RETURN l, r, v
Sử dụng MATCH để thực hiện khớp dữ liệu trước khi tạo mối quan hệ. Mối quan hệ này đã được tạo trước đó nên MERGE chỉ cần trả về dữ liệu đã tồn tại.
Lưu ý: Nếu chỉ sử dụng MERGE mà không khớp dữ liệu sẽ dẫn đến việc lệnh MERGE tạo lại các nút đã tạo nếu không tìm thấy mối quan hệ giữa các nút đó dẫn đến bị lặp dữ liệu.
WHERE.
So sánh cú pháp không sử dụng và sử dụng WHERE:
MATCH (hocsinh: HocSinh {name: “Lam”}) RETURN hocsinh
Với WHERE:
MATCH (hocsinh: HocSinh) WHERE hocsinh.name = “Lam” RETURN hocsinh
Mặc dù cả hai truy vấn đều trả về cùng 1 kết quả. Tuy nhiên WHERE có thể làm nhiều hơn thế.
WHERE NOT: trả về thuộc tính không khớp với mẫu. Ví dụ:
MATCH (hocsinh: HocSinh)
WHERE NOT hocsinh.name = “Lam” RETURN hocsinh
Ngoài ra, WHERE còn có thể đi cùng với AND, OR, XOR. Truy vấn trong một phạm vi nhất định với WHERE:
Ví dụ:
MATCH (hocsinh: HocSinh)
WHERE 2003 <= hocsinh.yearBirthday <= 2004 RETURN hocsinh
WHERE EXISTS(thuộc tính): kiểm tra sự tồn tại của một thuộc tính trong đối tượng, một quan hệ, .v.v..
Ví dụ:
Tìm những học sinh chưa có ngày sinh. MATCH (h: HocSinh)
WHERE NOT EXISTS (h.Birthday) RETURN h
WITH:
Dùng khi cần lấy kết quả truy vấn trong quá trình xử lý truy vấn và dùng nó làm điều kiện hay tính toán.
WITH dùng với hàm tính toán để làm điều kiện
Ví dụ: tìm những trường PT có nhiều hơn 50 sinh viên học tại trường ĐHQN. MATCH (t:TruongPT)-[:HOCPT]-(s:SinhVien) WITH t, count(*) as sl WHERE sl>50 RETURN t.tenTruong 1.3.4. Khoa học dữ liệu đồ thị.
Khoa học dữ liệu đồ thị là một phương pháp tiếp cận theo hướng khoa học để thu thập kiến thức từ các mối quan hệ và cấu trúc trong dữ liệu, điển hình là để cung cấp các dự đoán. Nó mô tả một bộ công cụ gồm các kỹ thuật giúp các nhà khoa học dữ liệu trả lời các câu hỏi và giải thích kết quả bằng cách sử dụng dữ liệu đồ thị.
Trong phạm vi nghiên cứu của luận văn chỉ đi tập trung vào tìm hiểu Thư viện Khoa học Dữ liệu Đồ thị Neo4j (GDS).
Hình 1.29: Các phiên bản Neo4j được hổ trợ thư viện GDS v1.6
Thư viện Khoa học Dữ liệu Đồ thị Neo4j (GDS) được cung cấp dưới dạng một plugin cho cơ sở dữ liệu Đồ thị Neo4j. Plugin cần được cài đặt vào cơ sở dữ liệu và được thêm vào danh sách cho phép trong cấu hình Neo4j.
Hình 1.30: Cài đặt GDS ở cấp độ cơ sở dữ liệu
Hình 1.31: Cài đặt GDS trong cấu hình Neo4j
Điều này là cần thiết vì thư viện GDS truy cập các thành phần cấp thấp của Neo4j để tối đa hóa hiệu suất.
Để kiểm tra phiên bản GDS ta vào trình duyệt Neo4j và gọi hàm gds.version()
RETURN gds.version()
Hình 1.32: Kiểm tra phiên bản GDS
Để liệt kê tất cả các thuật toán đã cài đặt trong GDS, sử dụng thủ tục gds.list():
Hình 1.33: Các thuật toán trong GDS
Có rất nhiều thuật toán GDS được trình bày trong [[11]]. Trong nội dung luận văn nghiên cứu chỉ tập trung tìm hiểu một số hàm GDS liên quan. Điều này được mô tả chi tiết ở mục 2.2.2 của luận văn này.
1.4. Tiểu kết chương 1.
Trong nội dung chương đầu tiên này, luận văn đã trình bày các kiến thức cũng như các khái niệm về đồ thị, cơ sở dữ liệu đồ thị và Neo4j. Đồng thời, luận văn cũng đã giới thiệu tổng quan về mô hình dữ liệu, ngôn ngữ truy vấn Cypher và thư viện khoa học dữ liệu đồ thị của Neo4j. Trong chương tiếp theo, luận văn sẽ trình bày chi tiết về bài toán dự đoán liên kết và dự đoán liên kết trên cơ sở dữ liệu đồ thị Neo4j là nội dung chính của luận văn.
Chương 2: BÀI TOÁN DỰ ĐOÁN LIÊN KẾT TRÊN CƠ SỞ DỮ LIỆU NEO4J
Trên cơ sở nội dung của chương 1, trong chương này luận văn đi sâu tìm hiểu các nội dung về bài toán dự đoán liên kết, ứng dụng của bài toán dự đoán liên kết trong các lĩnh vực, các thuật toán giải quyết bài toán dự báo liên kết. Song song với đó tìm hiểu về ưu điểm của CSDL đồ thị Neo4j và các thuật toán dự đoán liên kết trong thư viện Neo4j sử dụng cho bài toán dự đoán liên kết. Cuối cùng là tìm hiểu việc xây dựng mô hình học máy phù hợp với bài toán dự đoán liên kết.
2.1. Bài toán dự đoán liên kết
2.1.1. Giới thiệu bài toán.
Bài toán dự đoán liên kết (Link prediction) có thể nói là một trong những lĩnh vực phổ biến. Với các bài toán dự đoán liên kết, chúng ta có thể xây dựng dữ liệu muốn thử nghiệm và dự đoán việc tạo liên kết trong tương lai. Các thuật toán dự đoán liên kết sử dụng dữ liệu lịch sử để dự đoán sự xuất hiện của một liên kết mới trong mạng hoặc để xác định các liên kết có thể tồn tại nhưng không được thể hiện trong dữ liệu, chẳng hạn hoặc khi khách hàng mới tham gia vào một nền tảng. Ví dụ: người dùng LinkedIn/ Facebook mới.
Dự đoán liên kết đã có từ lâu, nhưng có thể nói đã được phổ biến với giới công nghệ bởi một bài báo do Jon Kleinberg và David Liben-Nowell [[4]] viết vào năm 2004.
Với một đồ thị G = (V, E), trong đó các phần tử của V được gọi là đỉnh và các phần tử của E được gọi là cạnh, nhiệm vụ của chúng ta là dự đoán sự tồn tại của một cạnh chưa biết trước đó e_12 ∉ E giữa các đỉnh v_1, v_2 ∈ V. Sau đó, chúng ta có thể sử dụng mô hình dự đoán liên kết để giới thiệu hai đỉnh với nhau.
2.1.1. Ứng dụng
Bài toán dự đoán liên kết có nhiều ứng dụng trong thực tế. Ứng dụng dự đoán liên kết thường thấy nhất là trong các công cụ đề xuất như các kết nối mới trên mạng xã hội hoặc các sản phẩm liên quan trên các trang mua sắm, hệ gợi ý, mối liên hệ giữa các phân tử trong mạng sinh học, đồng tác giả tiềm năng trong mạng lưới trích dẫn, mối quan tâm đến nghệ sĩ .v.v… Tất cả các kịch bản này đều có thể được sử dụng để dự đoán liên kết.
Ví dụ: Trong phân tích mạng xã hội thì dự đoán liên kết là một hướng nghiên cứu chính trong lĩnh vực này, nó rất hữu ích trong việc phân tích và tìm hiểu các nhóm xã hội. Sự hiểu biết như vậy có thể dẫn đến việc triển khai hiệu quả các công cụ để xác định các nhóm ẩn hoặc tìm kiếm các thành viên bị mất tích của các nhóm .v.v… vốn là những vấn đề phổ biến nhất trong nghiên cứu điều tra tội phạm và an ninh.
2.1.2. Phương pháp dự đoán liên kết.
Các phương pháp này tính toán điểm số cho một cặp nút, trong đó điểm số có thể được coi là thước đo mức độ gần nhau hoặc “độ giống nhau” giữa các nút đó dựa trên cấu trúc liên kết đồ thị.
Hình 2.1 mô tả tương đối đầy đủ về các phương pháp dự đoán liên kết. Dưới đây là các thuật toán của các phương pháp dự đoán liên kết dựa trên lân cận nút được nghiên cứu xử lý trong khuôn khổ luận văn này
Hàng xóm chung (CN).
Một trong những thước đo đơn giản nhất mà chúng ta có thể tính toán là những người hàng xóm chung. Số đo hàng xóm chung đó được đưa ra như sau với x, y là các nút trong đồ thị:
, ( ) ( )
score x y x y (1)
Dự đoán hàng xóm chung nắm bắt quan điểm rằng hai người lạ có một người bạn chung có thể được giới thiệu bởi người bạn đó.
Newman [[6]] đã tính toán đại lượng này trong bối cảnh mạng cộng tác, xác minh mối tương quan thuận giữa số lân cận chung của x và y tại thời điểm t, và xác suất x và y sẽ cộng tác tại một thời điểm nào đó sau t [[3]].
Hệ số Jaccard (JC).
Hệ số Jaccard là thước đo CN chuẩn hóa.
( ) ( ) , ) ) ( ( x score x y x y y (2)
Adamic Adar (AA).
Thuật toán này được Lada Adamic và Eytan Adar giới thiệu vào năm 2003 với x, y là các nút trong đồ thị: ( ) ( ) ) , 1 log | ( | z x y s e z cor x y (3)
Phép đo này xây dựng các láng giềng chung, nhưng thay vì chỉ đếm những láng giềng đó, nó tính tổng log nghịch đảo của mức độ của từng láng giềng.
Mức độ của một nút là số lượng hàng xóm mà nó có, và trực giác đằng sau thuật toán này là khi nói đến việc sử dụng bộ quy tắc “tam giác đóng [5]”, các nút có mức độ thấp có khả năng ảnh hưởng nhiều hơn hay phép đo này có
tầm quan trọng đối với những người láng giềng chung với mức độ thấp. Kết nối ưu tiên (PA).
Một khái niệm nổi tiếng trong mạng xã hội là người dùng có nhiều bạn bè có xu hướng tạo ra nhiều kết nối hơn trong tương lai. Phép đo chỉ quan tâm đến mức độ của nút bất kể loại nút có thể là gì. Với x, y là các nút trong đồ thị:
, ( ) ( )
score x y x y (4)
Phép đo này là một trong những phép tính dễ dàng nhất - lấy tích số của mức độ của mỗi nút.
2.2. Dự đoán liên kết trên cơ sở dữ liệu đồ thị Neo4j
2.2.1. Ưu điểm của cơ sở dữ liệu đồ thị đối với bài toán dự đoán liên kết.
Cơ sở dữ liệu Neo4j là một trong những hệ cơ sở dữ liệu đồ thị nổi tiếng hiện nay, trong Neo4j có tích hợp các thuật toán dự đoán liên kết thuận lợi cho việc thử nghiệm các bài toán dự đoán liên kết.
Trong bài toán dự đoán liên kết dữ liệu thường có mối liên hệ với nhau nên việc sử dụng cơ sở dữ liệu mô hình đồ thị để lưu trữ dữ liệu cho bài toán dự đoán liên kết sẽ khai thác được nhiều điểm mạnh của mô hình dữ liệu đồ thị. Ưu điểm chính của mô hình đồ thị là thời gian phát triển nhanh và tính linh hoạt. Chúng ta có thể nhanh chóng thêm chức năng mới mà không ảnh hưởng đến việc triển khai hiện có.
Đối với cơ sở dữ liệu đồ thị Neo4j đã xây dựng thư viện hỗ trợ cho bài toán dự đoán liên kết nên việc sử dụng cơ sở dữ liệu Neo4j lưu trữ dữ liệu sẽ thuận lợi cho những bài toán ứng dụng dự đoán liên kết.
2.2.2. Phương pháp sử dụng.
Luận văn sử dụng các thư viện thuật toán đồ thị hỗ trợ cho bài toán dự đoán liên kết của Neo4j và hai thuật toán là đếm số tam giác và hệ số phân cụm cục bộ trong nhóm các thuật toán phát hiện cộng đồng để nâng cao khả
năng dự đoán liên kết.
Hiện tại, thư viện thuật toán đồ thị Neo4j bao gồm 6 thuật toán dự đoán liên kết: thuật toán Adamic Adar, hàng xóm chung, Kết nối ưu tiên, Phân bổ tài nguyên, Cùng cộng đồng, Tổng số lân cận.
Thư viện thuật toán chứa hàm để tính toán độ gần nhau giữa hai nút. Điểm số được tính toán sau đó có thể được sử dụng để dự đoán các mối quan hệ mới giữa chúng. Kết quả trả về giá trị 0 cho biết hai nút không gần nhau, trong khi giá trị cao hơn cho biết các nút gần nhau hơn.
Adamic Adar
Cú pháp:
RETURN gds.alpha.linkprediction.adamicAdar(nut1: Nút, nut2: Nút, { relationshipQuery:Xâu,
direction:Xâu })
Trong đó:
Bảng 2.1: Các thông số cú pháp thư viện thuật toán Adamic Adar
Tên Kiểu Mặc đinh Kiểu
Optional Mô tả
nut1 Nút null Không Nút
nut2 Nút null Không Nút khác
relationship
Query Xâu null Có
Kiểu quan hệ được sử dụng để tính toán độ giống nhau giữa nut1 và nut2 direction Xâu both (outgoing, i ncoming) Có
Hướng quan hệ được sử dụng để tính toán độ giống nhau
giữa nut1và nut2
Hàng xóm chung.
Cú pháp:
RETURN gds.alpha.linkprediction.commonNeighbors(nut1: Nút, nut2: Nút,{
relationshipQuery: Xâu, direction:Xâu
})
Trong đó:
Bảng 2.2: Các thông số cú pháp thư viện thuật toán hàng xóm chung
Tên Kiểu Mặc đinh Kiểu
Optional Mô tả
nut1 Nút null Không Nút nut2 Nút null Không Nút khác relationship
Query Xâu null Có
Kiểu quan hệ được sử dụng để tính toán độ giống nhau giữa nut1và nut2
direction Xâu
both (outgoing, i
ncoming)
Có Hướng quan hệ được sử dụng để tính toán độ giống nhau giữa nut1và nut2
Kết nối ưu tiên.
Cú pháp:
RETURN gds.alpha.linkprediction.preferentialAttachment(nut1:Nút, nut2:Nút, {
relationshipQuery:Xâu, direction:Xâu
})
Trong đó:
Bảng 2.3: Các thông số cú pháp thư viện thuật toán đính kèm thích hợp