本文為 AI 研習社編譯的技術博客,原標題 :

A Review of Named Entity Recognition (NER) Using Automatic Summarization of Resumes作者 | Mohan Gupta翻譯 | 鄧普斯?傑弗

校對 | 醬番梨 整理 | 菠蘿妹

原文鏈接:towardsdatascience.com/

本篇文章旨在帶你瞭解NER是什麼,它在行業中是如何使用的,NER的各種庫,以及使用NER進行簡歷總結的代碼實踐。

這個博客講述了自然語言處理(NLP)和信息檢索(IR)中的一個稱為命名實體識別(NER)的領域,以及我們如何通過只提取主要實體(如姓名、教育背景、技能等)來應用它來自動生成簡歷摘要。

什麼是命名實體識別?

命名實體識別(NER)(也稱為實體識別、實體分塊和實體提取)是信息提取的一個子任務,旨在將文本中的命名實體定位並分類為預先定義的類別,如人員、組織、位置、時間表達式、數量、貨幣值、百分比等。

NER系統已經建立起來,使用基於語言語法的技術以及統計模型,如機器學習。手工製作的基於語法的系統通常可以獲得更好的精度,但代價是低召回並且需要經驗豐富的計算語言學家數月工作才能實現。統計NER系統通常需要大量人工注釋的訓練數據。為了避免部分注釋工作,建議使用半監督方法。

最先進的NER模型

Spacy NER模型:

作為一個免費的開放源碼庫,Spacy使Python中的高級自然語言處理(NLP)變得更加簡單方便。

Spacy為python中的命名實體識別提供了一個非常有效的統計系統,它可以將標籤分配給連續的令牌組。它提供了一個默認模型,可以識別各種命名或數字實體,其中包括公司名稱、位置、組織、產品名稱等。除了這些默認實體之外,SPACY還可以通過訓練模型以用新的被訓練示例更新,將使模型可以任意類添新的命名實體,進行識別。

模型結構:

SPACY中的統計模型是定製設計的,提供了速度和精度的出色性能組合。目前使用的體系結構尚未發布,但以下視頻概述了該模型如何工作,主要關注NER模型。

SPACYS ENTITY RECOGNITION MODEL: incremental parsing with Bloom embeddings & residual CNNs

斯坦福命名實體識別器:

Stanford NER是一個命名實體Recognizer,用Java實現。它提供了一個默認的訓練模型,主要用於識別組織、人員和位置等實體。除此之外,還提供針對不同語言和環境訓練的各種模型。

模型體系結構:

斯坦福NER因為線性鏈條件隨機場(CRF)序列模型已經在軟體中實現,所以也被稱為CRF(條件隨機場)分類器。我們可以使用自己的標註數據集為各種應用程序訓練自己的自定義模型。

CRF模型最初由Lafferty、McCallum和Pereira(2001)首創;請參閱Sutton和McCallum(2006)或Sutton和McCallum(2010)瞭解詳細的可理解介紹。

NER模型實例:

命名實體識別在自然語言處理和信息檢索領域有著廣泛的應用。以下列舉的例子很少:

簡歷自動匯總:

各公司人力資源部面臨的一個關鍵挑戰是評估一大堆求職者的簡歷。為了增加他們的亮點,申請者往往過於詳細化他們的簡歷,其中大部分信息與評估者所尋求的無關。為了簡化這一過程,通過我們的NER模型,我們可以方便地對簡歷進行快速評估,從而簡化在一堆簡歷中篩選候選人所需的工作。

優化搜索引擎演算法:

為了設計一種搜索引擎演算法,而不是在數百萬篇在線文章和網站上搜索輸入的查詢,一種更有效的方法是對文章運行一次NER模型,並永久存儲與之相關的實體。然後,可以將搜索查詢中的關鍵標記與與網站文章關聯的標記進行比較,以實現快速高效的搜索。

強大的推薦系統:

NER可用於開發推薦系統的演算法,自動過濾我們可能感興趣的相關內容,並據此指導我們根據以前的行為發現相關和未訪問的相關內容。這可以通過提取與我們的歷史或以前活動中的內容相關聯的實體,並將它們與分配給其他未公開內容的標籤進行比較,以篩選相關的實體來實現。

簡化客戶支持:

NER可用於識別客戶投訴和反饋中的相關實體,如產品規格、部門或公司分支機構的詳細信息,以便對反饋進行相應分類,並轉發給負責識別產品的相應部門。

在接下來的章節中,我們將詳細介紹使用NER模型實現簡歷摘要。

基於NER的簡歷摘要:

數據集:

當然,第一個任務是創建手動注釋的訓練數據來訓練模型。為此,從在線工作平臺上下載220份簡歷。這些文檔被上傳到DataTurks在線注釋工具並手動注釋。

該工具可以自動解析文檔,允許我們為感興趣的重要實體創建注釋,並生成JSON格式的培訓數據,每行包含文本語料庫和注釋。

數據集的快照如下:

上面的數據集由220份帶注釋的簡歷組成。我們用200個簡曆數據對模型進行訓練,並在20個簡曆數據上進行測試。

在python中使用spacy模型訓練自定義模型:

數據格式:

DataTurks注釋工具生成的JSON格式數據示例如下:

模型訓練:

我們使用python的spacy模塊來訓練ner模型。Spacy的模型是統計的,他們所做的每一個「決定」---例如,要分配的語音標記的哪一部分,或者一個單詞是否是命名實體,都是一個預測。這個預測是基於模型在訓練中看到的例子。

然後將模型顯示未標記的文本,並進行預測。因為我們知道正確的答案,所以我們可以以損失函數的誤差梯度的形式給出模型對其預測的反饋,計算出訓練示例和預期輸出之間的差異。差異越大,梯度和模型更新就越明顯。

當訓練一個模型時,我們不希望它只記住我們的例子-我們希望它提出可以在其他例子中泛化的理論。畢竟,我們不只是想讓模型知道,這裡的「亞馬遜」的一個實例就是一家公司,我們希望它知道,在這種情況下,「亞馬遜」最有可能是一家公司。為了調整準確性,我們分批處理我們的訓練示例,並用小批量和dropout進行實驗。

當然,只顯示一個模型一次示例是不夠的。尤其是如果您只有很少的示例,那麼您將需要進行多次迭代的訓練。在每次迭代中,對訓練數據進行洗牌,以確保模型不會根據實例的順序進行任何泛化。

另一種提高學習效果的方法是設置一個dropout,即隨機「刪除」單個特徵和表示的速率。這使得模型更難記憶訓練的數據。例如,0.25的dropout意味著每個特徵或內部表示有1/4的可能性被丟棄。我們對模型進行了10個epoch的訓練,並將dropout率保持為0.2。

以下是訓練模型的代碼片段:

DataTurks-Engg/Entity-Recognition-In-Resumes-SpaCyContribute to Entity-Recognition-In-Resumes-SpaCy development by creating an account on GitHub.github.com

Spacy模型的結果和評估:

該模型在20份簡歷上進行了測試,並將預測的匯總簡歷存儲為每個簡歷單獨的txt文件。

對於測試模型的每個簡歷,我們計算模型識別的每個實體的準確度得分、精度、召回和F分數。對每個實體的這些度量值進行匯總和平均,以生成一個總體得分,以根據包含20份簡歷的測試數據評估模型。實體評估結果見下文。結果表明,預測結果具有良好的準確性。

通過我們的模型預測得到的來自eauty.com的員工未公開簡歷示例摘要如下:

Accenture員工簡歷,可從indeed.com獲取。

簡歷總結的輸出結果

使用Java中的斯坦福NER模型來訓練自定義模型:

數據集格式:訓練數據必須以文本文件的形式傳輸,以便每行包含一個單詞標籤對,其中單詞和標籤標籤標籤由一個製表位 分隔。對於文本文檔,就像在我們的例子中一樣,我們將文檔標記為單詞,並為每個單詞添加一行,並將相關的標記添加到訓練文件中。為了指示下一個文件的開始,我們在訓練文件中添加了一個空行。以下是輸入訓練文件的示例:

註:每個單詞必須包含一個標籤。這裡,對於我們不關心的單詞,我們使用的是標籤「0」。

屬性文件:

斯坦福corenlp需要一個屬性文件,其中包含構建自定義模型所需的參數。例如,我們可以定義提取用於學習的功能的方法等。下面是一個屬性文件的示例:

# location of the training file
trainFile = ./standford_train.txt
# location where you would like to save (serialize) your
# classifier; adding .gz at the end automatically gzips the file,
# making it smaller, and faster to load
serializeTo = ner-model.ser.gz

# structure of your training file; this tells the classifier that
# the word is in column 0 and the correct answer is in column 1
map = word=0,answer=1# This specifies the order of the CRF: order 1 means that features
# apply at most to a class pair of previous class and current class
# or current class and next class.
maxLeft=1# these are the features wed like to train with
# some are discussed below, the rest can be
# understood by looking at NERFeatureFactory
useClassFeature=true
useWord=true
# word character ngrams will be included up to length 6 as prefixes
# and suffixes only
useNGrams=true
noMidNGrams=true
maxNGramLeng=6
usePrev=true
useNext=true
useDisjunctive=true
useSequences=true
usePrevSequences=true
# the last 4 properties deal with word shape features
useTypeSeqs=true
useTypeSeqs2=true
useTypeySequences=true
#wordShape=chris2useLC
wordShape=none
#useBoundarySequences=true
#useNeighborNGrams=true
#useTaggySequences=true
#printFeatures=true
#saveFeatureIndexToDisk = true
#useObservedSequencesOnly = true
#useWordPairs = true

模型訓練:

斯坦福大學corenlp的主要類是crfclassifier,它擁有實際的模型。在Github中提供的代碼(鏈接已附加在下面)中,我們提供了使用訓練數據和屬性文件訓練模型的代碼,並將模型保存到磁碟,以避免每次訓練的時間消耗。下一次,當我們使用模型對一個看不見的文檔進行預測時,我們只需從磁碟載入經過訓練的模型,然後使用到進行分類。

輸出中的第一列包含輸入標記,而第二列引用正確的標籤,第三列是分類器預測的標籤。

以下是用於訓練模型並將其保存到磁碟的代碼片段:

DataTurks-Engg/Entity-Recognition-In-Resumes-StanfordNER

Contribute to Entity-Recognition-In-Resumes-StanfordNER development by creating an account on GitHub.github.com

斯坦福NER模型的結果和評估:

該模型在20份簡歷上進行了測試,並將預測的匯總簡歷存儲為每個簡歷單獨的txt文件。

對於測試模型的每個簡歷,我們計算模型識別的每個實體的準確度得分、精度、召回和F分數。對每個實體的這些度量值進行匯總和平均,以生成一個總體得分,以根據包含20份簡歷的測試數據評估模型。實體評估結果見下文。結果表明,預測結果具有良好的準確性。

通過我們的模型預測得到的來自eauty.com的員工未公開簡歷示例總結如下:

一份簡歷示例

總結的結果(輸出)

Spacy、Stanford Ner和最先進模型的比較:現實世界中簡歷文檔中的絕大多數標記不是通常定義的實體名稱的一部分,因此基線精度,召回是非常高的,通常大於90%;按照這種邏輯,兩個模型的實體精度召回值都相當好。

從對模型的評估和觀察到的結果來看,在總結簡歷的任務上,Spacy似乎優於斯坦福大學的Ner。對兩個模型確定的實體的F分數的審查如下:

這是resumes數據集。

用於訓練以上項目的Python代碼GitHub庫。

斯坦福NER模型的Java代碼GitHub庫。

謝謝 Hamza Bendemra.

想要繼續查看該篇文章相關鏈接和參考文獻?

長按鏈接點擊打開:

ai.yanxishe.com/page/Te

AI研習社每日更新精彩內容,觀看更多精彩內容:

盤點圖像分類的竅門

動態編程:二項式序列

如何用Keras來構建LSTM模型,並且調參

一文教你如何用PyTorch構建 Faster RCNN

等你來譯:

如何在神經NLP處理中引用語義結構

你睡著了嗎?不如起來給你的睡眠分個類吧!

高級DQNs:利用深度強化學習玩喫豆人遊戲

深度強化學習新趨勢:谷歌如何把好奇心引入強化學習智能體


推薦閱讀:
相關文章