--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Đồ thị tri thức (2) - Lưu trữ KG trên PostgreSQL

Bài trước: Đồ thị tri thức (1) - Tổng quan
-----

2. Lưu trữ KG trên PostgreSQL

Ở phần trước, bạn đã thực hiện cài đặt KG trên Python, trong đó:

- KG là một tập hợp các bộ-3: (Thực thể) -[Mối quan hệ]-> (Thực thể)

- Python sử dụng kiểu dữ liệu tuple để biểu diễn bộ-3

- Python sử dụng kiểu list để chứa toàn bộ KG (toàn bộ các bộ-3)

Với cách làm trên, chúng ta đã thực hiện cài đặt KG trên bộ nhớ máy tính (trên RAM). Cách cài đặt này chủ yếu để bạn tìm hiểu về KG, chứ không dùng trên môi trường thực tế. Vì nó có một số hạn chế sau:

- Khi tắt máy hoặc tắt chương trình thì KG cũng biến mất

- KG có kích thước lớn sẽ làm tràn bộ nhớ

- Không hỗ trợ xử lý đồng thời 

- Thiếu công cụ truy vấn

Trong thực tế, với các hệ thống phần mềm lớn, có một số cách sau để lưu KG:

- Sử dụng Hệ quản trị cơ sở dữ liệu (HQTCSDL) thông thường

- Sử dụng Hệ quản trị cơ sở dữ liệu chuyên cho KG

- Kết hợp trong các hệ thống AI hiện đại

2.1 Sử dụng HQTCSDL thông thường

Cách này tận dụng hệ thống có sẵn của doanh nghiệp, tiện cho việc cài đặt, tiết kiệm chi phí, phù hợp với KG chưa quá lớn và không đòi hỏi hiệu năng xử lý cao.

Bạn có thể sử dụng PostgreSQL, MySQL, SQL Server, MongoDB, Redis.

Thực hành cài đặt

Trên máy tính của bạn đang có HQTCSDL nào thì bạn thực hiện cài đặt KG trên đó.

Ví dụ, tôi sẽ cài đặt trên PostgreSQL.

Để lưu trữ KG lên PostgreSQL, cách hiệu quả nhất là dùng Danh sách kề (Adjacency List), gồm 2 bảng:

- Bảng entities: Lưu các thực thể

- Bảng relationships: Lưu bộ-3, gồm thực thể nguồn (source_id), thực thể địch (target_id) và tên mối quan hệ (relation)

Bước 1: Thiết kế và tạo CSDL trong PostgreSQL

- Mở pgAdmin, tạo một CSDL mới (ví dụ: knowledge_graph_db) và chạy tập lệnh DDL sau:

[SQL]

-- 1. Tạo bảng lưu trữ các thực thể (entities)

CREATE TABLE IF NOT EXISTS entities (

    id SERIAL PRIMARY KEY,

    name VARCHAR(255) UNIQUE NOT NULL

);

-- 2. Tạo bảng lưu trữ các mối quan hệ (Relationships / Edges)

CREATE TABLE IF NOT EXISTS relationships (

    id SERIAL PRIMARY KEY,

    source_id INT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,

    target_id INT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,

    relation VARCHAR(255) NOT NULL,

    CONSTRAINT unique_triple UNIQUE(source_id, target_id, relation)

);

Bước 2: Viết mã Python để chèn dữ liệu vào PostgreSQL

Để làm việc với PostgreSQL từ Python, bạn sử dụng thư viện psycopg2.

Cài đặt thư viện psycopg2 (nếu chưa có):

[CMD]

pip install psycopg2

Viết mã nguồn Python:

[insert_kg.py]

import psycopg2


# 1. Thông tin kết nối CSDL (Hãy thay đổi thông số theo cấu hình của bạn)

DB_CONFIG = {

    "dbname": "knowledge_graph_db",

    "user": "postgres",

    "password": "your_password",  # Thay mật khẩu của bạn vào đây

    "host": "localhost",

    "port": "5432"

}


# Tập bộ-3 (triples) đầu vào

triples = [

    ("RAG", "LLM", "cải thiện"),

    ("RAG", "Knowledge Graph", "kết hợp với"),

    ("Knowledge Graph", "Hiện tượng Hallucination", "giúp giảm thiểu"),

    ("Knowledge Graph", "Ngữ cảnh cấu trúc / Multi-hop Reasoning", "cung cấp"),

    ("LLM", "Thiếu tri thức miền chuyên sâu / Dữ liệu thời gian thực", "gặp hạn chế về")

]


def get_or_create_entity(cursor, entity_name):

    """Thêm thực thể vào bảng entities nếu chưa tồn tại và trả về ID."""

    cursor.execute(

        """

        INSERT INTO entities (name) 

        VALUES (%s) 

        ON CONFLICT (name) DO UPDATE SET name = EXCLUDED.name

        RETURNING id;

        """,

        (entity_name,)

    )

    return cursor.fetchone()[0]


try:

    # 2. Kết nối tới PostgreSQL

    conn = psycopg2.connect(**DB_CONFIG)

    cursor = conn.cursor()


    # 3. Duyệt từng triple và chèn dữ liệu

    for source, target, relation in triples:

        # Lấy hoặc tạo mới ID cho thực thể nguồn và đích

        source_id = get_or_create_entity(cursor, source)

        target_id = get_or_create_entity(cursor, target)


        # Chèn mối quan hệ (tránh trùng lặp nhờ ON CONFLICT)

        cursor.execute(

            """

            INSERT INTO relationships (source_id, target_id, relation)

            VALUES (%s, %s, %s)

            ON CONFLICT (source_id, target_id, relation) DO NOTHING;

            """,

            (source_id, target_id, relation)

        )


    # 4. Lưu thay đổi vào CSDL

    conn.commit()

    print("-> Đã lưu thành công Knowledge Graph vào PostgreSQL!")


except Exception as e:

    if 'conn' in locals():

        conn.rollback()

    print("Lỗi khi chèn dữ liệu:", e)


finally:

    if 'cursor' in locals():

        cursor.close()

    if 'conn' in locals():

        conn.close()

Bước 3: Chạy đoạn mã Python (insert_kg.py)

Bước 4: Truy vấn kiểm tra dữ liệu từ PostgreSQL

Sau khi chạy đoạn mã Python, bạn có thể mở CSDL knowledge_graph_db trong pgAdmin để xem dữ liệu đã được chèn vào các bảng.

Hoặc có thể sử dụng lệnh SQL sau để kiểm tra và lấy lại các bộ-3 dữ liệu:

[SQL]

SELECT 

    e1.name AS source,

    r.relation,

    e2.name AS target

FROM relationships r

JOIN entities e1 ON r.source_id = e1.id

JOIN entities e2 ON r.target_id = e2.id;

2.2 Xem và đọc thêm

Sử dụng các từ khóa sau, tìm kiếm trong Google, Youtube và Chatbot để đọc và xem thêm: cài đặt KG vào HQTCSDL thông thường và Python.

2.3 Bài tập và câu hỏi

Bài tập 2.1: Thực hiện lại các cài đặt như trong phần lý thuyết của bài học.

Bài tập 2.2: Cho KG gồm các bộ-3 (triple) sau:

(Sinh viên) ──[đang theo học]──> (Ngành Khoa học máy tính)

(Sinh viên) ──[tham gia]──> (Câu lạc bộ lập trình)

(Sinh viên) ──[đăng ký]──> (Môn học OOP )

(Môn học OOP) ──[được giảng dạy bởi]──> (Giảng viên)

(Giảng viên) ──[hướng dẫn]──> (Đồ án tốt nghiệp)

(Sinh viên) ──[thực hiện]──> (Đồ án tốt nghiệp)

Yêu cầu: Cài đặt KG trên vào PostgreSQL, sử dụng ngôn ngữ lập trình Python. Đặt tên CSDL là KG_SinhVien_db.

Câu hỏi

Câu 1a: Trong mô hình Danh sách kề (Adjacency List) để lưu trữ Đồ thị tri thức trên PostgreSQL, bảng relationships thường lưu trữ các thành phần nào của một bộ-3 (triple)?

A. Tên thực thể nguồn và tên thực thể đích (dạng chuỗi văn bản)

B. Khóa ngoại trỏ đến ID của thực thể nguồn (source_id), ID của thực thể đích (target_id) và tên mối quan hệ (relation)

C. Chỉ lưu duy nhất danh sách các mối quan hệ mà không cần liên kết với thực thể

D. Lưu toàn bộ đồ thị dưới dạng tập tin nhị phân trực tiếp trên một hàng duy nhất

Câu 1b: Tại sao đoạn mã Python chèn dữ liệu vào PostgreSQL lại sử dụng câu lệnh ON CONFLICT (name) DO UPDATE SET name = EXCLUDED.name (hoặc DO NOTHING) khi làm việc với bảng entities và relationships? 

A. Để tăng tốc độ thực thi câu lệnh SQL gấp nhiều lần so với thông thường

B. Để tự động xóa bỏ toàn bộ dữ liệu cũ trong CSDL trước khi chèn dữ liệu mới vào

C. Để xử lý tình huống trùng lặp dữ liệu (khi thực thể hoặc mối quan hệ đã tồn tại trong CSDL), giúp tránh phát sinh lỗi và đảm bảo tính toàn vẹn

D. Để chuyển đổi cấu trúc đồ thị từ dạng quan hệ sang dạng phi quan hệ (NoSQL) một cách tự động

-----
Bài sau:

PPNCKH (3) - Các bước tiến hành nghiên cứu

Bài trước: PPNCKH (2) - Nghiên cứu khoa học
-----

3. Các bước tiến hành nghiên cứu

Qua bài học trước, bạn đã nắm được các khái niệm Khoa học, KHMT, CNTT và phân biệt được sự khác nhau giữa Phương pháp và Phương pháp luận. 

Trong phần này, chúng ta sẽ tìm hiểu xem: Quy trình NCKH sẽ gồm những bước nào?

Dưới đây là 5 bước chính trong Quy trình NCKH ngành KHMT và CNTT:

- Bước 1: Phát hiện, định nghĩa bài toán và khảo sát tài liệu

- Bước 2: Đề xuất giải pháp mới và mô hình hóa

- Bước 3: Hiện thực hóa và xây dựng nguyên mẫu

- Bước 4: Thực nghiệm, thu thập số liệu và Benchmark

- Bước 5: Phân tích kết quả và viết báo cáo khoa học

3.1. Phát hiện, định nghĩa bài toán và khảo sát tài liệu

Đây là bước khởi đầu có tính chất quyết định đến toàn bộ sự thành công của một công trình NCKH. Một bài toán nghiên cứu tốt cần xuất phát từ thực tiễn công nghệ hoặc từ các khoảng trống tri thức (research gap) trong cộng đồng học thuật.

Phát hiện và định nghĩa bài toán

Ở bước này, bạn cần làm 3 việc sau:

- Phát hiện bài toán: Nhận diện nhu cầu thực tế (ví dụ: tối ưu thời gian xử lý dữ liệu, nâng cao độ chính xác của mô hình nhận dạng, khắc phục lỗ hổng bảo mật hoặc hạn chế của các công nghệ hiện hành)

- Giới hạn phạm vi: Cụ thể hóa bài toán bằng các câu hỏi nghiên cứu cụ thể. Tránh đặt bài toán quá rộng hoặc quá mơ hồ

- Xác định mục tiêu: Làm rõ đầu ra mong đợi của nghiên cứu (ví dụ: phát triển một thuật toán mới, đề xuất một kiến trúc hệ thống cải tiến, hoặc tối ưu hóa tham số)

Chúng ta cùng xem xét một tình huống ví dụ:

Giả sử bạn là một người vận hành Hệ thống nhận diện biển số xe. Trong quá trình vận hành, bạn nhận thấy hệ thống quét biển số bị chậm vào ban đêm.

Bạn sẽ đặt ra câu hỏi: tại sao hệ thống quét biển số lại bị chậm vào ban đêm, và có giải pháp nào để khắc phục không? 

Như vậy, từ thực tiễn vận hành, bạn đã đặt ra bài toán: “Cải thiện hệ thống nhận diện biển số vào ban đêm”

Tuy nhiên, từ “cải thiện” trong đề tài khá cảm tính, còn chung chung. Vì “cải thiện” là cải thiện cái gì: tăng tốc độ khung hình, hay giảm độ trễ nhận diện, hay nâng cao độ chính xác.

Vậy là, bạn (với vai trò là nhà nghiên cứu) phải xác định mục tiêu rõ ràng hơn và giới hạn phạm vi cho đề tài nghiên cứu.

Làm sao để giới hạn phạm vi và xác định mục tiêu rõ ràng hơn cho đề tài?

Bạn cần các việc sau:

- Tìm kiếm sự hỗ trợ, tư vấn từ những người nghiên cứu thuộc lĩnh vực bạn đang quan tâm. Bạn sẽ nhận được những gợi ý về từ khóa tìm kiếm, tư vấn về lĩnh vực hẹp cần tìm hiểu, mạng lưới các nhà khoa học đang nghiên cứu về lĩnh vực này. Ví dụ: Bạn sẽ được hướng dẫn là nên tìm kiếm theo các từ khóa: Low-light License Plate Recognition, Retinex-based enhancement for ANPR, hoặc Synthetic data generation for dark illumination, và tránh việc lạc lối trong hàng trăm ngàn bài báo công nghệ trên Internet.

- Thực hiện Khảo sát tài liệu

Khảo sát tài liệu

Khảo sát tài liệu (Literature Review) không đơn thuần là đọc và tóm tắt sách báo, mà là quá trình tổng hợp, phân tích và đánh giá có hệ thống các công trình đã xuất bản liên quan đến bài toán. Công việc của bước Khảo sát tài liệu gồm:

- Tìm kiếm nguồn tài liệu uy tín: Khai thác các cơ sở dữ liệu học thuật quốc tế chuyên ngành CNTT/KHMT như arXiv, IEEE Xplore, ACM Digital Library, Springer, ScienceDirect, Google Scholar...v.v thông qua các từ khóa

- Phân tích công trình liên quan (State-of-the-Art hay — SOTA):

    + Người đi trước đã giải quyết bài toán này bằng những phương pháp nào?

    + Ưu điểm và hạn chế của từng phương pháp hiện có là gì?

    + Dữ liệu (Dataset) và chỉ số đánh giá nào đã được cộng đồng sử dụng?

- Xác định khoảng trống nghiên cứu (Research Gap): Chỉ ra điểm mà các nghiên cứu trước chưa giải quyết được hoặc giải quyết chưa triệt để. Đây chính là động lực và giá trị đóng góp mới cho đề tài của bạn

Lưu ý: Bạn đừng bắt tay vào lập trình hay xây dựng hệ thống khi chưa làm rõ bài toán và chưa đọc kỹ các nghiên cứu liên quan. Việc bỏ qua hoặc làm hời hợt bước Xác định bài toán và khảo sát tài liệu rất dễ dẫn đến tình trạng "chế tạo lại cái bánh xe" — tức là tốn thời gian để giải quyết một vấn đề đã được cộng đồng xử lý xong từ lâu.

Quay trở lại tình huống ví dụ, sau khi tìm kiếm trên các cơ sở dữ liệu học thuật uy tín với các từ khóa chuyên sâu, bạn đọc và phân tích hai nhóm công trình tiêu biểu gần đây:

[Nhóm 1] Các giải pháp học sâu nâng cao (Deep Learning-based Enhancement):

- Phương pháp: Sử dụng các mô hình học sâu phức tạp (như mạng sinh GAN hoặc các kiến trúc Transformer chuyên dụng cho khôi phục ảnh thiếu sáng)

- Kết quả & Hạn chế: Mô hình xử lý rất tốt cả điều kiện tối lẫn vùng bị lóa đèn pha. Tuy nhiên, các mô hình này tiêu tốn lượng lớn tài nguyên tính toán (RAM, VRAM, năng lượng), dẫn đến tốc độ xử lý chỉ đạt từ 5 - 10 khung hình/giây (FPS), hoàn toàn không thể triển khai chạy thời gian thực trên các thiết bị biên có cấu hình hạn chế như camera giao thông thông thường

[Nhóm 2] - Các giải pháp tiền xử lý truyền thống (Traditional Image Processing):

- Phương pháp: Sử dụng các thuật toán kinh điển như CLAHE (Contrast Limited Adaptive Histogram Equalization) hoặc các biến thể Retinex

- Kết quả & Hạn chế: Các phương pháp này rất nhẹ, chạy mượt mà trên thiết bị biên. Tuy nhiên, chúng lại bị hạn chế trước hiện tượng lóa đèn (headlight glare) vào ban đêm, vì chúng khuếch đại toàn bộ độ sáng của vùng lóa, làm cháy hình ảnh và khiến các ký tự trên biển số biến mất hoàn toàn trước khi đưa vào mô hình nhận diện ký tự (OCR)

Dựa trên kết quả khảo sát trên, bạn đã xác định được Khoảng trống nghiên cứu là:

Hiện nay, cộng đồng học thuật chưa có một giải pháp tiền xử lý ảnh nào vừa đảm bảo tính gọn nhẹ (đủ khả năng chạy thời gian thực trên các thiết bị biên hạn chế tài nguyên), lại vừa giải quyết đồng thời được hai thách thức hóc búa của giao thông ban đêm: vừa thiếu sáng vừa bị lóa đèn pha, nhằm cung cấp đầu vào tối ưu cho hệ thống nhận diện biển số.

Chính khoảng trống này là yếu tố thuyết phục nhất để bạn khẳng định tính đóng góp mới và sự cần thiết của đề tài mà bạn đang nghiên cứu.

Như vậy, từ một tên đề tài nghiên cứu với phạm vi nghiên cứu rộng, chưa có kết quả đầu ra rõ ràng:

“Cải thiện hệ thống nhận diện biển số vào ban đêm”

Bạn có thể giới hạn lại phạm vi và xác định được kết quả đầu ra rõ ràng hơn:

"Nghiên cứu ứng dụng kỹ thuật tiền xử lý ảnh dựa trên mô hình nhẹ để cải thiện độ chính xác nhận diện biển số xe dưới điều kiện thiếu sáng và lóa đèn trên thiết bị biên". 

3.2 Một vài khó khăn và ngộ nhận trong việc xác định bài toán

- Bài toán quá rộng hoặc quá mơ hồ, ví dụ Xây dựng hệ thống AI toàn diện cho thành phố thông minh

- Thiếu cơ sở thực tiễn hoặc không tìm được khoảng trống nghiên cứu, ví dụ đề xuất giải pháp nhưng không chỉ ra được hệ thống hiện tại đang gặp lỗi gì, lãng phí tài nguyên ở đâu hay thua kém các công nghệ khác ra sao

- Không xác định được những hạn chế về năng lực và thời gian, đặt mục tiêu quá lớn trong khi thời gian có hạn

- Cứ nghĩ ra dùng công nghệ mới nhất, mô hình “khủng” nhất áp vào bất kỳ việc gì cũng thành đề tài NCKH

- Nhầm lẫn giữa việc phát triển phần mềm với việc NCKH

Để tránh những khó khăn và ngộ nhận ở trên, cách hiệu quả nhất là tìm sự đồng hành từ người nghiên cứu có kinh nghiệm hoặc tham gia vào các nhóm nghiên cứu (research group) sẵn có. Ngoài ra, bạn cũng có thể chủ động tìm kiếm và định hình bài toán thông qua việc khảo sát tài liệu kỹ lưỡng kết hợp với sự hỗ trợ của các công cụ AI.

3.3 Học kiến thức nền tảng

Song song với việc Khảo sát tài liệu, bạn cần phải trang bị các kiến thức nền tảng của lĩnh vực bạn đang nghiên cứu.

Việc này mất rất nhiều thời gian và công sức.

Hãy kiên trì, tìm hiểu, ghi chép và thực hành các kiến thức nền tảng để bạn có đủ khả năng: đọc hiểu, thực hiện cài đặt, triển khai hệ thống trong quá trình nghiên cứu.

Bạn có thể đồng hành cùng Chatbot (Gemini, Grok, ChatGPT) để học kiến thức nền tảng.

-----
Bài sau:

Tin học thiếu nhi (5) - Cách sử dụng chuột

Bài trước: Tin học thiếu nhi (4) - Quy tắc đánh dấu câu
-----

Bài 5. Sử dụng chuột máy tính

5.1 Cách dùng

Chuột máy tính (mouse) là thiết bị dùng để ra lệnh cho máy tính.

Cách đặt tay lên chuột:



Chuột gồm 3 phần chính: nút trái, nút phải và con lăn 

Nút chuột trái (gọi tắt là nút trái): 

- Nằm ở phía bên trái

- Dùng để chọn đối tượng

- Nhấp đúp để chạy chương trình/ mở tập tin (thư mục)

Nút chuột phải (gọi tắt là nút phải): 

- Nằm ở phía bên phải

- Dùng để mở bảng chọn nhanh (menu ngữ cảnh) chứa các lệnh như Sao chép, Dán, Đổi tên, Xóa

Con lăn

- Bánh xe nhỏ ở giữa hai nút chuột

- Dùng để cuộn tài liệu/ trang web lên-xuống

5.2 Thực hành

Bài tập 1: Bạn hãy làm theo các bước sau:

[Sử dụng nút chuột trái]

- Mở trình duyệt Chrome

- Nhấp nút trái vào thanh địa chỉ, gõ google.com rồi nhấn Enter

- Nhấp nút trái vào ô tìm kiếm, gõ từ khóa "Chuột máy tính" rồi nhấn Enter

- Nhấp nút trái vào mục Hình ảnh (Images) để xem danh sách ảnh

- Nhấp nút trái vào một hình ảnh ưng ý để xem ảnh ở kích thước lớn hơn

[Sử dụng con lăn]

- Lăn con lăn xuống phía dưới để duyệt thêm các hình ảnh "Chuột máy tính" khác, hoặc lăn ngược lên trên để quay lại các hình ảnh ban đầu

[Sử dụng nút chuột phải]

- Nhấp nút phải vào hình ảnh muốn lưu

- Bảng chọn nhanh hiện ra, nhấp nút trái chọn "Lưu hình ảnh thành..." (Save image as...) hoặc "Mở hình ảnh trong thẻ mới" (Open image in new tab).

-----
Bài sau:

Đồ thị tri thức (1) - Tổng quan

1. Tổng quan

1.1 Đồ thị tri thức là gì?

Đồ thị tri thức (Knowledge Graph) là mô hình biểu diễn dữ liệu dưới dạng một mạng lưới các thực thể (entities) và mối quan hệ (relationships) giữa chúng.

Hãy quan sát một đồ thị tri thức đơn giản sau:

(RAG) ──[cải thiện]──> (LLM) 

(RAG) ──[kết hợp với]──> (Knowledge Graph) 

(Knowledge Graph) ──[giúp giảm thiểu]──> (Hiện tượng Hallucination) 

(Knowledge Graph) ──[cung cấp]──> (Ngữ cảnh cấu trúc / Multi-hop Reasoning) 

(LLM) ──[gặp hạn chế về]──> (Thiếu tri thức miền chuyên sâu / Dữ liệu thời gian thực) 

Trong đó,

- Các thực thể được bao trong dấu ngoặc đơn, gồm: RAG, LLM, Knowledge Graph, Hiện tượng Hallucination, Ngữ cảnh cấu trúc / Multi-hop Reasoning, Thiếu tri thức miền chuyên sâu / Dữ liệu thời gian thực

- Các mối quan hệ được bao trong dấu ngoặc vuông, gồm: cải thiện, kết hợp với, giúp giảm thiểu, cung cấp, gặp hạn chế về

- Một đồ thị tri thức là tập hợp các bộ-3 (triple), gồm: (Thực thể) -[Mối quan hệ]-> (Thực thể). Ở ví dụ trên chúng ta có 5 bộ-3.

- Dấu gạch ngang  (-) và dấu mũi tên (->) gắn với mỗi Mối quan hệ, thực chất là 1 dấu suy ra, mục đích để chỉ ra hướng tác động của các thực thể

Xem hình minh họa,


Thực thể là gì?

Thực thể (Entity) là một đối tượng, sự vật, khái niệm hoặc một hiện tượng độc lập, có ý nghĩa xác định và có thể phân biệt được với các đối tượng khác.

Mối quan hệ là gì?

Mối quan hệ (Relationship / Relation / Edge) là sợi dây liên kết logic, thể hiện thuộc tính, tác động, tương tác hoặc phụ thuộc giữa hai thực thể.

Nếu Thực thể là các danh từ, thì Mối quan hệ là các động từ, cụm giới từ nối giữa 2 Thực thể.

1.2 Cài đặt KG bằng ngôn ngữ Python

Để đơn giản, chúng ta sẽ cài đặt một KG đơn giản bằng ngôn ngữ lập trình Python.

Sử dụng thư viện NetworkX trong Python để cài đặt.

Các bước thực hiện:

Bước 1: Cài đặt thư viện NetworkX và thư viện Matplotlib (nếu máy bạn chưa có)

Thư viện Matplotlib để hiển thị KG một cách trực quan

Nhập dòng lệnh sau vào chương trình dòng lệnh (CMD) để cài đặt:

pip install networkx matplotlib 

Bước 2: Lập trình python để tạo một KG. Ví dụ: chúng ta sẽ tạo KG ở phần ví dụ.

[viDuKG1.py]

import networkx as nx

import matplotlib.pyplot as plt


# 1. Khởi tạo một đồ thị có hướng (Directed Graph)

G = nx.DiGraph()


# 2. Thêm các bộ-3 (triples) vào đồ thị

# Cú pháp: G.add_edge(thực_thể_nguồn, thực_thể_đích, relation="tên_mối_quan_hệ"

triples = [

    ("RAG", "LLM", "cải thiện"),

    ("RAG", "Knowledge Graph", "kết hợp với"),

    ("Knowledge Graph", "Hiện tượng Hallucination", "giúp giảm thiểu"),

    ("Knowledge Graph", "Ngữ cảnh cấu trúc / Multi-hop Reasoning", "cung cấp"),

    ("LLM", "Thiếu tri thức miền chuyên sâu / Dữ liệu thời gian thực", "gặp hạn chế về")

]


for source, target, relation in triples:

    G.add_edge(source, target, relation=relation)


# 3. Truy vấn thử nghiệm trên đồ thị

print("--- KIỂM TRA CÁC THỰC THỂ (NODES) ---")

print(list(G.nodes()))


print("\n--- KIỂM TRA CÁC MỐI QUAN HỆ (EDGES & RELATIONS ---)")

for u, v, data in G.edges(data=True):

    print(f"({u}) -[{data['relation']}]-> ({v})")


# 4. Trực quan hóa đồ thị tri thức

plt.figure(figsize=(12, 8))

pos = nx.spring_layout(G, k=1.5, seed=42) # Thuật toán định vị các node


# Vẽ các node (thực thể)

nx.draw_networkx_nodes(G, pos, node_size=3000, node_color='skyblue', alpha=0.9)


# Vẽ các cạnh (mũi tên hướng quan hệ)

nx.draw_networkx_edges(G, pos, width=2, arrowsize=20, edge_color='gray', connectionstyle='arc3,rad=0.1')


# Vẽ nhãn cho các thực thể (tên node)

nx.draw_networkx_labels(G, pos, font_size=9, font_weight='bold', font_family='sans-serif')


# Vẽ nhãn cho các mối quan hệ (tên edge nằm trên mũi tên)

edge_labels = {(u, v): data['relation'] for u, v, data in G.edges(data=True)}

nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8, font_color='red')


plt.title("Knowledge Graph Mini: KG - LLM - RAG", fontsize=14, fontweight='bold')

plt.axis('off')

plt.tight_layout()

plt.show()

Bước 3: Chạy và hiển thị kết quả

Nếu chạy thành công, kết quả được hiển thị như hình sau:


1.3 Xem và đọc thêm

Sử dụng các từ khóa sau, tìm kiếm trong Google, Youtube và Chatbot để đọc và xem thêm: đồ thị tri thức, knowledge graph, cài đặt KG bằng python

1.4 Bài tập và câu hỏi

Bài tập

Bài tập 1.1: Lập trình cài đặt KG bằng python (như trong phần lý thuyết).

Bài tập 1.2: Cho KG gồm các bộ-3 (triple) sau:

(Sinh viên) ──[đang theo học]──> (Ngành Khoa học máy tính)

(Sinh viên) ──[tham gia]──> (Câu lạc bộ lập trình)

(Sinh viên) ──[đăng ký]──> (Môn học OOP )

(Môn học OOP) ──[được giảng dạy bởi]──> (Giảng viên)

(Giảng viên) ──[hướng dẫn]──> (Đồ án tốt nghiệp)

(Sinh viên) ──[thực hiện]──> (Đồ án tốt nghiệp)

Bạn hãy lập trình cài đặt KG bằng ngôn ngữ Python, sử dụng thư viện Matplotlib để hiển thị trực quan KG lên giao diện.

Câu hỏi

Câu 1a: Trong cấu trúc biểu diễn của Đồ thị tri thức (Knowledge Graph), thành phần nào được tạo ra bằng các "danh từ" (đối tượng, sự vật, khái niệm)?

A. Mối quan hệ (Relationship)

B. Thực thể (Entity)

C. Thuộc tính (Attribute)

D. Bộ-3 (Triple)

Câu 1b: Một bộ-3 (triple) chuẩn trong Đồ thị tri thức được biểu diễn theo cấu trúc nào sau đây?

A. [Thực thể] -(Mối quan hệ)-> [Thực thể]

B. (Mối quan hệ) -[Thực thể]-> (Mối quan hệ)

C. (Thực thể) -[Mối quan hệ]-> (Thực thể)

D. [Mối quan hệ] -(Thực thể)-> [Mối quan hệ]

-----
Bài sau: Đồ thị tri thức (2) - Lưu trữ KG trên PostgreSQL