基于卷积神经网络的实体关系抽取(SemEval-2010 Task-8数据集)
摘要关系抽取旨在识别命名实体之间的语义关系.作为自然语言处理中信息抽取的重要子任务,是构建知识图谱,实现语义搜索,建立智能问答系统等应用领域必不可少的关键技术,具有极其重要的研究价值.关系抽取研究的热点经历了知识工程,传统机器学习,深度学习三个不同阶段.本文研究了卷积神经网络应用于实体关系抽取的应用,采用了SemEval-2010 Task 8数据集作为实验测试数据,使用GloVe对句子进行词向量
摘要
关系抽取旨在识别命名实体之间的语义关系.作为自然语言处理中信息抽取的重要子任务,是构建知识图谱,实现语义搜索,建立智能问答系统等应用领域必不可少的关键技术,具有极其重要的研究价值.关系抽取研究的热点经历了知识工程,传统机器学习,深度学习三个不同阶段.本文研究了卷积神经网络应用于实体关系抽取的应用,采用了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.
更多推荐
所有评论(0)