講師 | 桂洪冠
來源 | AI科技大本營在線公開課
本課程從知識圖譜的曆史由來開展,講述知識圖譜與人工智能的關系與現狀;知識圖譜輻射至各行業領域的應用;在知識圖譜關鍵技術概念與工具的實踐應用中,本課程也會講解知識圖譜的構建經驗;以及達觀在各行業領域系統中的産品開發和系統應用。
以下是公開課文本版整理
大家晚上好!我是達觀數據的桂洪冠,負責達觀的搜索技術團隊。非常高興今天晚上能給大家做一個分享,分享的主題是“知識圖譜的關鍵技術和應用”。
達觀數據是一家專注于文本智能處理的人工智能技術企業,我們為企業提供完善的文本挖掘、知識圖譜、搜索引擎、個性化推薦的文本智能處理技術服務。
言歸正傳,進入今天的演講環節。今天的演講主題是“知識圖譜關鍵技術與應用”,分成幾個環節:
- 一、知識圖譜的相關概述;
- 二、知識圖譜的基本概念;
- 三、知識圖譜行業方面的應用和場景介紹,着重講一下知識圖譜構建的相關技術;
- 四、達觀在知識圖譜構建方面的經驗、心得和相關案例。
- 最後是與大家的Q&A互動環節。
▌一、知識圖譜的概述
我們先直觀的來看一下什麼是知識圖譜,下面有一張圖,從這張圖裡可以看到,這個圖裡圓圈是節點,節點之間有一些帶箭頭的邊來連成,這個節點實際上相當于知識圖譜裡的實體或者概念,邊連線表示實體之間的關系。
知識圖譜本質上是一種大型的語義網絡,它旨在描述客觀世界的概念實體事件以及及其之間的關系。以實體概念為節點,以關系為邊,提供一種從關系的視角來看世界。
語義網絡已經不是什麼新鮮事,早在上個世紀就已經出現了,但為什麼重新又提到知識圖譜?
知識圖譜本質上是一種語義網絡,但是它最主要的特點是一個非常大規模的語義網絡,之前的語義網絡受限于我們處理的方法,更多是依賴于專家的經驗規則去構建,在規模方面受限于特定領域的數據。大規模網絡,谷歌在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:這個問題很有意思。上面提到,一方面我們可以基于分類的方式來做知識圖譜中實體關系的學習。另一方面,我們是否可以利用知識圖譜輔助進行文本的分類?這樣方面我們有一些經驗。對于文本分類中的特征工程,我們的做法是通過知識圖譜進行語義的關聯擴充以獲取更多的語義特征,尤其是對于短文本,對分類效果能有比較好的提升。
,