當前位置:
首頁 > 知識 > NLP 教程:詞性標註、依存分析和命名實體識別解析與應用

NLP 教程:詞性標註、依存分析和命名實體識別解析與應用

本文為雷鋒字幕組編譯的技術博客,原標題 Holy NLP! Understanding Part of Speech Tags, Dependency Parsing, and Named Entity Recognition,作者為 Peter Baumgartner。

翻譯 | 陳濤 程思婕 整理 | 凡江

插播一則小廣告:NLP領域的C位課程,斯坦福CS224n正在AI慕課學院持續更新中,無限次免費觀看!

簡介

當我們提到數據科學時,我們經常想到的是針對數字的統計分析。但實際上,更為常見的是由機構所產生的大量非結構化文本數據,它們需要被量化和分析。其中的一些例子有社交網路評論,產品評價,電郵,採訪稿。

為了分析文本,數據科學家經常會用到自然語言處理(NLP)。在本文中,我們將詳細介紹 3 個常見的 NLP 任務,並研究如何運用它們來分析文本。我們將討論的三個任務分別是:

詞性標註:這個詞語的詞性是什麼?

依存分析:這個詞語與句中其他詞語有什麼關係?

命名實體識別:這個詞語是否是專有名詞?

我們將通過spaCy這個 python 庫,來調用上述三種功能,從而對聖經中的主要角色進行挖掘,並分析他們的行為。接著,我們將嘗試對得到的結構化數據做一些有趣的可視化。

當你有大量的文本文檔時,你就可以採用這個方法,去了解文檔中有哪些主要的實體,它們出現在文檔何處,它們做了什麼。比如,DocumentCloud 採用了與此類似的方法來實現「查看實體」的分析選項。


詞條與詞性標註

有一種從文本中提取意義的方法是逐一分析每一個詞語。將文本切分成詞語的過程稱為詞條化,得到的詞語被稱為詞條。標點符號也是詞條的一種。句中的每個詞條都有若干屬性,我們可以對此進行分析。其中一個例子就是詞語的詞性:名詞表示人物,地點或事物;動詞表示動作或事件的發生;形容詞則用以描述名詞。利用這些屬性,可以很方便地統計一段文本內最常見的名詞,動詞和形容詞,從而創建出一份摘要。

利用 spaCy,我們可以對一段文本進行詞條化,從而得到每個詞條的詞性屬性。以下面的代碼作為示例應用程序,我們對之前的段落進行詞條化,並統計其中最常見名詞的數目。此外,我們對詞條進行了詞性還原,即得到每個詞的詞根,規範了詞語的形式。

依存分析

詞語之間存在著一定的關係,其中有幾種常見的類型。比如,名詞可以作為句子中的主語,從而執行一個動作(動詞),如同「Jill laughed」。名詞也可以作為句子中的賓語,其會受到主語的動作影響,就像此句中的 John:「Jill laughed at John」。

依存分析正是理解句子中詞語間關係的一種方法。句子「Jill laughed at John」中有兩個名詞 Jill 和 John。Jill 是主語,表示發出笑這個動作的人,而 John 是賓語,表示被取笑的人。依存關係是一種更精細的屬性,可以用來理解句子中詞語間的關係。

詞語間的關係可以隨著句子的組織方式而變得很複雜。對一個句子進行依存分析,將得到以動詞為根的樹狀數據結構。

讓我們來看下這句話的依存分析結果:「The quick brown fox jumps over the lazy dog」。

依存關係也是詞條屬性的一種。spaCy提供了一系列API,可以幫助我們得到詞條的各種屬性。下面我們將列印出各個詞條的文本,詞條間的依存關係及其父詞條(頭詞條)的文本。

為了進一步分析,我們需要留意那些帶有nsubj關係的詞條,這表示它們是句子中的主語。在這個例子中,意味著我們需要將詞語「fox」記錄下來。


命名實體識別

最後就是命名實體識別了。命名實體是指句子中的專有名詞。計算機已經能很好地識別出句子中的命名實體,並區分其實體類型。

spaCy是在文檔級層面進行命名實體識別的操作。這是因為一個實體的名稱可能跨越多個詞條。每一個詞條會被標記為實體的一部分,具體實施是按照 IOB 規則 來標記,分為實體的開始,實體的內部以及實體的外部。

在下面的代碼中,我們使用docs.ents函數列印出所有文檔級的命名實體。接著,我們列印出每一個詞條,它的 IOB 標註及所屬的實體類型(如果該詞條是某個實體一部分的話)。

我們使用的例句是:「Jill laughed at John Johnson」。

一個實際應用的例子:對聖經進行自然語言處理

分別使用上述提到的方法,效果都挺不錯。然而,自然語言處理的真正威力在於我們可以將這些方法結合起來,從而提取出符合語言模式的信息。我們可以使用詞性標註,依存分析和命名實體識別去理清大量文本中出現的所有角色及其行為。考慮到聖經的長度及其提到的大量角色,它正是一個應用這些方法的好例子。

在我們導入的數據中,每一個對象就是一段聖經中的經文。經文是用來索引聖經中的具體章節,一般包括一句或若干句文本。我們會遍歷每段經文,提取其中的主語,判斷其是否是人名,並抽取出該人物的行為。

首先,我們從 github 倉庫中載入 json 格式的聖經。然後,對於抽取出的每段經文文本,利用spaCy對其進行依存分析和詞性標註,並將分析後的結果儲存起來。

我們將文本從 json 格式中解析出來,並存入verse_docs這個變數里,耗時大約三分多鐘,平均一秒鐘處理 160 段經文。作為參考,我們可以看一下bible_json的前三行。


使用詞條屬性

為了提取角色和相關的行為,我們需要對每段經文中的所有詞條進行遍歷,並考慮 3 個要素。

1)這個詞條是否是句子的主語(即查看其依存關係是否是nsubj);

2)這個詞條的父詞條是否是動詞(一般情況下應該是動詞,但有時詞性標註會和依存分析得出矛盾的結果,我們還是謹慎一點吧。當然我並非語言學家,因此可能此處存在著一些奇怪的極端例子);

3)這個詞條是否是指代人的命名實體,我們並不想對非人物的名詞進行提取(為了簡單起見,我們只提取每個角色的名字部分)。

如果有詞條符合上述的三個條件,我們將對其收集下列屬性。

1)詞條所表示的名詞實體的文本;

2)包含名詞和動詞的文本範圍(即短語);

3)其相關的動詞;

4)該動詞在標準英語文本中出現的對數概率(使用對數概率是因為往往這裡的概率值會非常小);

5)該段經文的序號。

分析

我們已經提取出所有角色和他們的行為,並以列表的形式進行存儲。我們先做一個快速分析,計算以下兩項。

1)弄清楚每個人物最常見的行為(即動詞)。

2)弄清楚每個人物最獨特的行為。我們通過查找在英語文本中出現的概率最低的行為,來確定最獨特的行為。

讓我們看下動詞總數量前 15 位的角色及其最常見的動詞。

看起來聖經中記錄了很多人在說話,除了 Solomon,聖經記錄了他做了許多事情。

那麼在計算完動詞出現的概率後,這些角色最獨特的動詞又是什麼呢。在顯示結果中,我們剔除了重複項以保證最終顯示的每個詞都是唯一的。

看起來我們得到了一些有趣的新詞,可供我們去學習。我最喜歡這兩個詞:discomfited 和 ravin。

可視化

接下來將結果可視化。我們將使用前 50 位角色的名字及其最常見行為,並畫出這些行為出現在整個文本的哪些經文中。在圖中,會畫出垂直線來表示聖經各卷的開始位置,而名字將以首次出現順序進行排列。

這樣做的目的是了解到這些角色在聖經中的哪個時間點頻繁出現。

我們將加入分隔符用以區分聖經中的不同章節。由於我不是一個聖經學者,所以我使用此處的章節劃分方法,其主要內容是:

舊約全書

摩西五經或稱為律法書:創世紀,出埃及記,利未記,民數記,申命記。

舊約歷史書:約書亞記,士師記,路得記,撒母耳記上,撒母耳記下,列王紀上,列王紀下,歷代志上,歷代志下,以斯拉記,尼希米記,以斯帖記。

詩歌智慧書:約伯記,詩篇,箴言,傳道書,雅歌。

先知書:以賽亞書,耶利米書,耶利米哀歌,以西結書,但以理書,何西阿書,約珥書,阿摩司書,俄巴底亞書,約拿書,彌迦書,那鴻書,哈巴谷書,西番雅書,哈該書,撒加利亞書,瑪拉基書。

新約全書

福音書:馬太福音,馬可福音,路加福音,約翰福音。

新約歷史書:使徒行傳。

使徒書信:羅馬書,哥林多前書,哥林多後書,加拉太書,以佛所書,腓立比書,歌羅西書,帖撒羅尼迦前書,帖撒羅尼迦後書,提摩太前書,提摩太後書,提多書,腓利門書,希伯來書,雅各書,彼得前書,彼得後書,約翰一書,約翰二書,約翰三叔,猶大書。

預言書及啟示著作:啟示錄。

此外,我們用紅色指示線將舊約和新約區分開來。


可視化分析

在聖經的開始部分,即創世紀中,上帝被反覆提及。

在新約的各卷中,LORD 這個詞不再被當做實體使用。

我們可以看到保羅在使徒行傳的中間部分被第一次提及。

聖經中的詩歌智慧書部分並沒有提到太多的實體詞。

福音書詳細記載了耶穌的生平。

彼拉多在每一部福音書的末尾都會出現。


此研究方法存在的問題

實體識別無法將兩個僅是名字相同的人區分開來。

1. 掃羅王(舊約中人物)

2. 直到使徒行者的中段,使徒保羅一直被稱為掃羅。

一些名詞並非真實的實體,比如 Ye。

一些名詞使用全名的形式可以結合更多上下文信息,比如彼拉多。


下一步

像往常一樣,有一些途徑可以拓展及提升本文的分析方法。當我在寫這篇文章時,我想到以下幾點。1)利用依存關係找出實體間的關係,並通過網路分析的方法,去發掘其中的特點。2)在實體獲取中,改進實體提取技術,而非目前僅提取名字。3)對非人物實體及其語言關係進行分析,比如聖經中提到了哪些地點。


總結

僅通過使用文本中詞條級別的屬性,我們就能做出一些有趣的分析了。在本文中,我們討論了三個重要的 NLP 工具。

詞性標註:這個詞語的詞性是什麼?

依存分析:這個詞語與句中其他詞語有什麼關係?

命名實體識別:這個詞語是否是專有名詞?

我們結合使用了這三種工具,挖掘出聖經中的主要角色以及他們的行為。我們將這些角色和行為可視化,從而了解到每個角色的主要行為在何處發生。


致謝

感謝 Vicki Boykis 和 Austin Rochford 對本文的較早版本提出的建議。

NLP 靈感研究庫


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

如何使用 Keras 實現無監督聚類
微軟發布的可視化圖像/視頻標記工具 VoTT

TAG:AI研習社 |