這是一份通俗易懂的知識(shí)圖譜技術(shù)應(yīng)用落地指南
原創(chuàng)【51CTO.com原創(chuàng)稿件】在面向?qū)ο蟮臅r(shí)代里,我們常說(shuō)萬(wàn)物皆對(duì)象,之前我們只是來(lái)分析對(duì)象的個(gè)體,隨著互聯(lián)網(wǎng)和社交網(wǎng)絡(luò)的發(fā)展,對(duì)象與對(duì)象之間的聯(lián)系變得越來(lái)越緊密,我們把一個(gè)對(duì)象稱(chēng)之為一個(gè)實(shí)體。
我們現(xiàn)在對(duì)于實(shí)體之間關(guān)系的分析變得尤為重要,我們可以使用知識(shí)圖譜相關(guān)技術(shù),來(lái)挖掘?qū)嶓w之間的關(guān)系,從而找到其中的商業(yè)價(jià)值,打造自己的知識(shí)圖譜應(yīng)用。
2018 年 11 月 30 日-12 月 1 日,由 51CTO 主辦的 WOT 全球人工智能技術(shù)峰會(huì)在北京粵財(cái) JW 萬(wàn)豪酒店隆重舉行。
本次峰會(huì)以人工智能為主題,金山辦公 AI 領(lǐng)域?qū)<尹S鴻波在業(yè)務(wù)實(shí)踐專(zhuān)場(chǎng)與來(lái)賓分享"知識(shí)圖譜在企業(yè)中的落地"的主題演講。
本文將按照如下四個(gè)層次向大家介紹知識(shí)圖譜在企業(yè)中的落地情況:
- 知識(shí)圖譜發(fā)展展望,包括知識(shí)圖譜的定義和實(shí)現(xiàn)方式。
- 知識(shí)圖譜常見(jiàn)應(yīng)用場(chǎng)景,包括如何來(lái)應(yīng)用和具體的應(yīng)用場(chǎng)景。
- 知識(shí)圖譜圖數(shù)據(jù)庫(kù)選型,包括選型比較和經(jīng)驗(yàn)分享。
- 知識(shí)圖譜落地,包括落地方案的制定和從無(wú)到有的圖譜架構(gòu)。
知識(shí)圖譜發(fā)展展望
我們先來(lái)看看知識(shí)圖譜的發(fā)展歷史:
- 50 年代到 70 年代,符號(hào)邏輯、神經(jīng)網(wǎng)絡(luò)、LISP(List Processing語(yǔ)言)、還有一些語(yǔ)義網(wǎng)絡(luò)已經(jīng)出現(xiàn),不過(guò)尚處于簡(jiǎn)單且不太規(guī)范的知識(shí)表示形式。
- 70 年代到 90 年代,出現(xiàn)了一些專(zhuān)家系統(tǒng),一些限定領(lǐng)域的知識(shí)庫(kù)(如金融、農(nóng)業(yè)、林業(yè)等領(lǐng)域),以及后來(lái)出現(xiàn)的一些腳本、框架、推理。
- 90 年代到 00 年,出現(xiàn)了萬(wàn)維網(wǎng)、人工大規(guī)模知識(shí)庫(kù)、本體概念、以及智能主體與機(jī)器人。
- 00 年到 06 年,出現(xiàn)了語(yǔ)義 Web、群體智能、維基百科、百度百科、以及工作百科之類(lèi)的內(nèi)容。
- 06 年至今,我們對(duì)數(shù)據(jù)進(jìn)行了結(jié)構(gòu)化。但是數(shù)據(jù)和知識(shí)的體量越來(lái)越大,因此導(dǎo)致了通用知識(shí)庫(kù)越來(lái)越多。隨著大規(guī)模的知識(shí)需要被獲取、整理、以及融合,知識(shí)圖譜應(yīng)運(yùn)而生。
從發(fā)展里程碑來(lái)看:
- 2010 年,微軟發(fā)布了 Satori 和 Probase,它們是比較早期的數(shù)據(jù)庫(kù),當(dāng)時(shí)圖譜規(guī)模約為 500 億,主要被應(yīng)用于微軟的廣告和搜索等業(yè)務(wù)。
- 接著在 2012 年,谷歌推出了 Knowledge Graph(知識(shí)型圖數(shù)據(jù)庫(kù)),當(dāng)時(shí)的數(shù)據(jù)規(guī)模有 700 億。
- 后來(lái),F(xiàn)acebook、阿里巴巴、以及亞馬遜也相繼于 2013 年、2015 年和 2016 年推出了各自的知識(shí)圖譜和知識(shí)庫(kù)。它們主要被用在知識(shí)理解、智能問(wèn)答、以及推理和搜索等業(yè)務(wù)上。
從數(shù)據(jù)的處置量來(lái)看,早期的專(zhuān)家系統(tǒng)只有上萬(wàn)級(jí)知識(shí)體量,后來(lái)阿里巴巴和百度推出了千億級(jí)、甚至是兆級(jí)的知識(shí)圖譜系統(tǒng)。
上圖便是如今在知識(shí)圖譜領(lǐng)域的世界各大知名公司,可見(jiàn)該領(lǐng)域的玩家還是非常多的。
上圖左表反映的是我們?cè)?jīng)給客戶做過(guò)的某類(lèi)法律文本在數(shù)量上的變化趨勢(shì)。
在 2014 年文本的數(shù)量還不到 1500 萬(wàn),而到了 2018 年總量就超過(guò)了 4500 萬(wàn)。
我們預(yù)計(jì)至 2020 年,文本的數(shù)量有望突破 1 億萬(wàn)件(某一特定類(lèi)別)。那么,我們現(xiàn)在所面臨的問(wèn)題包括:數(shù)據(jù)量的龐大、非結(jié)構(gòu)化的保存、以及歷史數(shù)據(jù)的積累等方面。
這些都會(huì)導(dǎo)致信息知識(shí)體、以及各種實(shí)體的逐漸膨脹。因此,我們需要通過(guò)將各種知識(shí)連接起來(lái),形成知識(shí)圖譜。
知識(shí)圖譜常見(jiàn)應(yīng)用場(chǎng)景
知識(shí)圖譜可以被用于查找人與人之間的關(guān)系,如上圖所示,我們可以理解為電視劇《人民的名義》中人物的關(guān)系圖譜。而在很多企業(yè)中,就是用到知識(shí)圖譜來(lái)找出用戶與用戶之間的關(guān)系。
知識(shí)圖譜的另一個(gè)應(yīng)用場(chǎng)景是:找出實(shí)體之間的關(guān)系。所謂實(shí)體,我們可以理解為早年曾提到的“面向?qū)ο?rdquo;中“對(duì)象”這一概念。
如上圖所示,在公司和企業(yè)之間,包括它們的子公司、以及合作公司之間都存在著實(shí)體的關(guān)系,這就是知識(shí)圖譜的核心概念。
上圖是知識(shí)圖譜在農(nóng)業(yè)方面的應(yīng)用??梢?jiàn),由氮素缺乏輻射開(kāi)來(lái)之后,最終會(huì)導(dǎo)致葉子的枯萎,以及落果率的降低等農(nóng)業(yè)方面的歉收情況。
因此,我們?cè)谧鲋R(shí)圖譜的時(shí)候,實(shí)際上就是要查找并建立各個(gè)實(shí)體之間的聯(lián)系。
如上圖所示,在知識(shí)圖譜的研究和落地方面,業(yè)界一般分為三大類(lèi):
- 智能語(yǔ)義的搜索。例如:我們通過(guò)搜索引擎把各種知識(shí)點(diǎn)、實(shí)體、以及內(nèi)容結(jié)合起來(lái),形成實(shí)體之間的關(guān)系。
- 個(gè)性化的推薦。例如:我們?cè)诰W(wǎng)購(gòu)和瀏覽頭條新聞時(shí),下一次打開(kāi)某個(gè) App 所看到的內(nèi)容,往往是該系統(tǒng)根據(jù)上一次搜索過(guò)的相關(guān)內(nèi)容所做出的個(gè)性化推薦。
- 智能問(wèn)答。比如:某家空調(diào)公司需要上線一個(gè)“知識(shí)問(wèn)答”功能。那么他們既要收集本領(lǐng)域的電器相關(guān)知識(shí),又要從外部實(shí)體那里抽取電路設(shè)計(jì)、功率設(shè)計(jì)、能耗設(shè)計(jì)、智能程度和用電量等方面的知識(shí)。
因此,他們會(huì)通過(guò)推薦或者是知識(shí)的抽取與融合,將結(jié)果保存到分布式圖數(shù)據(jù)庫(kù)里,進(jìn)而發(fā)現(xiàn)各個(gè)點(diǎn)與點(diǎn)之間或是邊與邊之間的關(guān)系。
就每天有著超過(guò)兩億日活用戶數(shù)的 WPS 而言,我們需要通過(guò)建立用戶節(jié)點(diǎn),將用戶的基本信息、屬性特征和他們的文檔聯(lián)系起來(lái),存放到普通數(shù)據(jù)庫(kù)(如 MongoDB)里,然后再轉(zhuǎn)化成圖數(shù)據(jù)庫(kù)的關(guān)系。
同時(shí),我們需要梳理出各個(gè)用戶節(jié)點(diǎn)之間的邊。比如說(shuō):如果用戶A和B來(lái)自同一家公司,他們就可能會(huì)有同一條邊;如果他倆共享過(guò)了某個(gè)文檔,則又會(huì)生成一條邊。
因此具體尋找邊的表述方式會(huì)有如下兩種:
- 通過(guò)對(duì)數(shù)據(jù)的搜尋,發(fā)現(xiàn)在同一個(gè)數(shù)據(jù)庫(kù)中不同節(jié)點(diǎn)所包含的共同字段和屬性。
- 通過(guò)知識(shí)的融合與發(fā)掘、以及文檔內(nèi)容的語(yǔ)義,提取文字或標(biāo)題的中心內(nèi)容,再運(yùn)用算法分析,采用主體之間的對(duì)比方式,找到兩個(gè)用戶之間可能存在的關(guān)系,進(jìn)而建立一個(gè)知識(shí)體。
知識(shí)圖譜圖數(shù)據(jù)庫(kù)選型
在做知識(shí)圖譜時(shí),我們最常碰到的問(wèn)題莫過(guò)于對(duì)圖數(shù)據(jù)庫(kù)的選擇。當(dāng)前,業(yè)界有 Neo4j 和 Cayley 這兩種最為常用的圖數(shù)據(jù)庫(kù)可供選擇。
大家可能會(huì)普遍地認(rèn)為:無(wú)論是網(wǎng)上資料的豐富程度,還是數(shù)據(jù)庫(kù)知名度的排名,Neo4j 在各個(gè)方面的優(yōu)勢(shì)都勝過(guò) Cayley。然而在實(shí)際選型中,我們卻選擇了后者。
具體原因如下:
- 數(shù)據(jù)的體量。由于我們公司有著兩億規(guī)模的日活數(shù)據(jù)量,而且還會(huì)持續(xù)產(chǎn)生無(wú)數(shù)個(gè)節(jié)點(diǎn),因此我們需要選用一款能夠支持大體量數(shù)據(jù)的數(shù)據(jù)庫(kù)。
- 開(kāi)源的屬性。如今 Neo4j 的企業(yè)版已經(jīng)不再開(kāi)源。而就算它以前的開(kāi)源模式也并不完全。由于其核心內(nèi)容并未開(kāi)源,因此一旦出現(xiàn)了問(wèn)題,我們很難得到及時(shí)的支持與幫助。
- 是否支持分布式。鑒于上述企業(yè)版的限制,有人曾提出采用免費(fèi)的版本??墒?,由于只有企業(yè)版的 Neo4j 才能支持分布式存儲(chǔ)與集群,而且其免費(fèi)版無(wú)法支撐我們的數(shù)據(jù)體量,因此我們后續(xù)沒(méi)有再去考慮 Neo4j。
- 落地時(shí)的性能。其間,我們還曾經(jīng)對(duì)比過(guò) Dgraph 與 Cayley。鑒于兩者都是開(kāi)源型的數(shù)據(jù)庫(kù),且都能夠支持分布式,因此我們考量了它們的第三個(gè)維度:落地時(shí)的性能。
我們?cè)?jīng)使用上億的數(shù)據(jù)量,去分別檢驗(yàn)兩種數(shù)據(jù)庫(kù)查找關(guān)系和建立關(guān)系的性能。
隨后,我們發(fā)現(xiàn)由于自身存在著 Bug,Dgraph 對(duì)于支持邊的權(quán)重計(jì)算存在著缺陷,會(huì)導(dǎo)致在進(jìn)行邊與邊、點(diǎn)與點(diǎn)的計(jì)算時(shí)出現(xiàn)性能上的問(wèn)題。
因此經(jīng)過(guò)綜合考慮,我們最終還是選用了 Cayley 作為自己的圖數(shù)據(jù)庫(kù)。當(dāng)然,我們也將自己的發(fā)現(xiàn)提交給了 Dgraph 的作者,如今的 Dgraph 版本,已經(jīng)修正了該 Bug。
總的來(lái)說(shuō),我們?cè)诮o企業(yè)選擇圖數(shù)據(jù)庫(kù)時(shí),需要分析企業(yè)自身的數(shù)據(jù)體量。如果要處理的數(shù)據(jù)量和知識(shí)量特別多,而且對(duì)于速度、性能有一定的要求的話,就不能使用單機(jī)版的數(shù)據(jù)庫(kù),而應(yīng)當(dāng)去考慮分布式。
與此同時(shí),更重要的是:應(yīng)用的場(chǎng)景。如果本企業(yè)除了要計(jì)算兩個(gè)節(jié)點(diǎn)之間的關(guān)系,還需要得出節(jié)點(diǎn)關(guān)系所對(duì)應(yīng)的邊權(quán)重的話,那么我們更應(yīng)該進(jìn)行綜合考量和全面對(duì)比。
在此,我分享一種我們自己研究出來(lái)的獨(dú)門(mén)方法:一般而言,大多數(shù)圖數(shù)據(jù)庫(kù)(如 Neo4j),都會(huì)自帶底層數(shù)據(jù)庫(kù)。
而在實(shí)際建模的過(guò)程中,我們完全可以在底層不去使用圖數(shù)據(jù)庫(kù),例如:可以用 MongoDB 作為底層;然后在它的上面去嵌套一層并未內(nèi)置底層數(shù)據(jù)庫(kù)的圖數(shù)據(jù)庫(kù)。而且實(shí)踐證明,這樣的混合模式會(huì)更加靈活且高效。
知識(shí)圖譜落地
接下來(lái),我們來(lái)看看知識(shí)圖譜的落地。如上圖所示,整個(gè)過(guò)程分成六個(gè)方面:
- 建立一套知識(shí)的模型
- 如何獲取知識(shí)
- 如何做好知識(shí)的融合
- 如何實(shí)現(xiàn)知識(shí)的存儲(chǔ)
- 如何保證知識(shí)的計(jì)算
- 高效地開(kāi)展知識(shí)應(yīng)用
我們除了需要事先建立知識(shí)圖譜的模型、以及運(yùn)用模型來(lái)實(shí)現(xiàn)知識(shí)計(jì)算之外,上圖反映了其他四個(gè)重要的過(guò)程,下面我們來(lái)逐一討論。
知識(shí)獲取
我們既可以通過(guò)網(wǎng)絡(luò)爬蟲(chóng)爬取,也可以通過(guò)事件抽取(如使用 CRF 和 LSTM 等機(jī)器學(xué)習(xí)算法),還可以通過(guò)國(guó)內(nèi)與國(guó)外的一些開(kāi)源數(shù)據(jù)集來(lái)實(shí)現(xiàn)。
知識(shí)表示
在獲取到了知識(shí)之后,我們要對(duì)知識(shí)進(jìn)行加工表示。我們既可以用到邏輯表示、框架表示、語(yǔ)義表示,也可以用到各種詞表、本體組織,還可以用到語(yǔ)義網(wǎng)絡(luò)、以及文本與語(yǔ)義的分類(lèi)方法。
在完成模型表示之后,我們需要進(jìn)行各種模型的建設(shè)。當(dāng)前,國(guó)內(nèi)業(yè)界普遍采用的方法是專(zhuān)家法和歸納法,當(dāng)然,參照法也有被用到。
所謂專(zhuān)家法,就是根據(jù)團(tuán)隊(duì)自身對(duì)于現(xiàn)有業(yè)務(wù)和行業(yè)的理解程度,通過(guò)人工來(lái)建模表示。
而歸納法,則是通過(guò)一些歸納算法、人工歸納、以及文本分類(lèi)的方法,來(lái)進(jìn)行模型的歸納。
我們混合使用了上述兩種方法。而在建模工具方面,當(dāng)屬 Protege 和 MSVisio 最為常用。
知識(shí)存儲(chǔ)
接著要進(jìn)行的是知識(shí)存儲(chǔ),如前所述,我們需要選擇一款數(shù)據(jù)庫(kù),包括:MySQL、SQL Server、MongoDB、Neo4j 等,不一而足。
根據(jù)我們過(guò)往的屢次實(shí)驗(yàn)經(jīng)驗(yàn),您可以先將數(shù)據(jù)存放到 Key-Vaule 類(lèi)型的數(shù)據(jù)庫(kù)中,而在后續(xù)需要的時(shí)候,再往 Neo4j 之類(lèi)的圖數(shù)據(jù)庫(kù)中拉。
這種模式的性能要比直接存儲(chǔ)要高一些。而在工具平臺(tái)方面,Neo4j、Titan、以及 Cayley 都十分常用。
知識(shí)應(yīng)用
確定了存儲(chǔ)方式,后面就是知識(shí)應(yīng)用。它包括自然語(yǔ)言理解、知識(shí)搜索、知識(shí)問(wèn)答、以及機(jī)器翻譯等典型的應(yīng)用場(chǎng)景。
業(yè)界一般在模式上分為兩種:
- 檢索模式。在已經(jīng)建立好的現(xiàn)成知識(shí)庫(kù)圖譜的基礎(chǔ)上,我們將需要理解或翻譯的句子,放到庫(kù)里進(jìn)行“答案”檢索,再通過(guò)語(yǔ)義分析來(lái)進(jìn)行匹配。最終將匹配出來(lái)的結(jié)果反饋給用戶??梢?jiàn),這是一種理解自然語(yǔ)言的常用場(chǎng)景。
- 混合模式。在檢索模式的基礎(chǔ)上,我們添加了深度自我生成的模型,以應(yīng)對(duì)在知識(shí)庫(kù)或語(yǔ)義庫(kù)的匹配效果不佳的情況下,利用 RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))和 LSTM(長(zhǎng)短期記憶網(wǎng)絡(luò))來(lái)生成智能模型。
在知識(shí)應(yīng)用中,常用的關(guān)鍵技術(shù)包括:CQL、SPARQL、Jena、Neo4j、以及歸納、演繹和基于規(guī)則學(xué)習(xí)的推理。
上圖是一張非常經(jīng)典的知識(shí)圖譜整體架構(gòu)圖,讓我們一起從下往上來(lái)解讀這張圖:
- 通過(guò)百度搜索、Word 文件、PDF 文檔或是其他類(lèi)型的文獻(xiàn),抽取出非結(jié)構(gòu)化的數(shù)據(jù)。
- 通過(guò)自然語(yǔ)言處理技術(shù),使用命令實(shí)體識(shí)別的方式,來(lái)識(shí)別出文章中的實(shí)體,包括:地名、人名、以及機(jī)構(gòu)名稱(chēng)等。
- 通過(guò)語(yǔ)義相似度的計(jì)算,確定兩個(gè)實(shí)體或兩段話之間的相似程度。
- 通過(guò)同義詞構(gòu)建、語(yǔ)義解析、依存分析等方式,來(lái)找到實(shí)體之間的特征關(guān)系。
- 通過(guò)諸如 TF-IDF 和向量來(lái)提取文本特征,通過(guò)觸發(fā)事件、分詞詞性等予以表示。
- 通過(guò) RDA(冗余分析)來(lái)進(jìn)行主題的含義分析。
- 使用數(shù)據(jù)庫(kù)或數(shù)據(jù)表進(jìn)行數(shù)據(jù)存儲(chǔ)。
- 針對(duì)所提取出來(lái)的文本、語(yǔ)義、內(nèi)容等特征,通過(guò)知識(shí)本體的構(gòu)建,實(shí)現(xiàn)實(shí)體之間的匹配,進(jìn)而將它們存放到 Key-Value 類(lèi)型的數(shù)據(jù)庫(kù)中,以完成數(shù)據(jù)的映射和本體的融合。
- 當(dāng)數(shù)據(jù)的體量過(guò)大時(shí),使用 Hadoop 和 Spark 之類(lèi)的分布式數(shù)據(jù)存儲(chǔ)框架,再通過(guò) NoSQL 的內(nèi)容將數(shù)據(jù)存過(guò)去。
- 當(dāng)需要進(jìn)行數(shù)據(jù)推理或知識(shí)圖譜的建立時(shí),再?gòu)臄?shù)據(jù)中抽取出各類(lèi)關(guān)系,通過(guò)各種集成規(guī)則來(lái)形成不同的應(yīng)用。
總結(jié)起來(lái),在我們使用知識(shí)圖譜來(lái)進(jìn)行各種應(yīng)用識(shí)別時(shí),需要注意的關(guān)鍵點(diǎn)包括:如何抽取實(shí)體的關(guān)系,如何做好關(guān)鍵詞與特征的提取,以及如何保證語(yǔ)義內(nèi)容的分析。這便是我們構(gòu)建一整套知識(shí)圖譜的常用方法與理論。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】