SyntaxNet

全球最精准自然语言解析器
授权协议 Apache 2.0
开发语言 Python
所属分类 神经网络/人工智能、 自然语言处理
软件类型 开源软件
地区 不详
投 递 者 贾俊艾
操作系统 跨平台
开源组织 Google
适用人群 未知
 软件概览

SyntaxNet是一个框架,即学术圈所指的SyntacticParser,他是许多NLU系统中的关键组件。在这个系统中输入一个句子,他会自动给句子中的每一个单词打上POS(part-of-Speech)标签,用来描述这些词的句法功能,并在依存句法树中呈现。这些句法关系直接涉及句子的潜在含义。

举一个很简单的例子,看下面这个句子“Alice saw Bob”的依存句法树:

在这个结构中,Alice和Bob被编码为名词,Saw是动词。只要的动词saw 是句子的根,Alice是saw的主语,Bob是直接宾语(dobj)。和期待的一样,Paesey  McParseface能正确地分析这一句子,也能理解下面这个更加复杂的例子:

句子:Alice, who had been reading about SynataxNet, saw Bob in the hallwayyesterday

在这个句子的编码中,Alice 和 Bob的分别是saw的主语和宾语,Alice由一个带动词“reading”的关系从句来修饰,而saw则由时态“yesterday”来修饰。依存句法树中的语法关系让我们可以轻易地找到不同问题的答案,比如,Alice看见了谁?谁看到了Bob?Alice正在读的是什么?或者Alice是在什么时候看到Bob的。

为什么让计算机正确处理句法分析如此困难? 

句法分析如此困难的一个主要问题是,人类语言具有显著的歧义性。包含 20 到 30 个单词的中等长度的句子会具有数百、数千甚至数万种可能的句法结构,这样的情况并不少见。一个自然语言句法分析器必须能够搜索所有这些结构选择,并找到给定语境下最合理的那个结构。作为一个非常简单的例子,“Alice drove down the streetin her car”这个句子就具有至少两种可能的依存分析:

第一种分析是对应这句话的(正确)解释,按照这种解释,爱丽丝在汽车里进行驾驶,而汽车位于街道上;第二种分析对应于一种对这句话的(荒诞但仍然可能的)解释,按照这种解释,爱丽丝在街道上驾驶,而街道位于汽车之内。之所以会产生这种歧义,是因为“in”这个介词既可以用来修饰“drove(驾驶)”也可以用来修饰“street(街道)”。上面这个例子是所谓的“介词短语附着歧义”的一个实例。 

人类在处理歧义方面有超强的能力,以至于人们甚至注意不到句子有歧义。而这里的挑战是,如何能让计算机做到同样好。长句中的多重歧义会共同造成句子的可能结构数量的组合爆炸。通常,这些结构中的绝大多数都极其不合理,但它们仍然是可能的,句法分析器必须以某种方式来丢弃它们。 

SyntaxNet 将神经网络运用于歧义问题。一个输入句子被从左到右地处理。当句子中的每个词被处理时,词与词之间的依存关系也会被逐步地添加进来。由于歧义的存在,在处理过程的每个时间点上都存在多种可能的决策,而神经网络会基于这些决策的合理性向这些彼此竞争的决策分配分数。出于这一原因,在该模型中使用 Beam Search (集束搜索)就变得十分重要。不是直接取每个时间点上的最优决定,而是在每一步都保留多个部分性假设。只有当存在多个得分更高的假设的时候,一个假设才会被抛弃。下图将展示的,是“I booked a ticket to Google”这句话经过从左到右的决策过程而产生的简单句法分析。

而且,正如我们在论文中所描述的,十分重要的一点是,要把学习和搜索紧密整合起来才能取得最高的预测准确度。Parsey McParseface 和其他 SyntaxNet 模型是我们用谷歌的 TensorFlow 框架训练过的最复杂的网络结构。通过利用谷歌支持的 Universal Treebanks 项目中的数据,你也可以在自己的机器上训练句法分析模型。

  • 使用Chinese模型 1.在网上下载Chinese模型文件,网址: http://download.tensorflow.org/models/parsey_universal/Chinese.zip 2.上传模型文件,路径为: /xy/models/syntaxnet /。解压文件 3.更改/xy/models/syntaxnet/syntaxnet/models/parsey_univers

  • #install dev env apt-get update apt-get install build-essential vim -y #install jdk8 apt-get install software-properties-common -y #need to confirm add-apt-repository ppa:webupd8team/java apt-get upda

  • 1、编译安装syntaxnet 2、把models/syntaxnet/syntaxnet下的model模型文件复制到synatxnet/bazel-bin里面的一个文件夹parser_eval.runfiles/__main__/syntaxnet/ 3、把python 脚本文件https://github.com/dmansfield/models/blob/documents-from-te

  • 安装SyntaxNet的工作环境,遇到很多麻烦,到后来发现如果不走弯路,其实并不麻烦。 1 我最开始是安装anaconda。(python2.7版本) https://www.continuum.io/downloads 这个包安装完后python pip numpy都解决了,而且还不用改环境变量。 2 然后用pip 安装mock和asciitree和protobuf 用apt-get安装swig

  • 最近查看了很多SyntaxNet方面的知识,在GitHub上也下载了中文语料库,并成功训练了自己的中文模型,因为官网没有关于中文模型的训练方法,于是便参照别人训练英文的方式进行中文的训练。在生成的模型文件中,很明显的缺少的segment部分,于是当我输入一句话进行测试的时候,结果会是把整句话当做一个名词进行标注。我在Stack Overflow上提出我的疑问,我怀疑Google开源的SyntaxN

 相关资料
  • 问题内容: 我正在尝试将包含(自然语言)时间的字符串解析为 hh:mm 时间对象?例如: 我已经研究了Ruby的Chronic和Java的Natty(以及其他一些库),但是它们似乎都专注于解析日期。诸如“十点五”之类的字符串均无法正确解析。 有人知道适合我需要的图书馆吗?还是应该开始使用自己的解析器? 问题答案: 我不想延长parsedatetime,因此我决定使用pyPEG(Python的解析器

  • 我一直在做一个项目,我必须学会使用NLP工具。我正在用C#编写它,因此正在使用SharpNLP库(基于OpenNLP),其中还包括一个WordNet访问库。我正在对分块功能进行一些练习,因为我的程序将经常使用它来修改句子中的一些单词,而不是其他单词,具体取决于它们在句子中扮演的角色。 chunker输出带有解析树缩写标签的短语,以及附加到单个单词的短语(这对我的情况更重要),但问题是我不知道其中一

  • 主要内容 前言 课程列表 推荐学习路线 数学基础初级 程序语言能力 机器学习简介 自然语言学习初级 数学和机器学习知识补充 自然语言处理中级 自然语言处理专项领域学习 前言 我们要求把这些课程的所有Notes,Slides以及作者强烈推荐的论文看懂看明白,并完成所有的老师布置的习题,而推荐的书籍是不做要求的,如果有些书籍是需要看完的,我们会进行额外的说明。 课程列表 课程 机构 参考书 Notes

  • 2. 自然语言和形式语言 自然语言(Natural Language)就是人类讲的语言,比如汉语、英语和法语。这类语言不是人为设计(虽然有人试图强加一些规则)而是自然进化的。形式语言(Formal Language)是为了特定应用而人为设计的语言。例如数学家用的数字和运算符号、化学家用的分子式等。编程语言也是一种形式语言,是专门设计用来表达计算过程的形式语言。 形式语言有严格的语法(Syntax)

  • 自然语言是人类讲话使用的语言,如英语、西班牙语和法语等。虽然人们总要给自然语言加上一些规则,但自然语言并非人类设计,它们是自然演化而来的。 形式语言是人们为特定应用设计的语言。例如,数学家使用的记号就是一种便于表示数字与符号关系的形式语言。化学家也使用一种形式语言来表示分子的化学结构。最重要的是: 编程语言是人为设计的用来表达计算的形式语言。 前面也提到过,形式语言有严格的语法规则。比如3+3=6

  • 知识图谱 接口: nlp_ownthink 目标地址: https://ownthink.com/ 描述: 获取思知-知识图谱的接口, 以此来查询知识图谱数据 限量: 单次返回查询的数据结果 输入参数 名称 类型 必选 描述 word str Y word="人工智能" indicator str Y indicator="entity"; Please refer Indicator Info

  • PyTorch 自然语言处理(Natural Language Processing with PyTorch 中文版)

  • 这是一本关于自然语言处理的书。所谓“自然语言”,是指人们日常交流使用的语言,如英语,印地语,葡萄牙语等。