程式設計師如何學習知識圖譜?一文詳解知識圖譜關鍵技術與應用

本課程從知識圖譜的歷史由來開展,講述知識圖譜與人工智能的關係與現狀;知識圖譜輻射至各行業領域的應用;在知識圖譜關鍵技術概念與工具的實踐應用中,本課程也會講解知識圖譜的構建經驗;以及達觀在各行業領域系統中的產品開發和系統應用。

為企業提供完善的文本挖掘、知識圖譜、搜索引擎、個性化推薦的文本智能處理技術服務。

程序員如何學習知識圖譜?一文詳解知識圖譜關鍵技術與應用

“知識圖譜關鍵技術與應用”,分成幾個環節:

  • 一、知識圖譜的相關概述;
  • 二、知識圖譜的基本概念;
  • 三、知識圖譜行業方面的應用和場景介紹,著重講一下知識圖譜構建的相關技術;
  • 四、達觀在知識圖譜構建方面的經驗、心得和相關案例。
  • 最後是與大家的Q&A互動環節。
程序員如何學習知識圖譜?一文詳解知識圖譜關鍵技術與應用

▌一、知識圖譜的概述

我們先直觀的來看一下什麼是知識圖譜,下面有一張圖,從這張圖裡可以看到,這個圖裡圓圈是節點,節點之間有一些帶箭頭的邊來連成,這個節點實際上相當於知識圖譜裡的實體或者概念,邊連線表示實體之間的關係。

知識圖譜本質上是一種大型的語義網絡,它旨在描述客觀世界的概念實體事件以及及其之間的關係。以實體概念為節點,以關係為邊,提供一種從關係的視角來看世界。

程序員如何學習知識圖譜?一文詳解知識圖譜關鍵技術與應用

語義網絡已經不是什麼新鮮事,早在上個世紀就已經出現了,但為什麼重新又提到知識圖譜?

知識圖譜本質上是一種語義網絡,但是它最主要的特點是一個非常大規模的語義網絡,之前的語義網絡受限於我們處理的方法,更多是依賴於專家的經驗規則去構建,在規模方面受限於特定領域的數據。大規模網絡,谷歌在2012年首先提出知識圖譜的概念,在freebase的基礎上擴展了大量來自互聯網的實體數據和關係數據。據說目前實體的數據已經達到數十億級,有達到千億級的實例關係,規模是非常巨大的。

程序員如何學習知識圖譜?一文詳解知識圖譜關鍵技術與應用

我們再看一下,知識圖譜背後是怎麼表示的,我們看到的是一個巨大的語義網,背後是怎麼存儲或者表示的呢?

首先,它是由三元組構成的,構成知識圖譜的核心其實就是三元組,三元組是由實體、屬性和關係組成的(由Entity、Attribute、Relation組成)

具體表示方法為,實體1跟實體2之間有某種關係,或者是實體屬性、屬性詞。

其實就可以表示成這樣的三元組:

。“人工智能公司是一種高科技公司”可以表示成:。“達觀數據成立於2015年”,也可以把這個屬性表示成一個三元組,就是:。

基於已有的三元組,它可以推導出新的關係,這個對構建知識圖譜來說是非常重要的。我們知道,知識圖譜要有豐富的實體關係,才能真正達到它實用的價值。完全靠人工去做的話是不太現實的,所以內部一定有一個自動推理的機制,可以不斷的去推理出新的關係數據出來,不斷的豐富知識圖譜。

來看一些具體的例子。

“人工智能公司是一種高科技公司”,subclass的關係。

還有一個三元組是谷歌是一家人工智能公司,,可以由這兩個三元組推導出谷歌是一家高科技公司,。因為subclass的實例之間是一種繼承的關係。

,,可以推導出。

為什麼要用三元組來描述知識圖譜?

三元組是一個人和計算機都易於理解的結構,人是可以解讀的,計算機也可以通過三元組去處理,所以它是一個既容易被人類解讀,又容易被計算機來處理和加工的結構,而且它也足夠的簡單,如果說你擴充成四元組、五元組,它整個結構就會變得比較複雜,那是綜合的一種複雜性和人的易理解性、和計算機的易出理性來綜合的考慮,決定用三元組的結構來去作為它的一個存儲。

那麼,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實際上是解決了上面提到的一對多或者多對一、多對多的問題,它分別將實體和關係投射到不同的空間裡面。一個實體的空間和一個關係的空間,然後在實體空間和關係空間來構建實體和關係的嵌入,就對於每個元組首先將實體空間中實體通過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的定義,大部分情況下是通過這個領域的知識專家的參與,自上而下的方式去定義的。
  • 第三,數據是知識圖譜構建基礎。數據的梳理就比較重要,最需要什麼樣的數據?依賴於我們要解決的問題是什麼,或者我們的應用場景是什麼?基於問題和場景,梳理出領域相關的問題、相關的數據,包括結構化的數據、半結構化數據、無結構化的數據,結合百科跟這個領域相關的數據,領域的詞典,或者領域專家的經驗的規則。
  • 第四,不要重複去造輪子,很多百科的數據和開放知識圖譜的數據,是可以融合到我們的領域知識圖譜中。
  • 第五,要有驗證和反饋機制,需要有管理後臺,用戶可以不斷的和知識圖譜系統進行交互,不斷的進行確認和驗證,確保知識圖譜每一步推理和計算都是準確的。
  • 第六,知識圖譜構建是持續迭代的系統工程,不可能一蹴而就。


分享到:


相關文章: