日前,Google 发表自然语言框架语义分析器 SLING,它能以语义框架图(semantic frame graph)形式,将自然语言字档直接分析为字档语义表示。这系统避免了级联效应,另外还减少了不必要的计算开销。
编译整理如下:
直到最近,大多数实际的自然语言理解(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 能实现超过 2,500 象征式/秒的分析速度。
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。
- Google/sling
- SLING: A Natural Language Frame Semantic Parser
(本文由 雷锋网 授权转载;首图来源:pixabay)