概要
在过去,知识图谱的建立需要大量的人工标注,需要人们去手动添加规则,标记实体和关系。而大型预训练模型基于大量语料进行了训练,拥有了大量的先验知识。这篇论文做的事情,就是利用预训练模型中的知识,自动地去抽取关系和发现事实。
主要贡献
- 展示了如何使用预训练模型构建知识图谱,即仅需要将清洗后的文本喂给模型(不需要微调和训练),优于传统手动标注和抽取的思路。
- 是一种方便高效的无监督方法。
- 构建了一种新的知识图谱类型,即包括人类已标注的现有知识图谱的知识关系,也结合了新发现的关系。
- 将经过了大规模预训练的、蕴含着丰富知识的预训练模型和知识图谱之间建立了桥梁(LM和KG结合的好例子)。
What MAMA do?
MAMA这个模型做的事情其实挺好理解的,可以分为两个步骤:Match和Map。
简单来说,Match做的事情就是利用预训练模型从文本中抽取三元组,Map则是利用候选三元组建立知识图谱。
Match过程
每一个fact的格式为(h, r, t),也就是头实体、关系、尾实体。
先将语料丢到语言模型中,比如“Dylan is a songwriter”,在这里Dylan和songwriter分别是头和尾,随后模型会从头开始,将头token放在序列首位,然后开始遍历后面的每个token,迭代的过程中给中间每个token打分,然后选择top K高的token作为新的输入放在序列末尾(也就是beam search),遍历到尾token(在这里是songwriter)后结束,最终选择top K高的序列作为结果。
打分的方式是使用了预训练模型中的注意力矩阵,图a可以看到,我们每个candidate sequence的matching degrees是根据新插入的token概率实时变化的,而图b可以看到,打分的过程只看当前token后面的词,比如sequence中有“Dylan is”的时候,就只看得到“a”和“songwriter”的概率。(但是GPT2是怎么看到后面的token的...)
很明显,把句子扔到模型中这样遍历完后,吐出来的就已经是一个三元组了!
Filter
为了保证三元组的质量,论文选择了三种条件进行过滤。
- 只保留注意力权重和大于某个阈值的序列,防止BERT单纯地提取出符合语言模型的序列,而不是那些对实体有特殊意义的关系。
- 提取出来的关系必须在整个语料中出现足够多的次数,防止出现一些过于冷门的关系。
- 关系序列必须是句子中出现的连续token,防止提取出没有意义的关系。
Map过程
使用三元组生成开放的知识图谱,知识图谱中包括预定义的schema中的关系(现有的知识图谱中含有)和新出现的关系,对于现有知识图谱中已存在的关系进行了映射,利于保证质量和方便评估。
Mapped facts in KG schema
- 通过计算embedding相似度的方式进行实体映射。
- 优先选择更常出现的关系作为最终的映射。
Unmapped facts in KG schema
存在部分为映射和完全未映射两种情况。
Experiments
由实验可以看到,MAMA模型无论在准确率还是召回率上都超过了之前的方法。不难看出,越大的、有越多参数量的预训练模型,越可以有更好的表现。
除了可以被对应到的已有知识图谱中的关系之外,MAMA还可以发现其他没有被schema预先定义的关系,所以说这个知识图谱是open的。对于新关系的发现这个功能,很有利于对知识图谱的自动补充和完善,应该很有意义。
思考
感觉这篇文章很有意义的点,一个在于是对预训练模型和知识图谱的结合,最近预训练模型大火的情况下,这篇文章很好地结合了二者,效果不错而且简单。第二点,这篇文章证实了,经过大规模语料训练的模型,可以不经过re-train和微调就有一个很好的效果,也就是证明了预训练模型确实学到了很多且很有用的知识,那么如何去利用这部分知识就是我们需要去考虑的了。
另外我感觉这类开放的知识图谱也大有可为,我可以发现更多没有事先定义的关系,实现知识图谱的补全。随着预训练模型算力的上升,构建出来的知识图谱效果也会愈来愈好,可以在发现更多开放式增长的新关系的同时保证质量。
感悟++
这篇文章并不是要做SOTA,它的精确率也不高,但是它的核心观点是将预训练模型中的知识选择合适的方式表征出来,例如这篇文章选择了知识图谱这种非常结构化的方式,非常直观地将知识图谱学到的东西迁移了出来。看文章时也要注意抓住文章核心想要做到的思想,而不是过多的细节和方法(当然方法也很重要!)。