system: [SYSTEM]

user: 3. 研究思路和方法 本文介绍了基于需求文档的需求图谱构建方法，该方法总共分为5个部分，分别为：非结构化需求文本的三元组抽取，数据整理与人工标注标签，数据特征编码及输入矩阵的构建，图神经网络模型分类，需求图谱的可视化。通过对企业提供的100条非结构化需求文本进行需求三元组的抽取，从而得到100条需求文本中的核心需求三元组表示，随机对这些抽取出来的部分需求三元组进行人工标注，标注出约束、功能等意图标签，利用one-hot编码的方式得到这些三元组的特征编码表示，将数据处理成邻接矩阵和特征矩阵的形式输入到设置好的图卷积神经网络，得到一个可以对需求三元组自动打标签的节点分类模型，标注剩余未标注的需求三元组，最后利用d3.js [ 8 ] 和Neo4j [ 9 ] 图像可视化技术和图数据库将需求图谱进行轻量级存储和可视化展示。图1给出了本方法的总体框架图，输入的数据为大量需求文档，通过知识抽取的方法从中提取数据中的需求三元组，提取完成之后随机抽取三元组进行人工标注，将标注完成的数据构建成特征矩阵和邻接矩阵输入到设置好的图卷积神经网络训练，最后得出一个可识别需求三元组意图标签的模型，利用该模型对剩余需求三元组进行自动标注并进行需求图谱可视化和图数据存储。 图1. 方法总体框图 3.1. 非结构化需求文本的三元组抽取 在对于非结构化需求文本的提取方面，本文利用的是传统自然语言处理的方法，即通过依存句法和语义角色标注两种方法来从需求文本中提取我们所要的需求三元组。语义角色标注是根据一个句子中的谓语和论元之间存在不同的语义关系，将论元划分为不同类型，这里的谓语也就是指的是动词，论元则是名词。通过语义角色的标注可以提取一个文本中三元组关系。但有时候只依靠语义角色标注，并不能提取所有句子中的三元组关系，所以当语义角色标注提取失败的时候，本文采用依存句法来提取三元组关系。依存句法是由依存语法和句法分析组成，其中依存语法是基于词间关系的形式语法，它强调以动词为句子中心，其他词汇依存于动词 [ 10 ]。而句法分析则是用来确定文本中句子的句法结构和句子中词汇之间的依存关系。其主要是完成两方面的内容，首先需要确定一个语法体系，然后根据确定的语法体系，推导出一个句子的句法结构，本文采用自上而下的语法体系 [ 11 ] 构建句法树。 在使用上述依存句法和语义角色标注方法时，我们采用了LTP语言模型(哈工大中文语言技术平台) [ 12 ]，该模型主要用于对中文语言进行分词、关键词提取等一系列自然语言处理操作，LTP语言模型中包含分词模型、依存句法分析模型、语义角色标注模型、词性标注模型等常用的中文处理模型的封装包，具体算法运行步骤如图2所示。例如输入一个需求文本：X公司研发导航系统，导航应用于医院常用影像设备。需求主要在硬件设备和软件，应提供整套设备的配套技术。期望研发时间为10个月内，预算金额为4000万人民币。其中该文本的第一句依存句法和语义角色标注结果如表1所示，如果存在SVO结构那么程序会在第3部分运行结束后停止，返回SVO三元组，否则一直执行到第五部分，提取需求三元组。 表1. 需求文本提取步骤 图2. 依存语法和角色标注步骤 利用依存句法和语义角色标注完成三元组提取之后，本文从100篇公司需求文档中提取出了相关的需求三元组，并分成需求编号、头实体、关系、尾实体进行四列进行存储，以备后续步骤进行使用，部分提取出来的需求三元组如表2所示。 Table 2 Partly extracted requirements triple 需求编号 头实体 关系 尾实体 65 X公司 研发 导航系统 66 导航应用环境 应用于 医院常用影像设备 67 需求 提供 整套设备配套技术 68 研发时间 为 10个月内 139 长期稳定性误差 小于 0.05% 156 X公司技术 采用 独特指纹低功耗设计 表2. 分提取出来的需求三元组 3.2. 需求三元组的数据预处理 3.1小节中我们对某公司100个需求文档进行了需求三元组的提取，得到了由需求编号，头实体，关系，尾实体这四部组成的数据，在这里我们定义需求编号为 I = ( i 1 ， i 2 ， ⋯ ， i n ) ，头实体为 H = ( h 1 ， h 2 ， ⋯ ， h n ) ，关系为 R = ( r 1 ， r 2 ， ⋯ ， r n ) ，尾实体为 T = ( t 1 ， t 2 ， ⋯ ， t n ) ，那么一个最初的需求三元组，则包含这四部分信息：第一部分是需求编号，即表示提取一段需求文档中需求三元组的序列，第二部分则是头实体，如表1所示，头实体可以是时间或者金额这样的约束，也可以是一个技术名称，第三部分是表示头实体和尾实体之间存在的关系，例如限制、小于、采用这样的关系，第四部分则是尾实体，其与头实体之间存在第三部分的关系。一个需求三元组可以用如下公式(1)进行表示： f ( n ) = ( i n ， h n ， r n ， t n ) (1) 其中， f ( n ) 表示一个提取好的需求三元组数据，n表示三元组在数据列表中所在的行， i n 表示三元组的编号， h n 表示需求三元组的头实体， r n 表示头实体和尾实体之间存在的关系， t n 表示需求三元组尾实体。考虑到构建需求图谱以及使用图谱进行下游子任务时我们需要知晓一个需求三元组的意图。本文规定需求三元组的意图标签大概分为功能、目标、约束以及需求根节点四类。因此，我们需要对提取的需求三元组进行人工标注，标注出这个需求的意图是目标、约束、功能，还是需求根节点。我们对得到的需求三元组进行数据预处理，首先将提取出来的三元组的头尾实体及关系进行组合，然后对所有组合后的三元组进行标签标注。三元组标签定义为 L = ( l 1 ， l 2 ， l 3 ， l 4 ) ，标注完成之后如表3所示。 Table 3 Triple data is required after manual annotatio 需求编号 需求三元组 需求三元组标签 65 {‘X公司’，‘研发’，‘导航系统’} 目标 66 {‘导航应用环境’，‘为’，‘医院常用影像设备’} 功能 67 {‘需求’，‘提供’，‘整套设备配套技术’} 功能 68 {‘研发时间’，‘为’，‘10个月内’} 约束 139 {‘长期稳定性误差’，‘小于’，‘0.05%’} 约束 156 {‘本技术’，‘采用’，‘独特指纹低功耗设计方案’} 功能 表3. 人工标注后的需求三元组数据 3.3. 图卷神经网络分类模型 在2.2部分我们随机标注了100个需求文档中提取的需求三元组中60%的数据作为我们下面模型的输入，通过构建图卷积神经网络来训练一个可以自动标注剩余需求三元组的模型。因为本文最终目标是构建一个需求图谱，所以我们需要一个可以对图结构数据进行分类的模型，近年来图神经网络的应用十分广泛，有人利用图神经网络来进行文本或者图像分类 [ 13 ] [ 14 ]，并取得了非常不错的效果，并且图神经网络也拥有非常好的可解释性 [ 15 ] [ 16 ]。据此本文在训练自动标注模型的时候采用GCN (图卷积神经网络) [ 13 ] [ 17 ] 方法，下面介绍GCN的相关基础知识和原理以及本文如何利用图神经网络进行分类。 3.3.1. 图卷积神经网络的特点 GCN来源于卷积神经网络，卷积神经网络是一种具有局部连接、权值共享等特点的深层前馈神经网络 [ 18 ]。但传统的卷积神经网络仅能够处理欧几里得数据，也就是具有平移不变性的数据，常见的如一幅图片，即2D的网格类型数据，一般用矩阵来存储；一段文本，即1D的网格类型数据，一般通过处理后嵌入到一维向量空间来表示。但本文的数据是以知识图谱节点形式构成，即由很多{‘时间’，‘限制’，‘3个月内’}这种三元组数据构成的图网络，每个节点的邻居节点数量并不一样，不具有平移不变性，属于非欧几里得数据，不可以通过常规的卷积核去提取相同的结构信息。因此本文采用了图卷积神经网络方法对知识图谱数据进行处理。 GCN的主要任务是可以从大量节点中学习到结构特征，从而将不同节点进行分类处理，如图3所示，图卷积神经网络是一种端到端的学习方式，一端是图结构数据，另一端是最终完成的任务。本文通过已进行人工标注出意图的需求三元组数据，通过GCN训练出一个可以识别需求三元组的意图的模型，从而节约构建完成需求图谱的时间。 图3. 图卷积神经网络模型分类任务 3.3.2. 图卷积神经网络架构 GCN的过程是图卷积的一阶局部近似，可以看多是多层的神经网络，每一个卷积层仅处理一阶邻域信息，通过叠加若干卷积层可以实现多阶邻域的信息传递。通过GCN处理后意图相同的需求三元组将会被归类到一起。 GCN的输入是图结构数据，例如本文输入为一个需求图谱，每个需求节点是由子图的2个需求实体节点构成的，里面有2n个节点，每个节点表示了一个需求实体，都存在一些特征，那么也就是有 2 n ∗ D 维的特征矩阵F，节点之间也会存在关系，那么会有一个 2 n ∗ 2 n 的邻接矩阵A，至此F和A便是GCN的输入。如图4所示，是图卷积神经网络的模型架构。 图4. 图卷积神经网络模型架构 从图4中可以看到主要有输入层、隐藏层、输出层，GCN也是一种神经网络层，层与层的传播可以用公式(2)来表示，其中H代表的是每一层的特征，如果是输入层的话，那么H代表的则是上文叙述的特征矩阵F， A ˜ 代表的是上文叙述的邻接矩阵 A ˜ 加上一个单位矩阵， D ˜ 代表的是 A ˜ 的度矩阵， σ 代表的则是非线性激活函数，在本构建方法中该非线性激活函数为ReLu函数。根据GCN层与层传递核心公式，我们需要的输入数据为特征矩阵F和邻接矩阵A，下文将详细介绍如何根据提取出来的需求三元组数据构建特征矩阵和邻接矩阵。 H ( l + 1 ) = σ ( D ˜ − 1 2 A ˜ D ˜ − 1 2 H ( l ) W ( l ) ) (2) 3.3.3. 图特征矩阵和图邻接矩阵的构建 GCN需要构建特征矩阵和邻接矩阵作为输入。本文将每个需求三元组看作一个独立的子图，需要构建需求三元组的特征矩阵，我们将每个需求三元组看作一个独立的子图来提取特征，即特征矩阵每行为一个需求三元组的特征。本文这里的特征表示方法采用的是one-hot的编码，one-hot编码首先需要创建一个分词器，并设置只考虑前2000个最常见单词，构建整数编码索引，例如其中特征整数编码如下：时间——0，限制——1，技术——2，采用——3。将特征按照从小到大进行排列，[‘时间’，‘限制’，‘技术’，‘采用’]得到的one-hot编码表示如下：[[1，0，0，0]，[0，1，0，0]，[0，0，1，0]，[0，0，0，1]]。 根据上述one-hot编码特点，我们得到每个需求三元组的one-hot特征表示，根据处理得到每个需求三元组的one-hot特征表示，定义每个需求三元组的特征为公式(3)所示，其中 F ( f ( n ) ) 代表了第n个需求三元组的特征表示，因为本文设置了特征为2000维，所以 F ( f ( n ) ) 是一个1行2000列的特征矩阵，其中m代表的特征的列数，即第n个需求三元组的第m维特征。 F ( f ( n ) ) = ( e n 1 ， e n 2 ， ⋯ ， e n m ) (3) 据此我们可以得到一个关于需求三元组的特征矩阵F，每一行代表了一个需求三元组的2000维的one-hot特征编码表示，F则代表了n个三元组特征的特征集合。 F = [ e 11 e 12 e 13 ⋯ e 1 m e 21 e 22 e 23 ⋯ e 2 m e 31 e 32 e 33 ⋯ e 3 m ⋮ ⋮ ⋮ ⋱ ⋮ e n 1 e n 2 e n 3 ⋯ e n m ] (4) 设需求图谱 G r = ( V ， E ) ，其中 V = ( v 1 ， v 2 ， ⋯ ， v n ) 代表图谱中实体，即2.1中的头实体H和尾实体T的集合。接下来用邻接矩阵A描述需求图谱中顶点之间的关联，其定义为： A [ i ， j ] = { 1 ，     ( v i ， v j ) ∈ V 0 ，     ​ ( v i ， v j ) ∉ V (5) 其邻接矩阵表示的含义是，如果两个实体存在一条关系，那么认定值为1，如果不存在关系则值为0，邻接矩阵代表的是知识图谱中图结构。据此我们得到了一个特征矩阵F和邻接矩阵A，从而可以表示出需求图谱的特征和结构，为图卷积神经网络训练的实验部分做了数据准备。