nlp任务的神经网络

nlpnet-py3-mirror的Python项目详细描述


nlpnet -使用神经网络的自然语言处理

nlpnet是一个基于神经网络的自然语言处理任务的python库。 目前,它主要完成词性标注、语义角色标注和依存关系分析。 大多数架构都是独立于语言的,但有些功能是专门为工作而定制的 葡萄牙语。这个系统的灵感来自于 senna

重要提示: 要使用葡萄牙语NLP的训练模型,您需要从http://nilc.icmc.usp.br/nlpnet/models.html" rel="nofollow">http://nilc.icmc.usp.br/nlpnet/models.html下载数据。

依赖关系

nlpnet 需要 nltk numpy 。此外,它还需要从nltk下载一些数据。安装后,请致电

< Buff行情>
>>> nltk.download()

转到 models 选项卡并选择punkt标记器。它用于将文本分成句子。

cython用于生成c扩展并运行得更快。您可能不需要它,因为生成的 .c文件已经提供了 nlpnet ,但是您需要一个C编译器。在Linux和Mac系统上,这应该不是问题,但可能是在Windows上,因为默认情况下,setuptools需要Microsoft C编译器。如果您还没有安装mingw,通常更容易安装mingw,并按照此处的说明进行安装。

基本用法

nlpnet 既可以用作python库,也可以由其独立脚本使用。两种用法解释如下。

库的使用

您可以使用 nlpnet 作为python代码中的库,如下所示:

>>>importnlpnet>>>tagger=nlpnet.POSTagger('/path/to/pos-model/',language='pt')>>>tagger.tag('O rato roeu a roupa do rei de Roma.')[[(u'O',u'ART'),(u'rato',u'N'),(u'roeu',u'V'),(u'a',u'ART'),(u'roupa',u'N'),(u'do',u'PREP+ART'),(u'rei',u'N'),(u'de',u'PREP'),(u'Roma',u'NPROP'),(u'.','PU')]]

在上面的示例中, postager 构造函数将其训练模型所在的目录作为第一个参数接收。第二个参数是两个字母的语言代码(目前只支持 pt en )。这只会对标记化产生影响。

调用注释工具非常简单。提供的是 postager srltagger dependencParser ,它们都有一个方法 tag 来接收带有要标记的文本的字符串(在 dependencParser 中,方法 parse 有一个别名,这听起来更合适)。标记器将文本分割成句子,然后标记每个句子(因此,postagger的返回是一个列表列表)。

srltagger的输出稍微复杂一些:

< Buff行情>
>>> tagger = nlpnet.SRLTagger()
>>> tagger.tag(u'O rato roeu a roupa do rei de Roma.')
[<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]

句子不是元组列表,而是由 srlannotatedstension 的实例表示。这个类基本上充当数据保持器,有两个属性:

< Buff行情>
>>> sent = tagger.tag(u'O rato roeu a roupa do rei de Roma.')[0]
>>> sent.tokens
[u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.']
>>> sent.arg_structures
[(u'roeu',
  {u'A0': [u'O', u'rato'],
   u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'],
   u'V': [u'roeu']})]

arg_结构是一个包含句子中所有谓词参数结构的列表。在这个例子中,只有一个动词是roeu。它由一个带有谓词和dictio的元组表示没有将语义角色标签映射到构成参数的标记。

注意,动词作为元组的第一个成员出现,也作为标签"v"(代表动词)的内容出现。这是因为有些谓词是多字的。在这些情况下,"main"谓语词(通常是动词本身)出现在arg_structures[0]中,所有的词都出现在v键下。

下面是DependencyParser的一个示例:

< Buff行情>
>>> parser = nlpnet.DependencyParser('dependency', language='en')
>>> parsed_text = parser.parse('The book is on the table.')
>>> parsed_text
[<nlpnet.taggers.ParsedSentence at 0x10e067f0>]
>>> sent = parsed_text[0]
>>> print(sent.to_conll())
1       The     _       DT      DT      _       2       NMOD
2       book    _       NN      NN      _       3       SBJ
3       is      _       VBZ     VBZ     _       0       ROOT
4       on      _       IN      IN      _       3       LOC-PRD
5       the     _       DT      DT      _       6       NMOD
6       table   _       NN      NN      _       4       PMOD
7       .       _       .       .       _       3       P

parsedEntence对象的 to戋conll() 方法以 conll 符号打印它们。可通过成员变量访问标记、标签和头索引:

< Buff行情>
>>> sent.tokens
[u'The', u'book', u'is', u'on', u'the', u'table', u'.']
>>> sent.heads
array([ 1,  2, -1,  2,  5,  3,  2])
>>> sent.labels
[u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']

heads成员变量是一个numpy数组。数组中的第i个位置包含第i个令牌头的索引,根令牌除外,根令牌的头为-1。注意,这些索引是基于0的,而 to_conll() 函数中显示的索引是基于1的。

独立脚本

nlpnet 还提供用于标记文本、培训新模型和测试它们的脚本。它们被复制到python安装的 scripts 子目录中,该子目录可以包含在系统路径变量中。您可以从命令行调用它们并输入一些文本。

$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU

如果未给出数据,脚本将在当前目录中搜索经过训练的模型。 --lang默认为 en 。如果文本已经标记化,则可以使用 -t 选项;它假定标记由空格分隔。

带语义角色标签:

$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
    A1: a roupa do rei de Roma
    A0: O rato
    V: roeu

第一行由用户键入,第二行是标记化的结果。

和依赖分析:

$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1       The     _       DT      DT      _       2       NMOD
2       book    _       NN      NN      _       3       SBJ
3       is      _       VBZ     VBZ     _       0       ROOT
4       on      _       IN      IN      _       3       LOC-PRD
5       the     _       DT      DT      _       6       NMOD
6       table   _       NN      NN      _       4       PMOD
7       .       _       .       .       _       3       P

要了解有关培训和测试新模型以及其他功能的更多信息,请参阅http://nilc.icmc.usp.br/nlpnet" rel="nofollow">http://nilc.icmc.usp.br/nlpnet

参考文献

下面的参考资料描述了nlpnet的设计以及所进行的实验。自代码发布以来,对其进行了一些改进。

  • Fonseca、Erick和Aluísio、Sandra M. 一个用于非投射依赖性分析的深层架构。NLP矢量空间建模NAACL-HLT研讨会论文集。2015
  • Fonseca,Erick and Rosa,Jo_o Luís G. 一种用于语义角色标记的两步卷积神经网络方法。神经网络国际联席会议记录。2013、
  • Fonseca,Erick,Rosa,Jo_o Luís G.和Aluísio,Sandra M. 评估单词嵌入和葡萄牙语词性标注的修订语料库 。巴西计算机学会杂志。2015、

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java连接usb到uart设备到安卓设备>3.1   可以强制Php中的web应用程序与Java中的桌面应用程序一起工作吗?   java为什么自定义系统类加载器不工作?   数组在Java中解析具有多个分隔符的字符串   PMD Java 8德米特定律   JavaSpringMVC表单验证不适用于嵌套的复杂类型   让Eclipse Java组织导入以使用Google checkstyle   java Appium:无法创建新会话   java如何在数组中声明新字段   java如何解决“无法初始化类org.apache.cassandra.config.DatabaseDescriptor”?   java AsyncTask创建socket   java向@CreatedBy添加更多信息   如何在ubuntu中运行包含大量jars依赖项的java文件   java如何使用<s:select>标记并在中休眠来填充下拉列表?   java获取错误:找不到符号变量“level”和“next_level_button”   javaweb应用中基于UI的ajax显示代码流   Java长到MySql   java JvisualVM:奇怪的应用程序行为   ubuntu将Java程序的输出结果保存到一个文件中