关注上方深度学习技术前沿”,选择“星标公众号”

资源干货,第一时间送达!

对于斯坦福 NLP 库,我们一定不会陌生,但是这一库主要基于 Java。近日,Christopher Manning 所在的斯坦福 NLP 组开源了 Python 版的工具包——Stanza,让 Python 生态系统又增添了一员 NLP 大将。

我们都知道斯坦福 NLP 组的开源工具——这是一个包含了各种 NLP 工具的代码库。近日,他们公开了 Python 版本的工具,名为 Stanza。该库有 60 多种语言的模型,可进行命名实体识别等 NLP 任务。一经开源,便引起了社区的热议。李飞飞就在推特上点赞了这个项目。

目前,该项目可直接从 pip 进行安装。

项目地址:https://github.com/stanfordnlp/stanza

现有模型和支持的 NLP 任务

Stanza 包含了 60 多种语言模型,在 Universal Dependencies v2.5 数据集上进行了预训练。这些模型包括简体、繁体、古文中文,英语、法语、西班牙语、德语、日语、韩语、阿拉伯语等,甚至还有北萨米语等不太常见的语言。

除了语言模型外,Stanza 还支持了数十种语言的命名实体识别模型。完整列表如下:

据 Stanza 的论文介绍,Stanza 涵盖了多个自然语言处理任务,如分词、词性标注、依存句法分析、命名实体识别等。此外,它还提供了 Pyhton 界面,用来和我们熟悉的 Stanford CoreNLP 库进行交互,从而扩展了已有的功能。

另外值得注意的是,Stanza 是完全基于神经网络 pipeline 的。研究者在 112 个数据集上进行了预训练,但使用的是同一个模型架构。他们发现,同样一个神经网络架构可以泛化得很好。网络在所有语言上的性能都很好。整个神经网络 pipeline 都是通过 PyTorch 实现的。

运行 Stanza

神经网络 pipeline 入门

要运行首个 Stanza pipeline,只需要在 python 解释器 z 中进行操作:

>>> import stanza
>>> stanza.download('en') # This downloads the English models for the neural pipeline# IMPORTANT: The above line prompts you before downloading, which doesn't work well in a Jupyter notebook.# To avoid a prompt when using notebooks, instead use: >>> stanza.download('en', force=True)
>>> nlp = stanza.Pipeline() # This sets up a default neural pipeline in English
>>> doc = nlp("Barack Obama was born in Hawaii. He was elected president in 2008.")
>>> doc.sentences[0].print_dependencies()

而最后一条指令将输出当时输入字符串中第一个句子中的词(或是 Stanza 中表示的 Document),以及在该句的 Universal Dependencies parse(其「head」部分)中控制该词的索引,以及词之前的依赖关系。输出如下:

('Barack', '4', 'nsubj:pass')
('Obama', '1', 'flat')
('was', '4', 'aux:pass')
('born', '0', 'root')
('in', '6', 'case')
('Hawaii', '4', 'obl')
('.', '4', 'punct')

入门指南里会有更多详细信息。

访问 Java Stanford Core NLP 软件

除了神经 Pipeline,该软件包还包括一个官方包,用于使用 Python 代码访问 Java Stanford CoreNLP 软件。

初始设置:

  • 下载 Stanford CoreNLP 以及想要使用的语言模型;

  • 将模型放入分配的文件夹中;

  • 通过设置 CORENLP_HOME 环境变量(如在*nix 中):export CORENLP_HOME=/path/to/stanford-corenlp-full-2018-10-05 告诉 Python 代码 Stanford CoreNLP 所在的位置。

文档中会有全面的示例,展示如何通过 Stanza 使用 CoreNLP,并从中获取注释。

训练 Neural Pipeline 模型

当前为所用的 Universal Dependencies 库 V2.5 提供模型,并为几种广泛使用的语言提供 NER 模型。

批量处理最大化 Pipeline 速度

为了最大程度地提供速度方面的性能,必须针对成批的文档运行 Pipeline。每一次单在一个句子上运行一个 for 循环将 fei'c 非常慢,目前解决方法是将文档连在一起,每个文档见用空行(及两个换行符\n\n)进行分割。分词器将在句子中断时去识别空白行。

训练自己的 neural pipelines

该库中所有神经模块都可以使用自己的数据进行训练。如 Tokenizer、multi-word token(MWT)扩展器、POS/特征标记器等。目前,不支持通过 pipeline 进行模型训练,因此需要克隆 git 存储库并从源代码中运行训练。

以下为训练神经 pipeline 的示例,可以看到项目中提供了各种 bash 脚本来简化 scripts 目录中的训练过程。训练模型运行以下指令:

bash scripts/run_${module}.sh ${corpus} ${other_args}

其中 ${module} 是 tokenize, mwt, pos, lemma,depparse 之一,是主体的全名; ${corpus} 是训练脚本所允许的其他参数。

例如,可以使用以下指令在 UD_English-EWT 语料库上训练时批量处理大小为 32,而终止率为 0.33:

bash scripts/run_tokenize.sh UD_English-EWT --batch_size 32 --dropout 0.33

注意对于 dependency parser, 还需要在训练/开发数据中为使用的 POS 标签类型指定 gold|predicted:

bash scripts/run_depparse.sh UD_English-EWT gold

如果使用了 predicted,训练后的标记器模型会首先在训练/开发数据上运行以便生成预测的标记。

默认情况下,模型文件将在训练期间保存到 save_models 目录(也可以使用 save_dir 参数进行更改)。

架构和与现有库的对比

Stanza 的论文提供了整个代码库的架构。可以看到,它以原始文本为输入,能够直接输出结构化的结果。

Stanza 的神经网络部分架构。除了神经网络 pipeline 以外,Stanza 也有一个 Python 客户端界面,和 Java 版的 Stanford CoreNLP 进行交互。

于此同时,论文还将 Stanza 和现有的 NLP 工具,如 spaCy 等进行了对比。可以看到,Stanza 是目前涵盖语言数量最多,达到 SOTA 且完全基于神经网络框架的库。

和现有 NLP 库的对比。

最后,研究者还将 Stanza 上 NLP 任务的性能和现有的基线进行对比,发现 Stanza 大部分情况下都超过了 SOTA。

和已有基线性能的对比。可以看到,Stanza 在多个语言多个任务中都实现了 SOTA。

参考链接:https://arxiv.org/abs/2003.07082

重磅!自然语言处理技术交流群已成立!

欢迎各位NLPer加入自然语言处理技术交流群,本群旨在交流文本分类、语音识别、阅读理解、机器翻译、情感分析、信息检索、问答系统等自然语言处理领域内容。自然语言处理领域前沿信息将会第一时间在群里发布!欢迎大家进群一起交流学习!

麻烦大家进群后请备注:研究方向+地点+学校/公司+昵称(如文本分类+杭州+浙大+小民)

???? 长按识别,即可进群!

【重磅来袭】斯坦福开源Python版NLP库Stanza:涵盖66种语言!相关推荐

  1. Manning大神牵头,斯坦福开源Python版NLP库Stanza:涵盖66种语言

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 转自:机器之心 对于斯坦福 NLP 库,我们一定不会陌生,但是这一库主要基于 Java ...

  2. Facebook 开源增强版 LASER 库:可实现 93 种语言的零样本迁移...

    雷锋网 AI 科技评论按:去年 12 月份,Facebook 在论文中提出了一种可学习 93 种语言的联合多语言句子表示的架构,该架构仅使用一个编码器,就可以在不做任何修改的情况下实现跨语言迁移,为自 ...

  3. Facebook 开源增强版 LASER 库:可实现 93 种语言的零样本迁移

    雷锋网 AI 科技评论按:去年 12 月份,Facebook 在论文中提出了一种可学习 93 种语言的联合多语言句子表示的架构,该架构仅使用一个编码器,就可以在不做任何修改的情况下实现跨语言迁移,为自 ...

  4. 【Python】轻松识别文字,这款Python OCR库支持超过80种语言

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|Python大数据分析 什么是OCR? 有一款软件叫扫描全 ...

  5. Facebook 开源增强版 LASER,可使用90多种语言

    为了加速将自然语言处理(NLP)应用到更多的语言,Facebook 开源了增强版 LASER 库,成为第一个成功地与 NLP 社区分享的大型多语种句子表示工具.该工具目前可以使用90多种语言,涉及28 ...

  6. python ocr 识别中文pdf_轻松识别文字,这款Python OCR库支持超过80种语言

    OCR是什么? 有一款软件叫扫描全能王,想必一些小伙伴听过,这是一个OCR集成软件,可以将图像内容扫描成文字. 所以说,OCR作用是对文本资料的图像文件进行分析识别处理,获取文字及版面信息. OCR的 ...

  7. python 文本处理库_推荐8种目前Python使用率最高的文本处理工具

    前言 文本处理一般包括词性标注,句法分析,关键词提取,文本分类,情感分析等等,这是针对中 文的,如果是对于英文来说,只需要基本的tokenize.本文为大家提供了以下这些工具包.我整理了Python的 ...

  8. 轻松识别文字,这款Python OCR库支持超过80种语言

    击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 江汉曾为客,相逢每醉还. OCR是什 ...

  9. python ocr识别库_轻松识别文字,这款Python OCR库支持超过80种语言

    OCR是什么? 有一款软件叫扫描全能王,想必一些小伙伴听过,这是一个OCR集成软件,可以将图像内容扫描成文字. 所以说,OCR作用是对文本资料的图像文件进行分析识别处理,获取文字及版面信息. OCR的 ...

最新文章

  1. linux创建ftp指定目录命令行,Linux-命令行建立FTP
  2. JAVA——后端Vue动态路由配置类JavaBean封装
  3. GDCM:gdcm::DICOMDIR的测试程序
  4. 情人节的第一道小点心
  5. python flask 通过ajax向后台传递数组参数
  6. 敏捷开发的6个实战经验
  7. MongoDB+阿里云 最新数据库独家上线!
  8. linux7添加端口过程,CentOS7安装firewalld防火墙添加放行端口简单演示过程
  9. android studio 2.3.1 r丢失,AndroidStudio中 R文件缺失的办法
  10. 阿里云的背后故事(希望别被关了)
  11. 图形界面下,如何查看LINUX隐藏的文件、目录
  12. c语言计算机二级知识点总结,计算机二级考试C语言知识点总结
  13. 利用自己的祖源成分结果画祖源成分饼图
  14. 地图标注不完整图片_“地图帝”不规范使用图件之Anton Balazh作品介绍
  15. opencv 轮廓提取文字
  16. 使用Nightwatch.js做基于浏览器的web应用自动测试
  17. python爬取喜马拉雅收费_python 爬取喜马拉雅节目生成RSS Feed
  18. Android 自定义View颜色选择器( 条形、水平),使用HSV颜色模型实现取色器并反向定位颜色所在位置
  19. Win10/11上VB6安装不了?SP6的版本对了吗?快来看这里
  20. 一目了然凉哥为大家倾力打造的付费专栏

热门文章

  1. 中国国产万亿次高性能计算机向产业化迈进
  2. 在UltraEdit中使用正则表达式
  3. 传入一个日期 返回该月的第一天是星期几_Excel VBA 编程开发应用系列 (二十一)— Excel常用的日期函数...
  4. python保存list
  5. python怎么导入同一包的模块
  6. 决策树-随机森林-两种Feature importances排序方法
  7. linux强制删除文件夹命令 rm -rf
  8. solaris 操作总结
  9. 取最后一个字符 oracle,oracle截取最后一个字符
  10. 中科院韩先培:预训练模型怎样成为下一代知识图谱