Loading

使用stanza完成自然语言分析处理任务

安装stanza

直接使用pip命令即可安装stanza package

pip install stanza

构建管道

stanza中的管道用于构建NLP任务的模型加载序列、文本处理序列。需要注意,当本地不存在指定的Processor模型时,Pipeline对象会执行一个自动下载程序,将模型下载到本地。

Pipeline的初始化示例

import stanza
nlp = stanza.Pipeline('en')# 加载全部英文模型,包括分词、序列标注、句法依赖,语义角色标注等
nlp = stanza.Pipeline('zh', processors='tokenize,pos')# 加载中文分词,序列标注模型

详细的processors列表见 processor_name_list

Pipeline的客制化设置

package 指定模型的训练数据集gsd

nlp = stanza.Pipeline('de', processors='tokenize,mwt', package='gsd')

设定采用conll02数据集训练出的模型进行NER任务,默认的模型完成其他分析任务

nlp = stanza.Pipeline('nl', processors={'ner': 'conll02'})

设定采用winker数据集训练出的模型进行NER任务,lassysmall训练的模型完成其他分析任务

nlp = stanza.Pipeline('nl', processors={'ner': 'wikiner'}, package='lassysmall')

只将部分子任务添加到管道,并且为各子任务指定模型来源,注意package=None,若不设置,Pipline中会增加多余的子任务

processor_dict = {
    'tokenize': 'gsd', 
    'pos': 'hdt', 
    'ner': 'conll03', 
    'lemma': 'default'
}
nlp = stanza.Pipeline('de', processors=processor_dict, package=None)

控制模型运行的设备CPU/GPU

stanza中的模型默认在GPU上运行,可以在构建管道时,通过use_gpu = False使得任务得以在CPU上展开。

nlp = stanza.Pipeline('en', use_gpu=False)

执行标注

句子级标注(一个句子结束符)

句子级文档标注直接将要标注的句子放入构建好的Pipeline对象中,执行即可。

nlp = stanza.Pipeline('zh',processors='tokenize,pos,ner')
doc = nlp('今天也是元气满满的一天。')
print('doc:')
doc

得到元素长度为1的doc对象,其结构如下,doc对象中包含了标注结果和对应的span结果
image

文档级标注

单一文档标注(多个结束符)

单一文档标注与句子级文档标注类似,差别在于输入的文档中包含了多个句子,每个句子都会单独作为标注的结果,存放在返回的doc对象list中

nlp = stanza.Pipeline('zh',processors='tokenize,pos,ner')
doc = nlp('今天也是元气满满的一天。明天应该还是元气满满的一天。')# 返回一个doc对象,该doc的长度是2
# 访问标注结果
for sentence in doc.sentences:
    for word in sentence.words:
        print(word.ner, word.pos)

多文档标注

多文档标注借助stanza.Document()类实现,返回的标注结果是每个单一文档的doc组成的list

import stanza
nlp = stanza.Pipeline(lang="en") # 初始化默认的英文Pipeline
documents = ["This is a test document.", "I wrote another document for fun."] # 要处理的文档
in_docs = [stanza.Document([], text=d) for d in documents] #将每个文档构造出对应的stanza.Document对象,放入输入列表
out_docs = nlp(in_docs) # 开始标注
print(out_docs[1]) # 得到标注结果,返回的标注结果是每个单一文档的doc组成的list

Reference

https://stanfordnlp.github.io/stanza/getting_started.html#basic-example

posted @ 2023-04-16 11:43  ArkonLu  阅读(651)  评论(0编辑  收藏  举报