摘要

关系抽取旨在识别命名实体之间的语义关系.作为自然语言处理中信息抽取的重要子任务,是构建知识图谱,实现语义搜索,建立智能问答系统等应用领域必不可少的关键技术,具有极其重要的研究价值.关系抽取研究的热点经历了知识工程,传统机器学习,深度学习三个不同阶段.本文研究了卷积神经网络应用于实体关系抽取的应用,采用了SemEval-2010 Task 8数据集作为实验测试数据,使用GloVe对句子进行词向量表示,接着获取两个实体之间的距离特征共同作为Embedding层输入,通过拼接的方式将两种特征融合,最后用softmax分类器得出所属关系的类型。实验结果可得其宏F值为64%。

数据集描述

示例数据

句子:The <e1>fire</e1> inside WTC was caused by exploding <e2>fuel</e2>.
关系:Cause-Effect(e2,e1)

训练集:共含8000条数据

type number rate
Other 1410 17.63%
Cause-Effect 1003 12.54%
Component-Whole 941 11.76%
Entity-Destination 845 10.56%
Product-Producer 717 8.96%
Entity-Origin 716 8.95%
Member-Collection 690 8.63%
Message-Topic 634 7.92%
Content-Container 540 6.75%
Instrument-Agency 504 6.30%

测试集:共含2717条数据

type number rate
Other 454 16.71%
Cause-Effect 328 12.07%
Component-Whole 312 11.48%
Entity-Destination 292 10.75%
Message-Topic 261 9.61%
Entity-Origin 258 9.50%
Member-Collection 233 8.58%
Product-Producer 231 8.50%
Content-Container 192 7.07%
Instrument-Agency 156 5.74%

由于两个实体具有方向性,可以认为(e1,e2)和(e2,e1)不相同,因此,对此数据集进行细致划分可以分为2*9+1=19类。 

模型设计与实现

模型设计:

代码实现:

token_input = Input(shape=(config.MAX_TOKEN_LENGTH,), dtype='int32', name="token_input")
tokens = Embedding(embeddings.shape[0], embeddings.shape[1], weights=[embeddings], trainable=False)(token_input)

distance1_input = Input(shape=(config.MAX_TOKEN_LENGTH,), dtype='int32', name='distance1_input')
distance1 = Embedding(config.MAX_TOKEN_LENGTH, config.POSITION_DIM)(distance1_input)

distance2_input = Input(shape=(config.MAX_TOKEN_LENGTH,), dtype='int32', name='distance2_input')
distance2 = Embedding(config.MAX_TOKEN_LENGTH, config.POSITION_DIM)(distance2_input)

output = concatenate([tokens, distance1, distance2])

output = Convolution1D(filters=config.FILTER_NUMBER,
                        kernel_size=config.FILTER_SIZE,
                        padding='same',
                        activation='tanh',
                        strides=1)(output)
output = GlobalMaxPooling1D()(output)
output = Dropout(config.DROP_VAL)(output)
output = Dense(config.HIDDEN_LAYER1, activation='tanh')(output)
output = Dropout(config.DROP_VAL)(output)
output = Dense(config.HIDDEN_LAYER2, activation='tanh')(output)
output = Dropout(config.DROP_VAL)(output)
output = Dense(out_number, activation='softmax')(output)

model = Model(inputs=[token_input, distance1_input, distance2_input], outputs=[output])
model.compile(loss='sparse_categorical_crossentropy', 
                optimizer='adam',
                metrics=['acc'])

结论

我们的实验结果表明:(1)采用卷积神经网络和GloVe词嵌入特征可以获得不错的关系分类准确率;(2)使用位置特征可以增强实体关系抽取的准确率。下一步将测试多种模型在该数据集上的表现性能。

参考文献

  • Zeng D, Liu K, Lai S, et al. Relation Classification via Convolutional Deep Neural Network[C]. international conference on computational linguistics, 2014: 2335-2344.
  • Zeng D, Liu K, Chen Y, et al. Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks[C]. empirical methods in natural language processing, 2015: 1753-1762.
  • Santos C N, Xiang B, Zhou B, et al. Classifying Relations by Ranking with Convolutional Neural Networks[J]. international joint conference on natural language processing, 2015: 626-634.
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐