【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

斯坦福开源 Python 库 StanfordNLP,可处理 53 种人类语言

  • 2019-03-18
  • 本文字数:2829 字

    阅读完需:约 9 分钟

斯坦福开源Python库StanfordNLP,可处理53种人类语言

近期,斯坦福大学自然语言处理小组开发了一个 Python 库 StanfordNLP,用于解决许多常见的自然语言处理问题,可以处理多达 53 种人类语言模型,便于数据科学家和 Python 开发人员使用。

语言

StanfordNLP 提供了针对53种人类语言的预训练的深度学习模型,并使用PyTorch作为其机器学习的入门。


每种语言都有一个treebank,它是一个巨大的文本数据集,为语法结构/语义内容进行了可靠的注释。对于某些语言,库中提供了不只一个 treebank。


如果你想要拥有自己的带注释的语料库(这种情况并不常见!),那么你可以基于语料库训练一个新的模型。



解析这句话!

范围

这个库提供下列服务:


  • 将给定的文本分成句子和单词(符号化)。符号化是指将一个文本(“The day of the groundhog attracts attention”)转换成七个单词的序列(“The”,“day”,“of”,“The”,“groundhog”,“caught”,“attention”)。

  • 为给定的单词指定一个基本形式(词形归并)。词形归并工具会将“attraction”、“attractive”和“attractive”与同一个词形(例如“attract”)联系起来。

  • 在一个句子中,把单词和词性联系起来。所以“day”是名词,“attract”是动词。

  • 单词有形态特征,如单数或现在进行时。这个库也会提供帮助。

  • 它还可以产生句子的句法结构。

  • 最后,StanfordNLP 可以与名气更大、应用范围更广泛的 Stanford CoreNLP 进行整合。


在这篇文章中,我们将探讨符号化、词性和形态学特征。



StanfordNLP 管道

管道

Vish (Ishaya) Abrams 在文章中很好地解释了机器学习中的管道。为了这个目的,我们可以将库看作是一组组件的序列,这些组件的执行方式是,一个组件的输出是另一个组件的输入(一部分)。这种设计允许替换管道中的一个专用组件,同时保留其余组件。


考虑到文本在管道中流动,那么文本会经过不同步骤的处理。


在 StanfordNLP 中,管道与语言和 treebank 相关联。详细信息请看这里(https://stanfordnlp.github.io/stanfordnlp/pipeline.html),但你现在还不需要它们。StanfordNLP 管道用于模型评估,而不是模型训练。

安装

在进行其他步骤之前,我们需要先安装这个库。Python 3.6 或之后的版本可用。正如开发人员所解释的,安装 StanfordNLP 最简单的方法是使用 pip:


pip install stanfordnlp


之后,下载我们想要使用的语言,例如:


import stanfordnlp

#You only download languages once

#Each language requires more that 1GB of disk space

#It takes time… have a coffee!

stanfordnlp.download(‘en’)

stanfordnlp.download(‘es’)

stanfordnlp.download(‘fr’)


接下来是在哪里存储下载的语言包。这一步我们建议使用缺省值。下载完成后,你可以检查每种语言都有一个对应的文件夹,其中保存了许多 PyTorch 模型,这些模型将用于我们将要介绍的各种 NLP 任务。

词性标注及其有用的原因

词性标注是复杂的 NLP 活动中的一项基本任务。想一下文本分类、情感分析或信息索引和检索。建立文本的基本语法结构为进一步的文本处理奠定了基础。

解析和标记一个句子

我们以下面的法语为例:


Si ce discours semble trop long pour être lu en une fois, on le pourra distinguer en six parties (René Descartes, Discourse on the method)

中文大意:如果这句话对于你来说太长了,不能一次读完,你可以把它分为六部分(雷内·笛卡尔,关于方法的言论)


但是别担心,我们会把这句话变得简短很多!让我们来分析笛卡尔的句子,评估一下每个单词在其中的作用。符号化和词性标注开始发挥作用。


import stanfordnlp# English is the default language, so you# just invoke stanfordnlp.Pipeline()# For Spanish you would call # stanfordnlp.Pipeline(lang="es", treebank="es_ancora")# This sets up a neural pipeline in Frenchnlp = stanfordnlp.Pipeline(lang="fr", treebank="fr_gsd")# a document is made of sentencesdoc = nlp("Si ce discours semble trop long pour être lu en une fois, on le pourra distinguer en six parties")# we pick our first and only sentenceonly_sentence = doc.sentences[0]
# a sentence is made of words. # Each word is tagged with a part of speech (POS)# Good pythonic guys prefer list comprehensions over for loops!print(" ". join(["{} ({})".format(word.text, word.upos) for word in only_sentence.words]))
复制代码


在一些信息量丰富的消息之后,我们得到单词列表,每个单词都附在其相应的词性上:


Si (SCONJ) ce (DET) discours (NOUN) semble (VERB) trop (ADV) long (ADJ) pour (ADP) être (AUX) lu (VERB) en (ADP) une (DET) fois (NOUN) , (PUNCT) on (PRON) le (PRON) pourra (VERB) distinguer (VERB) en (ADP) six (NUM) parties (NOUN)
复制代码


以上这些可以告诉我们,six 是一个数字决定因素,而 parties 是一个名词。请注意,当 lu 被标识为动词时, être 被标记为助动词。


StanfordNLP 利用了语音集的通用部分,它的优点是适用于多种语言。但是,只要有 treebank 的支持,属性 pos 也会使用和显示语言的特定词性。其他 NLP 库(如spacy)也使用通用的和某种语言特有的语音集部分。



Chomsky 的玩笑

处理一词多义

现在我们用这个库开个小玩笑。我们想知道这个英语句子的词性:


I book the book while you stand by the stand


在同一个句子中,不仅 book 和 stand 有两种不同的含义。它们也充当动词和名词。运行这句话的类似代码,我们会得到:


I (PRON) book (VERB) the (DET) book (NOUN) while (SCONJ) you (PRON) stand (VERB) by (ADP) the (DET) stand (NOUN)
复制代码


我用这个简单的例子引起读者的注意力,它表明词性标记已经超出了在字典中查找单词,词的句法结构决定了词性。这就是伴随着库出现的学习模型在显示其作用。

形态学特征

除了通用形式和特定于语言形式的词性外,这个库中的单词分类里还带有单词的形态特征(请注意文档中可能出现的一个故障,该属性在文档中被称为 ufeats)。


我们运行以下代码:


en_nlp = stanfordnlp.Pipeline()doc = en_nlp("My taylor is drunk") only_sentence = doc.sentences[0]print(" ". join(["{} ({} - {})".format(word.text, word.upos, word.feats) for word in only_sentence.words]))
复制代码


我们得到:


My (PRON - Number=Sing|Person=1|Poss=Yes|PronType=Prs)taylor (NOUN - Number=Sing) is (AUX - Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin) drunk (ADJ - Degree=Pos)
复制代码


每个词都有自己的特点,但不只是名词和动词。要理解上述内容,可以查找此索引。例如,Degree=Pos 意味着positive,一级。注意,drunk 被定义为形容词,不是动词。

关闭

我想今天这些就够了。我们喜欢库,觉得使用它很舒服。当文档不足时,你可以查看源代码来帮助你理解。接下来,我们将完成对 StanfordNLP 提供的其他功能的理解。


更多信息:https://gitconnected.com/learn/python


原文链接:https://levelup.gitconnected.com/first-look-at-stanfordnlp-2b7d43190957


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-03-18 17:473749
用户头像

发布了 124 篇内容, 共 43.2 次阅读, 收获喜欢 176 次。

关注

评论

发布
暂无评论
发现更多内容

Veema 寄来的新书

吴威

vmware 容灾 备份 veeam esxi

如何在Python中实现Round函数?

华为云开发者联盟

Python 函数 Numpy Round 舍入函数

区块链圈频现百万元年薪招聘 现金+股票仍难觅良才

CECBC

区块链人才

中国最可靠的 Go 模块代理

happlyfox

学习 3月日更

LiteOS内核源码分析:位操作模块

华为云开发者联盟

LiteOS 源代码 位操作 bit Huawei LiteOS

C语言性能优化:减少相关性依赖,利用指令并行提升性能

1

编程 性能优化 C语言 cpu 100%

实践解析丨Rust 内置 trait:PartialEq 和 Eq

华为云开发者联盟

rust hash Trait PartialEq Eq

带你全面认识CMMI V2.0(三)——实践域

IPD产品研发管理

CMMI

【Axure9百例NO.45】中继器的不同场景下的样式处理

zhuchuanming

原型设计 Axure 交互原型

前端开发:数据处理方法分享(其一)

三掌柜

vue.js 大前端 3月日更

NA公链(Nirvana)NAC公链独步公链江湖

区块链第一资讯

区块链

图像视频压缩:深度学习,有一套

华为云开发者联盟

深度学习 自编码器 图像压缩 循环神经网络 视频压缩

(Day30) 谁来驱动变革

mtfelix

28天写作 bewriting

领跑行业!浪潮云斩获“2021云管和云网大会”多项殊荣

浪潮云

云计算 云原生

java deep vs shallow copies

shengjk1

Java deep copy shallow cop

产品经理能力不够,产品方法论来凑

lenka

3月日更

Kubernetes认证管理员

云原生

Kubernetes 云原生 k8s CKA

适配器模式在Mybatis中的妙用

Java小咖秀

Java 源码 设计模式 mybatis 开发

上帝视角掌管城市动向!智慧园区驱动城市数字化转型

一只数据鲸鱼

物联网 数据可视化 智慧城市 智慧园区

【IstioCon 2021】如何在Istio中进行源地址保持?

华为云原生团队

开源 云原生 istio 华为云 服务网格

Python API 邮件发送测试

HoneyMoose

uni-app跨端开发H5、小程序、IOS、Android(七):uni-app渲染

黑马腾云

html5 uni-app 大前端 3月日更

深入理解ES8的新特性SharedArrayBuffer

程序那些事

JavaScript ecmascript 程序那些事 es8

人工智能能和人类辩论了;《云网产业发展白皮书》发布

京东科技开发者

人工智能

一个有情怀的PPT模板下载网站

happlyfox

学习 3月日更 工具分享

开源的 Switch 模拟器——GitHub 热点速览 v.21.12

HelloGitHub

GitHub 开源

LeetCode题解:126. 单词接龙 II,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Java学习笔记——实体类(ENTITY,VO,DTO,BO)

棉花糖

Java

企业数字化转型,营销技术驱动超级增长!

博文视点Broadview

AIOT技术大起底:别人开发“软件”,海尔智家开发“生活”

DT极客

Python OpenCV 图像处理二值化,取经之旅第 7 天

梦想橡皮擦

3月日更

斯坦福开源Python库StanfordNLP,可处理53种人类语言_AI&大模型_Angel Salamanca_InfoQ精选文章