【自然语言处理】【Prompt】语言模型即知识库(Language Models as Knowledge Bases)

本文主要是介绍【自然语言处理】【Prompt】语言模型即知识库(Language Models as Knowledge Bases),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

语言模型即知识库
Language Models as Knowledge Bases

相关博客
【自然语言处理】【可解释性】NKB:用于预训练Transformers的神经知识银行
【自然语言处理】【可解释性】自注意力归因:解释Transformer内部的信息交互
【深度学习】【积分梯度】深度网络的公理归因(Axiomatic Attribution for Deep Networks)
【自然语言处理】【可解释性】Perturbed Masking:分析和解释BERT的无参数探针
【机器学习】【可解释性】LIME
【自然语言处理】【聚类】TELL:可解释神经聚类
【自然语言处理】【Prompt】语言模型即知识库(Language Models as Knowledge Bases)
【自然语言处理】【Prompt】P-tuning

一、简介

​ 预训练语言模型在进行预训练的时候,不但能够学习到语言知识,也能学习到一些世界知识。这些世界知识,可以利用“完形填空”的方式从预训练语言模型中提取出来。后面的各种Prompt也是利用了语言模型作为知识库。相比于结构化的知识库,语言模型知识库具有很多优势:(1) 不需要schema工程(例如关系数据库的设计);(2) 可以查询开发类别;(3) 不需要人类进行监督训练。

​ 论文主要提出了一种称为LAMA的探针,用于探索预训练语言模型中到底包含了多少关系知识?对于不同类型的知识(例如实体、常识、问答等)会有不同吗?与自动构建的知识库相比,基于预训练语言模型的知识库效果怎么样?

​ 实验的最终结论是:

  • BERT-large捕获的知识可以与离线抽取知识库相媲美;
  • 事实知识可以从预训练语言模型中恢复的很好,但是一些关系(特别是N-to-M)的表现特别差;
  • BERT-large在恢复事实和常识知识时会好于其他模型,并且对查询短语更加的鲁棒;
  • BERT-large在开放域问答任务上效果显著,其precision@10达到了57.1%,而通过监督关系抽取系统得到的结构化知识库在precision@10上的准确率也只能达到63.5%;

二、背景知识

1. 单向语言模型

​ 给定一个输入序列 w = [ w 1 , w 2 , … , w N ] \textbf{w}=[w_1,w_2,\dots,w_N] w=[w1,w2,,wN],单向语言模型会将整个输入序列按下面的方式进行分解
p ( w ) = ∏ t p ( w t ∣ w t − 1 , … , w 1 ) p(\textbf{w})=\prod_t p(w_t|w_{t-1},\dots,w_1) p(w)=tp(wtwt1,,w1)
通过神经网络来估计概率
p ( w t ∣ w t − 1 , … , w 1 ) = softmax ( Wh t + b ) p(w_t|w_{t-1},\dots,w_1)=\text{softmax}(\textbf{Wh}_t+\textbf{b}) p(wtwt1,,w1)=softmax(Wht+b)
其中, h t ∈ R k \textbf{h}_t\in\mathbb{R}^k htRk是神经网络在位置 t t t的输出向量, W ∈ R ∣ V ∣ × k \textbf{W}\in\mathbb{R}^{|\mathcal{V}|\times k} WRV×k是一个可学习参数,用于将 h t \textbf{h}_t ht映射为词表 V \mathcal{V} V中每个词的非标准化分数。获得 h t \textbf{h}_t ht的神经网络结构可能有所不同,典型的语言模型为GPT。

2. 双向语言模型

​ 单向语言模型通过上文词语来预测下一个词。但是,一个词的含义是同时由上下文决定的。因此,给定输入序列 w = [ w 1 , w 2 , … , w N ] \textbf{w}=[w_1,w_2,\dots,w_N] w=[w1,w2,,wN]和一个位置 1 ≤ i ≤ N 1\leq i\leq N 1iN,那么双向语言模型期望估计概率
p ( w i ∣ w 1 , … , w i − 1 , w i + 1 , … , w N ) p(w_i|w_1,\dots,w_{i-1},w_{i+1},\dots,w_N) p(wiw1,,wi1,wi+1,,wN)
典型的双向语言模型有ELMo和BERT等。

三、LAMA探针

​ 论文引入的LAMA探针可以用来测试语言模型中的事实和常识知识。该探针本质上提供了一组由事实组成的知识源。这里的事实是指subject-relation-object三元组或者问答对。每个事实都会被转换为“完型填空”形式的陈述句(prompt),然后用来从语言模型中查询目标token。举例来说,给定一个事实(dante, born-in, florence),如果要查询是否包含该知识,可以将其转换为陈述句Dante was born-in ___。

​ 在评估效果时,会根据真实token在候选词表中的位置进行评估,排名越靠前,则认为模型包含越多的知识。

1. 知识源

1.1 Google-RE

​ 语料Google-RE是从wikipedia中人工抽取的、包含60K事实的知识源,其覆盖了5种关系。但LAMA探针仅考虑其中的三种:place of birth、date of birth和place of death。排除另外两种的原因是,在评估中不支持多token对象。对于三元组事实中的每个关系,都会定义一个模板,例如:”[S] was born in [O]“为关系place of birth的模板。

1.2 T-REx

​ 知识源T-REx是wikipedia三元组的子集,其要比Google-RE大得多,且拥有更加广泛的关系集合。LAMA中考虑了41个wikipedia中的关系,并且每种关系采样1000个事实。同Google-RE数据集一样,我们人工为每个关系定义了模板(prompt)。

1.3 ConceptNet

​ ConceptNet是一个多语言知识库,该知识库是从Open Mind Common Sense(OMCS)中的句子构造出来的。LAMA中仅考虑ConceptNet中英语部分的事实,其中有16种关系具有单个token的ojbect。对于任意ConceptNet三元组,可以从OMCS中找到同时包含subject和object的句子。对该句子中的object进行mask,从而构成一个prompt。若三元组对应多个句子,则随机挑选一个。

1.4 SQuAD

​ SQuAD是一个常见的问答数据集,LAMA从SQuAD的开发集中挑选了305个具有单token答案且上下文不敏感的问题。人工从这些问题中创建完型填空风格的问题。例如,将"Who developed the theory of relativity?“重写为"The theory of relativity was developed by ___”。

2. 模型

​ 论文中测试的语言模型有:fairseq-fconv(Fs)、Transformer-XL large(Txl)、ELMo original(Eb)、ELMo 5.5B(E5B)、BERT-base(Bb)和BERT-large(Bl)。

​ 模型的目标是预测特定位置t处的token。对于单向语言模型,使用t-1处网络生成的向量 h t − 1 \textbf{h}_{t-1} ht1进行预测。对于ELMo,则会使用前向的 h t − 1 \textbf{h}_{t-1} ht1和后向的 h t + 1 \textbf{h}_{t+1} ht+1。对于BERT,则遮盖t处的token,然后将 h t \textbf{h}_t ht输入softmax层。为了公正的比较,生成一个所有模型词表的交集,然后在该交集词表上预测token。

3. 基线

​ 为了比较语言模型与传统系统,论文考虑了下面的baseline。

3.1 Freq

​ 给定一个subject和relation关系对,该baseline会基于测试集中该关系对中出现的所有object的频率进行单词排序。该baseline是预测相同object模型小哥哥的上边界。

3.2 RE

​ 对于基于关系的知识源,使用一个预训练好的关系抽取模型RE,该模型在Wikidata上进行训练。该模型是基于LSTM和注意力机制的编码器,用于从句子中抽取三元组。RE对包含事实的句子进行三元组抽取,并构建知识图谱。在测试时,在图谱上查询指定的subject,然后基于RE返回的置信分数来排序object。

3.3 DrQA

​ DrQA是一个开放域问答系统,其使用两阶段的pipeline来回答自然语言问题。首先,使用TF-IDF从大量文档中检索出相关的文章,然后在检索出的topK的文章中,使用神经阅读理解模型来抽取答案。这里会显著DrQA只预测单个token,从而可以与语言模型进行比较。

4. 评估指标

​ 使用基于rank的评估指标。

5. 注意事项

5.1 人工定义模板

​ 对于每种关系,人工定义一个模板来查询关系种的object。显然,模板的选择会对预测结果产生影响。因此,LAMA探针任务可以看做是衡量语言模型中包含知识的下边界。此外,传统知识库只能通过一种方式来查询关系知识,例如查询关系 works-For \text{works-For} works-For时,如果用户使用 is-working-for \text{is-working-for} is-working-for,那么准确率就为0。

5.2 单个token

​ 在预测任务中仅考虑单个token。限制单个token的原因是,多token解码会引入额外的可调参数,这会导致不好衡量模型中的知识量。此外,准确确定多token仍然是一个有挑战的问题,特别是对于双向语言模型。

5.3 Object槽

​ 在预测任务中仅对三元组中的object进行预测,因为通过反向关系也可以预测subject。没有查询relation slot的原因有二。首先,关系通常会跨越多个token,但这目前还是挑战。其次,即使能够预测多token的relation,但关系可以由不同的词表达,这会对衡量精度带来问题。

5.4 词表交集

​ 待比较的模型是在不同的词表上进行训练的。例如,ELMo有800K的词表,BERT则仅使用30K的词表。显然,词表大小会影响LAMA探针中不同模型的表现。词表越大,那么就越难从大量token中预测出真正的目标。因此,LAMA中仅考虑一个大小写敏感的21K词表,其是所有待比较模型词表的交集。

6. 结果

在这里插入图片描述

​ 上表中汇总了主要的结果,显示了不同模型在不同语料上的top1平均准确率。下面分别讨论不同语料上的结果。

6.1 Google-RE

​ BERT的base版和large版明显优于其他模型。在整体准确率上,相较于基于知识库的方法有2.2至2.9个准确率的提升。BERT-large的效果虽然很好,但不意味着其是以正确的方式得到的答案。因为,Google-RE中的句子很可能是BERT的训练语料,BERT-large可能并没有理解这些结果,只是通过共现模式学习到了subject和object的关系。(什么是真正的理解,人是理解了关系还是记住了更多的共现?)

6.2 T-REx

​ Google-RE中仅包含了较少的事实和仅有的3种关系,因此继续在更大的T-REx上进行实验。但是,实验结果与Google-RE一致。所以,BERT在检索事实知识方面的性能接近于现有的关系抽取系统和自动构建的知识库系统。按关系分类来看,BERT在 1-to-1 \text{1-to-1} 1-to-1关系上的表现最好,在 N-to-M \text{N-to-M} N-to-M的关系上表现最差。

​ 此外,下游模型可以利用语言模型输出的向量表示来学习,正确答案即使不排在第1,也会排的足够靠前。下图展示了所有模型的P@k曲线。对于BERT来说,正确的object被排在top10的有60%,排在top100的有80%。

在这里插入图片描述

​ 此外,BERT-large即使预测不对object,但也能预测出object的正确类型。(这个性质有益于使用prompt预测实体的类型)

​ 为了研究预训练语言模型对同一个事实的不同询问方式的变化(prompt的模板)。论文分析了每个关系中至多100个事实,并从T-REx中随机挑选出10个对齐的句子。每个句子中,遮盖掉object并使用模型进行预测。这可以测试一些语言模型从训练数据中记忆和召回的能力,因为这些模型已经在Wikipedia上训练过。下图展示了每个事实在10个不同查询上排序的平均分布。BERT和ELMo 5.5B的变化程度最低,正确的object接近平均的顶部。令人惊讶的是,ELMo original的表现也与BERT相差不大,但其并没有在训练时见过Wikipedia数据。Fairseq-fconv和Transformer-XL的变化程度高,因为其在训练时没有见过很多的Wikipedia数据。

在这里插入图片描述

6.3 ConceptNet

​ 在ConceptNet上检索事实的结果与Google-RE、T-REx一致,BERT-large的模型表现的最好。

6.4 SQuAD

​ 在开发域问答上BERT-large和DrQA还是有一定的差距(也就是有改进的空间)。但是,预训练语言模型是完全无监督的,且没有专门的信息检索系统。此外,还比较了DrQA和BERT-large的P@10,发现差距十分的小。BERT-large为57.1,而DrQA为63.5。(如果top1更准的话,BERT可以直接作为问答系统)

这篇关于【自然语言处理】【Prompt】语言模型即知识库(Language Models as Knowledge Bases)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635865

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp