命名實(shí)體識(shí)別(Named EntitiesRecognition涡上,NER)是自然語言處理的一個(gè)基礎(chǔ)任務(wù)趾断。其目的是識(shí)別語料中人名、地名吩愧、組織機(jī)構(gòu)名等命名實(shí)體梦裂,比如限府,2015年中國(guó)國(guó)家海洋局對(duì)124個(gè)國(guó)際海底地理實(shí)體的命名。
由于命名實(shí)體數(shù)量不斷增加誊稚,通常不可能在詞典中窮盡列出虐拓,且其構(gòu)成方法具有各自的一些規(guī)律性挠羔,因而友浸,通常把對(duì)這些詞的識(shí)別從詞匯形態(tài)處理(如漢語切分)任務(wù)中獨(dú)立處理拆又,稱為命名實(shí)體識(shí)別。
命名實(shí)體識(shí)別技術(shù)是信息抽取温兼、信息檢索、機(jī)器翻譯武契、問答系統(tǒng)等多種自然語言處理技術(shù)必不可少的組成部分募判。
常見的命名實(shí)體識(shí)別方法綜述
命名實(shí)體是命名實(shí)體識(shí)別的研究主體,一般包括三大類(實(shí)體類咒唆、時(shí)間類和數(shù)字類)和七小類(人名届垫、地名、機(jī)構(gòu)名全释、時(shí)間装处、日期、貨幣和百分比)命名實(shí)體浸船。評(píng)判一個(gè)命名實(shí)體是否被正確識(shí)別包括兩個(gè)方面:實(shí)體的邊界是否正確和實(shí)體的類型是否標(biāo)注正確妄迁。
命名實(shí)體識(shí)別的主要技術(shù)方法分為:基于規(guī)則和詞典的方法、基于統(tǒng)計(jì)的方法李命、二者混合的方法等登淘。
1.基于規(guī)則和詞典的方法。
基于規(guī)則的方法多采用語言學(xué)專家手工構(gòu)造規(guī)則模板封字,選用特征包括統(tǒng)計(jì)信息黔州、標(biāo)點(diǎn)符號(hào)、關(guān)鍵字阔籽、指示詞和方向詞流妻、位置詞(如尾字)、中心詞等方法笆制,以模式和字符串相匹配為主要手段绅这,這類系統(tǒng)大多依賴于知識(shí)庫和詞典的建立∠詈兀基于規(guī)則和詞典的方法是命名實(shí)體識(shí)別中最早使用的方法君躺,一般而言峭判,當(dāng)提取的規(guī)則能比較精確地反映語言現(xiàn)象時(shí),基于規(guī)則的方法性能要優(yōu)于基于統(tǒng)計(jì)的方法棕叫。但是這些規(guī)則往往依賴于具體語言林螃、領(lǐng)域和文本風(fēng)格,編制過程耗時(shí)且難以涵蓋所有的語言現(xiàn)象俺泣,特別容易產(chǎn)生錯(cuò)誤疗认,系統(tǒng)可移植性不好,對(duì)于不同的系統(tǒng)需要語言學(xué)專家重新書寫規(guī)則伏钠『崧基于規(guī)則的方法的另外一個(gè)缺點(diǎn)是代價(jià)太大,存在系統(tǒng)建設(shè)周期長(zhǎng)熟掂、移植性差而且需要建立不同領(lǐng)域知識(shí)庫作為輔助以提高系統(tǒng)識(shí)別能力等問題缎浇。
2.基于統(tǒng)計(jì)的方法。
基于統(tǒng)計(jì)機(jī)器學(xué)習(xí)的方法主要包括隱馬爾可夫模型(HiddenMarkovMode赴肚,HMM)素跺、最大熵(MaxmiumEntropy,ME)誉券、支持向量機(jī)(Support VectorMachine指厌,SVM)、條件隨機(jī)場(chǎng)(ConditionalRandom Fields踊跟,CRF)等踩验。
在基于統(tǒng)計(jì)的這四種學(xué)習(xí)方法中,最大熵模型結(jié)構(gòu)緊湊商玫,具有較好的通用性箕憾,主要缺點(diǎn)是訓(xùn)練時(shí)間長(zhǎng)復(fù)雜性高,有時(shí)甚至導(dǎo)致訓(xùn)練代價(jià)難以承受决帖,另外由于需要明確的歸一化計(jì)算厕九,導(dǎo)致開銷比較大。而條件隨機(jī)場(chǎng)為命名實(shí)體識(shí)別提供了一個(gè)特征靈活地回、全局最優(yōu)的標(biāo)注框架扁远,但同時(shí)存在收斂速度慢、訓(xùn)練時(shí)間長(zhǎng)的問題刻像。一般說來畅买,最大熵和支持向量機(jī)在正確率上要比隱馬爾可夫模型高一些,但隱馬爾可夫模型在訓(xùn)練和識(shí)別時(shí)的速度要快一些细睡,主要是由于在利用 Viterbi 算法求解命名實(shí)體類別序列時(shí)的效率較高谷羞。隱馬爾可夫模型更適用于一些對(duì)實(shí)時(shí)性有要求以及像信息檢索這樣需要處理大量文本的應(yīng)用,如短文本命名實(shí)體識(shí)別。
基于統(tǒng)計(jì)的方法對(duì)特征選取的要求較高湃缎,需要從文本中選擇對(duì)該項(xiàng)任務(wù)有影響的各種特征犀填,并將這些特征加入到特征向量中。依據(jù)特定命名實(shí)體識(shí)別所面臨的主要困難和所表現(xiàn)出的特性嗓违,考慮選擇能有效反映該類實(shí)體特性的特征集合九巡。主要做法是通過對(duì)訓(xùn)練語料所包含的語言信息進(jìn)行統(tǒng)計(jì)和分析,從訓(xùn)練語料中挖掘出特征蹂季。有關(guān)特征可以分為具體的單詞特征冕广、上下文特征、詞典及詞性特征偿洁、停用詞特征撒汉、核心詞特征以及語義特征等。
基于統(tǒng)計(jì)的方法對(duì)語料庫的依賴也比較大涕滋,而可以用來建設(shè)和評(píng)估命名實(shí)體識(shí)別系統(tǒng)的大規(guī)模通用語料庫又比較少睬辐。
3.混合方法。
自然語言處理并不完全是一個(gè)隨機(jī)過程宾肺,單獨(dú)使用基于統(tǒng)計(jì)的方法使?fàn)顟B(tài)搜索空間非常龐大溉委,必須借助規(guī)則知識(shí)提前進(jìn)行過濾修剪處理。目前幾乎沒有單純使用統(tǒng)計(jì)模型而不使用規(guī)則知識(shí)的命名實(shí)體識(shí)別系統(tǒng)爱榕,在很多情況下是使用混合方法:
- 統(tǒng)計(jì)學(xué)習(xí)方法之間或內(nèi)部層疊融合。
- 規(guī)則坡慌、詞典和機(jī)器學(xué)習(xí)方法之間的融合黔酥,其核心是融合方法技術(shù)。在基于統(tǒng)計(jì)的學(xué)習(xí)方法中引入部分規(guī)則洪橘,將機(jī)器學(xué)習(xí)和人工知識(shí)結(jié)合起來跪者。
- 將各類模型、算法結(jié)合起來熄求,將前一級(jí)模型的結(jié)果作為下一級(jí)的訓(xùn)練數(shù)據(jù)渣玲,并用這些訓(xùn)練數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練,得到下一級(jí)模型弟晚。
命名實(shí)體識(shí)別的一般流程
如下圖所示忘衍,一般的命名實(shí)體流程主要分為四個(gè)步驟:
- 對(duì)需要進(jìn)行提取的文本語料進(jìn)行分詞;
- 獲取需要識(shí)別的領(lǐng)域標(biāo)簽卿城,并對(duì)分詞結(jié)果進(jìn)行標(biāo)簽標(biāo)注枚钓;
- 對(duì)標(biāo)簽標(biāo)注的分詞進(jìn)行抽取瑟押;
- 將抽取的分詞組成需要的領(lǐng)域的命名實(shí)體搀捷。
動(dòng)手實(shí)戰(zhàn)命名實(shí)體識(shí)別
命名實(shí)體的類別,我們?cè)诘?1課中已經(jīng)給出了多望,這里不再贅述嫩舟,下面通過 jieba 分詞包和 pyhanlp 來實(shí)戰(zhàn)命名實(shí)體識(shí)別和提取氢烘。
1.jieba 進(jìn)行命名實(shí)體識(shí)別和提取。
第一步家厌,引入 jieba 包:
import jieba
import jieba.analyse
import jieba.posseg as posg
第二步播玖,使用 jieba 進(jìn)行詞性切分,allowPOS 指定允許的詞性像街,這里選擇名詞 n 和地名 ns:
sentence=u'''上線三年就成功上市,拼多多上演了互聯(lián)網(wǎng)企業(yè)的上市奇跡,卻也放大平臺(tái)上存在的諸多問題黎棠,拼多多在美國(guó)上市。'''
kw=jieba.analyse.extract_tags(sentence,topK=10,withWeight=True,allowPOS=('n','ns'))
for item in kw:
print(item[0],item[1])
在這里镰绎,我們可以得到打印出來的結(jié)果:
上市 1.437080435586
上線 0.820694551317
奇跡 0.775434839431
互聯(lián)網(wǎng) 0.712189275429
平臺(tái) 0.6244340485550001
企業(yè) 0.422177218495
美國(guó) 0.415659623166
問題 0.39635135730800003
可以看得出脓斩,上市和上線應(yīng)該是動(dòng)詞,這里給出的結(jié)果不是很準(zhǔn)確畴栖。接下來随静,我們使用 textrank 算法來試試:
kw=jieba.analyse.textrank(sentence,topK=20,withWeight=True,allowPOS=('ns','n'))
for item in kw:
print(item[0],item[1])
這次得到的結(jié)果如下,可見吗讶,兩次給出的結(jié)果還是不一樣的燎猛。
上市 1.0
奇跡 0.572687398431635
企業(yè) 0.5710407272273452
互聯(lián)網(wǎng) 0.5692560484441649
上線 0.23481844682115297
美國(guó) 0.23481844682115297
2.pyhanlp 進(jìn)行命名實(shí)體識(shí)別和提取。
第一步照皆,引入pyhanlp包:
from pyhanlp import *
第二步重绷,進(jìn)行詞性切分:
sentence=u'''上線三年就成功上市,拼多多上演了互聯(lián)網(wǎng)企業(yè)的上市奇跡,卻也放大平臺(tái)上存在的諸多問題,拼多多在美國(guó)上市膜毁。'''
analyzer = PerceptronLexicalAnalyzer()
segs = analyzer.analyze(sentence)
arr = str(segs).split(" ")
第三步昭卓,定義一個(gè)函數(shù),從得到的結(jié)果中瘟滨,根據(jù)詞性獲取指定詞性的詞:
def get_result(arr):
re_list = []
ner = ['n','ns']
for x in arr:
temp = x.split("/")
if(temp[1] in ner):
re_list.append(temp[0])
return re_list
第四步候醒,我們獲取結(jié)果:
result = get_result(arr)
print(result)
得到的結(jié)果如下,可見比 jieba 更準(zhǔn)確:
['互聯(lián)網(wǎng)', '企業(yè)', '奇跡', '平臺(tái)', '問題', '美國(guó)']
總結(jié)
本文對(duì)命名實(shí)體識(shí)別的方法進(jìn)行了總結(jié)杂瘸,并給出一般的處理流程倒淫,最后通過簡(jiǎn)單的 jieba 分詞和 pyhanlp 分詞根據(jù)詞性獲取實(shí)體對(duì)象,后續(xù)大家也可以嘗試通過哈工大和斯坦福的包來處理败玉,下篇我們通過條件隨機(jī)場(chǎng) CRF 來訓(xùn)練一個(gè)命名實(shí)體識(shí)別模型敌土。