潛心30年,知網(wǎng)知識系統(tǒng)如何從概念層次上計算自然語言
董強(qiáng)先生
概念計算的潛力
深度學(xué)習(xí)通過卷積神經(jīng)網(wǎng)絡(luò)(CNN)變革了計算機(jī)視覺,通過循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)引爆了自然語言處理。我們已經(jīng)看到大量的研究成果和應(yīng)用案例,但黑箱的深度學(xué)習(xí)真的能顛覆自然語言理解嗎?令機(jī)器理解自然語言一直是 NLP 的目標(biāo),但即使如今谷歌神經(jīng)算法機(jī)器翻譯使用強(qiáng)大的編碼器-解碼器結(jié)構(gòu)、注意力機(jī)制和雙向 LSTM 網(wǎng)絡(luò),但它真的理解詞語屬性和結(jié)構(gòu)嗎?有讀者可能認(rèn)為即使不理解也沒關(guān)系,我們只需要系統(tǒng)能得出結(jié)果就行。是的,深度學(xué)習(xí)系統(tǒng)能得出十分優(yōu)秀的結(jié)果,但這種在詞層面而不是概念層面的計算需要大量標(biāo)注數(shù)據(jù)并在多 GPU 和多機(jī)器上分布式地訓(xùn)練,因此我們訓(xùn)練出來的模型才有足夠的復(fù)雜度來適應(yīng)于巨量且復(fù)雜的詞和句子。那么如果系統(tǒng)理解詞的屬性和概念呢?系統(tǒng)是不是應(yīng)該就可以從概念的層面上理解語句及其背景知識,并且由于一個概念對應(yīng)于多個詞的表達(dá),因此概念上的計算復(fù)雜度會不會大大降低?從這個角度來說,語知科技基于概念的計算確實能幫助深度學(xué)習(xí)彌補(bǔ)不足,讓機(jī)器學(xué)習(xí)達(dá)到更好的效果。
數(shù)據(jù)問題
深度學(xué)習(xí)是一種監(jiān)督學(xué)習(xí),它需要大量的標(biāo)注數(shù)據(jù)集,而基于知網(wǎng)語言知識庫的計算在完成主體知識網(wǎng)絡(luò)的建設(shè)后,主體知識網(wǎng)絡(luò)只需要少量的標(biāo)注就可以擴(kuò)展到新的領(lǐng)域內(nèi)。因為深度學(xué)習(xí)將意義轉(zhuǎn)換成向量和幾何空間,然后逐漸學(xué)習(xí)復(fù)雜的幾何變換,把一個空間與另一個空間建立映射關(guān)系。所以我們需要足夠高維的空間來獲取原始數(shù)據(jù)中的所有關(guān)系,因此大量的標(biāo)注數(shù)據(jù)也在所難免。但是對于知網(wǎng)語言知識庫來說,知識是通用的知識,我們只需要標(biāo)注一次就可以在各種任務(wù)和場景下調(diào)用這種知識,而新的詞匯只需要按照知識網(wǎng)絡(luò)的框架標(biāo)注一次就可以加入到知識庫中并反復(fù)利用。所以說如何利用知網(wǎng)知識系統(tǒng)(下文將詳細(xì)解釋)將有助于深度學(xué)習(xí)減少對標(biāo)注數(shù)據(jù)集的依賴。
泛化問題
深度學(xué)習(xí)可以看作為一種局部泛化,因為如果新的輸入與模型訓(xùn)練時遇到的數(shù)據(jù)有些不同,深度網(wǎng)絡(luò)執(zhí)行的從輸入到輸出的映射就會遇到麻煩。因為當(dāng)我們使用深度學(xué)習(xí)模型完成某個任務(wù)時,我們需要使用該任務(wù)巨量的樣本進(jìn)行訓(xùn)練,訓(xùn)練出來的模型基本上也只能應(yīng)用于這類任務(wù)。通過疊加更多層、使用更多訓(xùn)練數(shù)據(jù)來提升當(dāng)前的深度學(xué)習(xí)技術(shù)并不能改善泛化性,因為模型能夠表示的范圍仍然有些局限。反觀語知基于知網(wǎng)語言知識庫的計算,它擁有十分強(qiáng)大的泛化性能。因為這種概念計算是基于詞的義原和關(guān)系進(jìn)行(下文將詳細(xì)解釋),所以我們的計算是帶有屬性和背景知識的,它能改善深度學(xué)習(xí)的泛化問題。目前語知科技用于分詞的系統(tǒng)換一種計算方式甚至可以直接進(jìn)行相似度計算或情感分析等。
人類可以使用非常少的數(shù)據(jù)甚至不使用數(shù)據(jù)來適應(yīng)全新的、之前從未體驗過的情形,抽象化和推理可以說是人類認(rèn)知的定義性特征。深度學(xué)習(xí)很難做到這種程度的泛化,因為它是一種輸入到輸出的映射。而基于概念的計算卻更容易抽象化為屬性并推理各事物間的關(guān)系,這種泛化才是我們應(yīng)該注重的。
魯棒性問題
深度學(xué)習(xí)某種程度上有良好的魯棒性,例如神經(jīng)機(jī)器翻譯不會因為少量的擾動而大幅度變動。但對抗性樣本卻能欺騙系統(tǒng),因為深度學(xué)習(xí)模型不理解輸入樣本的屬性和關(guān)系等知識。深度學(xué)習(xí)模型只是學(xué)會把數(shù)據(jù)映射到人類對該特定樣本集概念的幾何變換,但是該映射只是對我們頭腦中原始模型簡單化的表達(dá),因此當(dāng)模型遇到?jīng)]有編碼的表達(dá)時,魯棒性將會變得較差。同樣基于知網(wǎng)知識庫的概念性計算也有良好的魯棒性,因為該方法描述每個概念的樹是確定的,只有概念變動,所需要的樹形描述才會變動,所以隨機(jī)擾動并不會引起模型性能的降低,同時也并不會出現(xiàn)對抗性樣本那樣的缺陷。
總的來說,深度學(xué)習(xí)目前真正的成功是具備在擁有大量人工標(biāo)注數(shù)據(jù)的情況下,使用持續(xù)的幾何變換在樣本空間與預(yù)測空間之間建立映射的能力。把這件事做好就可以從根本上變革每個行業(yè),但是我們離人類水準(zhǔn)的 AI 仍有很大距離。而語知這種基于知網(wǎng)語言知識庫而進(jìn)行的概念性計算能彌補(bǔ)深度學(xué)習(xí)的不足,令自然語言處理更接近于自然語言理解的過程。
知網(wǎng)的結(jié)構(gòu)與概念計算
從上文我們已經(jīng)了解到概念層面的計算擁有強(qiáng)大的潛力,它能克服很多 NLP 深度模型的局限性。那么我們該如何將詞或句子層面計算轉(zhuǎn)化為概念層面的計算呢?語知基于知網(wǎng)語言知識庫將詞或句子的概念表達(dá)為一棵棵義原樹,進(jìn)而執(zhí)行各種計算。所以下面我們將了解知網(wǎng)語言知識庫的結(jié)構(gòu)特點(diǎn),以及它是如何使用義原和關(guān)系等以樹的形式來描述詞或概念。
知網(wǎng)知識庫的結(jié)構(gòu)
知識是一個系統(tǒng),是一個包含著各種概念與概念之間的關(guān)系,以及概念的屬性與屬性之間的關(guān)系的系統(tǒng)。富有知識的人不僅掌握了更多的概念,同時也掌握了更多的概念之間的關(guān)系以及概念的屬性與屬性之間的關(guān)系。所以知網(wǎng)是一種可以被稱為知識系統(tǒng)的常識性知識庫。它以通用的概念為描述對象,建立并描述這些概念之間的關(guān)系。
董強(qiáng)先生表明,義原(Sememe)是最基本的、不易于再分割的意義的最小單位。例如:「人」雖然是一個非常復(fù)雜的概念,它可以是多種屬性的集合體,但我們也可以把它看作為一個義原。我們設(shè)想所有的概念都可以分解成各種各樣的義原。同時我們也設(shè)想應(yīng)該有一個有限的義原集合,其中的義原可以組合成一個無限的概念集合。如果我們能夠把握這一有限的義原集合,并利用它來描述概念之間的關(guān)系以及屬性與屬性之間的關(guān)系,我們就有可能建立我們設(shè)想的知識系統(tǒng)。
董強(qiáng)先生說:「義原的是知網(wǎng)基本應(yīng)用的描述單位,它是基于我們的觀察而得出,比如說現(xiàn)代漢語詞典,它僅使用 2000 多漢字就能解釋所有的詞條。所以知網(wǎng)的方法就是對大約六千個漢字進(jìn)行考察和分析來提取有限的義原集合。以事件類為例,在中文中具有事件義原的漢字(單純詞)中曾提取出 3200 個義原。但我們需要對重復(fù)義原進(jìn)行合并,3200 個事件義原在初步合并后可得到 1700 個,進(jìn)一步歸類后得到大約 800 多個義原。因為這些義原完全不涉及多音節(jié)的詞語,所以我們需要將其作為標(biāo)注集去標(biāo)注多音節(jié)的詞。最后我們需要對所有 2800 多個義原進(jìn)行編碼,編碼采用助記符的形式表達(dá),如詞語「打開」,其中一個概念是「打開一個東西(盒子)」的動作,用義原 {open|打開} 表示,另外一個意思例如「打開一盞燈」,義原的表示的方式就是 {turn on|打開}?!?
理解什么是義原也不復(fù)雜。朗文詞典規(guī)定用二千多個字去解釋和定義所有的詞語,HowNet 定義義原也是這個思路,我們從語言學(xué)的角度抽取出來這 2800 多個最基本的沒有歧義的語言概念就是義原。我們用它和關(guān)系做結(jié)合,去描述所有的概念,所以 HowNet 是一個網(wǎng)狀結(jié)構(gòu)。
概念的表征
知網(wǎng)還著力要反映概念之間和概念的屬性之間的關(guān)系。知網(wǎng)知識網(wǎng)絡(luò)體系明確地提供給了計算機(jī),因此我們可以輸入形式化的知識而構(gòu)建計算機(jī)系統(tǒng)來實現(xiàn)自然語言處理任務(wù)。如下圖所示,我們不僅需要義原,同時還需要它們之間的關(guān)系來表示知識。通常一個詞其具體的概念會采用樹型的結(jié)構(gòu)利用義原和關(guān)系描述該概念。例如「醫(yī)院」這一個詞的概念根據(jù)具體語境可定義為 DEF={InstitutePlace|場所:domain={medical|醫(yī)},{doctor|醫(yī)治:content={disease|疾病},location={~}}},我們可以看到整個詞的概念屬性可以由多個義原按照關(guān)系和層次進(jìn)行定義。
整個知識網(wǎng)絡(luò)都是以義原為基礎(chǔ)建立起來的概念性系統(tǒng)。義原是通過關(guān)系描述概念的最小單位,知網(wǎng)認(rèn)為它是一種最基本的概念,任何復(fù)雜的概念都是由基本概念通過某種關(guān)系構(gòu)建而成,而知網(wǎng)用基本單位描述這種關(guān)系的方法我們稱之為 KDML(Knowledge Database Markup Language),這種描述方法將復(fù)雜中多個義原嵌套和多個關(guān)系嵌套的問題解決了。
因此,詞層面的計算就能轉(zhuǎn)換為概念層面的計算。而且即使我們所使用的詞匯增長或變更較快,但概念的增長曲線要平緩地多,所以概念相對于詞匯更具魯棒性。而深度學(xué)習(xí)使用得最多的詞匯表征方法是詞嵌入,代表性的就是 word2vec 方法。詞嵌入是一種詞的分布式表征,它基于神經(jīng)網(wǎng)絡(luò)。我們一般可以通過神經(jīng)網(wǎng)絡(luò)對詞的上下文,及上下文與目標(biāo)詞之間的關(guān)系建模。這里我們注意到它的操作層面還是詞匯,所以不論是使用如 word2vec 或自編碼器那樣的弱監(jiān)督預(yù)訓(xùn)練還是端到端的有監(jiān)督訓(xùn)練,其計算復(fù)雜度和所需要的計算資源仍然遠(yuǎn)遠(yuǎn)大于基于知網(wǎng)知識庫的概念計算。
如何計算概念
在我們將詞匯概念化并使用義原樹表征后,接下來我們需要考慮如何在各類任務(wù)中利用知網(wǎng)知識庫和這種詞的表征方法,即我們該如何基于知網(wǎng)知識庫進(jìn)行分詞、相關(guān)度計算、情感分析和命名實體識別等任務(wù)。當(dāng)然概念層面上的計算和我們熟知的機(jī)器學(xué)習(xí)算法或深度學(xué)習(xí)方法有很大的不同。并且由于類似詞在概念空間上要比原始詞空間上距離近得多,所以在概念空間上處理自然語言任務(wù)要簡單地多。一般來說,機(jī)器學(xué)習(xí)方法可以表示為輸入空間到輸出空間的一個映射,而基于知網(wǎng)的概念計算就相當(dāng)于先將輸入空間映射到一個概念空間,再從概念空間運(yùn)用計算方法映射到輸出空間。樣本在概念空間內(nèi)將服從一定規(guī)范形式,并且相關(guān)聯(lián)的詞在概念空間內(nèi)擁有更近的距離。下面,我們將從分詞、詞的相關(guān)性和情感分析等任務(wù)討論基于知網(wǎng)知識庫的計算方法。
分詞計算
機(jī)器在分詞的時候,主要有兩種情況,一種是組合型,即字和字之間是不是可以組合成一個詞。第二個是交集型,比如說提高人民生活水平,機(jī)器可以分割為:提/高人/民生/活/水平,這幾個詞是連續(xù)存在的歧義。但是從一般的算法來說,這并不是問題,因為簡單的切割次數(shù)最少化原則就已經(jīng)解決了這個問題。但這種實際上是偽分詞歧義,比較難處理的是我們該如何參照詞表確定合理的分詞。
但中文是一個字,它組成了詞后才有意義,而英文的詞組同樣也需要組合起來才有意義。因此董強(qiáng)先生表明,中文英文都存在著同樣的問題,重要的不是分而是合,即哪個字/詞在什么情況下可以與另外一個字/詞相結(jié)合。
在機(jī)器學(xué)習(xí)中,分詞主要可以使用條件隨機(jī)場(CRF)進(jìn)行,但是在傳統(tǒng) CRF 中特征需要人工設(shè)定,所以我們需要進(jìn)行大量繁雜的特征工程。不過近幾年深度學(xué)習(xí)的發(fā)展給很多研究問題帶來了全新的解決方案。在中文分詞上,基于神經(jīng)網(wǎng)絡(luò)的方法,往往使用「字向量 + 雙向 LSTM + CRF」模型,利用神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)特征,將傳統(tǒng) CRF 中的人工特征工程量降到最低。這種分詞技術(shù)通常分為 3 個處理層級,首先嵌入層會將離散的漢字用詞向量的形式表征,隨后特征層將使用前向和反向 LSTM 在考慮時序依賴關(guān)系的同時抽取有用的文本特征,最后的推斷層將使用 CRF 基于前面的特征進(jìn)行分詞。其實我們可以看到,這個模型需要將復(fù)雜多變的字用詞向量的形式表達(dá)出來,那么我們是否能使用知網(wǎng)知識庫先表征詞再投入計算?
在知網(wǎng)中計算語句的分詞,首先漢字切分到單個字就可以結(jié)束了,剩下的就是字和字之間的合并的問題。董強(qiáng)先生說:「知網(wǎng)它本身是一個知識庫,它對于中文來說就是一張詞表,那我們首先就需要檢索相鄰詞在詞表中能不能匹配上,匹配后再看有沒有歧義。我們一般會把所有帶歧義的組合都保留。然后將這些組合放入一句話或者一個語境內(nèi)進(jìn)行計算,因為每一個詞語在知識庫里面都是有概念描述的,因此我們就要確定這個詞語和另外一個詞語在概念層面上可不可以有一種合理的語義搭配。如果是合理的話,這一分詞就可以確定下來,如果不確定,就需要尋找下一個。如此整句話就迭代地進(jìn)行了詞切分。」總的來說,語知會將可能組合而成的詞用義原樹表達(dá)出來,然后放入句子中并計算句子其它元素與該概念的相關(guān)性而表達(dá)詞語組合在語境中的合理性,系統(tǒng)將抽取最合理的切分方式作為輸出。
相似度和相關(guān)性計算
語知科技有專門的工具做相關(guān)性計算,該工具可稱之為 Inference machine,他本身就是知識庫里面詞語所代表的概念,它們本身就具有相關(guān)的性質(zhì)。那相關(guān)性比如說同義詞、同類詞、反義詞等,這一類是詞語本身在概念的定義上就能體現(xiàn)出相關(guān)性。那第二種是我們常識知道的相關(guān)性,例如釣魚和河岸 (Bank fishing 常被機(jī)器翻譯為「銀行釣魚」) 是有一定的相關(guān)性的,但是在詞語本身的定義里并不能體現(xiàn)出來。這個時候語知就會使用 Inference machine 去描述它。也就是沿著該概念的義原樹搜尋相類似的概念,再用那 2800 多個義原描述它。因此知網(wǎng)有一套自己的解釋器,它可以解釋這些描述語言。
機(jī)器學(xué)習(xí)通常會強(qiáng)調(diào)計算詞的相似性而不計算詞的相關(guān)性。比如說分布式詞表征,由于分布假說認(rèn)為上下文相似的詞,其語義也相似,因此在這種表示下,兩個詞的語義相似度可以直接轉(zhuǎn)化為兩個向量的空間距離。但是統(tǒng)計機(jī)器學(xué)習(xí)方法很少有計算相關(guān)性的算法,因為基于詞匯統(tǒng)計的方法很難找出邏輯關(guān)系和從屬等關(guān)系,也很難利用相關(guān)性信息進(jìn)一步執(zhí)行語義排歧。
董強(qiáng)先生解釋到語知的相似性檢測時說:「如果我們拿著「醫(yī)生」非要跟「行走」計算相似度,因為它們都不在一棵樹上了,相似度就非常低了?,F(xiàn)在我們在來看看同類詞的相似度如何計算。比如說「神經(jīng)科醫(yī)生」和「牙科醫(yī)生」,他們都具有「人」這一相同的義原,而同一個義原是最重要的,然后再考察它后面的義原。第一個是看它的復(fù)雜度,比如說像醫(yī)生和神經(jīng)科醫(yī)生,他們兩個相似度是非常高,但是他絕對不是相同的義原。神經(jīng)科醫(yī)生的復(fù)雜度要高一些,它們進(jìn)行加權(quán)或者是除這些節(jié)點(diǎn)的時候,復(fù)雜的概念就會多除幾次,所以說它們會稍微有一點(diǎn)點(diǎn)的區(qū)別。因為知網(wǎng)對概念的這種描述方式是嵌套的,描述的層次越深,互相之間關(guān)聯(lián)的時候所加的權(quán)值就越弱。當(dāng)然我們首先要考慮兩個概念能不能遞歸地推理到同一個節(jié)點(diǎn)上,如果能達(dá)到一個共同的節(jié)點(diǎn),我們再考慮一共爬了多少步,也就是在計算相似度的時候我們考慮加權(quán)的值?!?
正是這種使用義原樹表達(dá)概念的方法,我們可以輕松地進(jìn)行多語種和跨語言處理。因為詞語只是概念的表現(xiàn),所以當(dāng)我們使用義原樹確定不同語言的概念,那么我們可以對這些概念直接運(yùn)算而不需要做進(jìn)一步處理。比如說跨語言相似度檢測,唯一需要注意的地方就是編碼不同語言的不同詞匯,當(dāng)我們將使用義原樹將詞匯編碼成概念后,計算相似度或其他操作就變得十分簡單了。
未來
NLP 的目標(biāo)是做到自然語言理解,語知科技認(rèn)為知識的運(yùn)用和 NLU 處理手段的多少決定了 NLP 的效果,所以目前語知科技提供更多的是語義信息。
可擴(kuò)展的知網(wǎng)知識庫
目前語知科技提供的 NLU 服務(wù)是基于知網(wǎng)數(shù)據(jù)庫的通用操作,知網(wǎng)數(shù)據(jù)庫的功能很強(qiáng)大,未來會有更多的服務(wù)接口提供出來。同時語知語知在基于當(dāng)前核心的知識庫基礎(chǔ)上能做進(jìn)一步擴(kuò)展。也就是在現(xiàn)有通用型知識庫基礎(chǔ)上,將專業(yè)知識庫專業(yè)性的概念用特定的義原和關(guān)系表達(dá)出來,做到通用知識庫和專業(yè)知識庫之間的關(guān)系映射。專業(yè)知識庫和 common-sense 沒有沖突,可以解決因此而帶來的部分「人工智障」問題。
與深度學(xué)習(xí)相結(jié)合的知識庫
語知科技未來進(jìn)一步發(fā)展的基本思路是基于知網(wǎng)在知識體系和 NLU 的優(yōu)勢和深度學(xué)習(xí)做結(jié)合。因為語言學(xué)家不是在深度學(xué)習(xí)的「黑箱」面前無所作為,恰恰相反,語言學(xué)家可以幫助計算學(xué)家認(rèn)識語言的內(nèi)涵和知識,只有雙方共同努力,在計算機(jī)認(rèn)知層面才能實現(xiàn)突破。知網(wǎng)知識體系輸出是一個重要的發(fā)展方向。知網(wǎng)就是一套搭建知識系統(tǒng)的方法理論,利用這一點(diǎn),我們就可以嘗試落地通用知識圖譜加專業(yè)領(lǐng)域的應(yīng)用知識圖譜?;痉椒ň褪菍⒅W(wǎng)統(tǒng)一的知識庫體系規(guī)則,以及用義原和關(guān)系描述知識點(diǎn)(概念)之間關(guān)系的方法用在應(yīng)用層面的知識庫上。這樣一體化的知識和常識是不沖突的而且有聯(lián)系的,因此在知識庫交叉領(lǐng)域就可以做到知識(概念)的互通。
酒香也怕巷子深,知網(wǎng)(HowNet)30 年來僅僅是為學(xué)術(shù)界提供研究工具,累計授權(quán)的國際院校和科研機(jī)構(gòu)超過 200 多家,但是宣傳較少。如今,知網(wǎng)(HowNet)正以語知科技創(chuàng)業(yè)公司的形象走進(jìn)公眾的視野。
語知科技 NLP 技術(shù)平臺剛剛上線,它是目前國內(nèi)為數(shù)不多的,能夠提供全面 NLP 工具的技術(shù)平臺。它所有的 API 接口對學(xué)術(shù)研究和學(xué)生使用開放,免費(fèi)使用。
如上圖所示為 API 調(diào)用示例。我們可以看到目前可以調(diào)用語知科技的中文分析、引文分析、詞語相似度檢測和詞語相關(guān)性檢測等 NLP 底層接口。其中,這些接口展示了該平臺有如下幾個顯著的應(yīng)用特點(diǎn):
-
完整的、結(jié)構(gòu)化的知識體系能夠幫助機(jī)器學(xué)習(xí)實現(xiàn)更好的效果;
-
基于概念計算的 NLU 在超句、篇章的語義關(guān)系和邏輯關(guān)系提取上有很強(qiáng)大的能力,技術(shù)早期應(yīng)用在情報領(lǐng)域;
-
計算量小,不依賴 GPU 的 NLP 工具,降低 NLP 應(yīng)用門檻,在小型 AI 設(shè)備和邊緣設(shè)備上(非聯(lián)網(wǎng)設(shè)備)應(yīng)用廣泛;
-
多語種和跨語種應(yīng)用,例如游戲 NPC(Non Player Character) 應(yīng)用,一個虛擬 AI 服務(wù)不同語種的游戲玩家;
- 豐富的語義信息直接提供,有利于二次開發(fā)。