[自然語言處理] #3 命名實體標註 Name Entity Recognition 理論設計篇

Roye Qiu
Roye’s ResearchCraft
9 min readJul 15, 2019

Name Entity 的意義以及目的

[上一篇][自然語言處理] #2 Word to Vector 實作教學 (實作篇)

[下一篇][自然語言處理] #4 ChatGPT 介紹與創作者計畫

[外部參考]斷開中文的鎖鍊!自然語言處理-nlp

以下幾個點,我想大家為什麼會點進這篇文章來看:

  • Name Entity 是什麼?
  • 為什麼Name Entity重要?
  • 如何訂定Name Entity?
  • 如何辨識Name Entity?

[前言]

總算忙得差不多了(雖然還是很多事要做...),原本想要先寫Bert、ELMO,但是剛好最近碰到一些需要講NER的項目,所以就先來寫NER,畢竟NER在特定場域(specific domain)的任務,幾乎是不可分割的。跟之前一樣第一篇先講理論,第二篇接著講實作,那讓我們開始吧!

假如想先去看甚麼是Bert、ELMO推薦可以先看李弘毅老師的介紹影片:
影片連結

Name Entity 是什麼?

所謂的Name Entity,我們可以簡單的把它認知為某段文字在我的應用場景以及應用領域中,他是具有重要成分以及意義的元素,可以協助我們了解這段文本。

甚麼意思呢?

試想一下一篇新聞,我們通常在看的時候會注意甚麼事情呢?

我們會注意的不外乎就是:
跟誰有關,發生甚麼事,時間,地點(人事時地)

為什麼我們會注意這些?

因為人事時地,是在新聞中最重要的元素,也是可以幫助我們更快速的了解這個新聞。 像是下圖中他抽取了部分的NER,讓我們可以知道一些訊息。

Name Entity example (reference)

Name Entity 為什麼重要?

人的閱讀能力比電腦厲害非常多,人腦可以把閱讀到的資訊,自動地去做關聯跟給出意義,但對於電腦來說,拿到一篇文章就只是拿到了很多字串而已。 儘管我們經過斷詞,將每一個文句切成以詞為單位了,但通常還是會有兩個問題:

1. 通常詞為單位,對於後續任務的幫助是有限的。

舉例來說我從最近的新聞中取來的一句話:
少女cosplay攜帶槍械造成民眾驚恐結果只是虛驚一場。

Cosplay Photo Shoot with Huge Fake Rifle Prompts Public Warning(資料來源)

我現在經過斷詞有一些詞,為了讓大家更有感,特地將順序打亂: 少女、造成、驚恐、槍械、只是、cosplay、結果、民眾、攜帶、虛驚、一、場。

就連人來看都只能大略的猜猜看這句話原文是甚麼,但是不同的組合方式,可能出現的意義也會截然不同。
但假如我們儲存分析的單位不是以詞而是entity的話,就更具有語意成分。
例如:

少女cosplay、攜帶槍械、虛驚一場、民眾驚恐

雖然無法完整表達語意,但是跟以詞為單位來說,語意成分是多得多,而且以複雜的文本來說,也是精簡了許多不必要的資訊。

2. 對於我想解的task哪些詞是有幫助的且有意義的,電腦還是不知道。

假如我們先定義好,對於這個新聞有那些name entity可以幫助我們了解的話,那我們產生出來的結構就會更具有意義。

起因: 少女cosplay、攜帶槍械
結果: 虛驚一場、民眾驚恐

假如我們有抽取出這樣的entity,我們突然想要做判斷一篇新聞是不是負面新聞,是不是可以有很好的特徵去做分類訓練呢。

雖然目前越來越多方法,跳過了NER這個步驟,直接以複雜的模型架構將句子跟標記直接來train model解任務,但這樣的作法在整體上來說也有不少缺點:

  1. 是資源需求度變高,且實作上困難許多,包括資料的需求量,實驗運算的時間,模型的調參的時間,都比先做ner在做下一步的task來花得更多,時間花得多對於工作上來說更是致命傷。
  2. 在解釋性上會更難解釋,有經過NER的萃取,至少我們知道這個任務是基於某些辨識到的Name Entity所進行下一步推論的,但倘若一步到位的,要解釋起來就會相對的困難許多。

如何訂定Name Entity?

我們通常在訂定Name Entity的時候,通常會從有兩個點依序下去思考:

  1. 這個domain有哪些可能的task。
  2. 那每個task可能會需要知道的Name Entity。

基本上基於這兩個點,我們才不會定義出不相關的或是未來可能還有該辨識的但是當初沒有定義到。 我們可以看出來Name Entity呼應到了開頭提到的,在特定應用場景下,跟特定task相關的元素。

我想有些朋友讀到這邊會產生出另外一個疑問,假如Name Entity都是domain specific,那麼為什麼會有一些general entity呢?

其實是這樣子的,所謂的general entity也是基於某一個domain (一般群眾在一般生活環境)去訂定的。這邊列舉一些general entity:

  • Stanford typical 3 classes:
    LOCATION, ORGANIZATION, PERSON
  • Stanford typical 7 classes:
    DATE, LOCATION, MONEY, ORGANIZATION, PERCENT, PERSON, TIME
  • Stanford typical 4 classes:
    LOCATION, MISC, ORGANIZATION, PERSON

但假如我在不同的應用中,舉例來說刑事案件中,對於PLACE來說,我可能還會有不同的Entity像是命案現場、發現現場等,到底是哪個entity還是要再根據上下文去做判斷。

如何辨識Name Entity

這部分其實像是一個有歷史演進的故事,有演進的故事是不是總是讓人覺得很有古味啊 ,NER的做法,從過去到現在總共經過了蠻多的演進跟變化,等全部介紹完再來總結。

  1. POS Pattern
  2. HMM
  3. CRF
  4. RNN/CNN/Attention

POS Pattern

首先我們來介紹POS Pattern,POS Pattern 永遠是最好用的一招,簡單來說他就是藉由統計Entity 底下某種POS Pattern出現的機率來設計,例如動詞接名詞的Pattern就定義為事件。 ex 喝咖啡、看電影、吹乒乓球。

有人可能會說像事件這麼模糊的定義,或許還說得通,其他像是甚麼命案現場,會這樣做的是腦袋有病吧?

當然不敢說全部都可以,但是在變化性非常小,資料都在特定場域的語料還蠻多類型都可以這樣做,例如在案件說明書中,只要出現NC詞性地點,基本上就是事件的發生地點。

先不論到底準確度多少(一定有其極限),但是在沒有labeled training data的狀況,這還是一個非常好的起始點做法。

Hidden Markov Model

NER of Hidden Markove Model

HMM可以說是在早期霸版很多NLP任務很久的Model呢,在EM還要自己寫的年代...扯遠了。 因為像是大家知道的,文句是一個時間序列(time-serial)的資料,也就是說詞跟詞之前的轉換,可以視為一個state轉到下一個state的架構,我們主要就是在計算state跟state轉換的機率。

訓練方式跟POS Tagging 其實是一樣的,但是因為學術界比較專注在NER的時候,CRF已經問世了,所以用HMM做NER的就相對上來說少。

Conditional Random Field

CRF比HMM還要晚一點出來,但是他考量的不只是詞個詞之間轉移的機率,他還可以從我們根據觀察data後所設計的Template去計算pattern的機率,所以通常我們也會再給入其他的Feature像是詞性,或是我們自己針對特徵詞做的Feature,讓我們的model觀察學習的內容更加的豐富。

我就不附圖了,有興趣的朋友可以去下載CRF++根據教學文操作Template會更有感我在說甚麼。

RNN/CNN/Attention

NER of Recurrent Neural Network

至於RNN或是Attention Network,雖然實作的方法不同,但是他們有一個概念是一樣的,就是我所有的pattern都去考慮學習計算,所以我們也不用去設計template,跟前面的類型比起來,不敢說precision一定比較高,但是recall基本上都是會贏前述的方法,因為他全部的Pattern都有考慮到,但是可以想像的是Training的時間也會比前述的方法還要久的多。

我們來做個簡單的表格來做說明:

Comparsion of different methods

[結語]

今天分享了很多關於NER的東西,意義、對於任務的幫助、該怎麼策略的訂定Name Entity、NER的從過去到現在的做法,因為NER其實是一個蠻大的Topic,所以一個篇幅還不夠完全講完,我相信很多朋友已經注意到,我在設計標註的時候,有奇怪的B、I前綴標記,這到底是甚麼呢? 就讓我在下一篇娓娓道來! 上面假如哪裡講不清楚或寫不好,或是還有甚麼疑問,歡迎留言詢問或指教,假如覺得講得不錯,也請給鼓勵跟分享。 0W0)/

--

--

Roye Qiu
Roye’s ResearchCraft

一個喜歡科技、技術的自然語言工程師,喜歡參與workshop活動與參加比賽,曾獲得總統盃黑客松優勝與司法院團隊一起與總統蔡英文介紹自然語言對於司法改革的重要性~