在这里介绍一下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万的程序员都避开了哪些坑?
和程序猿谈恋爱是一种怎样的体验?