▌一、知識圖譜的概述
我們先直觀的來看一下什麼是知識圖譜,下面有一張圖,從這張圖裡可以看到,這個圖裡圓圈是節點,節點之間有一些帶箭頭的邊來連成,這個節點實際上相當於知識圖譜裡的實體或者概念,邊連線表示實體之間的關係。
知識圖譜本質上是一種大型的語義網絡,它旨在描述客觀世界的概念實體事件以及及其之間的關係。以實體概念為節點,以關係為邊,提供一種從關係的視角來看世界。
語義網絡已經不是什麼新鮮事,早在上個世紀就已經出現了,但為什麼重新又提到知識圖譜?
知識圖譜本質上是一種語義網絡,但是它最主要的特點是一個非常大規模的語義網絡,之前的語義網絡受限於我們處理的方法,更多是依賴於專家的經驗規則去構建,在規模方面受限於特定領域的資料。大規模網路,谷歌在2012年首先提出知識圖譜的概念,在freebase的基礎上擴充套件了大量來自網際網路的實體資料和關係資料。據說目前實體的資料已經達到數十億級,有達到千億級的例項關係,規模是非常巨大的。
我們再看一下,知識圖譜背後是怎麼表示的,我們看到的是一個巨大的語義網,背後是怎麼儲存或者表示的呢?
首先,它是由三元組構成的,構成知識圖譜的核心其實就是三元組,三元組是由實體、屬性和關係組成的(由Entity、Attribute、Relation組成)。
具體表示方法為,實體1跟實體2之間有某種關係,或者是實體屬性、屬性詞。
舉個例子,“達觀資料是一家人工智慧公司”,其實就可以表示成這樣的三元組:
<達觀資料,is-a,人工智慧公司>。
“人工智慧公司是一種高科技公司”可以表示成:
<人工智慧公司,subclass,高科技公司>。
“達觀資料成立於2015年”,也可以把這個屬性表示成一個三元組,就是:
<達觀資料,start-time,2015年>。
基於已有的三元組,它可以推匯出新的關係,這個對構建知識圖譜來說是非常重要的。我們知道,知識圖譜要有豐富的實體關係,才能真正達到它實用的價值。完全靠人工去做的話是不太現實的,所以內部一定有一個自動推理的機制,可以不斷的去推理出新的關係資料出來,不斷的豐富知識圖譜。
來看一些具體的例子。
“人工智慧公司是一種高科技公司”,subclass的關係。
還有一個三元組是谷歌是一家人工智慧公司,<Google is-a人工智慧公司>,可以由這兩個三元組推匯出谷歌是一家高科技公司,<Google is-a高科技公司>。因為subclass的例項之間是一種繼承的關係。
<翅膀part-of鳥>,<麻雀kind-of鳥>,可以推匯出<翅膀part-of麻雀>。
為什麼要用三元組來描述知識圖譜?
三元組是一個人和計算機都易於理解的結構,人是可以解讀的,計算機也可以通過三元組去處理,所以它是一個既容易被人類解讀,又容易被計算機來處理和加工的結構,而且它也足夠的簡單,如果說你擴充成四元組、五元組,它整個結構就會變得比較複雜,那是綜合的一種複雜性和人的易理解性、和計算機的易出理性來綜合的考慮,決定用三元組的結構來去作為它的一個儲存。
那麼,AI為什麼需要知識圖譜?
人工智慧分為三個階段,從機器智慧到感知智慧,再到認知智慧。
機器智慧更多強調這些機器的運算的能力,大規模的叢集的處理能力,GPU的處理的能力。
在這個基礎之上會有感知智慧,感知智慧就是語音識別、影象識別,從圖片裡面識別出一個貓,識別人臉,是感知智慧。感知智慧並非人類所特有,動物也會有這樣的一些感知智慧。
再往上一層的認知智慧,是人類所特有的,是建立在思考的基礎之上的,認知的建立是需要思考的能力,而思考是建立在知識的基礎之上,必須有知識的基礎、有一些常識,才能建立一些思考,形成一個推理機制。
AI需要從感知智慧邁向認知智慧,本質上知識是一個基礎,然後基於知識的推理,剛好知識圖譜其實是具備這樣的一個屬性。
知識圖譜其實是富含有實體、屬性、概念、事件和關係等資訊,它能夠基於一定的推理。且比較關鍵的是,它能夠基於一定的推理為AI的可解釋性,帶來全新的一個視角。
可解釋性已被一些領域AI大規模使用,比如醫療領域,AI進行癌症的診斷的結果,如果沒有給出一個合理的一個理由,或者是給出一個解釋的一個方法,醫生是不敢貿然的用AI給出的癌症診斷的結果去給病人直接做下一步的措施。包括金融領域也一樣,AI如果給投資人推薦了一個投資的方案,但是沒有給出任何的一個解釋跟說明的話,也會存在巨大的一個風險。同樣,在司法領域也是一樣,用AI進行判案,AI給一個案件判定一個結果,但是沒有給出任何的一個解釋,也是不能作為結果來採用的,因為司法強調的就是一種可解釋性,對法律的解釋性、可推理性。
為什麼說知識圖譜可以做這樣一個可解釋性呢?
舉個例子,我們問“C羅為什麼那麼牛?”
C羅為什麼那麼牛?這個是一個問題,要解釋回答這個問題,人通常是怎麼樣去回答這樣的問題呢?上圖,通過知識圖譜的簡單的推理,就可以回答這樣一個問題,因為C羅獲得過金球獎,C羅跟金球獎之間的關係是獲得獎項的一個關係,金球獎跟影響力最大的足球評選獎項之一有這樣一個地位的關係,它具有這樣的一個非常高的地位,C羅又獲得過這個獎項,所以可以得出,C羅是很牛的。這是一種知識圖譜來解釋、來回答這樣一個“為什麼”的一個問題。
同樣還有一些問題,比如,“鱷魚為什麼那麼可怕?”
人類是有一樣這樣的常識,所有的大型的食肉動物都是很可怕,這是個常識。鱷魚是一種大型的食薄動物,鱷魚跟大型食肉動物概念之間是一種instance的關係。通過這樣的一個常識和概念之間的關係,可以推匯出鱷魚是很可怕的。同樣的,“鳥兒為什麼會飛?”因為它有翅膀,鳥兒這個實體它的屬性是有翅膀,利用一個實體跟屬性之間的關係,可以做這樣一個推理。
之前微博上關曉彤跟鹿晗非常的火,經常被刷屏,這是為什麼?
因為關曉彤跟鹿晗之間是男女朋友這樣的關係,明星之間的男女朋友的關係就最容易被大家追捧,也最容易被刷屏。這個就是通過關係也好,通過實體的屬性也好,通過實體的概念也好,就可以去解釋、去回答一些問題。這些是知識圖譜在AI在可解釋性方面的一些具體的例子。
深度學習的可解釋性非常差的,深度學習裡面內部的語義表達、向量的表達都是一些浮點數,人類是非常難以理解的。深度學習出來的結果,它的可解釋性也是非常少的。
儘管我們現在在研究視覺化的技術,把中間的它的結果呈現出來、視覺化出來,但是真正能達到對人有效的解釋性進展還是比較緩慢的。知識圖譜實際上是有望能夠消除人類的自然語言跟深度學習黑盒之間的語義鴻溝。也就是深度學習的底層的特徵空間和上層的人的自然語言空間這種巨大的語義鴻溝,通過深度學習跟知識圖譜結合起來,有望能夠消除。這也是為什麼AI要結合知識圖譜的一個原因。
▌二、知識圖譜的典型行業應用介紹
1. 金融行業的應用。
知識圖譜在金融行業裡面比較典型的應用就是風控反欺詐。
(1). 知識圖譜可以進行資訊的不一致性檢查,來確定是不是存在可能的借款人欺詐的風險,比如第一個圖裡面的借款人甲和乙來自於不同的公司,但是他卻非常詭異地留下了相同的公司的電話號碼,這時稽核人員就要格外留意了,有可能會存在欺詐的風險。
(2). 組團欺詐,甲乙丙三個借款人同一天向銀行發起借款,他們是互不相關的人,但是他們留了相同的地址,這時有可能是組團的欺詐。
(3). 靜態的異常檢測,它表示的是在某個時間點突然發現圖中的某幾個節點的聯絡異常的緊密,原來是互相聯絡都比較少、比較鬆散的,突然間有幾個點之間密集的聯絡,有可能會出現欺詐組織。
(4). 動態的異常檢測(第二行中間圖),是隨著時間的變化,它的幾個節點之間圖的結構發生明顯的變化,原來它是比較穩定的,左邊黑色的上三角、下三角,然後中間連線,但過了一段時間之後,它整個圖的結構變成了右邊的這樣結構,此時很可能是異常的關係的變化,會出現一個欺詐組織。
(5). 客戶關係管理。怎麼樣去做失聯客戶的管理?圖中的例子有一個借款的使用者,銀行可能現在沒有辦法直接找到他,甚至通過他的直接聯絡人也沒辦法找到他,那這個時候是不是可以再進一步的通過他的二度聯絡人來間接的來找到他?通過這樣的圖結構是可以快速找到他的二度聯絡人,比如張小三或者是王二,再去聯絡他們,嘗試把李四這個人給找到。
2.輔助信貸稽核和投研分析
左邊是輔助審貸。
知識圖譜會融合多個資料來源,從多個維度來維護關聯人員的資訊,來避免資料不全與資料孤島,把它整合到一個大的網路結構裡面去,藉助知識圖譜的搜尋,稽核人員可以快速的獲取到信貸申請人張三的相關的資訊,住址、配偶、就職公司、他的朋友等等。這比原來到各個異構且散落的資料來源去進行蒐集的效率要高得多,且能夠從整體上來看到關鍵實體相互之間的關聯關係。
第二個是用於輔助投研的。
知識圖譜能夠實時地串聯起來這個公司相關的上下游公司,供應商的關係、競爭者的關係、客戶的關係、投融資那些關係等,然後進行快速實時的定位。中信通訊這家公司前不久被美國政府進行合規性審查,這個時候投研人員通過知識圖譜搜尋到中興通訊公司實體,進而可以非常快地得到跟中興通訊相關的上下游公司實體,包括關聯的子公司、供應商、客戶、競爭對手、合作伙伴,有助於投研人員快速的做決策。
3.精準營銷應用
知識圖譜能夠比較全面的記錄客戶的非常詳細的資訊,包括名字,住址,經常和什麼樣的人進行互動,還認識其它什麼樣的人,網上的行為習慣、行為方式是什麼樣的,這樣就可以知識圖譜挖掘出更多的使用者的屬性標籤和興趣標籤,以及社會的屬性標籤,形成全面的使用者洞察,基於知識圖譜就可以進行個性化的商品或者活動的推送,或者基於使用者的分群分組做定向營銷,從而實現精準營銷。
4. 知識圖譜在搜尋引擎裡面的應用,最典型的就是在谷歌搜尋引擎裡面應用。
谷歌是在2012年率先提出來知識圖譜的概念。提出這個概念的最主要的目的就是改善它的搜尋引擎的體驗。從這個圖就可以看到,使用者搜尋的是泰姬陵,泰姬陵是印度的非常著名的,也是世界八大奇蹟之一的景點。
不一樣的地方,在搜尋引擎的右側,會以知識卡片的形式來呈現跟泰姬陵相關的結構化的資訊,包括泰姬陵的地圖、圖片、景點的描述、開放時間門票等等,甚至在下面會列出跟泰姬陵相類似或者相關聯的景點,比如中國的萬里長城,同樣是世界的幾大奇蹟,還有金字塔等等。同時,它還可以進行知識的擴充套件,比如泰姬陵不光是印度的景點,它還可以是一張音樂專輯,它甚至是國外某城市的街區街道。這樣通過知識圖譜可以不斷的去探索發現新的非常新奇的東西,讓使用者在搜尋引擎裡面能夠不斷的去進行知識的關聯和發現,激發起使用者的搜尋的慾望。原來我們搜尋引擎講究的是說快速的找到它的結果,然後關掉就完了,谷歌通過知識圖譜,實際上是把搜尋引擎變成了知識的探索和發現引擎,這是概念和理念上的非常大的變遷與升級。
5.知識圖譜應用於推薦系統
我們比較熟悉的是個性化推薦,即所謂的千人千面,比如根據遊戲來推薦遊戲的道具。對於小白使用者和骨灰級的使用者,推薦的東西顯然是不一樣的,這是個性化的推薦。個性化推薦之外,還有場景化的推薦,比如使用者購買了沙灘鞋,存在使用者可能要去海邊度假這樣的場景,基於這樣的場景可以繼續給他推薦游泳衣、防曬霜或者其它的海島旅遊度假的產品。
任務型的推薦。比如使用者買了牛肉卷或者羊肉卷,假設他實際上是要為了做一頓火鍋。,這時候系統可以給他推薦火鍋底料或者是電磁爐。
冷啟動問題。推薦系統的冷啟動一直是比較難以處理的問題,通常的做法是根據新使用者的裝置型別,或者他當前的時間位置等等,或者外面的關聯資料來做推薦。可以基於知識圖譜的語義關聯標籤進行推薦,比如旅遊和攝影實際上是語義相近的兩個標籤,再比如相同的導演或者相同演員的電影在語義上也是比較相近的。
跨領域的推薦問題。微博的資訊流裡會推薦淘寶的商品,然而微博和淘寶是兩個不同的領域,它是怎麼做到的呢?新浪微博有些使用者會經常去曬黃山、九寨溝、泰山等這些照片,這個時候我們就知道他有可能是一位登山的愛好者,這個時候淘寶就會可以給他推薦登山的裝備,登山杖、登山鞋等等這些裝備,利用這些背景知識,能夠打通不同的平臺之間的語義鴻溝。
知識型的推薦,是基於知識的。比如清華大學、北京大學都是頂級名校,復旦大學也同樣是,這個時候是可以推薦復旦大學,再比如百度、阿里和騰訊都屬於BAT級網際網路公司,基於百度、阿里就可以推薦騰訊。
有了知識圖譜以後,我們可以從基於行為的推薦,發展到行為跟語義相融合的智慧推薦。
▌三、如何構建知識圖譜
構建知識圖譜是包括這樣的生命週期或這樣的部分,包括定義、知識的抽取、知識的融合、儲存、知識的推理、知識的應用,這樣的迴圈迭代的過程。
我們先來理解一下本體的概念,本體是用於描述事物的本質的,維基百科裡面對於電腦科學領域當中的本體給出的定義是這樣的,即:對於特定領域真實存在的實體的型別、屬性,以及它們之間的相互關係的一種定義。
我們再來看看知識圖譜和本體的關係,下面這張圖,我們看到有兩個層,就下面是本體層,上面是事實層,那本體層是基於特定領域的概念的定義,包括概念的屬性,概念之間的關係,一般概念之間的關係是一種父子關係,也有叫做上下位的關係。事實層是具體的真實存在的實體,包括實體的屬性以及實體之間的關係,每個實體都會對映到本體層相應的概念。面向對面大家都比較熟悉,給大家舉例說明一下,本體層的概念就好比物件導向裡面的類的概念,然後事實層的實體就好比物件導向裡面的物件,物件是從類當中派生出來的,同時繼承了類的一些屬性和關係。這就是本體的概念。
為什麼要講本體的概念?一個更直觀的例子,就是要對知識圖譜來進行模式或者Schema的定義。這裡的領域是科技,在這科技領域下面是我們劃分的若干個主題,比如網際網路主題、通訊主題、手機主題,在每個主題下面又有若干的概念,就是下面的概念層,比如網際網路裡面有深度學習、人工智慧等等這些概念,然後通訊裡面有智慧手機這些概念。在概念下面就是具體的事實層面,就是實體層,比如特斯拉modelS、蘋果iPhone7、華為P10等等,這些都是具體的實體,然後實體之間有關係,它繼承的概念之間的關係。最下面一層是事件層,這就是整個本體層的例子。
給大家介紹一款比較好的開源本體編輯工具,叫Protégé。這個工具是史丹佛大學開源的,它的功能非常強大,也是目前最流行的本體編輯工具,有網頁版和桌面版,桌面版是免安裝的,大家直接下載下來就可以試用。
它的好處是什麼?它遮蔽了具體的本體描述語言,使用者只需要在概念層次上面進行本體的模型構建,同時也比較靈活,能夠支援各種外掛來擴充套件特定的功能。比如推理的功能可以基於外掛來擴充套件。不過這個工具對中文的支援不是很友好。
下面一個非常重要的關鍵的步驟就是知識的抽取,首先要抽取實體,然後是實體之間的關係。我們看一下NER實體的抽取,我們知道NER可以轉化為序列標註的問題,傳統的機器學習的方法,CRF等都可以做,而且CFR做的效果還是不錯的。不過CRF通常只能學習到相鄰詞位置比較近的上下文的特徵,它無法獲取整個句子甚至更長的上下文的特徵。
目前業界比較主流的,包括學術界比較主流的一種做法是什麼?是深度迴圈神經網路加上結合CRF,這樣的做法更多的是雙向的迴圈神經網路,它可以分別從前往後以及從後往前這兩個方向來去學習上下文的特徵,然後進行序列訊號的記憶和傳遞,這是一種比較常見的做法。
華為釋出了新一代的麒麟處理,通過從前往後就可以推理出最後面的文字,然後從後往前也可以推理出最前面的文字,第一個字“朝”實際上是從後往前去進行預測推理。頂層用CRF對迴圈神經網路的結果進行約束就可以,對這個輸出進行更好的控制。然後輸入層通常是詞向量或者字向量,embedding能可以把單個字或者詞轉化為低維的稠密的語義向量。
下面講一下關係抽取的技術。它有幾種方法,第一種是基於有監督的方法,把關係抽取當做分類問題來看待,根據訓練資料設計有效的特徵,來學習各種分類模型,這是傳統的分類。這個方法不好的地方,是需要大量的人工標註的訓練語料,語料的標註是非常的耗時耗力的。所以在有監督的基礎上,又提出了一種半監督的方式,半監督的方式主要採用方式進行關係的抽取,具體來說就是要對於要抽取的關係,首先基於手工設定若干的種子的例項,然後迭代性的從資料當中抽取關係對應的關係模板和更多的例項,通過不斷迭代的方式來抽取越來越多的這些例項。
還有一種是無監督的方法。無監督的方法本質上是一種聚類的方法,用擁有相同語義關係的實體,它擁有相似上下文的資訊是它的假設,因此它可以利用每個實體的上下文的資訊來代表實體的語義關係,對實體進行語義關係的聚類。
這三種方法當中,有監督的方法能夠抽取出有效的特徵,然後在準確率和召回率方面是更有優勢的,半監督和無監督的方法一般情況下,效果都不是特別的好,所以業界現在用的比較多的還是有監督的學習的方法。
我們剛剛提到有監督學習方法,比較困難的地方就是怎麼樣獲取大量分類的訓練樣本,完全通過人工去標註的方式顯然不是比較好的方式。
有什麼樣好的處理的方法?用遠端監督的一種方法,典型的工具Deepdive,也是史丹佛大學InfoLab實驗室開源的知識抽取的系統,通過弱監督學習的方法,從非結構化的文字當中可以抽取出結構化的關係的資料。開發者不需要理解它裡面的具體的演算法,只要在概念層次進行思考基本的特徵就可以了,然後也可以使用已有的領域知識進行推理,也能夠對使用者的反饋進行處理,可以進行實時反饋的一種機制,這樣能夠提高整個預測的質量。背後用的是也是一種遠端監督的技術,只要少量的運訓練的資料就可以了。
我們來具體來看一下它是怎麼樣來做這樣一件事情的。首先,下面看到Mention的句子就是“奧巴馬和米歇爾結婚”,它是句子,但Mention就是這些詞的標記,奧巴馬米歇爾都是Mention,我們要推測它之間是不是配偶的關係。這個時候要對Mention:奧巴馬和米歇爾,去對應到知識圖譜裡面具體的實體,看一下這兩個實體在知識圖譜裡面是不是存在著配偶的關係?如果是的話,就把它拿過來作為正的訓練樣本,如果不是,它就是負的樣本。前提假設就是知識圖譜裡面的它的實體之間的關係都是正確的,以這個為依據,去做樣本的標註。
目前進行實體關係抽取有兩大類方法,有一類是基於流水線式的抽取,輸入一個句子,首先抽取這實體,再對實體進行兩兩組合,然後再進行分類,最後識別出實體之間的關係。這種做法是有缺點的,第一,它容易造成錯誤的傳播,比如在第一步的時候,實體如果識別錯誤了,後面的關係肯定也是錯誤的。第二,會產生沒有必要冗餘的資訊,因為要對實體進行兩兩的配對,然後再進行關係的分類,很多配對之間實際上就沒有這樣的關係,就是它會帶來了這樣非常多的冗餘的資訊,錯誤率也會被放大、被提升。
現在用的比較多的另一種方法,是聯合學習的方法,輸入一個句子,通過實體識別和關係抽取的聯合模型,可以直接得到有效的三元組。通常我們是基於神經網路的聯合標註的學習的方法,裡面涉及到兩個關鍵的工作,一個是模型的引數共享的問題,還有一個就是標註策略,怎麼樣進行有效的標註。模型共享是指的是在實體訓練的時候能夠進行實體識別和關係分類這兩個任務,都會通過反向傳播來匹配來進行關係的分類,然後同時來實現這兩個引數之間的依賴,兩個子任務之間的依賴。引數共享的方法,它本質上還是兩個子任務,只是說它們這兩個任務之間通過引數共享有了互動,而且在訓練的時候還要預先進行實體識別,識別實體之後再根據預測資訊進行兩兩匹配,來進行關係的分類,所以仍然會產生無關係時候冗餘的資訊存在。
現在我們新提出了一種端到端序列標註的策略,把原來涉及到序列標註和分類的兩個任務變成了完全的端到端的序列標註的問題,通過端到端的神經網路模型,可以直接得到關係的三元組,即實體關係的三元組。
新的標註策略是像下面這張圖裡面有三個部分來組成的,第一部分是實體中的詞的位置,比如b是表示開始,i表示是在實體的內部,e表示是實體的結尾,s表示是單個的實體。第二部分就是關係型別的資訊,預定義的關係型別的編碼,比如裡面的CP、CF,CP是國家總統,CF是公司創立者,這樣兩種的關係。還有實體的角色的資訊,它表示是實體1還是實體2?實體跟關係之外的其它的這些字元都用O來表示,這樣就進行了實體的標註。
接下來我們講一下實體的融合,這裡最主要就是實體的對齊。
首先是實體對齊,也叫實體歸一化,是把具有不同的標識的實體,但是在現實世界當中可能是表達同樣意思的,把它做歸一化。比如中華人民共和國、中國和China,這個三個指的是同一實體,儘管它的表述方式不一樣,就把它歸一化為具有全域性唯一標識的例項物件,然後新增到知識圖譜當中去。
現在實體對齊普遍採用的還是一種聚類的方法,關鍵在於定義合適的相似度的閾值,一般從三個維度來依次來考察的,首先會從字元的相似度的維度,基於的假設是具有相同描述的實體更有可能代表同實體。第二個維度,是從屬性的相似度的維度來看的,就是具有相同屬性的和以及屬性詞的這些實體,有可能會代表是相同的物件。第三個維度,是從結構相似度的維度來看,基於的假設是具有相同鄰居的實體更有可能指向同物件。
進行融合的時候要考慮各個資料來源的資料的可靠性,以及在各個不同資料來源當中出現的頻度來綜合決定選用哪個類別或者哪個屬性詞。還有一種方法就是是用來自LD(LinkedData),LD是很多人工標記好的資料,是非常準確的,其中有種關聯叫owl:sameAs,它表示前後兩個是同實體的,利用這個作為訓練資料來發現更多相同的實體對,是比較好的方法。最後要說的是,無論用哪種方法,都不能保證百分之百的準確率,所以最後也要有人工稽核和過濾。
知識儲存,就是如何選擇資料庫,從選擇層面,我們有圖資料庫,有NoSQL的資料庫,也有關係型資料庫,資料庫有很多選擇。具體什麼樣的情況下選擇什麼樣的資料庫?通常是如果說知識圖譜的關係結構非常的複雜、關係非常的多,這時候建議使用這個圖資料庫,比如Neo4J這樣的資料庫。另外一種就是它的關係並不是很複雜,關係可能也就是1度、2度的關係,更多的它是有非常多的屬性的資料,這個時候可以考慮關係式資料庫,或者是ES這樣的儲存。如果要考慮到知識圖譜的效能、可擴充套件性、可分散式,是可以結合NoSQL的資料庫,比如TiTan。根據實際的情況,一般是綜合起來使用的,根據我們的經驗,我們會結合Neo4J和ES來綜合來使用,同時還結合這關係型資料庫MySQL等等,根據不同的資料的特點來進行選型,而不是說一味的追求圖資料庫。
順便了解一下目前主流的幾款圖資料庫,Titan、Graph Engine、Neo4J這個三個分別都是開源的,然後Titan是Apache旗下的,Graph Engine是MIT的License,Neo4J是GPL開源的,既有商業版,也有也有開源免費版。然後它們的平臺,像Titan是Linux,Graph是windows。而資料的支撐量級,像Titan是後端儲存,基於Cassandra/Hbase/BDB這樣的分散式儲存引擎,可以支援更大的資料量,千億級的資料量級;Neo4J商業版也可以支援到百億級的,但是它的非商業版在資料量級比較大的時候,一般是在幾千萬級的時候就可能會出現一些問題。
再看一下知識推理,知識推理這邊有幾種方法,首先是基於符號推理,我們上面說的三元組的結構,比如左邊的RDF,有概念,然後基於概念符號進行推理。
這個是基於OWL進行本體推理的例子,這個背後是基於OWL本體的推理,最常見的OWL推理工具是Jena, Jena 2支援基於規則的簡單推理,它的推理機制支援將推理器(inference reasoners)匯入Jena,建立模型時將推理器與模型關聯以實現推理。
還有一種是基於圖(PRA)的推理的方法,更直觀的一種方法,思想是比較簡單的,就是以連線兩個實體的已有路徑作為特徵構建分類器,來預測它們之間可能存在的潛在關係。
比如左邊這個圖裡面Charlotte Bronte,我們要預測他的職業是不是作家。在這個圖裡面已知存在關係是什麼呢?他寫過一篇小說,它寫過一篇小說Jane Eyre,然後雙城記也是一部小說,狄更斯是寫了雙城記這部小說,狄更斯是作家,同時它下面還有他的父親職業也是作家,所以基於這樣圖之間的關係,就可以較大概率的推理出Charlotte Bronte的職業很有可能就是作家,這就是基於圖之間的關係的特徵構建分類器來進行預測的。 PRA提取特徵的方法主要有隨機遊走、廣度優先和深度優先遍歷,特徵值計算方法有隨機遊走probability,路徑出現/不出現的二值特徵以及路徑的出現頻次等。PRA方法的優點是直觀、解釋性好,但缺點也很明顯,有三個主要缺點:首先,很難處理關係稀疏的資料,其次,很難處理低連通度的圖,最後,是路徑特徵提取的效率低且耗時。
還有是基於分散式的知識語義表示的方法,比如像Trans系列的模型,在這個模型基礎上進行語義的推理。TransE這個模型的思想也比較直觀,它是將每個詞表示成向量,然後向量之間保持一種類比的關係。比如上面這個圖裡面的北京中國,然後類比巴黎法國,就是北京加上首都的關係就等於中國,然後巴黎加上capital的關係等於France。所以它是無限的接近於偽實體的embed]ding。這個模型的特點是比較簡單的,但是它只能處理實體之間一對一的關係,它不能處理多對一與多對多的關係。
後來提出了TransR的模型了,TransR實際上是解決了上面提到的一對多或者多對一、多對多的問題,它分別將實體和關係投射到不同的空間裡面。一個實體的空間和一個關係的空間,然後在實體空間和關係空間來構建實體和關係的嵌入,就對於每個元組<h,r,t>首先將實體空間中實體通過Mr向關係空間進行投影得到hr和Tr,然後Hr加上r是不是約等於或者近似的等於Tr,通過它們在關係空間裡面的距離,來判斷在實體空間裡面,H和T之間是不是具有這樣的關係?
除了TransE、TransR,還有更多的Trans系列的,像TransH、TransN、TransG等等這些模型。清華大學的自然語言處理實驗室釋出了一款這個叫openKE的平臺,openKE它是開源的知識表示學習的平臺,是基於Tanserflow的工具包來開發的。它整合了Trans系列的很多演算法,提供統一的介面。它也是面向了預訓練的資料來表示模型的。
最後介紹一種基於深度學習的推理模型,這個模型利用了卷積神經網路對實體進行關係的分類的,把句子的依存樹作為輸入,就是將詞在樹中的不同的位置的嵌入式的表示拼接到這個詞向量當中來學習,同時對面相樹結構設計了獨特的卷積核。這種方法在實體分類的任務上,相較於未使用位置關係的資訊,效果會有一定的提升。
▌四、達觀經驗與案例
1.知識圖譜在達觀的知識問答當中的應用
我們的智慧問答是融合了是知識圖譜問答和基於檢索的問答兩種方法進行融合。
首先,左邊會把使用者的語音經過語音轉成文字以後,進行一個預處理,預處理主要是做了分詞、糾錯、詞性標註、實體屬性的識別,對這個句子進行依存句法樹的結構分析。
預處理完了以後,引擎會首先嚐試根據問句的句法結構進行問句模板的匹配,如果說能夠匹配到合適的問句模板,這個時候再根據在預處理階段得到的問句的實體屬性和關係,對匹配到的問題模板進行例項化,然後再根據例項化以後的問句模板來生成知識圖譜的圖資料庫的查詢語言,然後在圖資料庫裡面就可以把這個答案查出來了。
另外一種情況是沒有匹配到合適的問句模板,這個時候會進入到基於檢索的問答模組,最後是把基於知識圖譜和基於檢索的兩種的結果進行融合。
2. 在HR人崗精準匹配裡面的應用
HR建立的JD能夠自動的匹配到簡歷庫裡面最合適的候選人的簡歷,也即把JD的內容和簡歷庫裡面簡歷的內容做語義的匹配。
這裡有一個問題,JD對技能的描述和不同的人的簡歷中對技能的描述存在很多表達方式造成的語義方面的差異。我們分別對JD和簡歷構建技能圖譜,通過技能圖譜的子圖匹配,就可以比較好地來解決語義匹配的問題。
我們在知識圖譜建設當中的一些經驗:
第一,界定好範圍,就是要有一個明確的場景和問題的定義,不能說為了知識圖譜而知識圖譜。如果沒有想清楚知識圖譜有什麼樣的應用的場景,或者能解決什麼樣的問題,這樣的知識圖譜是比較難以落地的。一些明確的場景,比如解決商品資料的搜尋問題,或者從產品說明書裡面做相關問題的回答。
第二,做好schema的定義,就是上面講到的對於schema或者本體的定義。第一步確定好場景和問題以後,就基於這樣的場景或者問題,再進行相關領域的schema的定義。定義這個領域裡概念的層次結構、概念之間的關係的型別,這樣做是確保整個知識圖譜是比較嚴謹的,知識的準確性是比較可靠的。知識的模型的定義,或者schema的定義,大部分情況下是通過這個領域的知識專家的參與,自上而下的方式去定義的。
第三,資料是知識圖譜構建基礎。資料的梳理就比較重要,最需要什麼樣的資料?依賴於我們要解決的問題是什麼,或者我們的應用場景是什麼?基於問題和場景,梳理出領域相關的問題、相關的資料,包括結構化的資料、半結構化資料、無結構化的資料,結合百科跟這個領域相關的資料,領域的詞典,或者領域專家的經驗的規則。
第四,不要重複去造輪子,很多百科的資料和開放知識圖譜的資料,是可以融合到我們的領域知識圖譜中。
第五,要有驗證和反饋機制,需要有管理後臺,使用者可以不斷的和知識圖譜系統進行互動,不斷的進行確認和驗證,確保知識圖譜每一步推理和計算都是準確的。
第六,知識圖譜構建是持續迭代的系統工程,不可能一蹴而就。
最後給大家介紹中文開放知識圖譜,達觀資料也是中文開放知識圖譜發起單位之一,這裡面有很多開放的資料和開源的工具,其中的文章也是非常好的學習材料。
下面是自由提問環節。
Q:用知識圖譜來做反欺詐,和深度學習的方法相比,或者是其它機器學習的相比,知識圖譜是否有優勢?
A:反欺詐是整個風控流程中的一個非常重要的環節。其主要難點在於如何基於大資料把多個不同來源的資料(內部、外部,格式化、非格式化)有機整合在一起,並對這些資料之間的各種複雜且動態變化的關係進行建模,從而構建起一個反欺詐引擎。知識圖譜作為關係的直接表示方式,可以提供一種非常直觀的視覺化的手段以及內部的推理機制來有效地分析各種複雜關係下可能存在的潛在風險。
我們知道深度學習的表示是基於一種低維稠密的數值向量,模型本身是一個“黑盒”,我們無從知道內部的各種特徵的非線性組合是如何形成的。相比於知識圖譜,深度學習的不可解釋性是最大的缺點。此外深度學習要真正達成效果,需要依賴已經標註過的大樣本資料進行訓練,但在很多領域(包括反欺詐)這樣的資料獲取門檻極高。
當然,深度學習和知識圖譜也是不完全互斥的,知識圖譜的構建中的實體、屬性、關係抽取等關鍵過程也會用到深度學習的迴圈神經網路等自然語言處理技術。
Q:知識圖譜的查詢跟關聯式資料庫的查詢感覺都一樣,這兩個有什麼樣的關係?
A:在關係型資料庫裡面,如果要聯合多個表執行復雜查詢,特別在資料量比較大的情況下是非常慢的。如果涉及到多種很複雜的關聯關係,圖資料庫是比較好的選擇。圖資料庫基於圖的遍歷,內建對圖搜尋的優化演算法,可以非常快速進行子圖的搜尋。相較於傳統的關聯式資料庫,其效能會有多個數量級的提升。
Q:純文字怎麼進行抽取?
A:關於抽取,我在前面講到了有很多的方法,包括實體抽取裡面有NER的方法,NER有傳統的CRF的方法,有基於迴圈神經網路+CRF的方法,也有端到端的聯合標註的抽取方法,這種方法同時輸出實體和實體之間關係的三元組。
Q:知識圖譜怎麼和其它演算法相結合,應用在搜尋推薦上面?
A:在搜尋裡面,更多的是基於知識圖譜去回答問題,它可以對query所表達的實體和屬性進行識別,比如查詢“華為P10手機的記憶體是多少?”這就是實體屬性值的查詢。華為P10是實體,記憶體是P10這個實體的屬性,對應到知識圖譜裡面,可以快速定位到這個實體叫P10,就可以直接把P10的記憶體(屬性值)返回出來,就可以直接給出64G或32G這樣的答案。
Q:實體有哪些屬性是怎麼定義的?
A: 從如何定義的角度看,主要有兩種方法,一種是自上而下的方法,比如我們進行模式(Schema)定義的時候,首先會對其中的各種概念進行定義,概念有哪些屬性,概念之間的關係是什麼樣的。後面抽取的各個實體都會對映到模式層的一個概念上去,實體會自動繼承所屬概念的屬性。還有一種是自下而上的方法,實體的屬性是從原始資料中不斷抽取提出來的,並對不同資料來源的屬性與屬性值進行融合(歸一化)。實際使用中,這兩種方法往往是同時使用互相補充的。
Q:知識圖譜中的時間和空間關係怎麼表達?
A:知識圖譜表達的是動態的資料,比如美國總統是川普對吧?現在是的,但三年前不是,五年後也不一定是。隨著時間的推移,它的三元組的關係是會有變化的,那這個時候怎麼樣去表達?通常是在三元組的基礎上再擴充套件一個維度形成四元組這樣的做法,但是它會大大增加系統處理的複雜度。也有一些其他的方法,比如可以是跟關聯式資料庫相結合的方式進行擴充套件。
Q:如何衡量一個知識圖譜建立以後的效果?如何有效的進行學習改進?
A:我們建立一個知識圖譜,建立一個機器學習的演算法模型,對它的效果進行衡量度量是非常關鍵的。在知識圖譜這裡,一定是基於某個場景具體的應用,然後再看這個場景或者這個具體的應用使用了知識圖譜以後跟原來的做法來做一個比較,或者有一個管理後臺,人可以定期對知識圖譜系統的推理和計算的結果做一些檢測和驗證,然後對這些驗證的結果再反饋到這個系統裡面去,讓系統重新來進行學習、改進,建立人跟系統之間不斷的反饋、驗證和自動學習的過程。
Q:可不可以用知識圖譜進行分類?
A:這個問題很有意思。上面提到,一方面我們可以基於分類的方式來做知識圖譜中實體關係的學習。另一方面,我們是否可以利用知識圖譜輔助進行文字的分類?這樣方面我們有一些經驗。對於文字分類中的特徵工程,我們的做法是通過知識圖譜進行語義的關聯擴充以獲取更多的語義特徵,尤其是對於短文字,對分類效果能有比較好的提升。