大多数自然语言理解(NLU)系统分析语言过程是由分析步骤组成的流水线:先标记词性,然后进行句法依存分析,然后输入文本计算语义表示。谷歌把这条管道上的所有步骤都打断了,把它们捏在一起,推出了一个一步到位的自然语言理解系统:SLING。SLING可以直接分析自然语言文本,并根据其语义表示生成语义框架图。与大多数以前的系统相比,它避免了自然语言理解管道的一个严重缺陷:前面步骤的错误会影响后续步骤的分析。事实上,流水线式的自然语言理解系统有利于将语言理解的不同阶段模块化,但早期步骤的错误会在后面的步骤中产生连锁反应,影响最终的表示。例如,一个典型的管道可能在早期步骤中进行句法依赖分析,然后在稍后进行共指解析。在这种情况下,如果依赖分析出现错误,也会影响共指消解的结果。在SLING这种直接将文本转换为语言框架图的方法中,输出的框架图可以直接捕捉到用户感兴趣的语义标注,同时避免管道系统带来的陷阱,也可以防止发生不适当的必要计算。SLING使用专用循环神经网络(RNN)通过对框架图的增量编辑操作来计算输入文本的输出表示。另一方面,框架图足够灵活,可以捕获许多有趣的语义任务。SLING分析器的训练只使用输入词,不需要依赖分析等任何中间标注。在推理阶段,SLING支持快速分析,提供高效且可扩展的图形存储实现,以及生成高效代码以执行RNN的JIT编译器。虽然SLING还处于实验阶段,但其在普通桌面CPU上的分析速度已经超过2500个token/s。框架语义分析框架语义将文本(如句子)的意义表示为一组形式句,每个形式句成为一个“框架”,可以看作是一个意义或知识的单位,也包括交互作用与概念,或与之相关的其他框架。SLING将所有语义框架组织成一系列槽,每个槽都有自己的名称(角色)和值,这个值可以是文本或与另一个槽的连接。比如这句话:现在很多人都声称已经预测到了黑色星期一。SLING会识别提到的实体(如人、地点、事件)、度量(如时间、距离)和其他概念(如动词),然后将它们置于与输入中的动词相关的正确语义角色上。例如,句子中的“predict”表示为PREDICT-01框架。PREDICT-01与执行预测动作的主体有交互(槽),用ARG0槽表示,ARG0连接到表示“人”的PERSON框;PREDICT-01还与预测对象交互,表示为ARG1Slot,连接到表示“黑色星期一”的EVENT帧。如下图所示:框架语义分析的任务是直接生成图,包括像上图这样通过slot相互连接的框架。以上只是一个简单的例子。框架图非常强大,适用于各种复杂的语义标注任务。对于初学者来说,框架是一种结合语言内部和外部信息的方式。然后,这可用于处理复杂的语言理解问题,例如引用、隐喻、转喻等。这些任务的语义框架图仅在使用的框架类型、角色和连接约束方面有所不同。SLINGSLING训练针对有趣的语义框架优化的RNN。网络隐藏层中已经学习到的表示取代了管道系统中手动调整的特征组合和中间表示。在内部,SLING使用编码器-解码器架构,其中每个输入单词使用简单的词汇特征(例如原始单词、其后缀、标点符号等)编码成一个向量。解码器使用此表示和其自身历史中的循环特征来计算更新框架图所需的转换序列以获得输入句子的预期框架语义表示。在训练模型时,SLING使用TensorFlow和DRAGNN。下面的动画显示了帧和字符增量是如何通过单个过渡添加到帧图中的。正如前面用一个简单的例句解释的那样,SLING使用ARG1的作用连接VERB和EVENT框架,EVOKE转换从文本中接下来的几个标记中唤起指定类型的框架。同样,CONNECT转换连接两个具有特定角色的现有框架。当输入耗尽并执行最后一个转换(STOP)时,框架图被认为完成并返回给用户。用户可以查看图表并了解句子背后的语义。这个切换系统的一个关键方面是出现了一个固定大小的帧注意力缓冲区,代表最近唤醒或修改的帧,如上图中的橙色框所示。这个缓冲区记录了我们回忆最近唤醒的、提到的、增强的知识的倾向。如果一个帧不再被使用,它最终会在新帧进入时被冲出缓冲区。这个简单的机制对于捕获大部分框架间连接非常有效。相关资源SLING是用C++编写的,开源代码地址:https://github.com/google/sling相关论文SLING:Aframeworkforframesemanticparsing地址:https://arxiv.org/abs/1710.07032—完—
