日前,Google 发布自然语言框架语义解析器 SLING,它能以语义框架图(semantic frame graph)的形式,将自然语言文本直接解析为文本语义表示。这一系统避免了级联效应,另外还减少了不必要的计算开销。
详细消息雷锋网 AI 科技评论编译整理如下:
直到最近,大多数实际的自然语言理解(NLU)系统都采用的是从词性标签和依存句法分析(dependency parsing)到计算输入文本的语义表示的分析。虽然这使得不同分析阶段易于模块化,但前期的错误会在后期和最终表示上产生层叠效应,中间阶段的输出也可能会与这一阶段本身并不相关。
例如,一个典型的 NLP 系统可能在早期执行依存句法分析的任务,在结束阶段时执行共指解析(coreference resolution)任务,早期依存句法分析阶段出现的任何错误都会产生级联效应,影响共指解析的输出。
今天我们发布 SLING 实验系统,它能以语义框架图(semantic frame graph)的形式,将自然语言文本直接解析为文本语义表示。
输出框架图能直接捕获用户感兴趣的语义标注(semantic annotation),因为没有运行任何中间阶段,所以避免了上述那种管道系统的缺陷,另外还减少了不必要的计算开销。
SLING 使用具有特殊用途的循环神经网络模型,通过框架图上的增量编辑操作(incremental editing operation)来计算输入文本的输出表示。框架图足够灵活,可以捕获大家感兴趣的许多语义任务(下面有更多介绍)。SLING 中的分析器(parser)只使用输入词来进行训练,不需要额外再生成标注(例如依存句法分析)。
SLING 通过提供高效的、可扩展的框架存储实现(frame store implementation)和 JIT 编译器来生成高效的代码来执行循环神经网络,从而在推理(inference)时能快速进行句法分析。
尽管 SLING 还处于实验阶段,但得益于高效的框架存储和神经网络编译器,它在台式机 CPU 上能实现超过 2500 符号/秒的解析速度。
SLING 使用C++,目前可以在 GitHub 上下载。这个系统在技术报告中有详细描述。
框架语义句法分析(Frame Semantic Parsing)
框架语义表示文本的含义(例如一句话),是一套正规表述。每个正规表述都被称为一个框架,可以被看作是知识或语义的一个单元,还包含与与它相关的概念或其他框架的相互作用。
SLING 将框架组织成属性槽(slot)列表,其中每个属性槽都有对应的名称(角色)和值(可能是 literal 或是到另一个框架的链接)。
下面是一个例句:
“很多人都宣称自己预测到了黑色星期一。”(Many people now claim to have predicted Black Monday)
下图是 SLING 识别提到的实体(例如人物、地点或事件)、度量(例如日期或距离)和其他概念(例如动词),并将它们放置在正确的语义角色中的说明。
上面的例子相当简单,框架图的功能强大到可以模拟各种复杂的语义标注任务。对于初学者来说,这种框架可以非常方便地将语言的内外部信息类型(例如知识库)结合起来。这可以用于处理复杂的语言理解问题,例如引用、隐喻、转喻等。这些任务的框架图只在框架类型、角色和链接约束条件上有所不同。
SLING
SLING 通过优化语义框架来训练循环神经网络。网络隐藏层中学到的内部表示取代了在前面那种管道系统中的手工特性组合和中间表示。
解码器使用伴随反复出现的特征一起的表示,来计算用于框架图更新的一系列过渡,以获得输入语句的预期框架语义表示。在 SLING 中用 TensorFlow 和 DRAGNN 来训练模型。
下面的动图展示了使用过滤操作将框架和角色逐渐添加到框架图中的构建过程。
正如一开始讨论的那个简单例句,SLING 使用 ARG1 角色将动词和事件框架连接起来,表示事件框架是被预测的概念。
这个过渡系统的一个关键层面是,有一个很小的固定大小的框架缓冲区,它代表了最近被唤起或修改的框架,用橙色方框标记。这个缓冲区会捕捉到我们倾向于记住的最近被唤起、提及或强化的知识的直觉。如果一个框架不再使用,那么当新的框架出现时,它最终会从这个缓冲区中被清除掉。我们发现这种简单的机制在捕捉大量框架间链接的片段时非常有效。
下一步
上面所描述的实验仅仅是对诸如知识提取、解析复杂引用和对话理解等语义句法分析研究任务的启动研究。
在 Github 上发布的 SLING 中有上述任务的预训练模型,还有一些示例和方法,大家可以在提供的综合数据或自己的数据上来训练解析器。希望 SLING 能对大家有所帮助有用,我们期待着在其他语义句法分析任务上应用和扩展 SLING。
Github 地址:https://github.com/google/sling
Via:Google Research Blog