日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

知识图谱(八)——知识存储和检索

發布時間:2025/3/19 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 知识图谱(八)——知识存储和检索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

知識圖譜是一種有向圖結構,描述了現實世界存在的實體、事件或者概念以及它們之間的關系,為自動問答、信息檢索等應用提供支撐。其中,圖中的節點表示實體、事件或概念,圖中的邊表示相鄰節點間的關系,如下圖所示。

  • 每一個節點表示一個實體,每個實體都是某一抽象概念的實例。這些抽象概念被稱為實體類型,如:人物、城市等。
    • 實體除了具有類型信息,還具有豐富的屬性信息(藍色部分),這些屬性信息用于刻畫實體的內在特性。

一、知識圖譜的存儲

知識圖譜中的知識是通過RDF進行表示的,其基本構成單元是事實。每個事實是一個三元組 (S, P, O)

  • S 是主語(Subject),其取值可以是實體、事件或概念中的任何一個;
  • P 是謂語(Predicate),其取值可以是關系或屬性;
  • O 是賓語(Object),其取值可以是實體、事件、概念或普通的值(eg:數字、字符串等)

知識表示的三元組列表 示例如下

RDF數據 <S, P, O> <費米, 主要成就, 93號元素> <費米, 出生日期, 1901/09/29> <費米, 類型, 物理學家> <費米, 國籍, 美國> <費米, 出生地, 羅馬> <費米, 老師, 玻爾> <玻恩, 主要成就, 玻恩近似> <玻恩, 類型, 物理學家> <玻恩, 類型, 數學家> ... ... ...

按照存儲方式的不同,可分為:基于表結構的存儲基于圖結構的存儲

1、基于表結構的存儲

利用二維數據表對知識圖譜中的數據進行存儲,常見的設計方法有:三元組表、類型表、關系數據庫等

(1)三元組表

成熟產品:Jena、Oracle、Sesame、3store、SOR、Rstar 和 Virtuoso。

優點:簡單直接、易于理解;
缺點

  • 整個知識圖譜都存儲在一張表中,導致單表的規模太大。對大表進行查詢、插入、刪除、修改等操作的開銷很大,這將導致KG的實用性大打折扣。
  • 復雜查詢在這種存儲結構上的開銷巨大。由于數據表只包括三個字段,因此復雜的查詢只能拆分稱若干簡單查詢的符合操作,大大降低查詢的效率。

(2)類型表

為每種類型構建一張表,同一類型的實例存放在相同的表中。表中的每一列表示該類實體的一個屬性,每一行存儲該類實體的一個實例。

示例

  • 城市表
  • 主體對象面積平均海拔郵編
    羅馬1285 km2km^2km237m00185
  • 人物表
  • 主體對象主要成就國籍出生日期出生地
    費米93號元素美國1901/09/29羅馬
    奧本海默曼哈頓計劃美國1904/04/22
    玻恩玻恩近似英國1882/12/11
  • 物理學家表
  • 主體對象主要成就國籍出生日期
    費米93號元素美國1901/09/29
    奧本海默曼哈頓計劃美國1904/04/22
    玻恩玻恩近似英國1882/12/11
  • 數學家表
  • 主體對象主要成就國籍出生日期
    費米93號元素美國1901/09/29

    缺點:(然后克服三元組表的不足)

    • 大量數據字段的冗余存儲。假設知識圖譜中既有“數學家”又有“物理學家”,則同屬于這兩個類別的實例將會同時被存儲在這兩個表中,其中它們共有的屬性會被重復存儲。如上面的表 3 與表 4
    • 大量的數據列為空值。通常知識圖譜中并非每個實體在所有屬性或關系上都有值。

    解決方法:將知識圖譜的類別體系考慮進來。

    • 具體來說,每個類型的數據表都只記錄屬于該類型的特有屬性,不同類別的公共屬性保存在上一級類型對應的數據表中,下級表繼承上級表的所有屬性。下圖為考慮層級關系的類型表,(a)為人物相關的類別體系,(b)為該類別體系下設計的類型表。

      缺點
    • 由于類型表的不同字段表示不同的屬性或關系,因此查詢時必須指明屬性或關系,無法做不確定屬性或關系的查詢。
    • 由于數據表是和具體類型對應的,不同類型的數據表具有不同的結構,因此在查詢之前必須知道目標對象的類型才能確定查找的數據表。則需要維護一個“屬性-類型”映射表,以便在進行屬性查詢時可以根據目標屬性確定類型。
    • 當查詢涉及不同類型的實體時,需要進行多表的鏈接,該操作開銷巨大,限制KG對復雜查詢的處理能力。
    • KG包含豐富的實體類型,因此需要創建大量的數據表,并且這些數據表之間又具有復雜的關系,增加管理難度。

    (3)關系數據庫

    關系數據庫通過 屬性 對現實世界中的事物進行描述。

    • 每個屬性的取值范圍所構成的集合,稱為對應屬性的
    • 屬性的取值只能是原子數據。
      • 原子數據:不能進步拆分的數據,eg:整數、字符串等
      • 非原子數據:由多個原子數據構成,可進步拆分,eg:集合、列表、元組等。
    • 關系數據庫以二維表對數據進行組織和存儲,表的每一列表示一個屬性,每一行表示一條記錄。

    屬性按照各自特點可分為:

    • 候選鍵:能夠唯一標識一條記錄的最少的屬性集合。
      • 唯一性:候選鍵在整個表的范圍內必須具有唯一的值,不同記錄不能具有相同的候選鍵值;
      • 最小性:候選鍵所包含的屬性必須是必不可少的,缺少其中的任何一個都不再具備唯一性。
      • eg:學生的學號、身份證號分為都可以作為候選鍵,但是(學號,身份證號)這屬性組不滿足最小性,不能作為候選鍵。
    • 主鍵:一個數據庫包含多個候候選鍵,從中任意選取一個為主鍵。一般選擇單屬性組成的候選鍵作為主鍵。
    • 外鍵:數據表中的某個屬性或屬性組是其他表的候選鍵,則稱為當前表的外鍵。外鍵可以保證不同數據表之間數據的一致性。
    • 主屬性與非主屬性:包含在任何候選鍵中的屬性為主屬性,不包含在任何候選鍵中的屬性為非主屬性。

    常見可用于KG的關系數據庫:DB2、Oracle、Microsoft SQL Sever、PostgreSQL、MySQL等

    2、基于圖結構的存儲

    基于圖結構的存儲,可直接準確地反映KG的內部結構,有利用對知識的查詢,可借鑒圖論算法,有利于對知識深度挖掘及推理。

    (1)基于圖結構的存儲模型

    • 節點:表示實體,可以定義屬性(用于描述實體特性)。
    • :表示實體之間的關系,可以定義邊的屬性。

    基于圖結構的存儲,從實體出發,不同實體對應的節點可定義不同的屬

    (2)常用圖數據庫介紹

    圖數據庫的理論基礎是圖論,通過節點、邊 和 屬性對數據進行表示和存儲,具體來說,圖數據庫基于有向圖,其中節點、邊、屬性是圖數據庫的核心概念。

    • 節點:表示實體、事件等對象。eg:人物、地點、電影等都可作為圖中的節點。
    • :指圖中連接節點的有向線條,表示節點之間的關系。eg:人物節點之間的夫妻關系、同事關系等。
    • 屬性:描述節點或邊的特性。eg:人物(節點)的姓名、夫妻關系(邊)的起止時間等。

    常見圖數據庫:Neo4j、OrientDB、InfoGrid、HyperGraphDB、InfiniteGraph(分布式)等

    • Neo4j:開源、高性能、本地數據庫(訪問速度快)、輕量級;
    • OrientDB:開源文檔-圖數據庫、多模式、本地數據庫;

    二、知識圖譜的檢索

    1、常見形式化查詢語言

    KG是通過數據庫進行存儲的,大部分數據庫系統通過形式化的查詢語言為用戶提供訪問數據的接口,關系型數據庫的標準查詢語言是SQL,圖數據庫的標準查詢語言是SPARQL。

    (1)SQL(Structured Query Language,結構化查詢語言)

    主要功能:對數據的插入、修改、刪除、查詢四種操作。

    示例:Triples表

    SPO
    費米類型物理學家
    費米出生日期1902/09/29
    費米搭檔奧本海默
    奧本海默搭檔費米
    奧本海默出生日期1904/04/22
    奧本海默畢業院校阿根廷大學
    費米出生地羅馬
    羅馬海拔37m
    • 數據插入——INSERT
      • INSERT INTO 表名 VALUES (值1,值2,...) [,值1,值2,...], ...:值1,值2…分別對應數據表中第一列、第二列,VALUES對應的值的順序和數量有嚴格的要求。
      • INSERT INTO 表名 (列1,列2,...) VALUES (值1,值2,...) [,值1,值2,...], ...:指明插入數據的列
      • eg:新增“玻恩”實體及其屬性,以及與“費米”的關系(S:費米,P:老師,O:玻恩)
        • INSERT INTO Triples VALUES ('費米','老師','玻恩'),('玻恩','類型','數學家'),('玻恩','類型','物理學家')
        • INSERT INTO Triples (S,P,O) VALUES ('費米','老師','玻恩'),('玻恩','類型','數學家'),('玻恩','類型','物理學家')
    • 數據修改——UPDATE
      • UPDATE 表名 SET 列1=值1,列2=值2,... WHERE 條件 其中’條件’指明需修改的數據記錄,若不指定,則整個表的數據都被修改。
      • eg:“費米”的出生日期修改為"1901/09/29"
        • UPDATE Triples SET O='1901/09/29' WHERE S='費米' and P='出生日期'
    • 數據刪除——DELETE
      • DELETE FROM 表名 WHERE 條件 其中’條件’指明需修改的數據記錄,若不指定,則整個表的數據都被修改。
      • eg:刪除“奧本海默”實體和與其相關的所有邊
        • DELETE FROM Triples WHERE S='奧本海默' or O='奧本海默'
    • 數據查詢——SELECT
      • SELECT 列1, 列2, ... FROM 表名 WHERE 條件、 SELECT * FROM 表名 WHERE 條件
      • eg:查詢所有數學家實體
        • SELECT S FROM Triples WHERE P='類型' and O='數學家'
    • 此外,SQL還內置函數(最大值、最小值、平均值等)、表連接(JOIN)等

    (2)SPARQL語言

    SPARQL是由W3C為RDF數據開發的一種查詢語言和數據獲取協議,被廣泛應用于圖數據庫。

    a、數據插入——INSERT DATA

    • 基本語法:INSERT DATA 三元組數據,其中三元組數據可以是多條三元組,不同的三元組通過 ‘.’ 分割,用 ‘;’ 可以分割連續插入語前一個三元組的頭實體相同的三元組。若待插入的三元組在RDF中已存在,則忽略該三元組。
    • eg:向上圖表示的RDF中插入以下三元組:
    ns:費米 ns:老師 ns:玻恩. ns:玻恩 ns:類型 ns:數學家. ns:玻恩 ns:類型 ns:物理學家.

    ==》對應的 SPARQL 語句

    prefix ns: <http://example.org/ns#> INSERT DATA { ns:費米 ns:老師 ns:玻恩 . ns:玻恩 ns:類型 ns:數學家 ;ns:類型 ns:物理學家 . }

    結果如下所示:

    b、數據刪除——DELETE DATA

    • 基本語法:DELETE DATA 三元組數據,其中三元組數據可以是多個三元組。對于給定的每個三元組,若其在RDF圖中,則刪除,否則忽略該三元組。
    • eg:向上圖表示的RDF中刪除三元組 (ns:奧本海默 ns:類型 ns:物理學家),注意刪除單個三元組
    prefix ns: <http://example.org/ns#> DELETE DATA { ns:奧本海默 ns:類型 ns:物理學家 . }

    結果如下所示:刪除單個三元組

    • 刪除節點,eg:刪除“奧本海默”節點
    prefix ns: <http://example.org/ns#> DELETE WHERE { ns:奧本海默 ?p ?o . ?s ?p ns:奧本海默 . }

    結果如下所示:刪除節點

    c、數據更新

    數據更新是指更新RDF圖中三元組的值,SPARQL通過組合 INSERT DATA 語句和 DELETE DATA 語句來實現數據更新的功能

    eg:修改三元組(ns:費米 ns:出生日期 "1902/09/29")修改為(ns:費米 ns:出生日期 "1901/09/29")

    prefix ns: <http://example.org/ns#> DELETE DATA {ns:費米 ns:出生日期 "1902/09/29" .}; INSERT DATA {ns:費米 ns:出生日期 "1901/09/29" .}

    結果如下:

    d、數據查詢

    四種形式:SELECT、ASK、DESCRIBE 和 CONSTRUCT。

    • SELECT:從KG中獲取滿足條件的數據;
    • ASK:用于測試KG中是hi否存在滿足給定條件的數據,若存在則返回“YES”,否則為“NO”,該查詢不返回具體的匹配數據;
    • DESCRIBE:用于查詢和制定資源相關的RDF數據,這些數據形成了對給定資源的詳細描述;
    • CONSTRUCT:根據查詢圖的結果生成RDF。

    SELECT:從KG中獲取滿足條件的數據;

    • 基于語法:SELECT 變量1 變量2 ... WHERE 圖模式 [修飾符]
      • SELECT子句 SELECT 變量1 變量2 ...:表示要查詢的目標。
      • WHERE子句 WHERE 圖模式:為SELECT子句中的變量提供約束,查詢結果必須完全匹配該子句給出的圖模式。
        • 圖模式:主要包含兩類元素,一類是三元組。eg:?x a Person表示變量?x必須是Person的一個實例。另一類是通過FILTER關鍵字給出的條件限制,包括數字大小的限制、字符串格式的限制等。
      • 可選項 [修飾符]:用于對查詢結果做一些特殊處理,例如:ORDER子句、LIMIT子句(限制結果數量)等。
    • 示例:查詢類型既是“數學家”也是“物理學家”的節點
    prefix ns: <http://example.org/ns#> SELECT ?s WHERE {?s ns:類型 ns:數學家 .?s ns:類型 ns:物理學家 . }

    查詢結果

    S
    玻恩

    ASK:用于測試KG中是hi否存在滿足給定條件的數據

    • 基本語法: ASK 圖模式,其中圖模式與 SELECT 相同。
    • 示例:測試是否存在“費米”老師的節點,對應的語句為:
    prefix ns: <http://example.org/ns#> ASK { ns:費米 ns:老師 ?o .}

    該語句返回的結果是“yes”,若數據中不存在“費米”的老師節點(即“玻恩”)則返回“no”

    DESCRIBE:用于獲取與給定資源相關的數據

    • 基本語法:DESCRIBE 資源或變量 [WHERE 圖模式]
      • DESCRIBE后既可直接跟確定的資源標識符,也可跟變量;
      • WHERE 子句為可選項,用于限定變量滿足的圖模式。
    • 示例:獲取老師為“玻恩”的節點的所有信息,對應的語句如下:
    prefix ns: <http://example.org/ns#> DESCRIBE ?s WHERE {?s ns:老師 ns:玻恩 .}

    執行結果如下:

    @prefix ns:<http://example.org/ns#> ns:費米 ns:類型 ns:物理學家 ns:費米 ns:出生日期 "1901/09/29" ns:費米 ns:老師 ns:玻恩

    CONSTRUCT:用于生成滿足圖模式的RDF圖

    • 基本語法:CONSTRUCT 圖模板 WHERE 圖模式
      • 圖模板:確定生成的RDF圖所包含的三元組類型,它由一組三元組構成,每個三元組既可以是包含變量的三元組模板,也可以是不包含變量的事實三元組;
      • 圖模式,用于約束語句中的變量
    • 基本流程:首先執行WHERE子句,從KG中獲取所有滿足圖模式的變量取值;然后針對每一個變量取值,替換RDF圖模板中的變量,生成一組三元組。
    • 示例:
    prefix ns: <http://example.org/ns#> CONSTRUCT {?s ns:搭檔 ns:奧本海默 .ns:奧本海默 ns:搭檔 ?s . } WHERE {?s ns:老師 ns:玻恩 . }

    執行結果為:

    @prefix ns:<http://example.org/ns#> ns:費米 ns:搭檔 ns:奧本海默 . ns:奧本海默 ns:搭檔 ns:費米 .

    2、圖檢索技術

    問題的提出:基于圖結構的存儲方式能夠直觀靈活地對知識進行表示和存儲,而標準的圖查詢算法復雜度較高,何如提高圖查詢的效率成為KG研究的重要問題。

    定義(即子圖匹配問題):NP完全問題(目前尚不存在多項式時間復雜度內可解決的算法)

    • 在給定查詢圖 QQQ 和目標圖集 D={Gi}D=\{G_i\}D={Gi?} 的條件下,在 DDD 中找出所有與 QQQ 同構的子圖。
    • (數學上定義):圖 G1(V1,E1)G_1(V_1,E_1)G1?(V1?,E1?) 和圖 G2(V2,E2)G_2(V_2,E_2)G2?(V2?,E2?) 的子圖同構,當且僅當存在一個雙射函數 f:V1→V2f:V_1\to{V_2}f:V1?V2?,對于 G1G_1G1? 的任意一條邊 e(v1,v2)∈E1e(v_1,v_2)\in{E_1}e(v1?,v2?)E1?,都有 e′(f(v1),f(v2))∈E2e&#x27;(f(v_1),f(v_2))\in{E_2}e(f(v1?),f(v2?))E2?
    • 與數學中的區別(優勢):
      • 不會觸發子圖匹配算法的最壞情況。KG中的圖結構通常不會特別復雜,只有少數節點之間有邊相連。
      • 利用KG中豐富的標簽信息可以有效降低算法的搜索空間。

    (1)子圖篩選

    圖索引技術是實現子圖篩選的有效方法。在數據預處理階段進行。

    基本原理:首先根據圖上的特征信息建立索引,在進行子圖匹配時,根據查詢圖上的特征能夠快速地從圖數據庫中檢索得到滿足條件的候選子圖,避免在全部子圖上進行匹配。

    常用圖索引方法

    • 基于路徑索引:把圖上所有長度小于某特定值的路徑收集起來,并根據這些路徑為圖數據庫中的子圖建立倒排索引。
      • 匹配過程:首先從匹配圖中抽取具有代表性的路徑,然后利用索引檢索獲得所有包含這些路徑的候選子圖,最后在候選子圖上進行同構測試獲得最終的結果。
      • 優點:圖的路徑獲取簡單直接 ==》構建索引比較方便
      • 缺點:隨著路徑長度的增加,路徑數目呈指數級增長,對于大規模KG,消耗巨大存儲空間,增加檢索時間;不同路徑對子圖的區分性差異很大,區分性低的路徑對于降低搜索空間的效果有限。
    • 基于子圖的索引方法:將子圖作為索引的特征。
      • 關鍵問題:如何在保證區分性的條件下減小索引的規模。
      • 常用方法:在構建索引時,通過在KG上挖掘出頻繁子圖作為建立索引的依據。
        • 頻繁子圖的衡量指標:頻繁度——子圖出現的次數
        • 頻繁度的設置需精心挑選。

    (2)子圖同構判定

    常用算法:Ullmann算法(也稱枚舉算法)——能夠枚舉出所有的同構子圖

    總結

    以上是生活随笔為你收集整理的知识图谱(八)——知识存储和检索的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。