前言
這是2年多前做的專題,當時對於AI知識還不夠穩健,若有錯誤還請勘誤。 內容取自我自己的國科會結案報告。
計畫編號111-2813-C-025-023-H
介紹影片:
以前可以live demo,但是網路host死掉了(找不到免費host docker的供應商了....),有錢再搬家。
整套系統只有我一個人做,當初為了他從前端學到後端,從BOW學到LAS,最後再學docker把整個環境般上架,雖然很忙但是滿充實的。
*注 網頁部分的程式碼取用時請標記我。(
設計css很累)
主旨
無監督式知識抽取與文本相似度對比技術,並結合自動摘要系統的概念篩選出文章中較關聯的句子,且不同於開放鏈結資料 (Linked Open Data, LOD)庫如YAGO 僅有實體與實體間的關連,導致KG缺少對於實體的描述,本研究基於自然語言處理,除了抽取出實體與關聯,更保留對於實體的描述內容。
系統框架
系統分為「爬蟲模組」與「語意處理模組」兩大部分,其執行流程如下圖:
預處理
我們使用Wikipedia為資料來源,其條目內容中相關的關鍵字大多會帶有其他條目的超連結,爬蟲能利用此特性去挖掘出相關的概念與其解釋。再來能用的工具有:Wikipedia API 能負責文本取得工作,其包含檢查單頁是否存在(exists()函式)、取得單頁完整文本(page()函式)、取得該頁所有超連結項目(links參數),或使用beautifulsoup、scrapy 等框架製作本計畫需求規則的爬蟲。
例如,使用Wikipedia API,輸入Python_(programming_language),輸出結果如下:
斷句(Sentence Boundary Disambiguation, SBD)
大多數的NLP工具都會以句子的型態作為輸入,因此需要將完整文本拆成多個句子。SBD的工作是找到句子的開頭與結尾,例如英文中「.」可能是斷句符號,也可以是名稱的縮寫(例如U.S.)。SBD主要是基於規則系統進行判斷。然而SpaCy框架下的預設斷句模組並沒有偵測該句子的主詞是否明確,導致主詞不明確的句子容易產生無意義的節點。因此本研究基於現有斷句框架再多一層判斷,將主詞不明確的句子(如代名詞)接合在上一個主詞明確句子後。
回指消解 ( Anaphora Resolution, AR)
回指是當下的指代項與上下文中出現的名詞、短句存在密切的語義關聯,例如辨別句子中的 “he”代表何人。共指則是兩個名詞、短句指向真實世界中同一個本體,例如辨別歐巴馬與美國第44任總統是同一實體。大部分同意AR是CR的一部分。本計畫使用NeuralCoref 套件進行AR處理,其是基於SpaCy的擴充訓練模型集,繼承SpaCy的處理效能,能迅速為句子中的實體與代稱項進行分群,其AR是透過計算相似度判斷是否為共指實體。
文本後處理
各個句子處理回指消解後,即可明確知道句子中的代名詞所指向的實體為何。在此步驟將代名詞基於規則模式以其所指的實體做替換,例如將「its use of significant indentation.」替換成「Python’s use of significant indentation.」
潛在語意分析 (Latent Semantic Analysis , LSA)
LSA 的概念是將各單詞BOW或TF-IDF的值以矩陣型式成現,其矩陣大多為稀疏矩陣,可以透過奇異值分解 (Singular Value Decomposition ,SVD)做降維,但考慮到SVD的計算量,也是有不做降維的案例。
(下圖:各句子間的關聯圖。(左)實際數值、(右)熱圖。)
知識抽取
知識抽取包含了實體抽取、關係抽取與屬性抽取。過去有文獻提出的「主詞-動詞-受詞」構句主要依靠詞性做分類,本研究進一步考慮了依存關係等資訊。例如句子「Python is a high-level, general-purpose programming language.」 中包含兩個對 Python 的描述:「 high-level」與「general-purpose programming language」,若單純依照詞性則只會抓到「Python is a high-level」 (因為 level 是名詞),但若考慮依存關係(dep)則會發現high-level 屬修飾語(-MOD),由此可以繼續找它所修飾的詞才能組成完整的名詞片語。最後整理成Noun Chunks。
合併
對依存規則做修改,最後我們得以將相近的概念做合併:
以Python_(programming_language)的 Wikipedia 頁面為出發點,保留率設定 10%,爬蟲深度設定2,得結果如下。可發現主要由Python、Javascript與tcl為中心發散的三叢節點群。
附錄
後記:
之前一直礙於國科會結案前不能公開,等了一段時間終於開放後就忙到沒時間處理了,今天因為得知颱風天連放兩天開始有點焦慮,被問到:「你為甚麼那麼奴?」,才赫然發現自己把所有時間都投入所謂的工作上。但當我有時間時,卻不知道要做什麼,所以才難過、焦慮。
現在想想,除了畫畫和一些小夢想,我現在能做,也想做的,大概就是寫一篇學習筆記吧(
洗一篇)。