spo抽取知识图谱

参考:
https://github.com/percent4/spo_extract_platform

知识图谱的构建由两个部分构成:
1.SPO三元组抽取:序列标注算法(ALBERT+BiLSTM+CRF)
SPO:Subject(主语) Predicate(谓语) Object(宾语)
sequence_labeling F1:81%

2.关系抽取:文本二分类(ALBERT+BiGRU+ATT)
text_classification F1:96%

提取无结构文本的应用在extract_example
下面会对这两个部分分别做完整的介绍:

1.SPO三元组


上面是模型的框架

1.ALBERT层

albert是以单个汉字作为输入的(本次配置最大为128个,短句做padding),两边分别加上开始标识CLS和结束标识SEP,输出的是每个输入word的embedding。在该框架中其实主要就是利用了预训练模型albert的词嵌入功能,在此基础上fine-tuning其后面的连接参数,也就是albert内部的训练参数不参与训练。

2.BiLSTM层

该层的输入是albert的embedding输出,一般中间会加个project_layer,保证其输出是[batch_szie,num_steps, num_tags]。batch_size为模型当中batch的大小,num_steps为输入句子的长度,本次配置为最大128,num_tags为序列标注的个数,如图中的序列标注一共是5个,也就是会输出每个词在5个tag上的分数,由于没有做softmax归一化,所以不能称之为概率值。

3.CRF层

如果没有CRF层,直接按BiLSTM每个词在5个tag的最大分数作为输出的话,可能会出现【B-Person,O,I-Person,O,I-Location】这种序列,显然不符合实际情况。CRF层可以加入一些约束条件,从而保证最终预测结果是有效的。

例如:
句子的开头应该是“B-”或“O”,而不是“I-”。

2.关系抽取