学习笔记之知识图谱三元组抽取模型

文章目录

  • 前言
  • 一、模型整体思路
  • 二、模型建立
  • 三、训练阶段
  • 四、解码阶段
  • 总结


前言

这里使用一个多任务模型抽取三元组。任务1是抽取subjects, 任务2是同时抽取objects 和 predictions。抽取的方式并不是BIO标注的方式而是采用半指针半标注的方法。

一、模型整体思路

1、模型大体描述如下:基于Bert编码器,利用半指针半标注的方式,先抽取subjects,再同时抽取objects和predictions。
2、模型具体描述如下:
step1 利用Bert等编码器将输入文本编码成词向量。
step2 将词向量经过一个dense层变化成两维的向量。
step3 将得到的2维向量分别过一个sigmoid激活函数,分别代表是否是subject的起始,是否是subject的结束。最终可以得到1or多个subjects.
step4 将得到的subjects过一个dense层转化成词向量维度与step1得到的词向量相加
step5 再将step4得到的结果经过一个dense层输出一个2关系量的向量。
step6 最后再将2
关系量的向量转化成 【关系量,2】的矩阵,代表对于每一个可能的prediction对应的objects标识。

二、模型建立

1、SubjectModel 流程如下:

input_ids, attention_mask
last_hidden_status 768*1
subject_output 2*1
sigmoid 2* 1
subject_out

2 、ObjectModel 流程如下:

subject_output 2 * 1
subject_output变化成768*1
subject_output + last_hiddenn_status 768 * 1
object_output 49 * 2
last_hidden_status768*1

三、训练阶段

model
+subject_labels
model
+object_labels
input_ids, attention_mask, subject_ids
subject_output
subject_loss
loss
object_output
object_loss

四、解码阶段

对于验证集,先输入input_ids,attention_mask得到subject_output,设定两个阈值(比如0.5,0.6)决定subject的起始和结尾,进而得到subject。再将subject_output,input_ids, attention_mask再导入objectModel得到obejct_output,同理设定两个阈值(比如0.2,0.3)得到objects和predicate。如此得到的三元组和验证集的labels比对,计算F1。

总结

知识图谱的构建是知识图谱的核心。我们这里介绍的方法是一个baseline的方法,有很多可以改进的空间。

你可能感兴趣的:(知识图谱)