知識圖譜與自然語言處理的故事

3 評論 16912 瀏覽 48 收藏 20 分鐘

你指尖躍動的代碼,是我此生不變的信仰,唯我NLP永世長存。

從NLP和知識圖譜說起

本人的主要領(lǐng)域是知識圖譜的方向,但是自然語言處理是知識圖譜是繞不開的話題,一種普遍看法是知識圖譜是自然語言處理的基石,而知識圖譜靠自然語言處理的應(yīng)用落地。

為什么是這樣呢?我們可以從兩者的定義出發(fā):

什么是知識圖譜?

借鑒其中一個理解:起源于語義網(wǎng)絡(luò),主要的目標(biāo)是用來描述真實(shí)世界中間存在的各種實(shí)體和概念,以及它們之間的關(guān)聯(lián)關(guān)系。

什么是NLP?

也借鑒一個理解,機(jī)器接受用戶自然語言形式的輸入,并在內(nèi)部通過人類所定義的算法進(jìn)行加工、計算等系列操作,以模擬人類對自然語言的理解,并返回用戶所期望的結(jié)果。

從上述描述中可以看到相近的幾個詞匯:“語義網(wǎng)絡(luò)”、“自然語言”、“自然客觀世界”。所以NLP和知識圖譜是為了解決同一個目的: 讓機(jī)器和人類有相同的思考理解能力,并且機(jī)器可以和人類進(jìn)行擬人化的交互。

在實(shí)際應(yīng)用中,知識圖譜和NLP的目的也是相同的,比如:智能問答、翻譯、推薦系統(tǒng)等。知識圖譜的構(gòu)建離不開NLP技術(shù)對于自然語言的抽取、NLP的應(yīng)用離不開知識圖譜的關(guān)聯(lián)方分析和推理能力。

所以在研究知識圖譜的過程中,自然語言處理是無法回避的領(lǐng)域。

想理解,先分詞

如果用搜索引擎搜索“蘋果和錘子”, 你猜會不會出現(xiàn)一個河神問你想搜索的是金蘋果還是金錘子。如果你回答你想搜索的是鐵蘋果,你就能獲贈一個金錘子手機(jī)。

你可以用任何一個搜索引擎去試驗(yàn),僅僅是搜索“蘋果和錘子”這兩個完全沒有前后語境的詞語,搜索返回的結(jié)果會全部都是關(guān)于“蘋果手機(jī)”和“錘子手機(jī)”。 但是如果單獨(dú)搜索“蘋果”或者“錘子”,如果不是網(wǎng)站記錄了搜索偏好,返回的結(jié)果里多少都會包含非手機(jī)的“蘋果”和“錘子”。

出現(xiàn)這樣情況的原因,是搜索網(wǎng)站的知識圖譜里一定存在“手機(jī)”“蘋果”“錘子”之間的關(guān)聯(lián)關(guān)系,所以機(jī)器能夠把三者之間建立聯(lián)系并且返回結(jié)果。

如果搜索的是一句話呢?

“蘋果和錘子哪個更好?!?/p>

那么機(jī)器可能首先要從這個句子中正確的提取出“蘋果”和“錘子”兩次詞語了,而不是提取出“萍、果和、錘、子”。

所以搜索“蘋果和錘子哪個更好”的時候,搜索引擎干了很多事情,其中至少包含了這兩件事情: 理解輸入、遍歷圖譜。其中,理解輸入就是一個自然語言處理過程,這個過程大概可以分為:詞法分析、句法分析、語義分析。

搜引擎收到輸入,首先將每個句子切割為詞語,然后進(jìn)行詞性標(biāo)注,接著對標(biāo)注過的句子進(jìn)行命名實(shí)體識別,最后搜索實(shí)體間可能存在的關(guān)系。所以在對文句子進(jìn)行命名實(shí)體識別之前,必須對進(jìn)行分詞和詞性標(biāo)注。

所以詞法分析是自然語言處理的第一個環(huán)節(jié),把詞法分析細(xì)分步驟即為:分詞、詞性標(biāo)注、命名實(shí)體識別和詞義消歧。

其中命名實(shí)體和詞義消歧是知識圖譜構(gòu)建的關(guān)鍵流程,而分詞是詞法分析最基本的任務(wù)。關(guān)于分詞的算法當(dāng)前已經(jīng)比較成熟了,準(zhǔn)確率基本可以達(dá)到90%以上了,而剩下不到10%卻是技術(shù)落地應(yīng)用的巨大鴻溝。出現(xiàn)這樣的情況是因?yàn)樵趯?shí)際應(yīng)用中對于分詞準(zhǔn)確度的要求極高,用一個常見的例子舉例:“南京市長江大橋”,這里涉及到三個基本問題:

  • 分詞粒度:“長江大橋”是一個詞還是兩個詞。
  • 語境歧義:比如“南京市長江大橋”可以理解為“南京市/長江大橋”,,也可以理解為“南京/市長/江大橋”。
  • 詞典未錄入:如果“江大橋”沒有在詞典里,是否能夠判斷出這是一個詞語。

分詞算法綜述

如上所訴,分詞是自然語言處理中最經(jīng)典同時也是最基礎(chǔ)的問題。而分詞首先要面臨的場景是不同的語言“分詞”的重點(diǎn)是完全不同的。

對于英文等語言來說,句子中的詞語是通過單詞天然分割的,所以對這類語言來說更多工作是集中在實(shí)體識別、詞性標(biāo)注等。

對于像中文這樣的語言來說,文章是由句子組成、句子是由詞語組成、詞語是由字組成,所以切割句子抽取詞語是理解文章句子最基礎(chǔ)的一步。

這里主要討論中文分詞的算法,但是中文定義一個句子中的詞語是很難的。以前看到過一個調(diào)查是對以漢語為母語的人進(jìn)行測試,對于句子中詞語的認(rèn)同率只有70%左右。人尚且如此,對于機(jī)器來說就更是一個巨大的挑戰(zhàn)。

分詞算法按照規(guī)則來說可以分為:按照字典的分詞和按照字的分詞。

按照技術(shù)發(fā)展來說可以分為:基于規(guī)則的分詞、基于統(tǒng)計學(xué)的分詞、基于神經(jīng)網(wǎng)絡(luò)的分詞。

下面將介紹最基本的三種分詞算法:

  • 基于規(guī)則的方法:最大匹配分詞算法;
  • 基于統(tǒng)計的方法:n-gramn分詞算法;
  • 基于神經(jīng)網(wǎng)絡(luò)的方法:BiLSTM+CRF。

1. 最大匹配分詞算法

最大匹配算法是基于詞典的算法即首先要有一個詞典作為語料庫,所匹配到的詞語是提前錄入到詞典中的詞語。算法的基本原理其實(shí)很直接,按照現(xiàn)代正常的閱讀習(xí)慣從左往右進(jìn)行,去匹配可以匹配到的詞典中最長詞語,若組不了詞的字則單獨(dú)劃分。

算法需要兩個輸入,一個是分詞詞典(已知的詞語集合),另一個是需要被分詞的句子。以下舉一個簡單的例子來說明匹配過程:

分詞詞典:{“今天”,”好吃的”,”吃”,”什么”}

待分詞句子:今天吃什么?

找第一個詞的分詞過程:

今天吃什么 =>
今天吃什 =>
今天吃 =>
今天 => 得到詞語:今天

上述例子是正向匹配,還可以進(jìn)行逆向匹配,進(jìn)一步可以結(jié)合最小切分和限定最大詞語長度提高匹配的準(zhǔn)確率。但是該算法在實(shí)際使用的準(zhǔn)確率仍舊是很差的,因?yàn)楹苋菀拙蜆?gòu)造出反例,比如:剛剛提到的“南京市長江大橋”,根據(jù)分詞詞典有可能得到“南京市長”這樣的結(jié)果。另外一個問題是該算法依賴于已知的詞典,如果出現(xiàn)新詞不在詞典里則無法得到正確的結(jié)果。

2. n-gramn 分詞算法

N-Gram是一種基于統(tǒng)計語言模型的算法,利用概率判斷詞語的組成情況。算法基于一個前提:句子中包含常見詞語的可能性會肯定大于包含生僻詞的可能性,所以該算法的目的是“為分詞尋找最有可能的結(jié)果”。

求概率最直接的方法就是數(shù)個數(shù),比如對于剛剛的例子“南京市長江大橋”有各種分詞方法:

  • 南京/市/長江/大橋
  • 南京/市/長江大橋
  • 南京市/長江大橋
  • 南京/市長/江/大橋
  • 南京/市長/江大橋
  • ……

每種分詞在語料庫中出現(xiàn)的次數(shù)為m,語料庫的總數(shù)為n,則每種分詞的概率為m/n。

上述的方法在理論上是沒問題的,但是對于實(shí)際應(yīng)用場景來說,語料庫不可能包含所有的句子,所以,如何高效的數(shù)個數(shù)是問題關(guān)鍵。

該算法思想不復(fù)雜,但是介紹起來卻要寫很多,這里只大概描述下過程,詳細(xì)算法介紹可以很輕松找到!

在介紹算法之前作如下兩個定義:

  • 詞語序列:?w_1, w_2, w_3, … , w_n
  • 鏈?zhǔn)揭?guī)則:?P(w_1, w_2, w_3, … ,w_n)=P(w_1)P(w2_|w_1)P(w_3|w_1w_2)P(w_4|w_1w_2w_3)…P(w_n|w_1w_2…w_n-1)

現(xiàn)在我們要計算“南京市/長江/大橋”的概率,按照貝葉斯公式則有:

P(“南京市”,“長江”,“大橋”) = P(“南京市”)P(“長江” | “南京市”)P(“大橋” | “南京市" , "長江”),

仔細(xì)想想上面的計算,其中:

P(“大橋” | “南京市" , "長江”)=P(“南京市" ,"長江" , "大橋”) / P(“南京市" ,"長江”)

納尼?!P(“南京市” ,”長江” , “大橋”)?不就是我們要計算的概率么,要計算P(A)要先已知P(A)?!

廢話這么多,終于輪到N-Gram算法上場了。該算法基于以下假設(shè):第n個詞w_n只與前面n-1個詞有關(guān),該假設(shè)也叫作馬爾可夫假設(shè)。

N-Gram中的N是窗口長度,

n=1時,P( w_1, w_2, … , w_{n-1},w_n)=\prod_{i=1}^{n}P(w_i)

n=2時,?P( w_1, w_2, … , w_{n-1},w_n)=\prod_{i=1}^{n}P(w_i|w_{i-1})

n=3時,?P( w_1, w_2, … , w_{n-1},w_n)=\prod_{i=1}^{n}P(w_i|w_{i-1}w_{i-2})

比如n=2時,則

P(“南京市”,“長江”,“大橋”) = P(“南京市”)P(“長江” | “南京市”)P(“大橋” | “長江”)

P(“長江” | “南京市”)=Count("南京市" , "長江")/Count("南京市")

然后再用數(shù)數(shù)的方法就可以得到以上結(jié)果。

把所有分詞可能用圖的方式表示出來,就是求一個有向加權(quán)圖的最短路徑問題。概率最大的分詞結(jié)果即為所得。在實(shí)際應(yīng)用中還是會覺得計算空間很大,比如有5000個詞語,那么2-gram就是 5000 * 5000個二維組合,但是相比于直接用貝葉斯公式也會小很多,另外還會采用數(shù)據(jù)平方式減少上述二維表的稀疏性。

N-Gram算法最典型應(yīng)用是搜索引擎或者輸入法的詞語聯(lián)想補(bǔ)全,輸入前面幾個字的時候,會自動聯(lián)想出最有可能的接下來的詞。

3. BiLSTM+CRF分詞算法

該算法實(shí)際上是兩個算法的合成,即BiLSTM和CRF算法。這兩個算法,如果真的詳細(xì)介紹起來會涉及很多基礎(chǔ)知識,包括馬爾科夫鏈、神經(jīng)網(wǎng)絡(luò)等。以后有機(jī)會詳細(xì)寫一篇博客來介紹兩者的細(xì)節(jié),這里暫時簡單羅列下。

CRF想比較于傳統(tǒng)統(tǒng)計學(xué)的方法的最大優(yōu)勢在于考慮了上下文場景,對多意詞和詞典未錄入的詞有更好的效果,但是效率比較低,需要的大量的訓(xùn)練和計算時間。

LSTM為RNN變種的一種,在一定程度上解決了RNN在訓(xùn)練過程中梯度消失和梯度爆炸的問題。雙向(Bidirectional)循環(huán)神經(jīng)網(wǎng)絡(luò)分別從句子的開頭和結(jié)尾開始對輸入進(jìn)行處理,將上下文信息進(jìn)行編碼,提升預(yù)測效果。相比于其它模型,可以更好的編碼當(dāng)前字等上下文信息。

基本步驟是:

  1. 標(biāo)注序列;
  2. 雙向LSTM網(wǎng)絡(luò)預(yù)測標(biāo)簽;
  3. Viterbi算法求解最優(yōu)路徑。

BiLSTM-CRF是兩種算法模型的結(jié)合,可以保證最終預(yù)測結(jié)果是有效的。算法輸入是詞嵌入向量,輸出是每個單詞對應(yīng)的預(yù)測標(biāo)簽。

NLP技術(shù)工程化

語言理解是人工智能領(lǐng)域皇冠上的明珠?!?/p>

——比爾蓋茨。

通常認(rèn)為人工智能是機(jī)器從感知到認(rèn)知的過程。在感知階段,最知名的應(yīng)該是計算機(jī)視覺技術(shù)。視覺感知在理論上已經(jīng)達(dá)到了一個很成熟的階段,不止能夠識別物體圖像,甚至還能預(yù)測物體的下一個動作。在應(yīng)用上,視覺技術(shù)在大部分場景種對于準(zhǔn)確度的要求并不會太嚴(yán)苛,相比于自然語言處理則是“差之毫厘謬之千里”。

在技術(shù)上,NLP的最難的問題是以下四類場景:問答、翻譯、復(fù)述、文摘。

  • 問答即人和機(jī)器進(jìn)行聊天交互,聊天可以是語音識別也可以是文字交互,機(jī)器要能理解聊天內(nèi)容,內(nèi)容的情感,并且能夠給出合適的回應(yīng),再進(jìn)一步能夠根據(jù)聊天內(nèi)容進(jìn)行自我學(xué)習(xí)增長知識。
  • 翻譯是機(jī)器要理解多種不同的語言,在語法語境語義上能夠相互轉(zhuǎn)化。
  • 復(fù)述可以更加廣義的理解為把一種結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)化成另外一種結(jié)構(gòu)。
  • 文摘是將一大段內(nèi)容進(jìn)行抽象提煉,通過更少的內(nèi)容概括更多的內(nèi)容。

以上的應(yīng)用場景會涉及一整套自然語言處理方法流程,包括: 詞法分析、句法分析、文檔分析、語義分析、分類、相似度匹配等。

將以上的基礎(chǔ)問題包裝成具體的業(yè)務(wù)場景,即為常見的:自動問答、糾錯消歧、詞典翻譯、自動編文、標(biāo)簽分類、情感分析、推薦系統(tǒng)、爬蟲系統(tǒng)等。

自然語言處理如何落地到具體應(yīng)用?

個人認(rèn)為當(dāng)前對于NLP的應(yīng)用落地來說最重要的是“兩端問題”,即頂層產(chǎn)品和底層數(shù)據(jù)。在底層是否有面向垂直領(lǐng)域的足夠大的語料庫,在頂層是否有足夠好的交互系統(tǒng)。

在底層,不管是自然語言處理還是知識圖譜,多數(shù)努力的方向都是建立一個通用的知識庫和詞典等。

  • 而在面向垂直領(lǐng)域則有很高的市場壁壘,一方面是基于數(shù)據(jù)安全和數(shù)據(jù)資產(chǎn)的原因,大部分?jǐn)?shù)據(jù)都是非公開的,無法直接使用。
  • 另外一方面是垂直領(lǐng)域建模需要有深入的業(yè)務(wù)理解,這也是需要在一個行業(yè)深耕的經(jīng)驗(yàn)為基礎(chǔ)。

通過針對具體的業(yè)務(wù)特點(diǎn)做定制化構(gòu)造一個面向垂直領(lǐng)域的知識圖譜,以及基于這個圖譜的NLP應(yīng)用,才能真正的提升相關(guān)業(yè)務(wù)的生產(chǎn)力。

在頂層,需要用產(chǎn)品將理論落地。除了產(chǎn)品本身符合正確的業(yè)務(wù)流程,更需要良好的交互來提升用戶體驗(yàn)。比如智能客服應(yīng)用,對于多輪交互肯定無法做到100%,但是可以通過友好的交互使用戶愿意接受結(jié)果。如果交互做的不好,即便技術(shù)上準(zhǔn)確率會很高也會被抱怨。

再比如:對于語音實(shí)施翻譯來說,又會面臨噪音、遠(yuǎn)場、口音等問題。所以將NLP技術(shù)落地會涉及很多定制化場景,除去技術(shù),對于產(chǎn)品經(jīng)理也提出了很高的要求。

有意思的是知識圖譜被看作是人工智能的基石,而NLP被稱作人工智能皇冠上的明珠。這句話足以體現(xiàn)兩者間的互相依賴,知識圖譜需要借助自然語言處理技術(shù)去構(gòu)建圖譜,而自然語言處理需要借助知識圖譜完成推理。

技術(shù)算法是通用的,但是業(yè)務(wù)場景確是定制化的。產(chǎn)品經(jīng)理對于技術(shù)落地需要做非常深入的思考,如何把理論技術(shù)工程化、產(chǎn)品化、最后商業(yè)化變現(xiàn)?

用技術(shù)講故事的同時,要求更多的干貨來提升業(yè)務(wù)目標(biāo)。

 

作者:Eric ,數(shù)據(jù)產(chǎn)品經(jīng)理。金融大數(shù)據(jù)方向,知識圖譜工程化。

本文由 @Eric_Xie 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自 Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 知識圖譜需要借助自然語言處理技術(shù)去構(gòu)建圖譜,而自然語言處理需要借助知識圖譜完成推理。

    請問下實(shí)際落地的時候,彼此都需要對方才行,,那是先有哪個呢

    來自浙江 回復(fù)
  2. 大哥,如何申請轉(zhuǎn)載 ??

    來自上海 回復(fù)
    1. 請問要轉(zhuǎn)載到哪里呀?

      來自安徽 回復(fù)