语言模型预训练
语言模型(LMs),如BERT1和GPT系列2,在许多自然语言处理(NLP)任务上取得了显著的性能。它们现在是当今NLP系统的基础。3这些模型在我们每天使用的产品和工具中发挥着重要作用,如谷歌等搜索引擎4和Alexa等个人助理5。
这些LM非常强大,因为它们可以通过自监督学习对网络上的大量文本数据进行预训练,而不需要标签,之后预训练的模型可以迅速适应各种新的任务,而不需要对具体任务进行太多的微调。例如,BERT经过预训练,可以预测原始文本中的随机屏蔽词(屏蔽语言建模),例如预测 "我的__在捡球 "中的屏蔽词 "狗"。GPTs经过预训练,可以根据之前的文本序列预测下一个词(因果语言建模),例如,从 "我的狗在捡球 "中预测下一个词 "球"。在这两种情况下,通过预训练,LM学会从文本语料库中编码各种知识,以帮助执行涉及语言理解或生成的下游应用。特别是,LM可以从概念一起出现的训练文本中学习世界知识(如 "狗"、"取"、"球 "等概念之间的关联),并帮助进行知识密集型的应用,如问题回答。6
挑战。
大多数常见的LM预训练策略的一个挑战是,它们一次只对一个文档进行建模。也就是说,人们会将文本语料库分割成一个文档列表,并从每个文档中独立提取LM的训练实例。独立处理每个文档可能会带来限制,因为文档之间往往有丰富的依赖关系。例如,来自网络7或科学文献8的文本经常被用于LM的训练,但它们都有文档链接,如超链接和引文链接。文档链接是至关重要的,因为知识可以跨越单个文档之外的多个文档。举个例子,下图左边所示的维基百科文章 "华盛顿特区潮汐盆地 "描述了该盆地举办 "全国樱花节",如果我们跳转到右边所示的超链接文章,我们会看到该节日庆祝 "日本樱花树"。结合起来,超链接提供了新的、多跳的知识,如 "潮汐盆地有日本樱花树",这在原始的单一文件中是没有的。
在没有这些依赖关系的情况下训练的模型可能无法捕捉到分布在多个文档中的知识或事实。在预训练中学习这样的多跳知识对于包括问题回答和知识发现(例如 "在潮汐盆地能看到什么树?")在内的各种应用都很重要。事实上,像超链接和引文这样的文档链接是无处不在的,我们人类也一直在使用它们来学习新知识和进行发现。因此,一个文本语料库不是简单的文件列表,而是一个带有相互连接的链接的文件图。
在我们最近发表在ACL 2022上的工作中,我们开发了一种新的预训练方法、 链接BERT,它结合了这种文档链接信息来训练具有更多世界知识的语言模型。
方法:LinkBERT
在高层次上,LinkBERT包括三个步骤:(0)从文本语料库中获取文档之间的链接以构建文档图,(1)通过将链接的文档放在一起,从图中创建链接感知的训练实例,最后(2)用链接感知的自我监督任务预训练LM:屏蔽语言建模(MLM)和文档关系预测(DRP)。
文档图谱构建。
给定一个文本语料库,我们将相关的文档连接起来,组成一个图谱,这样链接就可以将有用的知识汇集起来。虽然这个图可以通过任何方式得到,但我们将重点使用超链接和引文链接,因为它们通常具有较高的相关质量(即低假阳性率),并且可以在规模上无处不在地获得。10为了制作文档图,我们将每个文档视为一个节点,如果有一个从文档i到文档j的超链接,则添加一条有向边(i, j)。
链接感知的LM输入。
鉴于文档图,我们创建链接感知的输入,并将其输入我们的LM。由于LM可以有效地学习标记的依赖性,如果标记显示在同一个输入实例中11,我们希望将链接的文件放在一起输入实例中。通过这种方式,LM可以学习概念的多跳或多文档依赖,因为LM会看到这些概念在同一序列中一起出现的训练实例。为了实现这一点,我们首先将每个文档分割成大约256个符号的片段,这是BERT LM最大输入长度的一半。然后,我们根据文档图中的链接将两个片段(片段A和B)串联起来,作为LM的输入序列。对于如何选择连接在一起的片段,我们有三种选择:
- 选项1:相邻的片段。从同一个文档中抽取两个相邻的片段。这与之前的LM基本相同。
- 选项2:随机片段。从一个随机文件中抽取一个片段,再从另一个随机文件中抽取第二个片段。
- 选项3:链接片段。从随机文档中抽取一个片段,并从文档图中与第一个文档链接的文档中随机抽取第二个片段。
我们之所以有这三个选项,是为了给LinkBERT创建一个训练信号,这样模型就能学会识别文本片段之间的关系。我们将在下一段中对此进行解释。
链接感知的LM预训练。
在创建由片段对组成的输入实例后,最后一步是使用这些创建的输入来训练具有链接感知的自我监督任务的LM。我们考虑以下两个任务:
- 屏蔽语言建模(MLM),它屏蔽了输入文本中的一些标记,然后利用周围的标记来预测这些标记。这鼓励LM学习由文档链接带入同一语境的概念的多跳知识。例如,在我们关于潮汐盆地的例子中,LM将能够学习从 "潮汐盆地 "到 "国家樱花节 "再到 "日本樱花树 "的多跳关系,因为这三个概念都会在同一训练实例中出现。
- 文档关系预测(DRP),使模型对段B与段A的关系进行分类,即这两个段是相邻的、随机的还是相连的。这项任务鼓励LM学习文档之间的相关性和依赖性,同时学习桥接概念,如我们运行的例子中的 "全国樱花节"。
我们用这两个目标共同对LM进行预训练。
我们也可以把这两个预训练任务作为在文档图上执行自我监督的学习算法来激励:
- 节点特征预测12,即利用邻居节点来预测一个节点的屏蔽特征。这相当于MLM,我们用片段B来预测片段A中被掩盖的标记,反之亦然。
- 链接预测13,这是为了预测两个节点之间的边缘的存在或类型。这与DRP相对应,我们预测两个段是否有联系(边缘),是否毗连(自环),或随机(无边缘)。
让我们使用LinkBERT!
我们现在将看到LinkBERT在几个下游自然语言处理任务中的表现。我们在两个领域对LinkBERT进行了预训练:
- 一般领域:我们使用维基百科作为预训练语料,这与以前的语言模型如BERT相同,只是这里我们也使用维基百科文章之间的超链接。
- 生物医学领域:我们使用PubMed作为预训练语料,这与之前的生物医学语言模型如PubmedBERT14相同,只是这里我们也使用PubMed文章之间的引用链接。
LinkBERT在许多应用上改进了以前的BERT模型。
我们在每个领域的不同下游任务上评估了预训练的LinkBERT模型:
LinkBERT在不同的任务和领域中一致地改善了没有文档链接的预训练的基线语言模型(即BERT和PubmedBERT)。生物医学领域的增益特别大,可能是因为科学文献通过引文链接相互之间有重要的依赖关系,而LinkBERT捕捉到了这一点。生物医学LinkBERT,我们称之为BioLinkBERT,在BLURB、MedQA和MMLU基准上实现了新的最先进的性能。
**对多跳推理有效。**LinkBERT表现出几个有趣的优势。第一个优势是多跳推理。在MRQA基准中,有几个任务涉及多跳推理,如HotpotQA和triviaQA,我们发现LinkBERT在这些任务上为BERT提供了很大的改进。作为一个例子,下图显示了HotpotQA的一个例子。回答给定的问题需要两跳推理,因为我们需要知道什么组织在1953年接管了罗顿兄弟公司(第一个文件),然后我们需要知道该组织的总部在哪里(第二个文件)。BERT倾向于简单地预测一个出现在关于罗顿兄弟公司的同一文件中的地点名称("多伦多"),但LinkBERT能够正确地将两个文件中的信息联系起来,从而预测出答案("蒙特利尔")。其直觉是,由于LinkBERT在预训练期间将多个相关的概念/文件汇集到同一输入实例中,它有助于模型在下游任务中对多个概念/文件进行推理。
**对文件关系的理解很有效。**LinkBERT的另一个优势是,它可以更好地模拟多个文档之间的关系。例如,在开放领域的质量保证中,一个模型必须从多个检索到的文件中确定一个答案,其中许多文件可能是嘈杂的或与问题无关的。15为了模拟这种情况,我们在原始的MRQA任务中加入了分散注意力的文件,如SQuAD和HotpotQA。我们发现,LinkBERT对不相关的文件是稳健的,并保持了QA的准确性,而BERT在这种设置下产生了性能下降。我们的直觉是,预训练中使用的文档关系预测任务有助于识别下游任务中的文档相关性。
**对少量的和数据有效的质量保证是有效的。**第三个优势是少量的和数据有效的QA。对于每个QA数据集,我们尝试只用10%或1%的可用训练数据对LinkBERT或BERT进行微调。我们发现,LinkBERT在这些低资源范式上为BERT提供了很大的改进。这一发现表明,在预训练期间,LinkBERT比BERT内化了更多的知识,并支持最初的直觉,即文件链接可以为LM带来新的、有用的知识。
将LinkBERT用于你自己的应用
LinkBERT可以很容易地被用作BERT的替代品。预训练的LinkBERT模型(LinkBERT和BioLinkBERT)在HuggingFace上可用,你可以通过以下方式加载它们
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('michiyasunaga/LinkBERT-large')
model = AutoModel.from_pretrained('michiyasunaga/LinkBERT-large')
inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
outputs = model(**inputs)
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('michiyasunaga/BioLinkBERT-large')
model = AutoModel.from_pretrained('michiyasunaga/BioLinkBERT-large')
inputs = tokenizer("Sunitinib is a tyrosine kinase inhibitor", return_tensors="pt")
outputs = model(**inputs)
为了将LinkBERT用于下游应用,如问题回答和文本分类,你可以使用github.com/michiyasuna…或者简单地在你喜欢的BERT微调脚本中用LinkBERT替换BERT模型路径。
总结
我们介绍了LinkBERT,这是一种新的预训练方法,利用超链接和引文等文档链接来训练知识性语言模型(LM)。具体来说,我们将链接的文档放在同一个LM的输入序列中,并通过两个联合的自我监督任务来训练LM:屏蔽的语言建模和文档关系预测。
LinkBERT可以作为BERT的替代品使用。除了提高一般语言理解任务(如文本分类)的性能外,LinkBERT还能更好地捕捉到文档或概念关系,并对多跳推理和跨文档理解有效。LinkBERT还内化了更多的世界知识,并对知识密集型的任务有效,如少量问题的回答。
我们发布了预训练的LinkBERT模型。我们希望它们能对你的项目和研究有所帮助,特别是知识或推理密集型的应用。最后,我们认为LinkBERT开辟了许多令人兴奋的未来项目,例如概括到GPT或序列到序列16风格的语言模型,以执行文档链接感知的文本生成,并将文档链接的概念概括到其他模式,例如,在代码17的语言模型训练中纳入源代码依赖链接。
这篇博文是基于论文的:
- LinkBERT:用文档链接预训练语言模型。Michihiro Yasunaga, Jure Leskovec和Percy Liang。ACL 2022。这些模型、代码、数据都可以在GitHub和HuggingFace上找到。
如果你有问题,请随时给我们发邮件。
- Michihiro Yasunaga: myasu@cs.stanford.edu
鸣谢
非常感谢斯坦福大学P-Lambda小组、SNAP小组和NLP小组的成员提供的宝贵反馈。非常感谢Jacob Schreiber和Michael Zhang对这篇博文的编辑。
-
BERT:用于语言理解的深度双向变换器的预训练。Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova.2019.
-
Language Models are Few-Shot Learners.Tom B. Brown, et al. 2020.
-
论基础模型的机会和风险.Rishi Bommasani et al. 2021.
-
谷歌将BERT用于其搜索引擎: blog.google/products/se…
-
语言模型是你所需要的一切:作为问题回答的自然语言理解。Mahdi Namazifar等人,Alexa AI。2020.
-
语言模型作为知识库?Fabio Petroni, et al. 2019.COMET:Commonsense Transformers for Automatic Knowledge Graph Construction.Antoine Bosselut et al. 2019.
-
例如,像PubMed和Semantic Scholar这样的文本语料库被用于训练科学领域的语言模型,如BioBERT和SciBERT 。
-
LinkBERT:用文档链接预训练语言模型。Michihiro Yasunaga, Jure Leskovec和Percy Liang。2022.
-
超链接在各种NLP研究中被发现是有用的,例如:Learning to Retrieve Reasoning Paths over Wikipedia Graph for Question Answering.Akari Asai, Kazuma Hashimoto, Hannaneh Hajishirzi, Richard Socher, Caiming Xiong.2019.HTLM: Hyper-Text Pre-Training and Prompting of Language Models.Armen Aghajanyan, Dmytro Okhonko, Mike Lewis, Mandar Joshi, Hu Xu, Gargi Ghosh, Luke Zettlemoyer.2022.
-
In-Context Learning的归纳偏见:重新思考培训前的实例设计。Yoav Levine, Noam Wies, Daniel Jannai, Dan Navon, Yedid Hoshen, Amnon Shashua.2022.
-
预训练图谱神经网络的策略.胡伟华, 刘博文, Joseph Gomes, Marinka Zitnik, Percy Liang, Vijay Pande, Jure Leskovec.2020.
-
多关系数据建模的翻译嵌入.Antoine Bordes, Nicolas Usunier, Alberto Garcia-Duran, Jason Weston, Oksana Yakhnenko.2013.
-
生物医学自然语言处理的特定领域语言模型预训练.Yu Gu, Robert Tinn, Hao Cheng, Michael Lucas, Naoto Usuyama, Xiaodong Liu, Tristan Naumann, Jianfeng Gao, Hoifung Poon.2021.
-
阅读维基百科以回答开放领域的问题。Danqi Chen, Adam Fisch, Jason Weston, Antoine Bordes.2017.
-
为源代码数据训练语言模型是一个活跃的研究领域,例如,CodeX、AlphaCode�