支持53种语言预训练模型,斯坦福发布全新NLP工具包StanfordNLP

机器之心编译

机器之心编辑部

今日,Stanford NLP 团队发布了包含 53 种语言预训练模型的自然语言处理工具包 StanfordNLP,该工具包支持 Python 3.6 及之后版本,并基于 PyTorch,支持多种语言的完整文本分析管道,包括分词、词性标注、词形归并和依存关系解析,此外它还提供了与 CoreNLP 的 Python 接口。

Github: https://github.com/stanfordnlp/stanfordnlp …Paper: https://nlp.stanford.edu/pubs/qi2018universal.pdf …PyPI: https://pypi.org/project/stanfordnlp/ …

以下内容介绍了 StanfordNLP 的相关论文、安装、使用以及设置方法。

StanfordNLP 结合了斯坦福团队参加 CoNLL 2018 Shared Task on Universal Dependency Parsing 使用的软件包,和 Stanford CoreNLP 软件的官方 Python 接口。StanfordNLP 不仅提供 CoreNLP 的功能,还包含一系列工具,可将文本字符串转换为句子和单词列表,生成单词的基本形式、词性和形态特征,以及适用于 70 余种语言中的句法结构。

StanfordNLP 用高度准确的神经网络构建而成,允许使用自己的标注数据进行高效训练和评估。这些模块基于 PyTorch 构建。

StanfordNLP 的特征:

可以轻松设置本地 Python 实现;包含进行文本分析的完整神经网络管道(neural network pipeline),包括分词、多词 token(MWT)扩展、词形归并(lemmatization)、词性(POS)和形态特征标记以及依存关系解析;提供在 73 个 treebanks 上的 53 种人类语言的预训练神经模型;官方维护的接入到 CoreNLP 的稳定 Python 接口。

论文:Universal Dependency Parsing from Scratch

论文地址:https://nlp.stanford.edu/pubs/qi2018universal.pdf

依存关系解析是用于语义作用标记的各种自然语言处理系统、关系提取和机器翻译中的重要组成部分。然而,大多数研究都已经将依赖解析单独处理,并且在很大程度上忽略了为解析器准备相关数据的上游 NLP 组件,例如标记器和词形化器。然而,实际上,这些上游系统仍然远非完美。

为此,研究者构建了一个 raw-textto-CoNLL-U 管道系统,该系统执行 Shared Task 所需的所有任务。利用深度学习,该管道在每个相互关联的任务阶段中都实现了有竞争力的性能:分词、句子和词分割、词性(POS)/形态特征(UFeats)标记、词形归并,最后是依存关系解析。

研究者表示,该工作的主要贡献包括:

将符号统计知识与灵活、强大的神经系统相结合以提高稳健性的新方法;用于联合 POS / UFeats 预测的 biaffine 分类器,可提高预测一致性;使用编辑分类器增强的词形归并工具,可提高少样本序列上的序列到序列模型的稳健性;扩展解析器到模型线性化。

该系统在 big-treebanks 上实现了竞争性的表现。在修复了一个关键的错误之后,更正后的系统在官方评估指标 LAS、MLAS 和 BLEX 上获得了第 2 名、第 1 名和第 3 名,并且在所有指标上大幅度地优于低资源 treebank 类别的所有提交系统。

实验结果

主要结果如表 1 所示。当对所有 treebank 进行宏观平均时,该系统几乎可以在所有指标上实现竞争性能。此外,当仅在 big-treebanks 上进行评估时,它在多个指标上实现了最佳性能。即使不是表现最好的系统,该系统也会在这些 treebank 上的每个指标上取得竞争结果。该系统由单系统组件组成,而一些表现最佳的模型则使用集成方法。

此外,该系统的 UFeats 分类器在这些 treebank 上也非常准确。它不仅在 UFeats F1 上实现了最佳性能,而且还帮助解析器在 big-treebanks 上实现了最佳 MLAS,即使解析器在其他指标评估上没有取得最佳性能。研究者强调了 POS 标记器/ UFeats 分类器中的一致性建模的贡献:在两种设置中,与 AllTags 度量标准相比,各个度量标准(UPOS、XPOS 和 UFeats)在参考系统上实现了更低的 advantage margin,表明参考系统尽管有时在每个单独的任务上更准确,但并不像本研究中的整体系统那样一致。

all-treebanks 和 big-treebanks 的结果之间的最大差异来自句子分割。在检查了较小 treebank 上的结果和实现后,研究者注意到标记器中处理数据的方式对这些 treebank 的泛化产生了负面影响。这对于这些 treebank 来说是毁灭性的,因为所有下游组件都在句子水平处理单词。

研究者解决了这个问题,并在提交时训练了新的分词器,其中所有超参数都与系统相同。他们进一步构建了一个非官方的评估管道,验证了它与官方系统达到的评估结果相同,并且仅通过替换分词器来评估整个管道。如表 1 所示,由此产生的系统(Stanford+)整体上更准确,分别在官方评估指标 LAS、MLAS 和 BLEX 上排名第 2、第 1 和第 3。在 big-treebanks 上,所有指标仅在 0.02%的 F1 内变化,因此不包括在内。然而,在 small treebanks 上这种影响更为明显:如表 2 所示,校正系统在所有低资源 treebank 的所有官方评估指标上都大大优于所有提交系统。

表 1:测试集上的评估结果(F1),仅适用于所有 treebank 及大型 treebank 测试集。对于所有指标上的每一组结果,研究者将其与来自参照系统的结果进行对比。参照系统是指在那个指标上当前性能最好的系统。

表 2:在低资源 treebank 测试集上的评估结果(F1)。

安装和使用

设置

StanfordNLP 支持 Python 3.6 及之后版本。推荐从 PyPI 中安装 StanfordNLP。如果已经安装了 pip,运行以下命令:

pip install stanfordnlp

这有助于解决 StanfordNLP 的所有依赖项,例如 PyTorch 1.0.0 及以上版本。

或者,你还可以从该 git repo 中安装 StanfordNLP,这样你可以更加灵活地基于 StanfordNLP 开发,以及训练自己的模型。运行以下命令:

git clone git@github.com:stanfordnlp/stanfordnlp.gitcd stanfordnlppip install -e .

运行 StanfordNLP

启动神经网络管道

要想运行第一个 StanfordNLP pipeline,只需在 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 还提供多语言 demo 脚本,展示了如何在非英语语言中使用 StanfordNLP,如繁体中文。

demo 地址:https://github.com/stanfordnlp/stanfordnlp/blob/master/demo/pipeline_demo.py

python demo/pipeline_demo.py -l zh

详见:https://stanfordnlp.github.io/stanfordnlp/installation_download.html#getting-started

访问 Java Stanford CoreNLP Server

除了神经网络管道,该项目还包括一个官方 wrapper,允许使用 Python 代码访问 Java Stanford CoreNLP Server。

初始设置如下:

下载 Stanford CoreNLP 和你想使用语言的模型。将 model jar 放在分发目录中。在 Python 代码中写明 Stanford CoreNLP 的地址:export CORENLP_HOME=/path/to/stanford-corenlp-full-2018-10-05。

该项目提供另一个 demo 脚本,展示如何使用 CoreNLP 客户端以及如何从中提取不同的标注。

demo 地址:https://github.com/stanfordnlp/stanfordnlp/blob/master/demo/corenlp.py

神经网络管道中的模型

该项目目前提供 CoNLL 2018 Shared Task 中所有 treebank 的模型。模型下载和使用说明详见:

https://stanfordnlp.github.io/stanfordnlp/installation_download.html#models-for-human-languages。

批处理以最大化 Pipeline 速度

为了最大化速度,对文档进行批量处理是必要的。一次仅对一个句子运行 for loop 太慢了。最好的方法是将文档串联到一起,每个文档由空白行分割(即两个换行符\n\n)。分词器会将空白行识别为断句。目前,研究者正在积极寻求改善多文档处理。

训练自己的神经网络管道

该库中的所有神经模块,包括分词器、多词标记 (MWT) 扩展器、POS/形态特征标注器、词形归并和依存解析器,都可以用你自己的 CoNLL-U 格式数据来训练。目前,该库还不支持通过 Pipeline 接口训练模型。因此,为了训练你自己的模型,你要 clone 这个 git repo,然后从源代码进行设置。

如果想详细了解如何一步步训练和评估自己的模型,请参考以下链接:

https://stanfordnlp.github.io/stanfordnlp/training.html

参考原文:https://stanfordnlp.github.io/stanfordnlp/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356