文档解析框架:面向对象的神经规划

开发 开发工具
深度好奇(DeeplyCurious.ai)近日在 arXiv 上发布的论文提出了一种基于神经符号智能(Neural-symbolic)的特定领域文本解析框架:Object-oriented Neural Programming(OONP)。下面,我们就来解读具体内容。

深度好奇(DeeplyCurious.ai)近日在 arXiv 上发布的论文提出了一种基于神经符号智能(Neural-symbolic)的特定领域文本解析框架:

Object-oriented Neural Programming(OONP)。

论文题目:用于文档理解的面向对象神经规划

用于文档理解的面向对象神经规划

论文链接:https://arxiv.org/pdf/1709.08853.pdf

该框架借用面向对象编程(OOP)的思想,利用解析出来的实体组成对象和对象间关系(如图 1),构成结构清晰的本体图。每个对象 (object) 都是一个类 (class) 的实例化,类的概念规定了其具有的内部属性、外部关系和可执行的操作,以及与其他对象的关系类型。如图 1 所示,左边为叙事文本,右边为经过 OONP 解析生成的本体图。图例中共包含三个类的对象,分别为事件、人物、物品。人物类有姓名、性别、年龄属性,同时与事件对象有嫌疑人、被害人等表征人物角色的外部链接;物品类有名称、数量、价值等属性,与事件对象有表征物品角色的外部链接;另事件类有事件类型、时间、地点等属性。

 OONP 解析任务示意

图 1. OONP 解析任务示意

下面我们拆解 OONP 框架并介绍其主要功能模块。如图 2 所示,OONP 由三部分组成,分别是主控模块阅读器(Reader)、表征文档的行间记忆(Inline Memory)模块、以及总结对之前文本的理解的携带记忆(Carry-on Memory)模块。

OONP 解析的基本框架

图 2. OONP 解析的基本框架

  • 行间记忆(Inline Memory)模块主要存储保留了原始文档时间顺序的低级表征。具体来说,行间记忆是由记忆单元按照原始文档的顺序排列组成的数组,每个单元对应着文档的基本语言单位(比如字或者词),有可微分部分和离散部分。这两个部分可以方便的存储多种类型的和文本相关的信息,从简单的 Word Embedding、递归神经网络(RNN)输出等连续表示,到词性分类结果、句法信息,以及起来自特定规则的离散表示。这既可以来自第三方的程序,也可以来自 OONP 自己的写入。
  • 携带记忆(Carry-on Memory)模块可分为对象记忆(Object Memory)、矩阵记忆 (Matrix Memory) 和动作历史 (Action History) 三部分。对象记忆存储针对对象的具体表示,对象的内部属性可以有不同的形式,比如字段或者类别,同时也对应着不同的形成方式:字段一般是从原文复制粘贴过来,类别则是通过分类模块得到的。同时,每个对象也有可动态调整的可微分表示(object embedding)作为其与其他模块交互的接口。当 OONP 每次读到文本中针对某个对象的描述,就会对对象记忆中该对象的相关部分信息中进行更新操作。
  • 阅读器(Reader)是 OONP 解析器的核心模块,它管理整个决策序列中所有连续的、离散的操作。它由多个符号处理器和一个神经网络控制器构器。如图 3 所示,阅读器有神经网络控制器(Neural Net Controller)和多个符号处理器(图 3 中的黑色模块)。类似神经图灵机中控制器的设计,神经网络控制器配有多个可微的读头(read-head)和写头 (write-head), 用于读取行间记忆和携带记忆以及符号处理器的输出但。与神经图灵机中控制器不同,控制器的子模块策略网络(Policy-net)产生离散操作(action)序列,一部分操作序列将会更新本体结构和相关的对象记忆。各种符号处理器用来处理来自对象记忆、行间记忆、动作历史中符号信息,用于规则约束、推理等,而这些符号处理器的部分结果将会重新作为神经网络控制器的输入。

阅读器的构成及信息流

图 3. 阅读器的构成及信息流

OONP 解析器中基于神经网络的阅读器按照文本顺序读文档,同时不断丰富本体结构来增进对文档的理解。对于某个待解析的文档,OONP 首先将预处理之后的文档放入行间记忆模块,阅读器顺序读取行间记忆中符号表示和连续表示,结合携带记忆,产生各种操作来增加和丰富本体图,更新携带记忆模块。这些操作包含可微分操作(作用于对象记忆的连续部分和矩阵记忆)和离散操作(作用于对象记忆和行间记忆的符号部分)。这些连续和离散操作互相依赖,构成了彼此的输入,共同形成了图 3 中复杂而灵活的信息流。

下面我们着重讲解一下 OONP 的离散操作。阅读器的策略网络输出的离散操作序列是形成本体结构主要操作。该操作集合包括三类,依照顺序分别是「新增-指派」,「选择更新属性」,和「更新内容」。当然,「新增-指派」操作后,也可以没有后续操作(空操作)。「新增-指派」可转化为多分类问题,如果提到内容是***次出现,则「新增」,如果是已经出现过的,只是重新提及,则「指派」。具体的决策依赖于阅读器在创建的临时对象(公式中的)与已存在对象之间的相似度。具体公式如下:

公式***行代表临时对象和「新增」c 类的相似度,第二行表示临时对象和 c 类第 k 个对象的相似度,第三行代表与空操作的「相似度」。图 4 是对解析过程中的某个瞬间对上述匹配过程的形象化描述。

图 4

图 4.「新增-指派」操作中,临时对象与已存在对象之间相似性衡量示意,虚线表示「新增」,实线表示「指派」

通过上述的三种操作,OONP 解析器可以对复杂的文档进行结构化解析。下面的图 5 给出了一段短文本解析的示例:OONP 解析器做通过一个动作序列,逐步形成了包含六个对象和六条链接的本体结构。

 OONP 解析器解析文档过程示意

图 5

图 5. OONP 解析器解析文档过程示意。假设在预处理阶段,汽车的描述已经被抽取。

作者在三个数据集上对模型的性能进行了实验。以公安报案数据为例,OONP 使用了如图 6 中列举的 action。

 公安报案数据中使用的 action

图 6. 公安报案数据中使用的 action

图 7 比较了 OONP 的不同实现:论文衡量模型性能用了四个指标,Assign Acc 表示预测对象「新增和指派」的正确率,Type Acc 表示预测对象属性的正确率,Ont Acc 表示单个样本解析的本体结构和标签 100% 重合的正确率,Ont Acc-95 表示单个样本解析的本体结构和标签 95% 重合的正确率。简单的 OONP 模型较以 Bi-LSTM 为基准模型有很大提升,具有丰富结构信息的 OONP(structured)则又有明显提升。而在 OONP(structured)的基础上,用强化学习来决定分类时机的模型 OONP(RL)则又进一步提高了效果。

多个 OONP 模型的比较

图 7. 多个 OONP 模型的比较

作为总结,OONP 解析框架具有如下特点:

  • OONP 框架的中间状态包含一个离散的对象本体图结构,该图结构被决策过程的操作序列创建和更新,并在解析的结尾作为对最终的文本语义表示。
  • OONP 框架将解析过程转化为决策序列:按照文本阅读顺序做出各种离散动作,形成能够表征已读文本的本体图,模仿了人理解文本的认知过程。
  • OONP 框架提供了神经符号主义的一个实例:在 OONP 框架内,连续信号、表示、操作和离散信号、表示、操作紧密结合,形成信息闭环。这使得 OONP 可以灵活地将各种先验知识用不同形式加入到行间记忆和策略网络中。
  • OONP 框架利用监督学习和强化学习以及二者的各种混合态,以适应不同强度和形式的监督信号以训练参数

【本文是51CTO专栏机构“机器之心”的原创文章,微信公众号“机器之心( id: almosthuman2014)”】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2010-06-29 18:58:23

UML面向对象技术

2010-06-17 18:17:36

UML面向对象技术

2010-09-28 10:03:15

DOM文档对象模型

2010-06-13 17:48:36

UML面向对象建模

2023-01-10 09:38:09

面向对象系统

2024-01-03 13:38:00

C++面向对象编程OOP

2010-06-17 17:57:10

UML面向对象分析与设

2010-07-13 14:54:15

Perl面向对象编程

2010-06-13 10:19:24

面向对象技术与UML

2021-10-21 18:47:37

JavaScript面向对象

2010-06-13 10:33:54

面向对象UML技术

2013-03-11 09:23:22

Go语言面向对象

2010-07-20 09:23:30

Perl构造函数

2009-07-14 16:51:50

Jython中的对象

2010-10-25 10:05:00

ibmdwJava

2024-04-28 11:01:27

C++编程语言函数

2022-07-30 23:41:53

面向过程面向对象面向协议编程

2012-03-13 16:39:52

Java

2010-07-06 17:21:08

UML面向对象

2010-06-17 09:22:48

UML面向对象分析与建
点赞
收藏

51CTO技术栈公众号