斯坦福全新NLP工具包StanfordNLP发布,支持53种语言
2019年01月31日 由 浅浅 发表
906991
0
StanfordNLP是斯坦福团队在CoNLL 2018 Shared Task on Universal Dependency Parsing中使用的软件包的组合,以及Stanford CoreNLP软件的官方Python接口。除了它从CoreNLP继承的功能外,它还包含将一串文本转换为句子和单词列表,生成这些单词的基本形式,词性,形态特征,以及一种被设计成在70多种语言之间并行的句法结构。
该软件包采用高度精确的神经网络组件构建,组件支持使用自己的注释数据进行有效的训练和评估。模块构建在PyTorch的顶部。这些模块构建在PyTorch之上。
StanfordNLP的特点:
- Python实现的设置工作少;
- 用于文本分析的完整神经网络管道,包括词语切分,多词标记(MWT)扩展,词形还原,词性(POS)和形态特征标记和依存关系语法分析;
- 73个treebank中支持53种人类语言的预训练神经模型;
- 官方维护的接入到CoreNLP的稳定Python接口。
详情:stanfordnlp.github.io/stanfordnlp/
安装
StanfordNLP支持Python 3.6或更高版本。强烈建议从PyPI安装StanfordNLP。如果已经安装了pip,只需运行即可:
pip install stanfordnlp
这也应该有助于解决StanfordNLP的所有依赖项,例如PyTorch 1.0.0或更高版本。
或者,也可以从这个git存储库的源代码安装,这将提供更大的灵活性,可以在StanfordNLP之上进行开发并训练自己的模型。对于此选项,请运行:
git clone git@github.com:stanfordnlp/stanfordnlp.git
cd stanfordnlp
pip install -e .
运行StanfordNLP
启动神经管道
要运行第一个StanfordNLP管道,只需在Python交互式解释器中执行以下步骤:
>>> import stanfordnlp
>>> stanfordnlp.download('en') # This downloads the English models for the neural pipeline
>>> nlp = stanfordnlp.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()
最后一个命令将打印出输入字符串中第一个句子中的单词,以及在该句子的通用依赖关系解析中管理它的单词的索引,以及单词之间的依赖关系。输出应如下所示:
('Barack', '4', 'nsubj:pass')
('Obama', '1', 'flat')
('was', '4', 'aux:pass')
('born', '0', 'root')
('in', '6', 'case')
('Hawaii', '4', 'obl')
('.', '4', 'punct')
注意:如果遇到OSError: [Errno 22] Invalid argument这样的问题,很可能是Python问题的影响,建议使用Python 3.6.8或更高版本以及Python 3.7.2或更高版本。
团队还提供了一个多语言演示脚本,演示了如何使用StanfordNLP以外的其他语言,例如中文(繁体):
python demo/pipeline_demo.py -l zh
访问Java Stanford CoreNLP服务器
除了神经管道,该项目还包括一个官方包装器,用于使用Python代码访问Java Stanford CoreNLP服务器。
初始设置步骤:
- 下载Stanford CoreNLP以及您希望使用的语言的模型。
- 将模型jar放入分发文件夹中
- 向python代码指明Stanford CoreNLP所在的位置:
export CORENLP_HOME=/path/to/stanford-corenlp-full-2018-10-05
另一个演示脚本演示了如何使用CoreNLP客户端并从中提取各种注释:
github.com/stanfordnlp/stanfordnlp/blob/master/demo/corenlp.py
神经管道的训练模型
目前为CoNLL 2018共享任务中的所有treebank提供模型。你可以在此处找到有关下载和使用这些模型的说明:
stanfordnlp.github.io/stanfordnlp/installation_download.html#models-for-human-languages
批量管理以最大化管道速度
为了最大限度地提高速度性能,必须在多个文档上运行管道。一次只对一个句子执行for循环是非常缓慢的。此时最好的方法是将文档连接在一起,每个文档之间用空行隔开(即两个换行符\n\n)。标记器将把空白行识别为断句。团队正在积极改进多文档处理。
训练自己的神经管道
该库中的所有神经模块,包括tokenzier,多词标记(MWT)扩展器,POS /形态特征标记器,形态特征标记和依存关系语法分析,都可以使用你自己的CoNLL-U格式数据进行训练。目前不支持通过Pipeline界面进行模型训练。因此,要训练自己的模型,需要克隆此git存储库并从源进行设置。
训练和评估自己的模型的详细指导:
stanfordnlp.github.io/stanfordnlp/training.html
论文:
nlp.stanford.edu/pubs/qi2018universal.pdf