spaCy是最流行的开源NLP开发包之一,它有极快的处理速度,并且预置了词性标注、句法依存分析、命名实体识别等多个自然语言处理的必备模型,因此受到社区的热烈欢迎。中文版预训练模型包括词性标注、依存分析和命名实体识别,由汇智网提供
1、模型下载安装与使用
下载后解压到一个目录即可,例如假设解压到目录 /models/zh_spacy
,目录结构如下:
/spacy/zh_model
| - meta.json # 模型描述信息
| - tokenizer
| - vocab # 词库目录
| - tagger # 词性标注模型
| - parser # 依存分析模型
| - ner # 命名实体识别模型
使用spaCy载入该模型目录即可。例如:
代码语言:javascript复制import spacy
nlp = spacy.load('/spacy/zh_model')
doc = nlp('西门子将努力参与中国的三峡工程建设。')
for token in doc:
print(token.text)
spaCy2.1中文预训练模型下载地址:http://sc.hubwiz.com/codebag/zh-spacy-model/
2、使用词向量
spaCy中文模型采用了中文维基语料预训练的300维词向量,共352217个词条。
例如,查看词向量表大小及维度:
代码语言:javascript复制import spacy
nlp = spacy.load('/spacy/zh_model')
print(nlp.vocab.vectors.shape)
print(nlp.vocab['北京'].vector)
结果如下:
代码语言:javascript复制(352217, 300)
[-0.136166 -0.339835 0.528109 0.417842 -0.093321 -0.42306 -0.475931
-0.125459 0.137432 -0.567229 0.242339 0.245993 -0.377495 -0.274273
...
0.238025 0.309567 -0.692431 -0.078103 -0.26816 0.051805 0.075192
-0.052902 0.376131 -0.221235 0.23855 -0.11685 0.40507 ]
3、使用词性标注
spaCy中文词性标注模型采用Universal Dependency的中文语料库进行训练。
代码语言:javascript复制import spacy
nlp = spacy.load('/spacy/zh_model')
doc = nlp('西门子将努力参与中国的三峡工程建设。')
for token in doc:
print(token.text,token.pos_,token.tag_)
将得到如下的词性标注结果:
代码语言:javascript复制西门子 NNP
将 BB
努力 RB
参与 VV
中国 NNP
的 DEC
三峡工程 NN
建设 NN
4、使用依存分析
spaCy中文依存分析模型采用Universal Dependency的中文语料库进行训练。
例如,下面的代码输出各词条的文本、依赖关系以及其依赖的词条:
代码语言:javascript复制import spacy
nlp = spacy.load('/spacy/zh_model')
doc = nlp('西门子将努力参与中国的三峡工程建设。')
for token in doc:
print(token.text,token.dep_,token.head)
输出结果如下:
代码语言:javascript复制西门子 nsubj 参与
将 advmod 参与
努力 advmod 参与
参与 ROOT 参与
中国 det 建设
的 case:dec 中国
三峡工程 nmod 建设
建设 obj 参与
。 punct 参与
也可以使用spaCy内置的可视化工具:
代码语言:javascript复制from spacy import displacy
displacy.render(doc,type='dep')
结果如下:
5、使用命名实体识别
spaCy中文NER模型采用ontonotes 5.0数据集训练。
例如:
代码语言:javascript复制import spacy
nlp = spacy.load('/spacy/zh_model')
doc = nlp('西门子将努力参与中国的三峡工程建设。')
for ent in doc.ents:
print(ent.text,ent.label_)
输出结果如下:
代码语言:javascript复制西门子 ORG
中国 GPE
三峡工程 FAC
也可以使用spaCy内置的可视化工具:
代码语言:javascript复制from spacy import displacy
displacy.render(doc,type='ent')
运行结果如下: