互聯(lián)網(wǎng)時(shí)代,人類在與自然和社會(huì)的交互中生產(chǎn)了異常龐大的數(shù)據(jù),這些數(shù)據(jù)中包含了大量描述自然界和人類社會(huì)客觀規(guī)律有用信息。如何將這些信息有效組織起來(lái),進(jìn)行結(jié)構(gòu)化的存儲(chǔ),就是知識(shí)圖譜的內(nèi)容。 知識(shí)圖譜的難點(diǎn)在于知識(shí)圖譜的搭建,如何高效、高質(zhì)量、快速的搭建知識(shí)圖譜是知識(shí)圖譜工程的核心,那之后獲取到的知識(shí),該如何存儲(chǔ)以及便捷的檢索呢? 作者&編輯 | 小Dream哥 1 知識(shí)存儲(chǔ) 在前面的知識(shí)圖譜的文章中,我們介紹了如何進(jìn)行知識(shí)表示以及知識(shí)抽取。今天我們來(lái)思考這樣一個(gè)問(wèn)題,當(dāng)獲取到了大量的知識(shí)(通常是一系列的三元組)之后,該用什么樣的形式存儲(chǔ)這些知識(shí)呢? 先思考一下,用來(lái)存儲(chǔ)知識(shí)的系統(tǒng),應(yīng)該具有哪些特點(diǎn)呢? 首先,圖譜的價(jià)值體現(xiàn)在其對(duì)對(duì)話系統(tǒng),信息抽取等下游任務(wù)的加成,因此知識(shí)的存儲(chǔ)系統(tǒng)應(yīng)該能夠支持快速和頻繁的知識(shí)查詢操作。 其次,圖譜里的知識(shí)是按照shcema的結(jié)構(gòu)抽取的,因此,知識(shí)的存儲(chǔ)應(yīng)該能夠按照schema的結(jié)構(gòu),體現(xiàn)出知識(shí)的層次結(jié)構(gòu)和知識(shí)間聯(lián)系。 此外,知識(shí)存儲(chǔ)應(yīng)該盡量高效,避免出現(xiàn)過(guò)多的存儲(chǔ)空間的浪費(fèi)。 1)關(guān)系型數(shù)據(jù)庫(kù) 數(shù)據(jù)存儲(chǔ)最容易想到的就是常用的關(guān)系型數(shù)據(jù)庫(kù),包括Oracle、MySQL等。 如上圖所示,是采用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)表示知識(shí)的示意圖。每條知識(shí)是一個(gè)三元組(S,P,O),其中S稱為主語(yǔ)Subject,其取值可以是實(shí)體、事件或者概念中的任何一個(gè);P被稱為謂語(yǔ)Predicate,取值可以是關(guān)系或者屬性;O被稱為賓語(yǔ)Object,取值可以是實(shí)體、事件、概念或者其他普通的值(例如數(shù)字,字符串等)。 在傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中,將三元組一個(gè)一個(gè)的存儲(chǔ)在數(shù)據(jù)庫(kù)的一個(gè)數(shù)據(jù)項(xiàng)中,當(dāng)數(shù)據(jù)量非常大時(shí),表的規(guī)模就非常大,這樣的話,查詢和修改操作的開(kāi)銷會(huì)變得非常的大,這會(huì)極大傷害知識(shí)圖譜的實(shí)用性。雖然,基于關(guān)系型數(shù)據(jù)庫(kù),有人提出了類型表的方法,即將數(shù)據(jù)按照schema進(jìn)行分類,然后數(shù)據(jù)按照不同的類型表分表存儲(chǔ)。但是,由于其本質(zhì)上并沒(méi)有“理解”知識(shí)圖譜的復(fù)雜結(jié)構(gòu),其查表過(guò)程仍然較慢較繁瑣,無(wú)法適應(yīng)數(shù)據(jù)量極大的知識(shí)圖譜的應(yīng)用。 2)圖數(shù)據(jù)庫(kù) 將實(shí)體看作節(jié)點(diǎn),關(guān)系看作帶有標(biāo)簽的邊,那么知識(shí)圖譜的數(shù)據(jù)很自然的滿足圖模型結(jié)構(gòu)。因此,基于圖結(jié)構(gòu)的存儲(chǔ)方式能夠直接準(zhǔn)確的反映知識(shí)圖譜的內(nèi)部結(jié)構(gòu),有利于對(duì)知識(shí)的查詢。另外,以圖的方式對(duì)知識(shí)進(jìn)行存儲(chǔ),還可以借鑒圖論的相關(guān)算法,有利于知識(shí)推理和知識(shí)挖掘。 常用的圖數(shù)據(jù)庫(kù)有:Neo4J,OrientDB,InfoGrid,HyperGraphDB等。目前,應(yīng)用較為廣泛的為Neo4J和OrientDB。圖數(shù)據(jù)發(fā)展較晚,相關(guān)標(biāo)準(zhǔn)和技術(shù)均不完備,實(shí)際應(yīng)用時(shí)可能會(huì)遇到意想不到的問(wèn)題。因此,在為項(xiàng)目選擇圖數(shù)據(jù)庫(kù)時(shí),需要將數(shù)據(jù)庫(kù)的易用性和技術(shù)文檔的完整性等因素也考慮進(jìn)來(lái)。Neo4J是目前較為流行的圖數(shù)據(jù)庫(kù),它極易入門(mén),訪問(wèn)速度快。 基于圖結(jié)構(gòu)的存儲(chǔ)模型用節(jié)點(diǎn)表示實(shí)體,用邊表示實(shí)體之間的關(guān)系。如下圖所示,展示了基于圖數(shù)據(jù)庫(kù)的知識(shí)存儲(chǔ)示例。由圖可見(jiàn),節(jié)點(diǎn)可以定義屬性,用來(lái)描述實(shí)體的各種特性,下圖中“周杰倫”有“身高”,“體重”等屬性?;趫D結(jié)構(gòu)的存儲(chǔ)方法,還可以為邊定義屬性,因此,還能夠描繪實(shí)體之間的關(guān)系,例如,“周杰倫”和“黃秋生”之間就用了一條叫“義父”的邊來(lái)連接,表達(dá)了他們之間的關(guān)系。 2 知識(shí)的檢索 知識(shí)檢索的過(guò)程,通常是知道三元組(S,P,O)中S和P,從圖譜中獲取O的過(guò)程。以KBQA為例,我們來(lái)講述一下知識(shí)檢索的過(guò)程。 假設(shè)用戶輸入這樣的query:“周杰倫的義父是誰(shuí)?”,讀者先想一下,需要經(jīng)過(guò)哪些步驟,才能檢索圖譜得到答案呢? 如上圖所示,展示了這樣一個(gè)過(guò)程: 1.通過(guò)實(shí)體識(shí)別模塊,識(shí)別出S:周杰倫 2.通過(guò)關(guān)系識(shí)別模塊,識(shí)別出P:義父是誰(shuí) 3.檢索圖數(shù)據(jù)庫(kù),得到答案“黃秋生” 上述過(guò)程是一個(gè)標(biāo)準(zhǔn)的流程,在實(shí)際的應(yīng)用過(guò)程中,可能還會(huì)有實(shí)體的鏈接以及關(guān)系校正等過(guò)程。 當(dāng)然,檢索數(shù)據(jù)庫(kù)過(guò)程因不同數(shù)據(jù)庫(kù)而異,具體不會(huì)太復(fù)雜,感興趣的同學(xué)可以參考自己所使用的數(shù)據(jù)庫(kù)的文檔,這里不做詳細(xì)的介紹。 知識(shí)圖譜是人工智能技術(shù)最重要的基礎(chǔ)設(shè)施,是計(jì)算機(jī)能夠?qū)崿F(xiàn)推理、預(yù)測(cè)等類似人類思考能力的關(guān)鍵。知識(shí)存儲(chǔ)和檢索是知識(shí)圖譜系列技術(shù)中相對(duì)簡(jiǎn)單的一環(huán)。對(duì)開(kāi)發(fā)者而言,其難點(diǎn)在于檢索過(guò)程,即組建檢索語(yǔ)句的過(guò)程,設(shè)計(jì)實(shí)體識(shí)別及關(guān)系識(shí)別。 我會(huì)在知識(shí)星球中討論NEO4J的具體操作以及KBQA的具體實(shí)現(xiàn),感興趣的同學(xué)可以掃描下面的二維碼加入。 |
|