导读:随着图神经 络GNN的兴起,GNN在人工智能领域中获得了广泛的应用,并获得了极大的成功。近年来GNN在NLP领域的各个任务中都取得了不错的成绩。团队总结了GNN在NLP中的各类应用场景,开发出了业内首个针对NLP场景的GNN开源软件包。核心开发团队来自于各个高校和企业,包括Pinterest、IBM Research、Meta、浙江大学、南京大学、同济大学、香港科技大学等。
今天的介绍会围绕下面五点展开:
01
Graph4NLP背景介绍
首先带大家简单回顾一下Graph4NLP开源软件库的发展历程。
在2020年6月启动了Graph4NLP项目,2021年6月正式对外发布了第一个官方版本——V0.4.1(在此正式版本之前,有一些内部版本)。2021年9月上线了DLG4NLP(Deep Learning on Graphs for NLP) 站,在 站上分享了很多DLG4NLP领域的学习资料,包括survey paper,Graph4NLP库教程以及相关workshop信息。在接下来的1年时间中,陆陆续续对Graph4NLP库进行了升级迭代,提高了其使用效率、稳定性和易用程度。在即将发布的V0.6版本中,将为用户提供更加统一的配置系统,能够更好的支持multi-relational GNN、AMR图的构建等。
感兴趣的同学可以持续关注Graph4NLP的更新动态。此外,团队将在明年推出Graph4NLP的教科书,希望大家到时能够关注支持。
—
02
Graph4NLP概况
1. 整体架构
下面正式介绍Graph4NLP:
Graph4NLP是基于PyTorch和DGL的,其中PyTorch是业内广泛应用的深度学习框架,DGL是使用最广泛的图神经 络开源软件库。上图展示了Graph4NLP的整体架构,其核心包含了4个层:数据层(data layer)、模块层(module layer)、模型层(model layer)、应用层(application layer):
以上是对Graph4NLP体系结构的简单介绍。在底层硬件部分,是支持在CPU和GPU上进行训练推理,未来也会尝试支持在计算集群上的训练和推理;在后端深度学习框架上,目前仅支持PyTorch,未来计划支持其他的框架,如tensorflow等。
2. 主要特性
上图总结了Graph4NLP的4个特点:
(如果想了解更多内容,可以访问ppt下方的链接)
上图展示了Graph4NLP的数据流情况:
input为raw data,在不同NLP领域的初始输入数据是不一样的,可能是纯文本,也有可能已经是某种程度的图结构数据(但图结构可能也不够完整、理想);调用图构建模块,将特定任务的输入数据转换成图结构数据,存储在GraphData类中;然后是GNN的embedding模块,模块输入是比较原始的节点或者一些边的特征,通过调用特定的GNN算法,学习更好的节点和边的表征,使得模型在NLP任务上能达到最优性能,其中学习到的节点和边的表征会存储在GraphData类中;接下来是特定NLP任务的预测层(可以是分类任务,也可以是生成任务);在拿到模型预测结果后,Graph4NLP支持一些常用的损失函数,通过Graph4NLP的评估模块来评估模型在测试集上的性能。
Graph4NLP支持GNN应用于NLP任务的全流程,在不同环节都有相应接口可供使用,用户也能很方便的扩展这些接口。
上图展示了Graph4NLP的计算流情况:
输入是纯文本数据(sequence of tokens)或者是图结构数据(有噪声/不完整),在图构建部分(输入的初始数据转换成图结构数据的过程)支持以下两种方式:
静态方式构建的图并不一定适合下游任务,但动态图的构建过程是可以学习的,是数据驱动的学习过程,所以一定程度解决了这个问题。
如上所述,图构建过程可分为静态图构建和动态图构建两类,Graph4NLP对这两类方式都进行支持;完成图构建的过程后,需要对图的节点或者边的表征进行初始化,Graph4NLP也提供了一些初始化方法;在给定初始化的节点或者边的表征后,可以调用GNN 络对节点和边的表征进行学习;得到更好的节点或者边的表征后,可以用于下游任务,如节点/边/图的分类任务,或者机器翻译等生成任务。
值得注意的一点是:
静态图和动态图的构建并不是完全割裂的,Graph4NLP可以同时结合静态图和动态图的优点。静态图的优点是可以利用先验知识,当我们知道某种静态图构建的方式对任务有帮助,可以将先验知识融入到数据中,使得在下游任务中取得更好的成果。Graph4NLP支持静态图和动态图相结合的图构建方式,同时拥有了两种构图方式各自的优点。
3. NLP任务应用性能
上表罗列了Graph4NLP在不同NLP任务及不同数据集的表现。在不同的NLP任务上进行了广泛测试,也测试了不同的GNN模型(GAT、SAGE、GGNN、GCN等)和不同的图构建方式(dependency、constituency、dynamic等),都取得了很好的结果。
Graph4NLP可以帮助我们快速测试常用算法,并进行迭代。同时可以利用Graph4NLP针对特定的NLP任务开发基于GNN的模型。
—
03
Graph4NLP模块解析
上图展示了Graph4NLP的层级结构。Graph4NLP有不同的模块,如图构建模块,图表征初始化模块,图表征学习模块等,有不同模型层面的API,如Graph2Seq,Graph2Tree等。下面将重点介绍几个比较重要的模块。
1. 图构建模块
第一个是图构建模块。前文也有提到这个模块有静态图和动态图两种方式。Graph4NLP可支持不同的静态图构建方式 (dependency、constituency、IE),也支持2种不同的动态图构建方式:
代码示例截图中展示了调用两种图构建方法的方式,可以直接在参数列表中指定构建图的方式。
2. 图嵌入初始化模块
上图展示了图嵌入初始化模块。
本模块提供了统一接口来同时支持single-token(节点只包含1个token)和multi-token (节点可能包含的是一句话)两种节点/边的表示方式。Graph4NLP提供了常用的初始化节点/边表征的方法,如word2vec,BERT-embedding,BiLSTM-embedding,或者结合这些方式。代码示例片段截图中展示了一些调用参数,可以通过修改参数来很方便的指定初始化表征的方法。
3. 图嵌入学习模块
上图展示了图表征学习模块。
Graph4NLP支持很多常用的神经 络,除了无向边图,Graph4NLP对有向边图神经 络也提供了支持,包括bi-fuse,bi-sep等。在以往经验中针对有向边图结构,使用一般的图神经 络如GCN/GAT的效果不一定是最优的,但相应的有向边版本,如bi-fuse版本的GCN/GAT/GraphSAGE,结果会比无向边版本的GNN模型要好。
此外,Graph4NLP还支持使用边上的权重信息,这对动态图构建来说是非常重要的,因为动态图构建不仅是学习节点与节点间连接的拓扑结构,还学习到了节点间边的权重信息,这个权重信息对于学习更好的图表征是很有帮助的。
4. 预测模块
简单介绍一下Graph4NLP的预测模块:
可以分为分类模型和生成模型,在两大类模型中也支持了相应的一些比较常用的预测模块。在如生成任务中,支持序列生成和树生成,支持的常见操作有attention机制,copy机制,coverage机制等,并提供了统一接口给用户进行调用。同时也会提供一些高级的模型层面API,如Graph2Seq,Graph2Tree等。
5. 数据集
上图展示了Graph4NLP的Dataset模块:不同的NLP任务的输入输出数据是不一样的,如输入为文本输出为标签,输入为文本输出为树/序列结构等。Graph4NLP提供了一些不同类型的Dataset层面的API来匹配不同类型的NLP任务,用户也能通过Graph4NLP的底层API定制自己的Dataset API。
6. 推断
最后上图展示了Graph4NLP的推理模块:针对不同的任务(生成/分类),Graph4NLP提供了相应的推理模块,使用户可以比较方便的部署在线模型。用户训练完一个模型后可以很方便地调用wrapper API对模型进行部署上线,该API本身是一种“raw-data-in final-prediction-out”的形式。
—
04
应用案例
最后快速和大家分享2个demo:
第一个是文本分类,另一个是math word problem(可以clone图中的GitHub地址,对demo资源进行下载,安装好Graph4NLP开源库以及相关的软件就可以尝试运行demo)。由于篇幅关系不做详细说明,具体过程可以参照GitHub内容。这两个任务均为常见的NLP任务,且适用于整个pipeline。
对分类任务而言,比较重要的模块为图构建、图表征以及预测模块,对应模块都可以调用相应的API。对math word problem任务而言,输入是文本输出是树状结构,天然比较适合Graph2Tree的模型,可以直接调用Graph4NLP提供的Graph2Tree API,进行相应的配置即可。
下面展示了两个demo中的一些具体代码片段,可以非常简单的用模块化的方式构造模型。
1. 案例1
2. 案例2
—
05
未来规划
最后简单说明以下未来计划:
有更好的可扩展性;更多定制化的NLP任务;提高软件库的scalability,支持多GPU、多节点的训练;使部署过程更加流畅;提供更多的预训练语言模型接口;囊括更多的NLP任务,实现更多的GNN模型。
欢迎大家提意见,并参与到开源软件库的开发过程中。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!