使用Stanford Word Segmenter and Stanford Named Entity Recognizer (NER)實現中文命名實體識別
簡介
Stanford NER是命名實體識別(NER,Named Entity Recognizer)的一個Java實現。NER可以標記文字中詞的序列,如人名、公司名、基因名或者蛋白質名等。它自帶精心設計的用於NER的特徵提取器,和用於定義特徵提取器的許多選項。在“下載”處,這裡有許多好的英文命名實體識別器,特別是對於有三類的(人名、組織機構名、地名),並且我們也提供對於不同語言和情況的各種其他模型,包括僅僅在CoNLL 2003英文訓練資料的模型。
Stanford NER作為CRFClassifier(條件隨機場分類器)也是著名的。此軟體提供一個對於(任意序列)線性鏈條件隨機場(CRF)序列模型的通用實現。通過標記資料,可以訓練自己的模型,你可以使用這個程式碼,為NER或者其他任務,建立序列模型。
Stanford NER可供下載,在GNU General Public license (V2 or later)許可下。原始碼也提供在下面。下載包中包含了命令列呼叫元件(請檢視下載中包含的shell指令碼和批處理檔案),執行作為一個服務(檢視原始碼jar檔案中的NERServer),一個java應用程式介面(檢視一個簡單例子——
引用
這裡提供的CRF序列模型沒有精準對應於任何已經出版的文章,但是文章或者軟體可以這樣引用:Jenny Rose Finkel, Trond Grenager, and Christopher Manning. 2005. Incorporating Non-local Information into Information Extraction Systems by Gibbs Sampling. Proceedings of the 43nd Annual Meeting
of the Association for Computational Linguistics (ACL 2005), pp. 363-370.
開始操作
你可以嘗試Stanford NER CRF classifiers或者Stanford NER 作為Stanford CoreNLP中的一部分,從而理解Stanford NER是什麼,它是否對於您有幫助。去使用此軟體在您的電腦上,首先下載zip壓縮檔案。用其他軟體解壓此壓縮包或者使用unzip命令來解壓。通常建立一個”stanford-ner”空目錄,將檔案直接解壓到此目錄。這裡不需要安裝步驟,可以直接在此目錄中執行Stanford NER。一般地,Stanford NER可以從命令列執行。當前最新版本的Stanford NER要求使用java 1.8或者更新的java版本。確定你已經安裝了java1.8版本或者更新版本,否則還可以執行一箇舊版本的Stanford NER(Stanford NER 3.4.1支援java 6或者java 7).
NER GUI
確保java在電腦的環境變數中,就可以執行NER圖形使用者介面程式,通過雙擊或者執行./ner-gui.sh(在Linux系統中)來開啟程式。也可以通過雙擊stanford-ner.jar檔案去執行程式,但是很可能會因為作業系統沒有為我們的NER系統分配足夠多的java記憶體,而導致執行失敗。所以,通過雙擊ner-gui.bat(Windows中)或者ner-gui.sh(Linux/Unix/mac中)。然後,打開了程式之後,使用頂部的選單欄中“Classifier”選單,從“classifiers”目錄載入一個CRF分類器。可以通過“File”選單載入一個文字檔案或者web網頁,或者使用程式自帶的預設文字。最後,能夠點選“Run NER”按鈕,對文字做出實體標記。
單個CRF NER分類器從命令列
在命令列中完成,你需要在作業系統的環境變數中包含了java的目錄,並且stanford-ner.jar被包含在CLASSPATH中。具體操作方式依賴於具體的作業系統。
對系統中自帶的sample.txt進行NER測試,可以在命令列中使用以下程式碼
Windows中
java -mx600m -cp "*;lib\*" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -textFile sample.txt
- 1
Linux/Unix中
java -mx600m -cp "*:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -textFile sample.txt
- 1
執行以上命令,可以得到如下結果
當然,也可將結果儲存到一個tsv檔案中,前兩列對應實體以及它們的類別,程式碼如下
java -mx600m -cp "*:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -outputFormat tabbedEntities -textFile sample.txt > sample2017-01-24.tsv
- 1
檢視產生的tsv檔案
完全Stanford NER 功能
這個Stanford distribution也允許訪問Stanford CoreNLP管道的全部NER 功能。這些功能可以被使用通過NERClassifierCombiner類。NERClassifierCombiner允許多CRFs一起被使用,並且也提供選項識別數字序列模型和時間模型,基於SUTime的基於規則NER。
使用NERClassifierCombiner在命令列,在lib目錄中的jar檔案,必須被在CLASSPATH中。這裡是一個例子
java -mx1g -cp "*:lib/*" edu.stanford.nlp.ie.NERClassifierCombiner -textFile sample.txt -ner.model classifiers/english.all.3class.distsim.crf.ser.gz,classifiers/english.conll.4class.distsim.crf.ser.gz,classifiers/english.muc.7class.distsim.crf.ser.gz
- 1
這裡有一個不同之處,這裡的sunday被識別為“DATE”
通過使用API實現可程式設計的
你能夠在自己的程式碼中呼叫Stanford NER。NERDemo.java說明了集中呼叫的方式。我們建議你從這裡例子開始,然後在需要的時候看javadoc等。
通過服務來程式設計
Stanford NER也能夠被設定去執行作為一個服務,此服務需要在socket上監聽。
其他問題
你可以檢視ppt上關於NER的介紹。PPT下載地址是nlp.stanford.edu/software/jenny-ner-2007.ppt
這裡也有一系列的FAQ(Frequently Asked Questions)可檢視