本文根據達觀數據桂洪冠在「達觀杯」文本智能處理挑戰賽期間的技術直播分享整理而成,內容略有刪減。
咱們先直觀的來看一下什麼是知識圖譜,下面有一張圖,從這張圖裏能夠看到,這個圖裏圓圈是節點,節點之間有一些帶箭頭的邊來連成,這個節點實際上至關於知識圖譜裏的實體或者概念,邊連線表示實體之間的關係。算法
知識圖譜本質上是一種大型的語義網絡,它旨在描述客觀世界的概念實體事件以及及其之間的關係。以實體概念爲節點,以關係爲邊,提供一種從關係的視角來看世界。數據庫
語義網絡已經不是什麼新鮮事,早在上個世紀就已經出現了,但爲何從新又提到知識圖譜?windows
知識圖譜本質上是一種語義網絡,可是它最主要的特色是一個很是大規模的語義網絡,以前的語義網絡受限於咱們處理的方法,更可能是依賴於專家的經驗規則去構建,在規模方面受限於特定領域的數據。大規模網絡,谷歌在2012年首先提出知識圖譜的概念,在freebase的基礎上擴展了大量來自互聯網的實體數據和關係數據。聽說目前實體的數據已經達到數十億級,有達到千億級的實例關係,規模是很是巨大的。後端
咱們再看一下,知識圖譜背後是怎麼表示的,咱們看到的是一個巨大的語義網,背後是怎麼存儲或者表示的呢?api
首先,它是由三元組構成的,構成知識圖譜的核心其實就是三元組,三元組是由實體、屬性和關係組成的(由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、蘋果iPhone七、華爲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其實是解決了上面提到的一對多或者多對1、多對多的問題,它分別將實體和關係投射到不一樣的空間裏面。一個實體的空間和一個關係的空間,而後在實體空間和關係空間來構建實體和關係的嵌入,就對於每一個元組<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:這個問題頗有意思。上面提到,一方面咱們能夠基於分類的方式來作知識圖譜中實體關係的學習。另外一方面,咱們是否能夠利用知識圖譜輔助進行文本的分類?這樣方面咱們有一些經驗。對於文本分類中的特徵工程,咱們的作法是經過知識圖譜進行語義的關聯擴充以獲取更多的語義特徵,尤爲是對於短文本,對分類效果能有比較好的提高。