產品經理的知識圖譜入門實操

8 評論 35020 瀏覽 234 收藏 62 分鐘

知識圖譜概述知識圖譜的構建,用戶可以使用自然語言來查詢相關的信息,更加符合人的思維方式,從而更快速的幫助用戶找到所需的信息。目前除了搜索引擎之外,知識圖譜還廣泛應用于社交、金融、教育、醫療等多個領域。接下來,我們分別詳細介紹一下知識圖譜的技術要點。

1. 知識圖譜概述

1.1 什么是知識圖譜

人工智能的終極目標,是讓計算機可以使用人類思考問題的方式來解決問題,達到智能化從而解放人類的腦力,讓人們的生活更加便捷,更加有效率。雖然自90年代以來互聯網技術已經蓬勃發展了30年,但是計算機的能力還遠遠達不到人們期望的智能化水平,根本的原因在于目前計算機對于數據的存儲和使用方式,與人腦思考問題的方式還有著本質上的區別。

目前以網頁為主要載體的互聯網信息,都是以字符串、數組等半結構化的數據類型組合而成的超文本鏈接。對于計算機而言,任何一個以文字來表示的信息都是0和1組成的二進制字符串,其中的差異只是文本存儲空間所占大小的不同,文字所表示的語義信息并不能被計算機所理解。

而人卻可以從不同的文字中解讀不同的信息,這是因為人可以理解不同的文字所指代的不同含義,并且可以根據一些規則,對文字之間的關系進行推理。

舉個簡單的例子來說,當看到“他兒子今年出生了”這段文字時,我們可以推斷出文中的“他”應該有個妻子,也就是“兒子”的母親,并且兒子的年齡是現在是0歲。雖然文字中并沒有明確的表達這些信息,但可以根據常識推斷出這些信息,這些常識或者規則我們稱之為“知識”。

那么,有沒有可能讓計算機可以理解這些文字所代表的真實含義,做到像人一樣通過知識對這些信息進行理解和推理呢?

萬維網之父蒂姆·伯納斯·李(Tim Berners-Lee)曾說過:“我有兩個夢想:第一個是連接世界上的每個人,現在這個夢想已經通過互聯網實現了,第二個夢想是連接世界上的每個事物,這個光榮的使命交給了語義網?!?/p>

時至今日,這項技術已經經歷了語義網絡、本體論、語義網、鏈接數據、知識圖譜幾個階段。

在2012年,谷歌首次將知識圖譜技術應用在搜索引擎中,以提升搜索的能力。在過去沒有使用知識圖譜技術時,用戶搜索某些信息,搜索引擎會將搜索的關鍵詞與網站的文本做匹配,根據匹配度來展示對應的網頁信息,所以如果用戶想知道一個問題的答案,但卻不知道答案的關鍵詞應該搜什么的時候,往往會搜不到自己想要的結果。

但引入知識圖譜之后,引擎會根據知識圖譜來展示相關信息,用戶可以使用自然語言來進行搜索,搜索引擎分析用戶的問題之后根據知識圖譜來查詢對應的結果,自此正式開始了知識圖譜在產品中的應用。

現在各大搜索引擎也都會根據知識圖譜來展示搜索的內容,例如在百度中搜索“中國的首都”,搜索的結果會直接顯示“北京市”相關的百度百科信息,如圖所示。

通過知識圖譜的構建,用戶可以使用自然語言來查詢相關的信息,更加符合人的思維方式,從而更快速的幫助用戶找到所需的信息。目前除了搜索引擎之外,知識圖譜還廣泛應用于社交、金融、教育、醫療等多個領域。接下來,我們分別詳細介紹一下知識圖譜的技術要點。

1.2 對象、實例與RDF知識表示

首先,我們需要了解一下如何描述一個“知識”。在之前的章節,我們提到過數據分為三種類型,分別是名義數據、登記數據和連續數據。但是日常生活中不是所有的事物都可以用這三個數據類型來被描述,比如一個人、一張圖片、一段視頻,這些東西應該怎么描述呢?這里要用到面向對象的概念。

什么是對象呢?我們剛說的一個人、一張照片、一段視頻,都可以稱之為一個對象,對象中包含了各種各樣的屬性,例如人有名字,年齡,身高這些屬性,每個人都會有這些屬性,但屬性的值可能不一樣,當我們把屬性的值具象化之后,就可以定義到一個具體的人,例如張三,那么張三就稱之為人這個對象的實例。

如圖所示:

對于對象而言,如果互相之間存在包含關系,則稱之為父類對象和子類對象。例如把人作為一個對象,這個對象其實可以進一步細分為男人和女人,那么人就是男人的父類對象,男人是人的子類對象,張三則是男人這個子類對象的實例。如圖所示:

了解了對象、類與實例之間的關系之后,我們就可以進入到知識圖譜的正題——知識表示了。根據Web技術領域權威標準機構W3C指定的知識圖譜描述標準,所有的知識應該用資源描述框架(Resource Description Framework,RDF)進行描述,并對其他與知識圖譜相關的技術進行了定義,如圖所示:

RDF中的R表示頁面、圖片、視頻等任何具有統一資源標識符(Uniform Resource Identifier,URI)的資源,D表示屬性,即特征和資源之間的關系,F表示模型以及描述的語法。簡單來說,每一條RDF知識表述都可以以一個主謂賓的語句形式出現,例如{中國,首都是,北京},其中“中國”“北京”是兩個實體,而“首都是”則表示兩個實體之間的關系。

在RDF中總是兩個實體,以及兩個實體之間的關系三者構成,所以RDF又簡稱三元組,如圖所示:

需要注意的是,每個RDF的實體都要有一個唯一的URI進行標識,但RDF也是允許空白節點存在的,同時實體資源也可以允許匿名資源的存在,即不標識具體的資源,只標識資源的類型,作為連接別的實體的橋梁。

雖然RDF是知識圖譜的基石,但其本身對于事物的描述能力非常有限,根據RDF的定義我們可以發現,組成RDF的三元組中,兩個實體都具有唯一標識,因此缺乏泛化抽象的能力,無法對同一個類別的事物進行定義和描述。舉個例子來說,我們可以通過RDF來描述中國的首都是北京,但如果希望歸納出所有國家與首都之間的關系以及他們的屬性,僅僅用一條實例的RDF是無法實現的。

知識的泛化能力對于知識圖譜實現智能化而言非常重要,只有具備歸納出抽象知識的能力,才能覆蓋更廣泛的知識。那么要如何做才能解決RDF的這個問題呢?

我們在之前講解了父類、子類與實例之間的關系,對于RDF而言也可以通過類似的結構來對知識進行泛化的描述,這就是我們接下來要講到的本體語言——RDFS和OWL。

1.3 RDFS與OWL本體語言

RDFS是最基礎的本體語言,其中的S表示Schema,可以表示某些實例的抽象屬性。具體而言,包括的核心詞匯如表所示:

舉例來說,我們可以通過<rdfs:subClassOf>來表示父類與子類之間從屬的關系。如圖所示,中國是國家這個類的實例,北京是城市這個類的實例,而城市和國家又都是地區這個父類的子類,通過RDFS可以清晰的劃分出類與實例之間的層次關系,并通過類之間的關系連接來推理出更多的知識。

在本例中我們可以推斷一個國家的首都是某一個城市這樣的知識,這樣就可以泛化的涵蓋所有國家與首都城市之間的關系連接,這種對于知識的泛化在語音智能問答產品中是非常重要的技術,我們會在后續的文章中對智能問答產品做詳細講解。

雖然通過RDFS可以表示一些簡單的語義,但在更復雜的場景下,RDFS語義表達能力顯得太弱,在表達知識的能力上依然存在缺陷,缺少諸多常用的特征。

例如對于局部值域的屬性定義:RDFS中通過rdfs:range定義了屬性的值域,該值域是全局性的,但無法表示該屬性應用于某些具體的類時具有的特殊值域限制;無法表示多個類、實例和屬性之間是等價還是不等價;無法表示多個類之間是相交關系還是互斥關系;無法對某些屬性值的取值范圍進行約束;無法表示某些屬性具有傳遞性、函數性等特性等。

因為RDFS無法很好的滿足知識的表示需求,W3C在2002年發布了OWL本體語言(OWL,Web Ontology Language)作為RDFS的擴展,并將其作為語義網中表示本體的推薦語言,目前OWL已經迭代至OWL2版本,最初的OWL又稱之為OWL1。

相較于RDFS,OWL擴充了非常多的描述屬性,彌補了RDFS的不足之處,例如增加了等價性聲明、傳遞關系聲明、對稱性、數值約束等。以下為主要的核心描述詞匯:

除了以上列舉的幾種之外,OWL還有非常多的屬性描述詞匯,在構建知識圖譜時需要了解這些屬性詞匯,并具備相關領域的專業知識才能正確的描述出知識的特征,如果需要了解更多的OWL相關描述,可以通過W3C的官方文檔查看。

2. 知識圖譜構建流程

2.1 知識建模

知識圖譜從覆蓋的知識面來分,可以分為通用知識圖譜(General-purpose Knowledge Graph,GKG)和行業知識圖譜(Domain-specific Knowledge Graph,DKG)兩種類型,行業知識圖譜因使用的場景是面相特定的領域,故又稱領域知識圖譜。雖然他們都是知識圖譜,但在知識表示、知識獲取和知識應用層面來看,兩者又有很大的區別,如表所示。

第一是從知識廣度來看,通用知識圖譜覆蓋的知識面較寬,主要涵蓋的是日常生活中的常識性問題,例如Google搜索引擎的知識圖譜就是面相全領域的通用知識圖譜,在2012年發布時就包含了5億多個的實體,10億多條的關系,中文的典型通用知識圖譜有復旦大學知識工場實驗室研發并維護的大規模通用領域中文百科知識圖譜(CN-Dbpedia),該項目包含900多萬的實體信息以及6700多萬的三元組關系,已在問答機器人、智能玩具、智慧醫療、智慧軟件等領域產生了3.5億次API調用量。

行業知識圖譜的廣度通常較窄,一般只涵蓋某一個專業領域的相關知識,目前除搜索引擎和語音助手使用的知識圖譜外,大多數的知識圖譜項目都是行業知識圖譜。典型的應用例如美國帕蘭提爾(Palantir)公司的政務領域知識圖譜, GeoNames的全球地理知識圖譜(該數據庫包含了近200種語言的1100萬個地名和200萬種別名),以及國內包含了中醫養生、中醫美容等內容的中醫藥知識服務系統(TCM knowledge service system)等,如圖所示。

第二是從知識深度來看,通用知識圖譜的層級體系一般較淺,對于知識的泛化而言通常沒有太多的歸納,這與通用知識圖譜獲取知識的方式有關,也跟通用知識圖譜的使用場景有關,對于通用知識圖譜而言多數的使用場景都是基于某個具體的實體。而行業知識圖譜的層級體系一般較深,例如在電商領域的商品分類中,關于服裝的分類就不僅僅只是上衣和下裝這么簡單,各種風格、時尚元素、款式、材質都有可能構成不同的類。

第三是從知識顆粒度來看,通用知識圖譜的顆粒度一般比較粗,而行業知識圖譜一般顆粒度較細。在通用知識圖譜中,組成知識的基本單元一般是一個完整的文檔或者資源,例如一篇文章,一首歌,一個視頻等。但是對于行業知識圖譜而言,需要的顆粒度根據業務的不同要劃分為更細的顆粒度,以教育領域的知識圖譜為例,一個數學公式、一篇語文課文中的一句話、一個英文單詞都有可能構成獨立的知識實體,才能滿足學生對于個性化學習的需求。

正因為通用知識圖譜和行業知識圖譜的應用場景有很大的不同,讓這兩種知識圖譜的知識獲取方式有著顯著的區別,對于知識獲取方式而言可以根據人工參與度的不同劃分為自頂向下和自底向上兩種方法。

具體來說,行業知識圖譜大多采用自頂向下的知識獲取方法,這種方法是通過領域專家手工將知識進行整理和歸納,編輯為知識圖譜的數據結構。

該方法的優點在于可以滿足產品對于知識專業性的及權威性的要求,例如醫療領域的知識圖譜對于知識的專業性就有著嚴格的要求,必須由具備相關能力的專家來進行編輯。同時,手工編輯也可以將知識圖譜設計的概念和范圍限定在可控的范圍內。

例如“古龍”這個實體如果是在文學知識圖譜上,代表的是一個作家,但如果放在美妝知識圖譜中,代表的則是一款香水,如果不對知識圖譜的應用范圍進行限定則很有可能出現歧義。

專家參與編輯讓行業知識圖譜具有相對較高的準確性,但同時也帶來了很多的弊端,首先是高昂的人力成本,通常編輯一個知識圖譜需要成立一個專家團隊,團隊中的成員需要同時具備領域知識以及計算機知識,人力市場上能滿足條件的人非常稀少,人工成本居高不下。

根據相關資料,Google編輯一條RDF三元組的人工成本平均需要0.8美金。如何能做到項目兼顧成本與效果是每個做知識圖譜的產品經理要思考的問題。

另外一個不足之處是行業知識圖譜可能有多個數據編輯者或數據來源,導致數據的格式不統一,這種數據術語稱之為多源異構數據,如何制訂相關的規則,將不同格式的數據轉化為統一的格式也是產品經理在定義數據處理規則時需要考慮的問題。

通用知識圖譜多采用自底向上的方法獲取知識,這種方法是基于行業現有的標準數據庫進行轉換,或從現有的高質量數據源中提取知識本體以及本體之間的關系,主要應用于搜索、推薦、問答等業務場景。

因其強調知識的廣度,數據主要來自于互聯網上的公開信息,所以很難生成完整的全局性的本體層進行統一的管理。但因為知識獲取的自動化程度較高,所以對于一些新的概念和新的關系可以很好的涵蓋。

從知識的應用層面來看,通用知識圖譜的知識相對稀疏,所以知識推理鏈條較短,通常來講推理操作都是基于上下文的一到兩步的推理,如果超出這個很容易出現語義漂移(semantic drift)現象,讓推理的結果答非所問,人工智能秒變人工智障。而行業知識圖譜的推理鏈條可以較長,更適合需要進行復雜推理和計算的場景。

2.2 結構化與半結構化知識獲取

從不同的來源、不同結構的數據中進行知識提取存入到知識圖譜,這一過程我們稱之為知識獲取。從知識的來源大致可以分為三類,分別是結構化數據轉換、半結構化數據提取和非結構化文本數據提取。

(1)結構化數據轉換

語義網的目標是建議以RDF為標準數據模型的數據網,但當前大多數Web數據源是由關系型數據庫(RDB)驅動的,因此如何將RDB數據集向RDF數據集進行映射一直是語義網領域的研究熱點。

結構化數據轉換就是指將關系型數據庫數據,轉換為RDF結構知識圖譜的知識獲取方式。W3C在2012年專門為此制定了一個標準R2RML(Relational database to RDF Mapping Language)。這是一種可以用于表示從關系型數據庫到RDF數據集的自定義映射的語言,通過這種映射關系,我們可以將關系型數據庫中的數據轉換為自定義的知識圖譜結構。

雖然這種轉換并沒有直接生成真正的RDF數據集,僅僅只是在數據庫和知識圖譜的本體中間做了一重映射關系,但是通過表示映射關系的mapping文件,系統可以將對RDF三元組的查詢等操作翻譯成對應的SQL語句,快速將企業過去積累的數據轉化為知識圖譜,這種轉化后的數據本身以及數據之間的關系都符合業務的需要,可以讓產品快速落地進行迭代。

(2)半結構化數據

半結構化的數據是指沒有按照RDF格式,但是卻有著一定規律的網絡數據,通過網絡爬蟲爬取完整的網頁信息之后,再通過包裝器(wrapper)將其轉換成知識圖譜數據。

半結構化的數據來源主要有兩個,一是維基百科、百度百科這類百科網站的信息表格(infobox),另外則是來源于各類網頁中的文本、列表數據,如圖所示。

在百度百科中搜索喬布斯的相關詞條會發現這樣一個表格,表格中詳細記錄了喬布斯與其他實體之間的關系,與搜索的詞條之間形成了一個完整的 RDF三元組,例如喬布斯的國籍是美國。通過對百科網站的infobox進行信息抽取,可以快速獲得高質量的知識實體。但是,通過infobox只能抽取到實例層數據,對于類層面的關系還需要通過別的方式來進行構建,例如自頂向下由領域專家構建。

對于其他的網頁信息而言,抽取數據時需要過濾掉網頁中含有的廣告、外鏈等冗余信息,只保留有實際需要的知識信息,這需要根據網頁的HTML代碼標簽構建專用的網頁包裝器。

如果給每一個網頁都開發一個專門的包裝器,不僅需要投入大量的開發人力,而且通用性會比較差,為了解決這個問題,可以先對需要爬取的網頁進行聚類,針對聚類來設計包裝器會大幅提高知識獲取的速度。

通過爬蟲和包裝器抽取互聯網的公開信息會面臨一個問題,就是隨著網站的更新迭代,網頁的信息結構可能會發生改變,既是一個微小的變動也可能會導致原本構建的包裝器失效無法再繼續工作。對于這個問題最簡單的辦法是重新創建一個新的包裝器以適應網站的升級,但是如果爬取的網站數量非常多,這種做法不但效率很低而且會給開發人員帶來很重的工作負擔。

為了能維持包裝器的正常工作,我們可以對需要采集的數據進行數據標注,用機器學習的方法對數據的特征進行學習并構建出模型,進而在整個網頁站點下使用模型自動生成新的包裝器進行數據的抽取。

2.3 非結構化知識獲取

與整個互聯網的數據相比,百科類網站的知識庫只是滄海一粟,除了網頁中半結構化的數據之外,還存在著海量的無結構網頁文本數據。如何將這些文本數據中的知識抽取出來是很多計算機科學家的研究方向。

例如華盛頓大學Oren Etzioni教授主導的開放信息抽?。╫pen information extraction,OpenIE)項目,該項目從1億個網頁中抽取了5億條數據,如圖所示。還有卡耐基梅隆大學Tom Mitchell教授主導的永不停止的語言學習(never ending language learning,NELL)項目,這個項目從公開網頁中抽取了5千萬條數據。

(1)實體抽取

從無結構的文本中抽取知識,首先需要識別文本中的實體,這個過程稱之為做命名實體識別(Named Entity Recognition,NER),命名實體識別屬于自然語言處理中的一項基礎任務,同時也是關系抽取、事件抽取、機器翻譯、問答系統等多個NLP任務的基礎工作,其目標是從文本中抽取出具有特定意義的實體,一般包括實體類、實踐類、數字類三個大的類別,以及人名、地名、組織機構、時間、日期、貨幣、百分比。

除此之外,也可以根據項目的需要指定特定領域內的實體,例如書名、疾病名、事件名等,只要是業務目標需要的實體,都可以做為實體抽取對象。

在中文文本數據中進行實體抽取相比英文文本數據而言難度更大,首先是因為英語中的實體命名有非常明顯的形式標志,每個單詞之間用空格隔開,并且實體的每個詞第一個字母是大寫,所以識別的難度相對容易。而中文沒有類似英文文本中空格之類的邊界標識符,所以要做命名實體第一步是要確定詞與詞之間的邊界,將詞與詞之間間隔開來,這個過程稱之為分詞。

第二點是命名實體本身的構成比較復雜,不斷會有新的實體名稱出現,例如新的人名,地名,物品名等,而且命名實體的長度也沒有限制,不同的實體可能會有不同的結構,例如少數民族人名或者翻譯的外國人名,難以建立大而全的實體數據庫,分詞技術對于這部分的實體識別相對來說難度會高很多。

第三點是在不同的文本資料中,命名實體之間可能會出現嵌套的情況,互相交叉以及相互包含,需要根據上下文才能推斷出命名實體真實的意思。例如“北京大學的學生參加了運動會”,可以劃分為“北京大學/的/學生/參加/了/運動/會/”,也可以劃分為“北京/大學/的/學生/參加/了/運動會”,不同的劃分方法會造成實體識別的不同。

關于分詞,我們會在后續的自然語言處理章節詳細講解。這里僅對命名實體的常用技術方法做一個概述。目前對于命名實識別的主要方法分為三種:基于規則和詞典的方法、基于統計和機器學習的方法以及前兩者混合使用的方法。

基于規則和詞典的方法是由語言學家或業務專家手工構造規則模板,定義好需要抽取的命名實體,以字符串的匹配作為主要的手段,這是命名實體抽取最早使用的方法,提取的結果非常精準,但是這類系統大多依賴于知識庫和詞典,系統的泛化性不高,對于不同的系統需要重新編寫規則,而且人力投入過大,建設的時間周期也較長,只適合于那些不會有太多新實體的領域知識圖譜構建。

基于統計和機器學習的方法主要包括隱馬爾可夫模型(HMM)、條件隨機場(CRF)、長短期記憶網絡(LSTM)、最大熵模型(MaxEnt)等方法。這類實體抽取的方法對于特征的選擇要求較高,需要從文本中選擇對該項任務有影響的各種特征,并將這些特征加入到特征向量中。

依據特定命名實體識別的特征,考慮選擇能有效反映該類實體特性的特征集合。主要做法是通過對訓練預料所包含的語言信息進行統計和分析,從訓練預料中挖掘出特征。有關特征可以分為具體的單詞特征、上下文特征、詞典及詞性特征、停用詞特征、核心詞特征以及語義特征等。

基于統計的方法對語料庫依賴比較大,但可以用來建設和評估命名實體識別系統的大規模通用語料庫又比較少,一般是使用維基百科或主流紙媒的標注作為基礎訓練語料,這類語料庫雖然在權威性和正確性上有保障,但是在時效性上交叉,對于新詞的識別能力較差。

實體識別技術經歷了多次迭代,從早期的基于規則和字典的方法,到傳統的機器學習方法,再到深度學習方法,以及近期的遷移學習和半監督學習方法。

目前,將神經網絡與CRF模型結合的CNN/RNN-CRF是實體識別的主流模型,基于神經網絡結構的實體識別方法,繼承了深度學習方法的優點,無需大量人工特征,只需詞向量和字向量就能達到主流水平,加入高質量的詞典特征能夠進一步提升效果,而在未來,遷移學習和半監督學習進行實體識別技術方向研究的重點。

(2)實體消歧

不論是英語還是漢語,構成文本的基本單位都是詞,但是同一個詞在不同的上下文中可能代表不同的含義,例如英語的“play”就有玩、扮演、播放、比賽等含義,而漢語的“打”字除了用作介詞和量詞之外,用作動詞時就有25個不同的意思。實體消歧就是明確多義詞在文中具體指代意思的技術,通過實體消歧,就可以根據當前的語境,準確建立實體鏈接。

實體消歧可以看做是基于上下文的分類問題,同其他自然語言處理的任務一樣,早起的實體消歧也是采用基于規則和詞典的方法。但這種方法的局限性太大,后續逐漸被機器學習的方法取代。我們知道機器學習分為有監督學習和無監督學習,應用在實體消歧上也分為有監督的實體消歧方法和無監督的實體消歧方法。

基于有監督的學習實質上是通過建立分類器,通過劃分多義詞的上下文類別的方法來區分多義詞的詞義,常見的方法有基于互信息的消歧方法,基于貝葉斯分類器的消歧方法以及基于最大熵的消歧方法。

舉例來說,“蘋果”一詞有時指水果,有時指科技公司,但如果與“吃”組成上下文,那么就可以根據貝葉斯概率計算出這個詞應該是指水果而不是科技公司。

無監督的實體消歧主要采用聚類算法進行,先對每個實體不同的意思抽取其上下文的特征組成特征向量并進行聚類,當遇到需要進行實體消除的文本時,讓文本與之前構建好的特征向量聚類之間的相似度計算來辨別實體的意思。

在一項測試實驗中,采用KNN(k=1)方法進行實體消歧的相似度計算,最終取得了平均正確率83.13%的結果。這種方法本質上還是基于詞袋模型(bag of words),并沒有考慮上下文之間的聯系,所以對于一些復雜的實體辨別上效果不佳。

不論是采用有監督的學習還是無監督的學習,實體消歧最終的結果都依賴于訓練集數據的完整性和準確性,所以目前在這一領域還未形成非常完善的解決方案,如何能夠提高實體消歧的準確度有待專家學者的進一步研究。

(3)指代消解

在我們日常用語中大量的存在指代詞,用來簡化語言增加溝通的效率。例如有這樣一段文本:“喬布斯在2007年發布了第一代iPhone,他表示這款手機領先其他手機五年”,在這句話中的“他”指代的是“喬布斯”,而“這款手機”指代的是“第一代iPhone”。

明確這些代詞所指代的具體含義,將這些指代項關聯到正確的實體對象中的技術過程就是指代消解,又稱共指消解或參照消解。為了讓知識抽取更加準確且不遺漏文本中的相關信息,必須對文本中的指代詞進行指代消解。代消解不僅在知識抽取中起著重要的作用,而且在機器翻譯,文本摘要等自然語言應用中最基礎的一項技術。

根據北京大學的王厚峰教授的研究,指代一般分成兩種回指(Anaphora,也成指示性指代)和共指(Coreference,也成同指)兩種情況,回指是表示當前的指示代詞與上文出現過的詞存在語義關聯性,而共指則是兩個實體名字指向的真是世界中的同一實體,可以獨立于上下文存在。例如“阿里巴巴集團首任董事長”和“馬云”就是共指。

在漢語中的指代主要有一下三種典型的形式:

人稱代詞(Pronoun)

例如:【李明】怕高媽媽一個人待在家里寂寞,【他】便將家里的電視搬了過來。

指示代詞(Demonstrative)

例如:【很多人都想創造一個美好的世界留給孩子】,【這】可以理解,但不完全正確。

有定描述(Definite Description)。

例如:【貿易制裁】仿佛成了美國政府在對華關系中慣用的大棒,然而,【這根大棒】果真如美國政府所希望的那樣靈驗嗎?

指代消解的基本原理是先構造一個先行語候選集,然后再從候選集中做多選一的選擇。代表的方法是1998年Hobbs提出的樸素Hobbs算法,這是一種基于句法分析樹的搜索,通過遍歷桔子的語法數來判斷詞語詞之間是否可以互相替換,另一種指代消解方法是1983年Grose和Sidner提出的中心理論(Center Theory)。

這種方法認為文本中的描述是應該是連貫的,而通過語義的連貫性就可以找到文本中受關注的實體。但這種兩種方法只適用于指代詞與被指代詞距離較近的回指情境,在實際應用上有一定的局限性。

目前指代消解最新的研究成果是2017年的端到端神經共指消解算法(End-to-end Neural Coreference Resolution),其基本原理是找到一個句子中所有出現過的命名實體和代詞,并對他們所在的句子進行特征向量構造,計算詞與詞之間的特征向量,然后將代詞和實體進行兩兩匹配計算共指匹配得分,以此來實現指代消解。

雖然指代消解問題已經經歷了多年的研究和發展,但到目前為止,多數的研究成果還是在回指的研究上,對于共指還沒有較好的全自動指代消解技術和方法,有待專家學者的進一步研究。

(4)關系抽取

識別實體與實體之間的語義關系是知識抽取中的一項核心任務,只有將實體之間通過關系聯系起來構建成RDF三元組,才能形成知識網絡。例如:王思聰是萬達集團董事長王健林的獨子,可以抽取出(王思聰,父子關系,王健林)、(萬達集團、董事長、王健林)兩組三元組實例。

最早的關系抽取任務可以追溯至1998年,當時是根據觸發詞作為關系識別的依據,然后填充關系模板槽抽取文本中特定的關系,例如“董事長”這個關鍵詞構造為X的董事長是Y這樣的模板,而隨著機器學習算法和深度神經網絡算法的發展越來越多的研究把關系抽取做成分類任務處理。

例如采用半監督學習的bootstrapping方法,按照“模板生成→實例抽取”的流程反復迭代,先給定一個種子實體的文本集合,例如<中國,北京>,接著從文本中抽取出包含種子實體的文本,例如<中國的首都是北京>,從而將<首都>這個關系抽取出來,然后用新發現的關系模板抽取更多新的三元組實例,匹配出所有X的首都是Y這樣的格式。在這個過程中會發現X與Y除了首都這個關系實體之外,還有可能出現其他的關系,通過反復迭代不斷抽取新的實例和模板直至無法再發現符合條件的關系位置。

這種方法的優點是構建成本較低,適合大規模的知識庫構建,同時可以發現一些未經人工定義的隱含關系。但在實際使用中也面臨著很多的問題,最常見的問題是在迭代的過程中容易出現噪聲實例和模板,出現語義漂移的現象,結果的準確率較低。

另外一點是因為沒有經過人工定義關系,導致關系語義沒有歸一化,同一種關系可能會有多種不同的表達方式,例如“首都是”也可以表達為“首都位于”、“設為首都”等,這些表述實際上是同一種關系,如何將這些自動發現的關系進行聚類規約是目前還未解決的問題。

關系抽取的好壞決定了知識圖譜中知識的規模和質量,除了上述的基于模板匹配和半監督學習的方法之外,采用監督學習的Pipeline、LSTM-RNN的算法也是比較熱門的方案。

(5)事件抽取

事件抽取可以視為關系抽取的強化版,是將文本中的事件以結構化的形式呈現出來。事件抽取的第一步是識別事件及其類型,其次要識別出事件所涉及的屬性,最后需要確定每個元素在事件中與事件本身的關系。

以金融領域構建投融資的領域知識圖譜為例,實踐抽取的流程是先定義事件的觸發詞,即一個事件指稱中最能代表事件發生的詞,一般是動詞或名詞。然后定義事件的主體元素及其對應的屬性。再根據屬性找到對應的值。如圖所示。事件的觸發詞是“融資”,事件的主體是“自如”,與事件相關的屬性融資輪數、募集資金、領投方、跟投方和投前估值。

事件的主體和其他的屬性之間其實可以構建出一對多的多元關系,如上圖的自如與其他屬性構成的多元,其本質是6個三元組,每個三元組的主語都是觸發詞這個事件,謂語分別是融資事件的屬性,而賓語分別是抽取出來的值。

我們知道知識圖譜分為通用知識圖譜和領域知識圖譜,事件抽取也可以分為適用于通用知識圖譜的開放域事件抽取,以及適用于領域知識圖譜的限定域事件抽取。上文例舉的金融領域融資事件抽取就是一個限定域的事件抽取。

對于限定域的事件抽取,因為目標明確,所以通常都是預先定義好目標事件的類型以及每種類型包含的具體事件元素,并給出一定數量的人工標注數據作為訓練集特征,后續采用模式匹配的方法或采用機器學習的方法進行事件抽取。

開放域的事件抽取因為在事件識別之前對于可能的事件類型和事件結構都是未知的,所以這類事件抽取主要是基于無監督的方法和分布假設理論。即如果候選事件觸發詞或者候選事件元素具有相似的語境,那么這些候選事件觸發詞傾向于觸發相同類型的事件。

總之,對于無結構的文本數據進行知識抽取雖然已經經歷了多年的發展,但目在各個子任務中依然存在很多未解決的問題有待專家學者的進一步研究。

小提示:在部分自然語言處理的研究報告中,實體抽取和實體消歧會合并稱之為實體鏈接(Entity Linking),或稱實體鏈指任務。

2.4 知識融合

我們在上文介紹了知識圖譜的多種數據來源,但是這些數據源中抽取的知識來源廣泛,知識的質量可能良莠不齊,也可能存在數據重合的部分,所以需要對知識進行融合,將不同數據源的知識統一規范,形成高質量的知識庫。在不同的文獻中,知識融合可能有不同的叫法,如本體對齊,本體匹配,實體對齊等,本文統一稱之為知識融合。

知識融合主要包含有三種類型:

  • 第一種是同一個實體有多種不同的表達方式,例如魯迅原名是周樹人,字豫才,對于這些不同的名稱都需要規約到同一個實體下。另
  • 一種是同一種表達在不同的語境下可能指代的是不同的實體,即一詞多義,例如“蘋果”有可能是指美國蘋果公司,也有可能是指水果。
  • 第三種是跨語言的知識融合,同一個實體在不同的語言或地區可能有不同的命名,例如騰訊公司的英文是Tencent。

在實際工作中,知識融合是數據預處理不可或缺的一部分,知識融合的好壞直接決定了知識庫的質量,也決定了知識圖譜項目的成功與否。

最基本的知識融合方法是知識卡片融合,即上文提到的百科類網站infobox信息,不同的百科網站對于同一個實體的描述可能有差異,所以可以將同一個實體在不同的百科類網站中進行搜索查詢,將查詢信息合并成為一個歸一化之后的知識卡片,即可完成知識融合。

但是對于絕大多數的知識融合而言并不會像知識卡片的融合這樣簡單,我們知道不同的本體實例是由他們所擁有的屬性決定的,如果兩個不同的實體,屬性都是相同或者近似的,那么我們就可以根據一定的規則將實體進行融合。所以要判斷實體是否是同一個實體,是實體的屬性是否相似來判斷,屬性的相似度決定了實體的相似度。

知識融合的流程通常分為四步,分別是數據預處理、數據預分組、屬性相似度計算和實體相似度計算。

  • 數據預處理

將不同數據源的數據統一格式,例如去除標點符號,洗掉臟數據等,這一步通常需要人工進行,相關的方法可以參考前面章節的數據預處理部分。

  • 數據預分組

這一步主要是為了加快知識融合的效率,降低計算的難度。如果不進行分組的話,那么后續的實體比較過程就需要龐大的計算量。常用的數據分類方法可以采用產品經理指定類型進行分組,也可以使用機器學習的方法進行無監督聚類分組或有監督的分類進行分組。

  • 屬性相似度計算

根據不同的數據類型,需要采用不同的方法。如果融合的數據對象是純字符串類型的數據,可以使用編輯距離(levenshtein distance),這是一個度量兩個字符串之間相似度的算法,指兩個字符串之間,由字符串A轉換到另一個字符串B所需要最少的插入、刪除、替換等操作的次數,操作次數越少意味著兩個詞越相似。

如果要融合的是集合類型的數據,可以通過jaccard相似系數進行計算,公式如下:

當兩個集合A和B交集元素的個數在A與B的并集中所占比例,稱之為jaccard系數,jaccard值越大說明相似度越高,如果完全一致的兩個集合則相似度為1。類似的余弦相似度也可以用來計算集合類型的數據。

如果是整篇文檔類型的數據,可以線通過TF-IDF算法找出文檔的關鍵詞,再通過余弦相似度計算關鍵詞集合的相似度,以此判斷文檔的相似度。另外,使用詞袋模型也可以用來計算文檔的相似度,這兩個方法我們會在后續章節詳細講解。

  • 實體相似度計算

這是知識融合的第四步也是最后一步,常用的方法是聚類和聚合兩種。聚類算法在之前的章節詳細講過K-means聚類,在計算實體相似度的時候,K-means聚類常常和Canopy聚類配合使用,Canpy聚類最大的特點是不需要事先指定K值。除了這兩種聚類方法外,層次聚類和相關性聚類也可以用于實體相似度的計算。

另一種計算實體相似度的方法是采用聚合算法,根據屬性相似度的結果計算出相似度的得分向量,然后根據機器學習的分類算法,例如邏輯回歸、決策樹以及支持向量機等。

3. 實操案例:Protégé構建漫威英雄關系圖譜

知識圖譜技術剛剛處于起步階段,目前業內并沒有一款通用的本體編輯工具,多數要進行知識圖譜構建的項目,需要先開發一套知識圖譜本體輯軟件工具,然后再在這基礎之上進行圖譜的構建工作。

本章節的實操案例,我們將使用Protégé來進行,這是一款由斯坦福大學醫學院生物信息研究中心基于Java語言開發的本體編輯和知識獲取軟件,主要用于語義網中本體的構建,雖然不支持多人協同編輯,但已經是目前比較成熟的開源知識圖譜編輯工具,包含了整個圖譜生成、可視化展現以及知識推理的過程。而且軟件本身是開源的,所以可以基于源碼對軟件進行適當的改造,以符合公司項目需要。非常適合產品經理理解知識圖譜的相關技術原理。Protégé的主界面如圖所示。

3.1 構建本體

首先,我們需要構建本體,當打開Protégé軟件時會默認打開“Active Ontology”菜單欄,在該菜單下的“Ontology IRI”輸入項中,會有一個默認的本體前綴名,我們可以把它改為自定義的名稱,就像給變量設置變量名一樣,這里我將其設置為“http://www.KnowledgeGraph.com”,如圖所示。

如果想要新建一個本體,點擊File菜單欄下的New選項即可。

3.2 構建類

當我們構件好本體之后,點擊“Entities”選項卡進行本體編輯,首先選擇該選項卡下的“Classes”標簽創建新的類。如圖所示,在這個頁面中,左側是所有的類,用樹形結構展示了類之間的對應關系,如果選中左側的某個類,可以在右側設置這個類的相關描述。我們會看到已經有了一個owl:Thing的類存在,這是系統默認的所有類的父類。

單擊選中Thing,在其左上角點擊圖標可以創建子類,在彈出的菜單中的Name輸入項中設置子類的名稱,這里我們輸入“電影”,然后點擊確定。接著選中新創建的電影類,并點擊中間的圖標創建創建兄弟類,兄弟類的名稱我們設置為“人物”,并在人物類下再構建兩個子類,分別命名為“男人”和“女人”這樣就完成了類的創建。

當然,也可以在相關的類上單擊鼠標右鍵,在彈出的菜單中選擇“Add subclass”以及“Add sibling class”來創建子類和兄弟類,效果和點擊按鈕是一樣的。

如果想要刪除某個類,只需要選中類之后點擊最右側的圖標即可刪除。

3.3 設置類之間的關系

我們創建四個類,現在可以對這4個類設置一些屬性了,在本例中,男人與女人是互斥關系,一個人的實例只能是男人或女人中的某一個,所以我們可以使用“Disjoint With”屬性來進行描述。

選中女人類,然后點擊右側的“Disjoint With”屬性右側的加號按鈕,在彈出的菜單中選擇男人類,然后點擊確定即可完成一個關系的創建。同樣的操作我們可以設置人物和電影也為互斥的類,如圖所示。

3.4 構建對象屬性

選擇“Object properties”標簽進入對象屬性編輯的頁面,與“Classes”頁面非常類似,只是用主題顏色的不同加以區分。左側已經有了一個系統默認的“owl:topObjectProperty”屬性,點擊左上角的按鈕或者鼠標右鍵點擊可以創建一個子屬性,并在彈出的輸入框中輸入屬性的名稱。

我們可以創建一個“主演”的屬性,創建完畢后,在右側的“Description”中點擊“Domains”選項右側的加號按鈕,在彈出的菜單中左側是選擇“主演”,右側是屬性對應的類,選擇“人物”,然后點擊確定按鈕將主演和人物關聯起來,表示主演的主語一定是某個人物,如圖所示。

接下來設置屬性的取值范圍,點擊“Ranges”選項右側的加號按鈕,將“主演”的取值范圍設置為“電影”,點擊確定即可。

這樣我們就完成了一個對象屬性的構建,在后續的知識推理中會用到這個屬性,如圖所示。

3.5 構建數據屬性

選擇“Data properties”標簽進入數據屬性編輯的頁面,在左側已經有了一個系統默認的“owl:topDataProperty”屬性,點擊左上角的按鈕或者鼠標右鍵點擊可以創建一個子屬性,并在彈出的輸入框中輸入屬性的名稱。

我們可以創建一個“英雄名”的屬性,來表示超級英雄的稱呼,創建完畢后,在右側的“Description”中點擊“Range”右側的加號,并選擇“Built in dataypes”選項卡,選擇“xsd:string”然后點擊確定,將這個數據屬性的取值范圍限定為字符串,設置完畢之后如圖所示。

3.6 構建實例

點擊“Individuals”選項卡進入實例編輯頁面,點擊左上角的圖標創建一個新的實例,在彈出的菜單中輸入實例名稱“小羅伯特·唐尼”,點擊確定即可完成實例的創建,我們用同樣的方法繼續創建“斯嘉麗·約翰遜”、“鋼鐵俠1”、“復仇者聯盟1”三個實例。

選中“小羅伯特·唐尼”的實例,在右側窗口中點擊“Types”的加號按鈕,在彈出的界面中選擇“Class Hierarchy”標簽,然后從類中選擇“男人”,表示這個實例是屬于男人這個類的。

接著,在右側的“Property assertions”設置窗口下,點擊“Object property assertions”右側的加號按鈕,在彈出的菜單中會有兩個輸入框,左側需要輸入對象屬性,右側輸入另外的實體,我們在左側輸入“主演”,右側輸入“鋼鐵俠1”,點擊確定按鈕即完成了一個三元組的創建。

之后需要設置實例的數據屬性,點擊“Data property assertions”右側的加號界面,在彈出的菜單左側選擇英雄名的屬性,然后在右側填寫具體的屬性值,表示該人物在電影中的英雄名叫什么,這里我們填入“鋼鐵俠”并點擊確定,最終的設置結果如圖所示。

依照同樣的操作流程將“斯嘉麗·約翰遜”的屬性也設置完成,將“鋼鐵俠1”的Types設置為“電影”,但是先保留“復仇者聯盟1”的type為空狀態,看看如何讓Protégé對這個實例的所屬類進行自動判斷,實現知識推理。

3.7 知識推理

在頂部菜單中點擊“Reasoner”菜單并選擇“HermiT”選項,將其變為選中狀態,然后再次點擊“Reasoner”菜單,會發現“Stare Reasoner”變為了可選擇狀態,點擊該按鈕,系統會對知識進行自動推理計算,待計算結束之后,我們選中“復仇者聯盟1”的實體,會發現它的Types已經設置為“電影”了,點擊右側的問號圖標可以查看到推理的邏輯依據。

如圖所示,之前我們定義了小羅伯特·唐尼和斯嘉麗·約翰遜主演了復仇者聯盟1,而主演的Range取值范圍是電影,所以可以就此推斷出復仇者聯盟1是一部電影。

3.8 圖譜可視化

在頂部的“Windows”菜單下選擇“Tabs”下的OntoGraf選項,頂部會增加“OntoGraf”菜單,切換到該菜單并點擊左側的類名稱,即可在畫布中顯示類的圖標,如果類有子類或者實例,則會在圖標上出現一個加號,雙擊帶加號的圖標可以下鉆展開查看所有的類和實例。鼠標移動到線上,就可以顯示這條線代表的關系名稱。通過鼠標拖動圖標可以很直觀的查看到本體之間的關系

 

本文由 @黃瀚星 原創發布于人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 請問,做一個AI產品經理,需要對技術這么了解的嗎?還是說要對業務了解夠深就好?

    來自北京 回復
    1. 至少要知道技術的實現原理,能做什么以及不能做什么

      來自廣東 回復
  2. 即使是一個微小的改動

    回復
    1. 感謝指正,已修改

      來自廣東 回復
  3. 錯別字 目前以網頁為主要載體

    回復
  4. 我現也是智慧城市項目,想向您學習,方便留下聯系方式嗎?謝謝!

    來自江西 回復
    1. 13077313888

      來自廣東 回復
    2. 嗯,已加您,麻煩您通過下,感謝

      來自江西 回復