在這裡介紹一下CoreNLP進行自然語言處理一些知識。
工具以及對各種語言的支持如下表(英文和中文支持的最好),分別對應:分詞,斷句,定詞性,詞元化,分辨命名實體,語法分析,情感分析,同義詞分辨等。
什麼是命名實體識別(NER)?
命名實體識別(NER)是自然語言處理(NLP)中的基本任務之一。NLP的一般流程如下:
(IOB是塊標記的一種表示。B-表示開始,I-表示內部,O-表示外部)
(1) 基於規則的方法。根據語言學上預定義的規則。但是由於語言結構本身的不確定性,規則的制定上難度較大。
我現在回家 //這是常見的(主+狀+謂+賓)結構的句子
我今天家 //這樣的文本就不能稱為一個句子,少了必要的語法結構
LSTM網路是整體思路同樣是先對給定的訓練樣本進行學習,確定模型中的參數,再利用該模型對測試樣本進行預測得到最後的輸出。由於測試輸出的準確性現階段達不到100%,這就意味著,肯定存在一部分錯誤的輸出,這些輸出里很可能就包含類似於上述第二句話這種不符合語法規則的文本。因此,這就是為什麼要將CRF模型引入進來的原因。
要完全搞懂CRF的原理,可以參考李航的《統計學習方法》的第11章。這裡作簡要說明。CRF的基礎是馬爾可夫隨機場,或者稱為概率無向圖。
延伸
概率無向圖:用無向圖表示隨機變數的概率分布。
局部馬爾可夫性: P(Yu|Yv)=P(Yu|Yv,Yw)簡單理解,因為Yu和Yw之間沒有邊連接,則在給定隨機變數Yv條件下的Yu的概率,跟多加了一個Yw無關。
CRF的理解
為何CRF可以表示輸出序列內各元素(Y1,Y2,…,Yi,Yi+1)之間的聯繫?這裡就是要聯繫到馬爾可夫性。這也就是為什麼CRF的基礎是馬爾可夫隨機場。CRF如何求解P(Y|X),有具體的數學公式,這裡就不詳細列出了。
首先關於命名主題識別:
#encoding="utf-8" from stanfordcorenlp import StanfordCoreNLP import os
if os.path.exists(D:\stanford_nlp\stanford-corenlp-full-2018-10-05): print("corenlp exists") else: print("corenlp not exists") nlp=StanfordCoreNLP(D:\stanford_nlp\stanford-corenlp-full-2018-10-05,lang=zh) sentence = 王明是清華大學的一個研究生 #print (nlp.word_tokenize(sentence)) #分詞 #print (nlp.pos_tag(sentence)) #詞性 print (nlp.ner(sentence)) #NER
#print (nlp.parse(sentence)) #語法分析 #print (nlp.dependency_parse(sentence)) #語法依賴關係
[(『王明』, 『PERSON』), (『是』, 『O』), (『清華』, 『ORGANIZATION』), (『大學』, 『ORGANIZATION』), (『的』, 『O』), (『一』, 『NUMBER』), (『個』, 『O』), (『研究生』, 『O』)]
如果將命名實體拼接在在一起可以使用
res = nlp.ner(sentence) tag = 0 name = labels = [] for i in range(len(res)): if res[i][1] != ORGANIZATION: if tag != 0: labels.append(name) name = tag = 0 else: tag = 1 name += res[i][0]
print(res) print(labels)
計算機語言學家羅賓森總結了依存語法的四條定理:
使用斯坦福句法分析器做依存句法分析可以輸出句子的依存關係,Stanford parser基本上是一個辭彙化的概率上下文無關語法分析器,同時也使用了依存分析。
下面是對分析的結果中一些符號的解釋:
ROOT:要處理文本的語句 IP:簡單從句 NP:名詞短語 VP:動詞短語 PU:斷句符,通常是句號、問號、感嘆號等標點符號 LCP:方位詞短語 PP:介詞短語 CP:由『的』構成的表示修飾性關係的短語 DNP:由『的』構成的表示所屬關係的短語 ADVP:副詞短語 ADJP:形容詞短語 DP:限定詞短語 QP:量詞短語 NN:常用名詞 NR:固有名詞 NT:時間名詞 PN:代詞 VV:動詞 VC:是 CC:表示連詞 VE:有 VA:表語形容詞 AS:內容標記(如:了) VRD:動補複合詞 CD: 表示基數詞 DT: determiner 表示限定詞 EX: existential there 存在句 FW: foreign word 外來詞 IN: preposition or conjunction, subordinating 介詞或從屬連詞 JJ: adjective or numeral, ordinal 形容詞或序數詞 JJR: adjective, comparative 形容詞比較級 JJS: adjective, superlative 形容詞最高級 LS: list item marker 列表標識 MD: modal auxiliary 情態助動詞 PDT: pre-determiner 前位限定詞 POS: genitive marker 所有格標記 PRP: pronoun, personal 人稱代詞 RB: adverb 副詞 RBR: adverb, comparative 副詞比較級 RBS: adverb, superlative 副詞最高級 RP: particle 小品詞 SYM: symbol 符號 TO:」to」 as preposition or infinitive marker 作為介詞或不定式標記 WDT: WH-determiner WH限定詞 WP: WH-pronoun WH代詞 WP$: WH-pronoun, possessive WH所有格代詞 WRB:Wh-adverb WH副詞
print (nlp.parse(sentence))
輸出:
(NP (NR 王明))
print (nlp.dependency_parse(sentence))
[(『ROOT』, 0, 8), (『nsubj』, 8, 1), (『cop』, 8, 2), (『compound:nn』, 4, 3), (『nmod:assmod』, 8, 4), (『case』, 4, 5), (『nummod』, 8, 6), (『mark:clf』, 6, 7)]
對應如下圖
附錄:
bbrev: abbreviation modifier,縮寫 acomp: adjectival complement,形容詞的補充; advcl : adverbial clause modifier,狀語從句修飾詞 advmod: adverbial modifier狀語 agent: agent,代理,一般有by的時候會出現這個 amod: adjectival modifier形容詞 appos: appositional modifier,同位詞 attr: attributive,屬性 aux: auxiliary,非主要動詞和助詞,如BE,HAVE SHOULD/COULD等到 auxpass: passive auxiliary 被動詞 cc: coordination,並列關係,一般取第一個詞 ccomp: clausal complement從句補充 complm: complementizer,引導從句的詞好重聚中的主要動詞 conj : conjunct,連接兩個並列的詞。 cop: copula。系動詞(如be,seem,appear等),(命題主詞與謂詞間的)連繫 csubj : clausal subject,從主關係 csubjpass: clausal passive subject 主從被動關係 dep: dependent依賴關係 det: determiner決定詞,如冠詞等 dobj : direct object直接賓語 expl: expletive,主要是抓取there infmod: infinitival modifier,動詞不定式 iobj : indirect object,非直接賓語,也就是所以的間接賓語; mark: marker,主要出現在有「that」 or 「whether」「because」, 「when」, mwe: multi-word expression,多個詞的表示 neg: negation modifier否定詞 nn: noun compound modifier名片語合形式 npadvmod: noun phrase as adverbial modifier名詞作狀語 nsubj : nominal subject,名詞主語 nsubjpass: passive nominal subject,被動的名詞主語 num: numeric modifier,數值修飾 number: element of compound number,組合數字 parataxis: parataxis: parataxis,並列關係 partmod: participial modifier動詞形式的修飾 pcomp: prepositional complement,介詞補充 pobj : object of a preposition,介詞的賓語 poss: possession modifier,所有形式,所有格,所屬 possessive: possessive modifier,這個表示所有者和那個』S的關係 preconj : preconjunct,常常是出現在 「either」, 「both」, 「neither」的情況下 predet: predeterminer,前綴決定,常常是表示所有 prep: prepositional modifier prepc: prepositional clausal modifier prt: phrasal verb particle,動詞短語 punct: punctuation,這個很少見,但是保留下來了,結果當中不會出現這個 purpcl : purpose clause modifier,目的從句 quantmod: quantifier phrase modifier,數量短語 rcmod: relative clause modifier相關關係 ref : referent,指示物,指代 rel : relative root: root,最重要的詞,從它開始,根節點 tmod: temporal modifier xcomp: open clausal complement xsubj : controlling subject 掌控者
中心語為謂詞
subj — 主語 nsubj — 名詞性主語(nominal subject) (同步,建設) top — 主題(topic) (是,建築) npsubj — 被動型主語(nominal passive subject),專指由「被」引導的被動句中的主語,一般是謂詞語義上的受事 (稱作,鎳) csubj — 從句主語(clausal subject),中文不存在 xsubj — x主語,一般是一個主語下面含多個從句 (完善,有些) 中心語為謂詞或介詞 obj — 賓語 dobj — 直接賓語 (頒布,文件) iobj — 間接賓語(indirect object),基本不存在 range — 間接賓語為數量詞,又稱為與格 (成交,元) pobj — 介詞賓語 (根據,要求) lobj — 時間介詞 (來,近年) 中心語為謂詞 comp — 補語 ccomp — 從句補語,一般由兩個動詞構成,中心語引導後一個動詞所在的從句(IP) (出現,納入) xcomp — x從句補語(xclausal complement),不存在 acomp — 形容詞補語(adjectival complement) tcomp — 時間補語(temporal complement) (遇到,以前) lccomp — 位置補語(localizer complement) (占,以上)
中心語為名詞
mod — 修飾語(modifier) pass — 被動修飾(passive) tmod — 時間修飾(temporal modifier) rcmod — 關係從句修飾(relative clause modifier) (問題,遇到) numod — 數量修飾(numeric modifier) (規定,若干) ornmod — 序數修飾(numeric modifier) clf — 類別修飾(classifier modifier) (文件,件) nmod — 複合名詞修飾(noun compound modifier) (浦東,上海) amod — 形容詞修飾(adjetive modifier) (情況,新) advmod — 副詞修飾(adverbial modifier) (做到,基本) vmod — 動詞修飾(verb modifier,participle modifier) prnmod — 插入詞修飾(parenthetical modifier) neg — 不定修飾(negative modifier) (遇到,不) det — 限定詞修飾(determiner modifier) (活動,這些) possm — 所屬標記(possessive marker),NP poss — 所屬修飾(possessive modifier),NP dvpm — DVP標記(dvp marker),DVP (簡單,的) dvpmod — DVP修飾(dvp modifier),DVP (採取,簡單) assm — 關聯標記(associative marker),DNP (開發,的) assmod — 關聯修飾(associative modifier),NP|QP (教訓,特區) prep — 介詞修飾(prepositional modifier) NP|VP|IP(採取,對) clmod — 從句修飾(clause modifier) (因為,開始) plmod — 介詞性地點修飾(prepositional localizer modifier) (在,上) asp — 時態標詞(aspect marker) (做到,了) partmod– 分詞修飾(participial modifier) 不存在
中心語為實詞
conj — 聯合(conjunct) cop — 系動(copula) 雙指助動詞???? cc — 連接(coordination),指中心詞與連詞 (開發,與)
其它
attr — 屬性關係 (是,工程) cordmod– 並列聯合動詞(coordinated verb compound) (頒布,實行) mmod — 情態動詞(modal verb) (得到,能) ba — 把字關係 tclaus — 時間從句 (以後,積累) — semantic dependent cpm — 補語化成分(complementizer),一般指「的」引導的CP (振興,的)
以上錯誤之處,還請批評留言指正。
此模型添加自定義詞比較麻煩,不建議使用
推薦閱讀:
接手別人的代碼,死的心有嗎?
普通的程序員和大神級的程序員有什麼區別?
網上黑程序員的現實依據是什麼?程序員真的那麼悲慘嗎?
有哪些視頻堪稱有毒?
暴露真實IP真的沒關係嗎?
有哪些程序員特有的習慣?
月薪3萬的程序員都避開了哪些坑?
和程序猿談戀愛是一種怎樣的體驗?