看文本知语义:谷歌推一步到位自然语言理解框架SLING | 论文+代码-阿里云开发者社区

开发者社区> 行者武松> 正文

看文本知语义:谷歌推一步到位自然语言理解框架SLING | 论文+代码

简介:
+关注继续查看
本文来自AI新媒体量子位(QbitAI)

大多数自然语言理解(NLU)系统分析语言的过程是一条由分析步骤组成的流水线:先标注词性,再进行句法依存分析,然后为输入文本计算出语义表示。

谷歌打破了这条流水线上的所有步骤,把它们捏到了一起,推出了一步到位的自然语言理解系统:SLING

456863c0b9c36d518d6d47327a04edea4c1ce3c8

SLING能够直接分析自然语言文本,根据它的语义表示生成语义框架图示。与原有的大多数系统相比,它避免了自然语言理解流水线的一个严重缺陷:前面步骤中的错误会影响后续步骤的分析。

实际上,流水线式的自然语言理解系统有利于对语言理解的不同阶段进行模块化,但是,早期步骤中的错误会在后边的步骤里发生连锁反应,对最终的表示产生影响。

比如说,一个典型的流程可能会在早期步骤中进行句法依存分析,后来又需要共指消解。这种情况下,如果依存分析出现错误,共指消解的结果也会受到影响。

而SLING这种直接从文本到语框架图示的方法中,输出的框架图示能直接捕捉到用户感兴趣的语义标注,同时避开了流水线式系统所带来的陷阱,还能防止出现不必要的计算。SLING使用一个专用的循环神经网络(RNN),通过框架图示上的增量编辑运算,来为输入文本计算输出表示。

而框架图示则足够灵活,能够捕捉到很多易引发兴趣的语义任务。

SLING分析器的训练只用到了输入词语,不需要依存分析等任何中间注释。

在推理阶段,SLING能够快速进行分析,它提供了一个高效、可扩展的图示存储实现,以及一个生成高效代码来执行RNN的JIT编译器。虽然SLING现在还在试验阶段,但它在普通台式机CPU上的分析速度已经超过了2500 token/秒。

框架语义分析

框架语义学将文本(例如一个句子)的意思表示为一组形式语句,每个形式语句成为一个“框架”,可以看作意义或者知识的一个单元,也包含和概念的交互,或者与之相关的其他框架。

SLING将所有语义框架组织成一些列插槽,每个插槽都有自己的名字(角色)和值,这个值可以是文字的,也可以是和另一个插槽之间的连接。

比如说这句话:

Many people now claim to have predicted Black Monday.

SLING会从中认出提及的实体(例如人物、地点、事件)、测量值(例如时间、距离)以及其他概念(例如动词),然后将它们放置在与输入中动词相关的正确语义角色上。

比如说句中的“predict”,就表示为PREDICT-01框架。PREDICT-01和施行predict这个动作的主体有交互(插槽),通过ARG0插槽表示,ARG0与表示“people”的PERSON框架相连接;PREDICT-01还和被预测的客体有交互,表示为ARG1插槽,和表示“Black Monday”的EVENT框架连接。

如下图所示:

00b74ac54ced2f3c913f30bfc3f8a8ab051bd3a0

框架语义分析的任务就是直接生成一幅图示,包含像上图这样通过插槽互相连接的框架。

上面只是一个简单的例子,框架图示很强大,适用于各种复杂的语义标注任务。对于初学者来说,框架是一种将语言内部和外部信息结合起来的方式。然后,这就可以用来处理复杂的语言理解问题,比如指代、隐喻、借代等。这些任务的语义框架图示只在用到的框架类型、角色、连接限制上有所不同。

SLING

SLING通过为易引发兴趣的语义框架进行优化,训练了一个RNN。网络隐藏层中已经学习到的表示取代了流水线系统中手工调整的特征组合和中间表示。

在内部,SLING使用编码器-解码器架构,其中使用诸如原始单词,其后缀,标点符号等简单词汇特征将每个输入词编码成向量。而解码器用这种表示和自己历史中的循环特征,来计算更新框架图示以获得输入句子的预期框架语义表示所需的转换序列。

在训练模型时,SLING使用了TensorFlow和DRAGNN。

下面的动画展示了如何用一次转换将框架和角色增量添加到框架图中。

正如前面用简单例句所说明的那样,SLING使用ARG1这一角色来连接VERB和EVENT框架,EVOKE转换从文本中接下来的几个token中唤起指定类型的框架。同样,CONNECT转换将两个现有框架和一个特定角色连接起来。当输入耗尽,最后一个转换(STOP)执行完成,框架图示被视为已完成,并返回给用户,用户可以查看图示,得到句子背后的语义。

这个转换系统中有一个关键方面,就是会出现一个固定大小的框架注意力缓冲区,代表最近被唤醒或修改过的框架,如上图的橙色框所示。这个缓冲区捕捉了我们倾向于想起最近唤醒、提及、增强过的知识。如果框架不再使用,随着新框架的进入,它最终会被刷新出缓冲区。这个简单的机制在捕捉大部分框架间连接上都非常有效。

相关资源

SLING是用C++写成的,开源代码地址:
https://github.com/google/sling

相关论文SLING: A framework for frame semantic parsing
地址:https://arxiv.org/abs/1710.07032

699de19a89bf3aa4a4d39befd861a2cd7b3429ef

本文作者:夏乙 
原文发布时间:2017-11-16

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
哈工大自然语言处理ltp在windows10下的源代码安装时builtin_converters.cpp报错
安装LTP的环境要求比较复杂,首先cmake,VS2010等等。今天要说的时编译过程中出现的一个坑,python setup.py install,编译到后面会报错。直接上错误代码: patch\libs\python\src\converter\builtin_converters.
3241 0
MyBatis Generator (MBG) 代码生成器简介
MyBatis Generator(MBG)是MyBatis MyBatis和iBATIS的代码生成器。它将生成所有版本的MyBatis的代码,以及版本2.2.0之后的iBATIS版本。它将内省数据库表(或许多表),并将生成可用于访问表的工件。
1331 0
Android JAVA 语言基础例子代码
Android的界面一般都是java开发的,因此对于c++,.net人员来说理解和编写有一个适应过程,最近参考了一下资料,把这些涉的一些java基础使用以例子代码的形式总结起来,记录了这个平台的熟悉过程。
857 0
DL之RNN:人工智能为你写代码——基于TF利用RNN算法实现生成编程语言代码(C++语言)、训练&测试过程全记录(二)
DL之RNN:人工智能为你写代码——基于TF利用RNN算法实现生成编程语言代码(C++语言)、训练&测试过程全记录
29 0
Android 从零开始打造异步处理框架
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/52847872 本文出自【赵彦军的博客】 概述 封装尝试 Handler优化 线程优化 框架使用 参考资料 概述 在Andr...
711 0
MaxCompute(原ODPS) Studio 2.7.0 版本发布,让代码效率更高
新功能: 作业管理: 显示作业排队队列 作业管理: 显示正在执行作业的历史状态转换序列 SQL编辑器: 跳转到 UDF 和 Table 的声明 SQL编辑器: 代码折叠和括号匹配支持 SQL编辑器: 常用语句模板支持 UDF: UDF 项目模块的 Maven 支持 UDF: UDF 一
3326 0
Spring Boot项目利用MyBatis Generator进行数据层代码自动生成
概 述 MyBatis Generator (简称 MBG) 是一个用于 MyBatis和 iBATIS的代码生成器。它可以为 MyBatis的所有版本以及 2.2.0之后的 iBATIS版本自动生成 ORM层代码,典型地包括我们日常需要手写的 POJO、mapper xml 以及 mapper 接口等。
1839 0
SSM框架——使用 MyBatis Generator 生成代码,包括:Model、Dao、Mapping
基于 SSM 框架开发,Mybatis 属于半自动 ORM,如果每个数据表相关的 Model、Dao、Mapping 都要自己动手去写,是不是很麻烦呢?工作量最大的就是书写Mapping的映射文件,而且手动书写很容易出错。
1154 0
DeepMind论文:深度压缩感知,新框架提升GAN性能(附链接)
本文介绍一种将压缩感知和GAN联系起来的创新框架。
917 0
+关注
行者武松
杀人者,打虎武松也。
17142
文章
2569
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载