【自然语言处理】【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#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件