查看原文
其他

【源头活水】Knowledge In PLM: 语言模型可以作为一种知识库吗?

The following article is from RUC AI Box Author 龚政



“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:RUC AI Box

© 作者|龚政

机构|中国人民大学高瓴人工智能学院硕士

研究方向 | 自然语言处理

引言: 近年来,预训练在自然语言处理领域取得了十足火热的发展,并逐渐成为主流的范式之一。通过在大型的无监督文本语料上对语言模型进行预训练,然后拿到具体的下游任务上微调,预训练语言模型在各类NLP任务上都取得了相当不错的效果。最近,一部分研究工作开始探索预训练语言模型中所包含的事实知识。
本文以 Language Models as Knowledge Bases? 这篇论文为起点,对语言模型作为知识库(LM as KB)这一方向中一共8篇比较有代表性的工作进行了梳理。其中,前面两篇文章主要探索了预训练语言模型是否已经存储了一定程度的事实和常识知识,后面六篇文章则分别尝试从不同的角度对LM as KB这一范式进行更好的利用、改善以及对其存在的缺陷进行分析。

01

Language Models as Knowledge Bases?
该篇文章来自于Facebook AI Research和伦敦大学,已被EMNLP 2019所录取。
(arxiv:https://arxiv.org/abs/1909.01066)
该篇文章想要探索的问题是,通过在大型的文本语料上进行预训练,语言模型是否已经(或是有潜力)学习到并存储下了一些事实知识(主体-关系-客体形式的三元组或是问题-答案对)?针对这个问题,本文首先定义了一种判断语言模型是否包含某种知识的方法。以Bert作为例子,对于某个三元组(小明,出生在,上海),本文首先将这一知识通过模板转换为自然语言的形式—小明出生在[MASK],如果Bert能够成功的预测出被[MASK]掉的词语,那么我们就认为Bert掌握了这一知识。如下图所示:
为了对预训练模型所包含的知识进行探索,本文进一步以上述完形填空的形式,从一些现有的知识源中构建了四个用于知识探测的数据集:
Google-RE:包含了大约60K事实和5种实体关系,本文从中选取了3种实体关系:出生地点、出生日期和死亡地点,并构造成类似于[S] was born in [O]的自然语言形式。
T-REx:T-REx知识源是维基数据三元组的一个子集,本文从中选取了41种实体关系,并为每种关系采样了至多1000条事实知识。
ConceptNet:ConceptNet是一个多语言的知识库,本文从中选取了英文部分的16种实体关系。
SQuAD :SQuAD是一个著名的QA数据集,本文从中选取了305个上下文无关的问题,并将其转换为完形填空的形式。
具体数据样例见下图:
实验部分,本文分别对两个单向的语言模型fairseq-fconv和Transformer-XL以及两个双向的语言模型ELMo和BERT进行了实验测试,使用precision@k(p@k)来表示模型预测的前K个词中,命中正确答案的准确率。结果表明,BERT-LARGE已经可以较为精确的对知识进行预测,这初步回答了该篇论文所提出的问题,语言模型中已经包含了相当数量的知识。
该篇论文(以下简称为LAMA论文)是较早对语言模型中包含的事实知识进行正式、系统化探索的论文,提出了将语言模型作为知识库这一概念(以下简称为 LM as KB ),并构建了一个数据集(以下简称为LAMA数据集)用于对模型存储知识的能力进行评估。下面介绍的另一篇文章则从不同的角度对模型的知识存储能力进行了探测。

02

How Much Knowledge Can You Pack Into the Parameters of a Language Model?
该篇论文来自Google,已被EMNLP 2020所录取。
(arxiv: https://arxiv.org/abs/2002.08910)
和LAMA论文不同,该篇论文尝试用另一种更贴近实际的任务—闭卷问答,来测试语言模型中已经包含的知识量。具体来讲,对于QA任务,研究人员通常会给定相关的上下文(例如包含问题答案的文章)和问题,然后让模型进行回答,或者先让模型在相关的语料库中检索出问题相关的文档作为辅助信息。本文则直接将问题丢给模型,试图让模型通过自身内部存储的知识来回答这些问题。
从上图可以看出,该篇论文对预训练好的T5模型用QA任务中的问题-答案对进行微调,由于没有上下文或者额外语料的信息补充,模型需要利用预训练时所学到的知识来完成任务。论文在多个QA任务上进行了实验,结果表明大型的语言模型(T5-11B)已经能够取得和“开卷”模型相比较的结果。
对比本文和LAMA论文可以发现,两篇文章同样对模型记忆知识的能力进行了探测,不同之处在于,LAMA论文中使用的是更贴近于预训练目标的完形填空任务,而本文则使用了一种更具有难度以及更加抽象的闭卷问答任务,需要让模型先在相关数据集上微调,在微调过程中模型需要学习如何挖掘之前预训练获得的知识并加以利用,表明预训练语言模型不仅存储了大量的知识,并且可以将这些知识迁移到下游任务中。
小结:以上两篇文章所探索的问题无疑是令人兴奋的,就像LAMA论文在Introduction中所指出的,当前在人工构造知识库的过程中,往往需要用到一系列复杂的NLP技术,这些技术进一步需要大量的标注数据和模型来支撑实现,并且中途产生的错误会很容易的在生产流程中传播和积累下去。而语言模型则不需要这些复杂的技术工程和数据标注,只需要投入大量的无标签文本语料就能进行构造。
但是作为一种“有一定潜力的知识库”,当前的预训练语言模型和人工构造的知识库比起来还有相当多的缺陷。例如,一个人工构造的知识库应该能够较为方便的完成以下操作:1. 对内部存储的知识进行更新;2. 扩充已有的知识库的容量大小以容纳更多的知识;3. 准确稳定的对知识进行提取等等,语言模型想要完成以上操作还面临着相当多的挑战。
以下6篇论文分别从不同的角度尝试更好的利用和改善语言模型中存储的知识。其中前三篇分别从实体信息注入、加入上下文信息以及改进prompt三个方向加强语言模型的知识提取能力,第四篇文章对LM as KB这一范式存在的问题进行了较为全面的探究,最后两篇文章从知识的可解释性和可修改性的角度对语言模型进行了改善。

03

E-BERT: Efficient-Yet-Effective Entity Embeddings for BERT
该篇论文来自慕尼黑大学和Siemens AG Munich,已被EMNLP Finds 2020录取。
(arxiv: https://arxiv.org/abs/1911.03681)
该篇论文主要通过直接向BERT的输入中注入实体信息来增强对应的文本表示,以提高模型提取知识的准确率。论文首先通过将Wikipedia2Vec中的词向量映射到BERT的token embedding的同一向量空间中,以学习一个映射矩阵 W ,然后使用 W 对Wikipedia2Vec中的实体向量进行映射,最后通过拼接的方式将实体信息注入到BERT的输入当中。E-BERT的模型框架如下图所示:
从图中可以看出,对于一段被分词后的文本The native language of Jean Mara ##is is [MASK] ,对应的实体信息首先会被映射到BERT的embedding的同一空间中,然后当作额外的token插入到对应的token前面,并用"/"进行分割。E-BERT只在embedding阶段对输入注入实体信息,没有对BERT增加额外的模型结构或者进行进一步预训练。
此外,本文还对LAMA数据集进行了分析,指出对于其中的某些例子,模型可以根据表面的实体名称来进行预测,而不是真正学习到了知识。例如,让模型预测某个人的母语时,模型可能会因为这个人的姓名较为偏向意大利的取名风格而直接预测他的母语是意大利语。为此,该篇论文通过一些启发式的方法去除了LAMA中这些可以依赖实体名称进行预测的例子,构造了更有难度的数据集LAMA-UHN。
本文最后在LAMA和LAMA-UHN数据集上对BERT、E-BERT、ERNIE和KnowBERT进行了测试,结果显示E-BERT相比BERT有较显著的提升,并取得了四个模型中的最佳结果。

04

How Context Affects Language Models' Factual Predictions
该篇文章同样来自于Facebook AI Research和伦敦大学,基本上是LAMA论文的原班人马,已被AKBC 2020所录取并评定为最佳论文。
(arxiv: https://arxiv.org/abs/2005.04611)
本文指出,模型在进行预训练时使用到的无监督文本语料非常庞大,包含了相当多的知识,因此我们很难保证现有的预训练模型能够将这些知识全部存储在模型参数中并且之后可以足够准确的将这些知识提取出来。针对这个问题,本文尝试通过加入有关的上下文信息来提升模型提取知识的准确率。
以BERT作为例子,对于某个完形填空问题 q ,论文首先通过某种方式找出一段相关的上下文 c ,然后将它们作为两个句子拼接起来([CLS] q [SEP] c [SEP])输入BERT,最后对被MASK掉的文本进行预测。本文使用了四种不同的方式来对上下文进行构造:
Oracle-Based (ORA):挑选问题 q 对应的事实样本在维基百科中的周围文本片段作为上下文。
Retrieve (RET):选择DrQA的检索系统(TF-IDF)检索出的第一段文本作为上下文。
Generate (GEN):将问题作为前缀输入语言模型,对上下文进行自回归生成。
Adversary (ADV):利用和问题 q 具有相同关系类型但不同实体答案的问题  ,以ORA的方式挑选出包含无关信息的上下文。
实验结果如上图所示,RET和ORA类型的上下文都能给BERT带来相当程度上的提升,表明BERT可以很好的利用上下文带来的信息。并且对于ADV上下文的加入,BERT表现出了较好的鲁棒性,反而GEN类型的上下文会使效果下降更为明显。这可能是因为,一方面,得利于预训练时的NSP任务,BERT可以很好的判断出ADV类型的上下文与输入问题的关系不大,另一方面,语言模型会生成一些看起来和输入问题非常相关,但不符合事实的句子,这会对BERT的预测产生更大的干扰。

05

How Can We Know What Language Models Know?
该篇文章来自于卡内基梅隆大学和美国博世研究中心,已被TACL 2020所录取。
(arxiv: https://arxiv.org/abs/1911.12543)
LAMA论文中提出的对模型存储知识的探测方法为,将知识问题通过模板构造成一个完形填空的形式,将其作为一段提示(prompt)提供给模型,然后让模型对答案进行生成(Barack Obama was born in _ )或预测(Barack Obama is a _ by profession)。本文指出这种人工构造出的prompt往往是sub-optimal的,只能探测出模型掌握知识的一个下界,因为模型可能从截然不同的上下文中学习到同样的知识,例如,The birth place of Barack Obama is Honolulu, Hawaii.
对此,该篇文章提出了两类构建prompt的方法,以进一步挖掘模型提取知识的能力:
Mine-based:从大型文本语料(Wikipedia)中挖掘出候选的prompt。
Paraphrasing-based:通过back-translation(回译)重新构造出多个候选的prompt。
通过对这些新构造的prompt进行集成和组合,模型在LAMA数据集上的效果取得了一定的提升。论文中还针对prompt的改变对模型效果的影响做了许多的实验和分析,具体可以参考原论文,这里不对其进行详细的罗列。

06

Language Models as Knowledge Bases: On Entity Representations, Storage Capacity, and Paraphrased Queries
该篇论文来自日本的东北大学和RIKEN AIP,已被EACL 2021所录取。
(arxiv:https://arxiv.org/abs/2008.09036)
本文首先针对 LM as KB 这一范式提出了三个问题,然后做了一系列实验对这些问题进行探究和处理。
1. LAMA论文中采用单个token的形式来表示一个实体,但知识库中通常包含了数百万的实体,而语言模型的词表大小往往不超过十万,我们如何能够让语言模型更好的表示尽可能多的实体?
2. 语言模型存储知识的容量如何?例如,一个语言模型有能力将维基数据中的关系三元组全部存储下来吗?
3. 语言模型对自身存储知识进行提取的时候,结果是否具有鲁棒性?也就是当事实知识的表述形式发生变化时,模型的预测是否会改变,例如Barack Obama is from [MASK] 和 Where is Barack Obama from? [MASK]。
对于第一个实体表示问题,本文提出了三种实体表示方法,并尝试让模型对事实知识进行记忆和预测:
Symbolic Representation:通过扩充语言模型的词表,将所有实体都表示为语言模型词表中的词。这种表示方法让模型最为准确的将实体存储下来,但是由于模型对事实知识进行完形填空时,需要计算出每个词的概率然后进行softmax,这种低效率的知识提取方法导致模型无法容纳足够多的实体。
Surface Form Representation:用维基数据中提供的canonical name来表示实体。由于canonical name通常包含多个token,因此论文对这种方式进行实验时,为模型加入一个decoder并将原来的完形填空任务转换为sequence to sequence的生成任务。给定一段事实文本“Bert is a character on [MASK]”,模型需要对生成答案“Sesame Street”。这种方式极大的增进了模型提取知识的效率,因此可以容纳足够多的实体,但是由于某些实体表示比较长,很难将其准确的生成出来,因此具备较差的准确率。
Continuous Representation:使用一个嵌入向量来表示实体。具体来说,给定事实文本“Bert is a character on [MASK]”,这种方式使用[MASK]对应的最后一层的hidden states来表示模型提取出的知识表示,然后用这个嵌入表示在一个训练好的实体向量库中寻找最接近的实体作为预测。结果表示这种表示方式可以在存储足够多实体的同时保持一个相对不错的准确率。
对于第二个存储问题,论文以充分训练后能达到80%的知识提取准确度作为一个模型能够存储下对应的知识库的标准,对不同参数量大小的模型能够存储的知识数量进行了测试,结果表明模型能够存储的知识量和参数量大小基本成线性关系,如下图所示:
对于第三个模型的鲁棒性问题,论文首先使用Roberta在100K个原始的事实表述样本下([S] was born in [O])充分预训练,然后在zero-shot和few-shot的配置下进行了多组实验。结果表明在zero-shot的配置下,模型有能力处理细微的扰动,无法处理较大的变化,经过少量的样本训练后,模型可以很好的将知识迁移到新的文本表述上。但是没有经过事实样本预训练的模型表现出的迁移能力要差很多,结果如下图所示:
针对 LM as KB 这一范式的一个重要问题是,模型所学习到的知识都被隐式的存储在语言模型的大量参数当中。一方面,这使得模型中存储的知识具备较差的可解释性,另一方面,尽管我们可以通过构造类似于完形填空的方式来对这些知识进行提取,但是如果随着时间的推移,模型在之前语料中学习到的知识发生了变化,此时想对这些知识进行扩展或者修改是一件非常困难的事情,除非使用新的语料重新对模型进行预训练,而这显然是一种不合理的解决方式。
以下两篇论文都主要关注于如何让模型中存储的知识更具备可解释性和可操作性,并通过更显示的利用这些知识以提升模型在知识密集型下游任务上的表现。


07

REALM: Retrieval-Augmented Language Model Pre-Training
该篇论文来自Google。
(arxiv: https://arxiv.org/abs/2002.08909)
该篇论文通过在预训练时加入一个检索模块,使模型能够以更加具备解释性和模块化的来获取文本中的知识。具体来说,在预训练BERT模型时,首先给定一段MASK后的文本,REALM通过检索模块在大型的语料库中检索出一段文本,然后将检索出的文本和MASK的文本拼接起来输入BERT,去完成MLM任务。模型预测的完整流程如下图所示:
从图中可以看出,为了使模型最后能够更好的预测出被mask掉的词,检索器需要学会为原始文本检索出包含更多相关信息的文本。此外,为了让模型对文本进行还原时真正的需要额外的知识信息,该篇论文在训练时只对句子中的实体或日期进行MASK。论文最后在一系列OPEN-QA任务上进行了测试,结果表明这种预训练方式能够为模型带来较大的增益。

08

Adaptable and Interpretable Neural Memory Over Symbolic Knowledge
该篇论文来自Google,已被NAACL 2021所录取。
(arxiv: https://arxiv.org/abs/2007.00849)
该篇论文在BERT的架构基础上加入了一个实体记忆模块和事实记忆模块,通过加入对实体、关系和三元组事实知识的编码信息来增强文本表示,并在一定程度上模块化的将模型中存储的事实知识分离出来。模型架构如下图所示:
本文提出的两种记忆模块中分别存储了所有实体和三元组事实知识的嵌入表示,其中事实知识以Key-Value对的形式进行存储。模型通过在计算时对事实记忆模块中的相关知识进行检索,以得到有利的知识信息辅助下游任务的完成。最终模型在几个开放域问答任务上都取得了一定增益。
结束语:将预训练语言模型当作一个现成的、开放的知识库是一个非常具有前景和价值的想法,其相比起人工构造的知识库的优势在于:容易获取、包含的知识范围广泛且可以被更为灵活的使用。目前看来,已经有相当多的工作对 LM as KB 这一范式进行了探索,但仍然存在许多问题需要解决。首先,本文提到的几篇论文中所探索的几个问题,如实体在语言模型中的表示、对模型中的知识进行更新和修改以及如何高效准确地对知识进行提取等,都还没有被很好的解决。其次,语言模型本身作为用于理解文本的一大重要工具,还有许多其他的用途,如何将知识库这一潜在属性和其他方向结合起来,从而更为巧妙的利用语言模型中包含的知识也是一个可以探索的方向。期待 LM as KB 这一方向未来能有更多更好的工作。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存